]> git.saurik.com Git - apple/ld64.git/blobdiff - unit-tests/test-cases/objc-gc-checks/Makefile
ld64-351.8.tar.gz
[apple/ld64.git] / unit-tests / test-cases / objc-gc-checks / Makefile
index b18012a23030dcdb8d0629d90d1e2a62f5c4a359..426d9b212ef074d9a5cc4c773d81263886eb521d 100644 (file)
@@ -25,108 +25,119 @@ include ${TESTROOT}/include/common.makefile
 
 SHELL = bash # use bash shell so we can redirect just stderr
 
+#
+# Validate that the linker catches illegal combinations of .o files 
+# compiled with different GC settings. 
+#
 
-IMAGE_INFO = "__image_info"
+IMAGE_INFO = "__objc_imageinfo"
+ifeq ($(ARCH),i386)
+       IMAGE_INFO = "__image_info"
+endif
 
+ifeq ($(ARCH),i386)
+       ALL = all-gc
+else
 ifeq ($(ARCH),x86_64)
-       IMAGE_INFO = "__objc_imageinfo"
+       ALL = all-gc
+else
+       ALL = all-nogc
 endif
-ifeq ($(ARCH),armv6)
-       IMAGE_INFO = "__objc_imageinfo"
 endif
 
+all: ${ALL}
 
+# For platforms that do not support GC.
+all-nogc:
+       ${PASS_IFF} true
 
-#
-# Validate that the linker catches illegal combinations of .o files 
-# compiled with different GC settings. 
-#
-
-test:
+# For platforms that support GC.
+all-gc:
        ${CC} ${CCFLAGS} foo.m -c -o foo.o
        ${FAIL_IF_BAD_OBJ} foo.o
 
-       ${CC} ${CCFLAGS} foo.m -c -o foo-gc.o -fobjc-gc
-       ${FAIL_IF_BAD_OBJ} foo-gc.o
-
-       ${CC} ${CCFLAGS} foo.m -c -o foo-gc-only.o -fobjc-gc-only
-       ${FAIL_IF_BAD_OBJ} foo-gc-only.o
-
        ${CC} ${CCFLAGS} bar.m -c -o bar.o
        ${FAIL_IF_BAD_OBJ} bar.o
 
-       ${CC} ${CCFLAGS} bar.m -c -o bar-gc.o -fobjc-gc
-       ${FAIL_IF_BAD_OBJ} bar-gc.o
+       # clang no longer builds GC so we create fake GC object files instead.
+
+       cp -f foo.o foo-gc.o
+       ${OBJCIMAGEINFO} +supports-gc foo-gc.o
 
-       ${CC} ${CCFLAGS} bar.m -c -o bar-gc-only.o -fobjc-gc-only
-       ${FAIL_IF_BAD_OBJ} bar-gc-only.o
+       cp -f foo.o foo-gc-only.o
+       ${OBJCIMAGEINFO} +supports-gc +requires-gc foo-gc-only.o
+
+       cp -f bar.o bar-gc.o
+       ${OBJCIMAGEINFO} +supports-gc bar-gc.o
+
+       cp -f bar.o bar-gc-only.o
+       ${OBJCIMAGEINFO} +supports-gc +requires-gc bar-gc-only.o
 
        # check RR + RR -> RR
-       ${CC} ${CCFLAGS} foo.o bar.o runtime.c -dynamiclib -o libfoobar.dylib 
+       ${CC} ${CCFLAGS} foo.o bar.o runtime.c -dynamiclib -o libfoobar.dylib -framework Foundation
        ${FAIL_IF_BAD_MACHO} libfoobar.dylib
 
        # check GC/RR + GC/RR -> GC/RR
-       ${CC} ${CCFLAGS} foo-gc.o bar-gc.o runtime.c -dynamiclib -o libfoobar.dylib 
+       ${CC} ${CCFLAGS} foo-gc.o bar-gc.o runtime.c -dynamiclib -o libfoobar.dylib  -framework Foundation
        ${FAIL_IF_BAD_MACHO} libfoobar.dylib
-       otool -o libfoobar.dylib | grep -A4 _image | grep flags | grep 0x2  | ${FAIL_IF_EMPTY}
+       ${OBJCIMAGEINFO} libfoobar.dylib | grep supports-gc | ${FAIL_IF_EMPTY}
 
        # check GC + GC -> GC
-       ${CC} ${CCFLAGS} foo-gc-only.o bar-gc-only.o runtime.c -dynamiclib -o libfoobar.dylib 
+       ${CC} ${CCFLAGS} foo-gc-only.o bar-gc-only.o runtime.c -dynamiclib -o libfoobar.dylib  -framework Foundation
        ${FAIL_IF_BAD_MACHO} libfoobar.dylib
-       otool -o libfoobar.dylib | grep -A4 _image | grep flags | grep 0x6  | ${FAIL_IF_EMPTY}
+       ${OBJCIMAGEINFO} libfoobar.dylib | grep 'supports-gc requires-gc' | ${FAIL_IF_EMPTY}
 
        # check RR + GC/RR -> RR
