Index: configure.ac ================================================================== --- configure.ac +++ configure.ac @@ -341,19 +341,19 @@ ]) AC_SUBST(RUNTIME, "runtime") AC_SUBST(RUNTIME_FLAGS) - if test x"$enable_shared" != x"no"; then - AC_SUBST(RUNTIME_LIB_A, "runtime.lib.a") - AC_SUBST(RUNTIME_RUNTIME_LIB_A, "runtime/runtime.lib.a") - fi - if test x"$enable_static" = x"yes" \ - -o x"$enable_shared" = x"no"; then - AC_SUBST(RUNTIME_A, "runtime.a") - AC_SUBST(RUNTIME_RUNTIME_A, "runtime/runtime.a") - fi + AS_IF([test x"$enable_shared" != x"no"], [ + AC_SUBST(OBJFW_RT_SHARED_LIB, + "${LIB_PREFIX}objfw-rt${LIB_SUFFIX}") + ]) + AS_IF([test x"$enable_static" = x"yes" \ + -o x"$enable_shared" = x"no"], + AC_SUBST(OBJFW_RT_STATIC_LIB, "libobjfw-rt.a") + ]) + AC_SUBST(RUNTIME_LIBS, "-lobjfw-rt") AS_IF([test x"$enable_seluid24" = x"yes"], [ AC_DEFINE(OF_SELUID24, 1, [Whether to use 24 bit selector UIDs]) ]) @@ -409,11 +409,11 @@ "Apple runtime") AC_DEFINE(OF_APPLE_RUNTIME, 1, [Whether we use the Apple ObjC runtime]) AC_CHECK_LIB(objc, objc_msgSend, [ - LIBS="-lobjc $LIBS" + AC_SUBST(RUNTIME_LIBS, "-lobjc") ], [ AC_MSG_ERROR([libobjc not found!]) ]) ;; esac @@ -428,11 +428,11 @@ case "$host_os" in darwin*) AC_SUBST(LDFLAGS_REEXPORT, ["-Wl,-reexport-lobjfw"]) AS_IF([test x"$objc_runtime" = x"Apple runtime"], [ - AC_SUBST(REEXPORT_LIBOBJC, ["-Wl,-reexport-lobjc"]) + AC_SUBST(REEXPORT_RUNTIME, ["-Wl,-reexport-lobjc"]) AC_SUBST(WEAK_NSFOUNDATIONVERSIONNUMBER, ["-Wl,-U,_NSFoundationVersionNumber"]) LDFLAGS="$LDFLAGS -Wl,-U,_NSFoundationVersionNumber" ]) @@ -441,10 +441,11 @@ LDFLAGS="$LDFLAGS -Wl,-U,___gxx_personality_v0" ]) AS_IF([test x"$exception_type" = x"SjLj"], [ LDFLAGS="$LDFLAGS -Wl,-U,___gxx_personality_sj0" ]) + AC_SUBST(REEXPORT_RUNTIME, ["-Wl,-reexport-lobjfw-rt"]) ]) AC_CHECK_HEADERS(sysdir.h) AC_CHECK_FUNCS(sysdir_start_search_path_enumeration) ;; Index: extra.mk.in ================================================================== --- extra.mk.in +++ extra.mk.in @@ -3,10 +3,16 @@ # When changing: Be sure to also change these in the Xcode project! OBJFW_LIB_MAJOR = 8 OBJFW_LIB_MINOR = 0 OBJFW_LIB_MAJOR_MINOR = ${OBJFW_LIB_MAJOR}.${OBJFW_LIB_MINOR} +OBJFW_RT_SHARED_LIB = @OBJFW_RT_SHARED_LIB@ +OBJFW_RT_STATIC_LIB = @OBJFW_RT_STATIC_LIB@ +OBJFW_RT_LIB_MAJOR = 0 +OBJFW_RT_LIB_MINOR = 0 +OBJFW_RT_LIB_MAJOR_MINOR = ${OBJFW_RT_LIB_MAJOR}.${OBJFW_RT_LIB_MINOR} + OBJFW_BRIDGE_SHARED_LIB = @OBJFW_BRIDGE_SHARED_LIB@ OBJFW_BRIDGE_STATIC_LIB = @OBJFW_BRIDGE_STATIC_LIB@ AUTORELEASE_M = @AUTORELEASE_M@ BIN_PREFIX = @BIN_PREFIX@ @@ -43,16 +49,13 @@ OFKERNELEVENTOBSERVER_POLL_M = @OFKERNELEVENTOBSERVER_POLL_M@ OFKERNELEVENTOBSERVER_SELECT_M = @OFKERNELEVENTOBSERVER_SELECT_M@ OFPROCESS_M = @OFPROCESS_M@ OFSTDIOSTREAM_WIN32CONSOLE_M = @OFSTDIOSTREAM_WIN32CONSOLE_M@ OFZIP = @OFZIP@ -REEXPORT_LIBOBJC = @REEXPORT_LIBOBJC@ +REEXPORT_RUNTIME = @REEXPORT_RUNTIME@ RUNTIME = @RUNTIME@ -RUNTIME_A = @RUNTIME_A@ -RUNTIME_LIB_A = @RUNTIME_LIB_A@ -RUNTIME_RUNTIME_A = @RUNTIME_RUNTIME_A@ -RUNTIME_RUNTIME_LIB_A = @RUNTIME_RUNTIME_LIB_A@ +RUNTIME_LIBS = @RUNTIME_LIBS@ RUN_TESTS = @RUN_TESTS@ TESTPLUGIN = @TESTPLUGIN@ TESTS_LIBS = @TESTS_LIBS@ TESTS_OBJCFLAGS = @TESTS_OBJCFLAGS@ TEST_LAUNCHER = @TEST_LAUNCHER@ Index: src/Makefile ================================================================== --- src/Makefile +++ src/Makefile @@ -176,6 +176,7 @@ include ../buildsys.mk CPPFLAGS += -I. -I.. -Iexceptions -Iruntime -DOF_COMPILING_OBJFW LD = ${OBJC} -LDFLAGS += ${REEXPORT_LIBOBJC} +LDFLAGS += ${REEXPORT_RUNTIME} +LIBS += -Lruntime ${RUNTIME_LIBS} Index: src/runtime/Makefile ================================================================== --- src/runtime/Makefile +++ src/runtime/Makefile @@ -1,11 +1,13 @@ include ../../extra.mk SUBDIRS = lookup-asm -STATIC_PIC_LIB_NOINST = ${RUNTIME_LIB_A} -STATIC_LIB_NOINST = ${RUNTIME_A} +SHARED_LIB = ${OBJFW_RT_SHARED_LIB} +STATIC_LIB = ${OBJFW_RT_STATIC_LIB} +LIB_MAJOR = ${OBJFW_RT_LIB_MAJOR} +LIB_MINOR = ${OBJFW_RT_LIB_MINOR} SRCS = arc.m \ category.m \ class.m \ dtable.m \ @@ -19,14 +21,16 @@ selector.m \ sparsearray.m \ static-instances.m \ synchronized.m \ ${USE_SRCS_THREADS} -SRCS_THREADS = threading.m +SRCS_THREADS = threading.m \ + ../threading.m INCLUDES = runtime.h OBJS_EXTRA = ${LOOKUP_ASM_LOOKUP_ASM_A} LIB_OBJS_EXTRA = ${LOOKUP_ASM_LOOKUP_ASM_LIB_A} include ../../buildsys.mk -CPPFLAGS += -I. -I.. -I../.. -DOF_COMPILING_OBJFW +CPPFLAGS += -I. -I.. -I../.. +LD = ${OBJC} Index: tests/Makefile ================================================================== --- tests/Makefile +++ tests/Makefile @@ -62,68 +62,93 @@ .PHONY: run run-on-ios run-on-android run: rm -f libobjfw.so.${OBJFW_LIB_MAJOR} rm -f libobjfw.so.${OBJFW_LIB_MAJOR_MINOR} rm -f libobjfw.dll libobjfw.${OBJFW_LIB_MAJOR}.dylib + rm -f libobjfw-rt.so.${OBJFW_RT_LIB_MAJOR} + rm -f libobjfw-rt.so.${OBJFW_RT_LIB_MAJOR_MINOR} + rm -f libobjfw-rt.dll libobjfw-rt.${OBJFW_RT_LIB_MAJOR}.dylib if test -f ../src/libobjfw.so; then \ ${LN_S} ../src/libobjfw.so libobjfw.so.${OBJFW_LIB_MAJOR}; \ ${LN_S} ../src/libobjfw.so \ - libobjfw.so.${OBJFW_LIB_MAJOR_MINOR}; \ + libobjfw.so.${OBJFW_LIB_MAJOR_MINOR}; \ elif test -f ../src/libobjfw.so.${OBJFW_LIB_MAJOR_MINOR}; then \ ${LN_S} ../src/libobjfw.so.${OBJFW_LIB_MAJOR_MINOR} \ - libobjfw.so.${OBJFW_LIB_MAJOR_MINOR}; \ + libobjfw.so.${OBJFW_LIB_MAJOR_MINOR}; \ fi if test -f ../src/libobjfw.dll; then \ ${LN_S} ../src/libobjfw.dll libobjfw.dll; \ fi if test -f ../src/libobjfw.dylib; then \ ${LN_S} ../src/libobjfw.dylib \ - libobjfw.${OBJFW_LIB_MAJOR}.dylib; \ + libobjfw.${OBJFW_LIB_MAJOR}.dylib; \ + fi + if test -f ../src/runtime/libobjfw-rt.so; then \ + ${LN_S} ../src/runtime/libobjfw-rt.so \ + libobjfw-rt.so.${OBJFW_RT_LIB_MAJOR}; \ + ${LN_S} ../src/runtime/libobjfw-rt.so \ + libobjfw-rt.so.${OBJFW_RT_LIB_MAJOR_MINOR}; \ + elif test -f ../src/runtime/libobjfw-rt.so.${OBJFW_RT_LIB_MAJOR_MINOR}; then \ + ${LN_S} ../src/runtime/libobjfw-rt.so.${OBJFW_RT_LIB_MAJOR_MINOR} libobjfw-rt.so.${OBJFW_RT_LIB_MAJOR_MINOR}; \ + fi + if test -f ../src/runtime/libobjfw-rt.dll; then \ + ${LN_S} ../src/runtime/libobjfw-rt.dll libobjfw-rt.dll; \ + fi + if test -f ../src/runtime/libobjfw-rt.dylib; then \ + ${LN_S} ../src/runtime/libobjfw-rt.dylib \ + libobjfw-rt.${OBJFW_RT_LIB_MAJOR}.dylib; \ fi LD_LIBRARY_PATH=.$${LD_LIBRARY_PATH+:}$$LD_LIBRARY_PATH \ DYLD_LIBRARY_PATH=.$${DYLD_LIBRARY_PATH+:}$$DYLD_LIBRARY_PATH \ LIBRARY_PATH=.$${LIBRARY_PATH+:}$$LIBRARY_PATH \ ASAN_OPTIONS=allocator_may_return_null=1 \ ${TEST_LAUNCHER} ./${PROG_NOINST}; EXIT=$$?; \ rm -f libobjfw.so.${OBJFW_LIB_MAJOR}; \ rm -f libobjfw.so.${OBJFW_LIB_MAJOR_MINOR} libobjfw.dll; \ rm -f libobjfw.${OBJFW_LIB_MAJOR}.dylib; \ + rm -f libobjfw-rt.so.${OBJFW_RT_LIB_MAJOR}; \ + rm -f libobjfw-rt.so.${OBJFW_RT_LIB_MAJOR_MINOR} libobjfw-rt.dll; \ + rm -f libobjfw-rt.${OBJFW_RT_LIB_MAJOR}.dylib; \ exit $$EXIT run-on-ios: all if [ -z "${IOS_HOST}" ]; then \ echo "Please set IOS_HOST to the hostname of your iOS host!"; \ exit 1; \ fi echo "Uploading files to iOS device ${IOS_HOST} at ${IOS_TMP}..." ssh ${IOS_USER}@${IOS_HOST} \ - 'rm -fr ${IOS_TMP} && mkdir -p ${IOS_TMP}/plugin' + 'rm -fr ${IOS_TMP} && mkdir -p ${IOS_TMP}/plugin' destname=libobjfw.${OBJFW_LIB_MAJOR}.dylib; \ scp -q ../src/libobjfw.dylib \ - ${IOS_USER}@${IOS_HOST}:${IOS_TMP}/$$destname + ${IOS_USER}@${IOS_HOST}:${IOS_TMP}/$$destname scp -q tests testfile.bin testfile.txt testfile.ini serialization.xml \ - ${IOS_USER}@${IOS_HOST}:${IOS_TMP}/ + ${IOS_USER}@${IOS_HOST}:${IOS_TMP}/ scp -q plugin/TestPlugin.bundle \ - ${IOS_USER}@${IOS_HOST}:${IOS_TMP}/plugin/ + ${IOS_USER}@${IOS_HOST}:${IOS_TMP}/plugin/ echo "Running tests binary on iOS device ${IOS_HOST}..." ssh ${IOS_USER}@${IOS_HOST} \ - 'cd ${IOS_TMP} && DYLD_LIBRARY_PATH=. ${TEST_LAUNCHER} ./tests' + 'cd ${IOS_TMP} && DYLD_LIBRARY_PATH=. ${TEST_LAUNCHER} ./tests' run-on-android: all echo "Uploading files to Android device..." if test -f ../src/libobjfw.so; then \ adb push ../src/libobjfw.so \ - /data/local/tmp/objfw/libobjfw.so.${OBJFW_LIB_MAJOR}; \ + /data/local/tmp/objfw/libobjfw.so.${OBJFW_LIB_MAJOR}; \ + fi + if test -f ../src/runtime/libobjfw-rt.so; then \ + adb push ../src/runtime/libobjfw-rt.so \ + /data/local/tmp/objfw/libobjfw-rt.so.${OBJFW_RT_LIB_MAJOR}; \ fi adb push tests /data/local/tmp/objfw/tests adb push testfile.bin /data/local/tmp/objfw/testfile.bin adb push testfile.txt /data/local/tmp/objfw/testfile.txt adb push testfile.ini /data/local/tmp/objfw/testfile.ini adb push serialization.xml /data/local/tmp/objfw/serialization.xml if test -f plugin/TestPlugin.so; then \ adb push plugin/TestPlugin.so \ - /data/local/tmp/objfw/plugin/TestPlugin.so; \ + /data/local/tmp/objfw/plugin/TestPlugin.so; \ fi echo "Running tests binary on Android device..." adb shell 'cd /data/local/tmp/objfw && LD_LIBRARY_PATH=. exec ./tests' EBOOT.PBP: ${PROG_NOINST} @@ -150,8 +175,8 @@ ${PROG_NOINST}.3dsx: ${PROG_NOINST} 3dsxtool $< $@ CPPFLAGS += -I../src -I../src/exceptions -I../src/runtime -I.. -DSTDOUT OBJCFLAGS += ${TESTS_OBJCFLAGS} -LIBS := -L../src -lobjfw ${TESTS_LIBS} ${LIBS} +LIBS := -L../src -lobjfw -L../src/runtime ${RUNTIME_LIBS} ${TESTS_LIBS} ${LIBS} LDFLAGS += ${MAP_LDFLAGS} LD = ${OBJC} Index: utils/ofhash/Makefile ================================================================== --- utils/ofhash/Makefile +++ utils/ofhash/Makefile @@ -14,8 +14,8 @@ CPPFLAGS += -I../../src \ -I../../src/runtime \ -I../../src/exceptions \ -I../.. \ -DLANGUAGE_DIR=\"${datadir}/ofhash/lang\" -LIBS := -L../../src -lobjfw ${LIBS} +LIBS := -L../../src -lobjfw -L../../src/runtime ${RUNTIME_LIBS} ${LIBS} LD = ${OBJC} LDFLAGS += ${LDFLAGS_RPATH} Index: utils/ofhttp/Makefile ================================================================== --- utils/ofhttp/Makefile +++ utils/ofhttp/Makefile @@ -15,8 +15,8 @@ CPPFLAGS += -I../../src \ -I../../src/runtime \ -I../../src/exceptions \ -I../.. \ -DLANGUAGE_DIR=\"${datadir}/ofhttp/lang\" -LIBS := -L../../src -lobjfw ${LIBS} +LIBS := -L../../src -lobjfw -L../../src/runtime ${RUNTIME_LIBS} ${LIBS} LD = ${OBJC} LDFLAGS += ${LDFLAGS_RPATH} Index: utils/ofzip/Makefile ================================================================== --- utils/ofzip/Makefile +++ utils/ofzip/Makefile @@ -17,8 +17,8 @@ CPPFLAGS += -I../../src \ -I../../src/runtime \ -I../../src/exceptions \ -I../.. \ -DLANGUAGE_DIR=\"${datadir}/ofzip/lang\" -LIBS := -L../../src -lobjfw ${LIBS} +LIBS := -L../../src -lobjfw -L../../src/runtime ${RUNTIME_LIBS} ${LIBS} LD = ${OBJC} LDFLAGS += ${LDFLAGS_RPATH}