]> git.saurik.com Git - apple/ld64.git/blobdiff - unit-tests/test-cases/objc-gc-checks/Makefile
ld64-127.2.tar.gz
[apple/ld64.git] / unit-tests / test-cases / objc-gc-checks / Makefile
old mode 100755 (executable)
new mode 100644 (file)
index 0abe7d5..67e04a3
@@ -26,13 +26,24 @@ include ${TESTROOT}/include/common.makefile
 SHELL = bash # use bash shell so we can redirect just stderr
 
 
+IMAGE_INFO = "__image_info"
+
+ifeq ($(ARCH),x86_64)
+       IMAGE_INFO = "__objc_imageinfo"
+endif
+
+test: test-${FILEARCH}
+
+test-i386: test-macosx
+test-x86_64: test-macosx
+test-arm:   test-good
 
 #
 # Validate that the linker catches illegal combinations of .o files 
 # compiled with different GC settings. 
 #
 
-test:
+test-macosx:
        ${CC} ${CCFLAGS} foo.m -c -o foo.o
        ${FAIL_IF_BAD_OBJ} foo.o
 
@@ -70,6 +81,11 @@ test:
        ${FAIL_IF_BAD_MACHO} libfoobar.dylib
        otool -o libfoobar.dylib | grep -A4 _image | grep flags | grep 0x[26]  | ${FAIL_IF_STDIN}
 
+       # check GC/RR + RR -> RR
+       ${CC} ${CCFLAGS} bar-gc.o foo.o runtime.c -dynamiclib -o libfoobar.dylib 
+       ${FAIL_IF_BAD_MACHO} libfoobar.dylib
+       otool -o libfoobar.dylib | grep -A4 _image | grep flags | grep 0x[26]  | ${FAIL_IF_STDIN}
+
        # check GC + GC/RR -> GC
        ${CC} ${CCFLAGS} foo-gc-only.o bar-gc.o runtime.c -dynamiclib -o libfoobar.dylib  
        ${FAIL_IF_BAD_MACHO} libfoobar.dylib
@@ -78,7 +94,44 @@ test:
        # check RR + GC -> error
        ${FAIL_IF_SUCCESS} ${CC} ${CCFLAGS} foo.o bar-gc-only.o runtime.c -dynamiclib -o libfoobar.dylib 2> fail.log
 
+       # check cmd line GC/RR, GC/RR + RR -> error
+       ${FAIL_IF_SUCCESS} ${CC} ${CCFLAGS} foo-gc.o foo.o runtime.c -dynamiclib -o libfoobar.dylib -Wl,-objc_gc 2> fail.log
+       
+       # check GC/RR + compaction
+       ${CC} ${CCFLAGS} foo-gc.o bar-gc.o runtime.c -dynamiclib -Wl,-objc_gc_compaction -o libfoobar.dylib 
+       otool -o libfoobar.dylib | grep -A4 _image | grep flags | grep 0x12  | ${FAIL_IF_EMPTY}
+
+       # check GC + compaction
+       ${CC} ${CCFLAGS} foo-gc-only.o bar-gc-only.o runtime.c -dynamiclib -Wl,-objc_gc_compaction -o libfoobar.dylib 
+       otool -o libfoobar.dylib | grep -A4 _image | grep flags | grep 0x16  | ${FAIL_IF_EMPTY}
+
+       # none + GC/RR-dylib -> none
+       ${CC} ${CCFLAGS} foo-gc.o runtime.c -dynamiclib -o libfoo.dylib 
+       ${CC} ${CCFLAGS} none.c libfoo.dylib -dynamiclib -o libnone.dylib
+       size -l libnone.dylib | grep ${IMAGE_INFO} | ${FAIL_IF_STDIN}
+
+       # none + GC-dylib -> none
+       ${CC} ${CCFLAGS} foo-gc-only.o runtime.c -dynamiclib -o libfoo.dylib 
+       ${CC} ${CCFLAGS} none.c libfoo.dylib -dynamiclib -o libnone.dylib
+       size -l libnone.dylib | grep ${IMAGE_INFO} | ${FAIL_IF_STDIN}
+
+       # none + RR-dylib -> none
+       ${CC} ${CCFLAGS} foo.o runtime.c -dynamiclib -o libfoo.dylib 
+       ${CC} ${CCFLAGS} none.c libfoo.dylib -dynamiclib -o libnone.dylib
+       size -l libnone.dylib | grep ${IMAGE_INFO} | ${FAIL_IF_STDIN}
+
+       # check RR + GC-dylib -> error
+       ${CC} ${CCFLAGS} foo-gc-only.o runtime.c -dynamiclib -o libfoo.dylib 
+       ${FAIL_IF_SUCCESS} ${CC} ${CCFLAGS} bar.o runtime.c -dynamiclib libfoo.dylib -o libbar.dylib 2> fail.log
+
+       # check GC + RR-dylib -> error
+       ${CC} ${CCFLAGS} foo.o runtime.c -dynamiclib -o libfoo.dylib 
+       ${FAIL_IF_SUCCESS} ${CC} ${CCFLAGS} bar-gc-only.o runtime.c -dynamiclib libfoo.dylib -o libbar.dylib 2> fail.log
+
+       ${PASS_IFF} true
+
+test-good:
        ${PASS_IFF} true
 
 clean:
-       rm -rf foo*.o bar*.o libfoobar.dylib fail.log
+       rm -rf foo*.o bar*.o libfoobar.dylib fail.log libfoo.dylib libnone.dylib