-       ${CC} ${CCFLAGS} foo.o bar-gc.o runtime.c -dynamiclib -o libfoobar.dylib 
+       ${CC} ${CCFLAGS} foo.o bar-gc.o runtime.c -dynamiclib -o libfoobar.dylib  -framework Foundation
        ${FAIL_IF_BAD_MACHO} libfoobar.dylib
-       otool -o libfoobar.dylib | grep -A4 _image | grep flags | grep 0x[26]  | ${FAIL_IF_STDIN}
+       ${OBJCIMAGEINFO} libfoobar.dylib | grep gc | ${FAIL_IF_STDIN}
 
        # check GC/RR + RR -> RR
-       ${CC} ${CCFLAGS} bar-gc.o foo.o runtime.c -dynamiclib -o libfoobar.dylib 
+       ${CC} ${CCFLAGS} bar-gc.o foo.o runtime.c -dynamiclib -o libfoobar.dylib  -framework Foundation
        ${FAIL_IF_BAD_MACHO} libfoobar.dylib
-       otool -o libfoobar.dylib | grep -A4 _image | grep flags | grep 0x[26]  | ${FAIL_IF_STDIN}
+       ${OBJCIMAGEINFO} libfoobar.dylib | grep gc | ${FAIL_IF_STDIN}
 
        # check GC + GC/RR -> GC
-       ${CC} ${CCFLAGS} foo-gc-only.o bar-gc.o runtime.c -dynamiclib -o libfoobar.dylib  
+       ${CC} ${CCFLAGS} foo-gc-only.o bar-gc.o runtime.c -dynamiclib -o libfoobar.dylib   -framework Foundation
        ${FAIL_IF_BAD_MACHO} libfoobar.dylib
-       otool -o libfoobar.dylib | grep -A4 _image | grep flags | grep 0x6  | ${FAIL_IF_EMPTY}
+       ${OBJCIMAGEINFO} libfoobar.dylib | grep 'supports-gc requires-gc' | ${FAIL_IF_EMPTY}
 
        # check RR + GC -> error
-       ${FAIL_IF_SUCCESS} ${CC} ${CCFLAGS} foo.o bar-gc-only.o runtime.c -dynamiclib -o libfoobar.dylib 2> fail.log
+       ${FAIL_IF_SUCCESS} ${CC} ${CCFLAGS} foo.o bar-gc-only.o runtime.c -dynamiclib -o libfoobar.dylib  -framework Foundation 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
-       
+       ${FAIL_IF_SUCCESS} ${CC} ${CCFLAGS} foo-gc.o foo.o runtime.c -dynamiclib -o libfoobar.dylib -Wl,-objc_gc  -framework Foundation 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}
+       ${CC} ${CCFLAGS} foo-gc.o bar-gc.o runtime.c -dynamiclib -Wl,-objc_gc_compaction -o libfoobar.dylib  -framework Foundation
+       ${OBJCIMAGEINFO} libfoobar.dylib | 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}
+       ${CC} ${CCFLAGS} foo-gc-only.o bar-gc-only.o runtime.c -dynamiclib -Wl,-objc_gc_compaction -o libfoobar.dylib  -framework Foundation
+       ${OBJCIMAGEINFO} libfoobar.dylib | 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}
+       ${CC} ${CCFLAGS} foo-gc.o runtime.c -dynamiclib -o libfoo.dylib  -framework Foundation
+       ${CC} ${CCFLAGS} none.c libfoo.dylib -dynamiclib -o libnone.dylib -framework Foundation
+       size -m -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}
+       ${CC} ${CCFLAGS} foo-gc-only.o runtime.c -dynamiclib -o libfoo.dylib  -framework Foundation
+       ${CC} ${CCFLAGS} none.c libfoo.dylib -dynamiclib -o libnone.dylib -framework Foundation
+       size -m -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}
+       ${CC} ${CCFLAGS} foo.o runtime.c -dynamiclib -o libfoo.dylib  -framework Foundation
+       ${CC} ${CCFLAGS} none.c libfoo.dylib -dynamiclib -o libnone.dylib -framework Foundation
+       size -m -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
+       ${CC} ${CCFLAGS} foo-gc-only.o runtime.c -dynamiclib -o libfoo.dylib  -framework Foundation
+       ${FAIL_IF_SUCCESS} ${CC} ${CCFLAGS} bar.o runtime.c -dynamiclib libfoo.dylib -o libbar.dylib  -framework Foundation 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
-
+       ${CC} ${CCFLAGS} foo.o runtime.c -dynamiclib -o libfoo.dylib  -framework Foundation
+       ${FAIL_IF_SUCCESS} ${CC} ${CCFLAGS} bar-gc-only.o runtime.c -dynamiclib libfoo.dylib -o libbar.dylib  -framework Foundation 2> fail.log
 
        ${PASS_IFF} true