1SDKROOT ?= / 2Product ?= $(shell xcodebuild -sdk $(SDKROOT) -version PlatformPath | head -1 | sed 's,^.*/\([^/]*\)\.platform$$,\1,') 3 4# This should not be a long term solution to <rdar://problem/11230738>; this 5# makefile needs to be changed to identify its targets appropriately in the 6# absence of tconf, but we'll go with the quick change for now. 7 8ifeq "$(RC_TARGET_CONFIG)" "iPhone" 9Embedded?=YES 10else 11Embedded?=$(shell echo $(SDKROOT) | grep -iq iphoneos && echo YES || echo NO) 12endif 13 14ifeq "$(Embedded)" "YES" 15Product?=iPhone 16else 17Product?=MacOSX 18endif 19 20SDKVERSION:=$(shell xcodebuild -sdk $(SDKROOT) -version SDKVersion | head -1) 21 22ifeq "$(Product)" "iPhoneOS" 23SDKPATH := $(shell xcodebuild -sdk $(SDKROOT) -version Path) 24CFLAGS += -isysroot $(SDKPATH) -miphoneos-version-min=$(SDKVERSION) 25LIBFLAGS += -isysroot $(SDKPATH) -miphoneos-version-min=$(SDKVERSION) 26else 27CFLAGS += -mmacosx-version-min=$(SDKVERSION) 28LIBFLAGS += -mmacosx-version-min=$(SDKVERSION) 29Product ?= MacOSX 30endif 31 32CC := xcrun -sdk $(SDKROOT) cc 33HOSTCC := cc 34 35SRCROOT?=$(shell /bin/pwd) 36OBJROOT?=$(SRCROOT)/BUILD/obj 37DSTROOT?=$(SRCROOT)/BUILD/dst 38SYMROOT?=$(SRCROOT)/BUILD/sym 39 40SRCSUBPATH := $(SRCROOT) 41OBJSUBPATH := $(OBJROOT) 42 43ifdef RC_ARCHS 44 ARCH:=$(RC_ARCHS) 45else 46 ifeq "$(Product)" "MacOSX" 47 ARCH:=i386 x86_64 48 else ifeq "$(Product)" "iPhoneOS" 49 ARCH:=armv7s armv7 50 else ifeq "$(Product)" "AppleTV" 51 ARCH:=i386 52endif 53endif 54 55MY_ARCH := $(patsubst %, -arch %, $(ARCH)) # allows building multiple archs. 56ARCH_32 := $(filter-out %64, $(ARCH)) 57ARCH_32_FLAGS := $(patsubst %, -arch %, $(ARCH_32)) 58ARCH_64 := $(filter %64, $(ARCH)) 59ARCH_64_FLAGS := $(patsubst %, -arch %, $(ARCH_64)) 60 61CFLAGS += -g -I $(SDKPATH)/System/Library/Frameworks/System.framework/Versions/B/PrivateHeaders/ -F/AppleInternal/Library/Frameworks/ $(MORECFLAGS) -Wno-deprecated-declarations 62 63LIBFLAGS += -I $(SDKPATH)/System/Library/Frameworks/System.framework/Versions/B/PrivateHeaders -F/AppleInternal/Library/Frameworks/ 64 65# The current implementation of the content protection test requires IOKit. 66ifeq "$(Product)" "iPhoneOS" 67LIBFLAGS += -framework IOKit 68endif 69 70MY_OBJECTS := $(OBJSUBPATH)/main.o $(OBJSUBPATH)/memory_tests.o $(OBJSUBPATH)/misc.o \ 71 $(OBJSUBPATH)/sema_tests.o $(OBJSUBPATH)/shared_memory_tests.o \ 72 $(OBJSUBPATH)/socket_tests.o $(OBJSUBPATH)/tests.o \ 73 $(OBJSUBPATH)/xattr_tests.o $(OBJSUBPATH)/kqueue_tests.o \ 74 $(OBJSUBPATH)/machvm_tests.o $(OBJSUBPATH)/commpage_tests.o \ 75 $(OBJSUBPATH)/atomic_fifo_queue_test.o $(OBJSUBPATH)/sched_tests.o \ 76 $(OBJSUBPATH)/pipes_tests.o 77 78ifneq "$(Product)" "iPhoneOS" 79MY_OBJECTS += $(OBJSUBPATH)/32bit_inode_tests.o 80else 81MY_OBJECTS += $(OBJSUBPATH)/content_protection_test.o 82endif 83 84 85xnu_quick_test : $(OBJSUBPATH) $(DSTROOT) $(SYMROOT) $(MY_OBJECTS) helpers 86ifndef RC_ProjectName 87 rm -rf $(DSTROOT)/xnu_quick_test 88endif 89 $(CC) -g $(MY_ARCH) $(LIBFLAGS) -o $(SYMROOT)/xnu_quick_test $(MY_OBJECTS) 90 /usr/bin/dsymutil $(SYMROOT)/xnu_quick_test 91 /usr/bin/ditto $(SYMROOT)/xnu_quick_test $(DSTROOT)/xnu_quick_test 92 93# This target is defined for testbots. 94# Before compiling this target, MORECFLAGS must be set to "-D RUN_UNDER_TESTBOTS=1", check README file for more details 95# NOTE: -f[ailures] MAX_FAILS_ALLOWED option is set to 100 to make sure we completely run the test suite and 96# report all the failures. 97 98testbots: xnu_quick_test 99 @(cd $(DSTROOT) ; ./xnu_quick_test -f 100) 100 101# The helper binaries are used to test exec()'ing between 64bit and 32bit. 102# Creates test binaries with page zero sizes = 4KB and 4GB. Also creates 32-bit 103# helper processes for the 64-bit version of xnu_quick_test to test the conversion 104# from a 32-bit process to a 64-bit process. 105helpers : $(SRCSUBPATH)/helpers/sleep.c $(SRCSUBPATH)/helpers/launch.c $(SRCSUBPATH)/helpers/arch.c $(SRCSUBPATH)/helpers/data_exec.c helperdir $(OBJSUBPATH)/misc.o 106ifneq "$(Product)" "iPhoneOS" 107ifneq "$(ARCH_32)" "" 108 $(CC) -g $(ARCH_32_FLAGS) $(SRCSUBPATH)/helpers/sleep.c -o $(SYMROOT)/sleep-i386 109 /usr/bin/ditto $(SYMROOT)/sleep-i386 $(DSTROOT)/helpers/ 110endif 111endif 112ifeq "$(Product)" "MacOSX" 113ifneq "$(ARCH_32)" "" 114 $(CC) -g $(LIBFLAGS) $(ARCH_32_FLAGS) $(OBJSUBPATH)/misc.o $(SRCSUBPATH)/helpers/launch.c -o $(SYMROOT)/launch-i386 115 $(CC) -g $(ARCH_32_FLAGS) -DNXDATA32TESTNONX $(SRCSUBPATH)/helpers/data_exec.c -o $(SYMROOT)/data_exec32nonxspawn 116 /usr/bin/ditto $(SYMROOT)/launch-i386 $(SYMROOT)/data_exec32nonxspawn $(DSTROOT)/helpers/ 117endif 118ifneq "$(ARCH_64)" "" 119 $(CC) -g $(ARCH_64_FLAGS) -pagezero_size 0x100000000 $(SRCSUBPATH)/helpers/sleep.c -o $(SYMROOT)/sleep-x86_64-4G 120 $(CC) -g $(ARCH_64_FLAGS) -pagezero_size 0x1000 $(SRCSUBPATH)/helpers/sleep.c -o $(SYMROOT)/sleep-x86_64-4K 121 $(CC) -g $(LIBFLAGS) $(ARCH_64_FLAGS) $(OBJSUBPATH)/misc.o $(SRCSUBPATH)/helpers/launch.c -o $(SYMROOT)/launch-x86_64 122 /usr/bin/ditto $(SYMROOT)/sleep-x86_64-4G $(SYMROOT)/sleep-x86_64-4K $(SYMROOT)/launch-x86_64 $(DSTROOT)/helpers/ 123endif 124 $(CC) -g $(MY_ARCH) $(SRCSUBPATH)/helpers/data_exec.c -o $(SYMROOT)/data_exec 125 /usr/bin/ditto $(SYMROOT)/data_exec $(DSTROOT)/helpers/ 126endif 127ifeq "$(Product)" "iPhoneOS" 128ifneq "$(ARCH_32)" "" 129 $(CC) $(CFLAGS) $(ARCH_32_FLAGS) $(SRCSUBPATH)/helpers/sleep.c -o $(SYMROOT)/sleep-arm 130 $(CC) $(LIBFLAGS) $(CFLAGS) $(ARCH_32_FLAGS) $(OBJSUBPATH)/misc.o $(SRCSUBPATH)/helpers/launch.c -o $(SYMROOT)/launch-arm 131 /usr/bin/ditto $(SYMROOT)/sleep-arm $(SYMROOT)/launch-arm $(DSTROOT)/helpers/ 132endif 133endif 134 $(CC) -g $(MY_ARCH) $(CFLAGS) $(SRCSUBPATH)/helpers/arch.c -o $(SYMROOT)/arch 135 /usr/bin/ditto $(SYMROOT)/arch $(DSTROOT)/helpers/ 136 137helperdir : 138 mkdir -p $(DSTROOT)/helpers 139 140$(OBJSUBPATH) : 141 mkdir -p $(OBJSUBPATH); 142 143$(DSTROOT) : 144 mkdir -p $(DSTROOT); 145 146$(SYMROOT) : 147 mkdir -p $(SYMROOT) 148 149$(OBJSUBPATH)/main.o : $(SRCSUBPATH)/main.c $(SRCSUBPATH)/tests.h 150 $(CC) $(CFLAGS) $(MY_ARCH) -c $(SRCSUBPATH)/main.c -o $@ 151 152$(OBJSUBPATH)/memory_tests.o : $(SRCSUBPATH)/memory_tests.c $(SRCSUBPATH)/tests.h 153 $(CC) $(CFLAGS) $(MY_ARCH) -c $(SRCSUBPATH)/memory_tests.c -o $@ 154 155# misc.o has to be built 3-way for the helpers to link 156$(OBJSUBPATH)/misc.o : $(SRCSUBPATH)/misc.c $(SRCSUBPATH)/tests.h 157ifeq "$(Product)" "iPhoneOS" 158 $(CC) $(CFLAGS) $(MY_ARCH) -c $(SRCSUBPATH)/misc.c -o $@ 159else 160 $(CC) -arch i386 -arch x86_64 $(CFLAGS) $(MY_ARCH) -c $(SRCSUBPATH)/misc.c -o $@ 161endif 162 163$(OBJSUBPATH)/sema_tests.o : $(SRCSUBPATH)/sema_tests.c $(SRCSUBPATH)/tests.h 164 $(CC) $(CFLAGS) $(MY_ARCH) -c $(SRCSUBPATH)/sema_tests.c -o $@ 165 166$(OBJSUBPATH)/shared_memory_tests.o : $(SRCSUBPATH)/shared_memory_tests.c $(SRCSUBPATH)/tests.h 167 $(CC) $(CFLAGS) $(MY_ARCH) -c $(SRCSUBPATH)/shared_memory_tests.c -o $@ 168 169$(OBJSUBPATH)/socket_tests.o : $(SRCSUBPATH)/socket_tests.c $(SRCSUBPATH)/tests.h 170 $(CC) $(CFLAGS) $(MY_ARCH) -c $(SRCSUBPATH)/socket_tests.c -o $@ 171 172$(OBJSUBPATH)/tests.o : $(SRCSUBPATH)/tests.c $(SRCSUBPATH)/tests.h 173 $(CC) $(CFLAGS) $(MY_ARCH) -c $(SRCSUBPATH)/tests.c -o $@ 174 175$(OBJSUBPATH)/xattr_tests.o : $(SRCSUBPATH)/xattr_tests.c $(SRCSUBPATH)/tests.h 176 $(CC) $(CFLAGS) $(MY_ARCH) -c $(SRCSUBPATH)/xattr_tests.c -o $@ 177 178$(OBJSUBPATH)/machvm_tests.o : $(SRCSUBPATH)/machvm_tests.c $(SRCSUBPATH)/tests.h 179 $(CC) $(CFLAGS) $(MY_ARCH) -c $(SRCSUBPATH)/machvm_tests.c -o $@ 180 181$(OBJSUBPATH)/sched_tests.o : $(SRCSUBPATH)/sched_tests.c $(SRCSUBPATH)/tests.h 182 $(CC) $(CFLAGS) $(MY_ARCH) -c $(SRCSUBPATH)/sched_tests.c -o $@ 183 184$(OBJSUBPATH)/kqueue_tests.o : $(SRCSUBPATH)/kqueue_tests.c $(SRCSUBPATH)/tests.h 185 $(CC) $(CFLAGS) $(MY_ARCH) -c $(SRCSUBPATH)/kqueue_tests.c -o $@ 186 187$(OBJSUBPATH)/32bit_inode_tests.o : $(SRCSUBPATH)/32bit_inode_tests.c $(SRCSUBPATH)/tests.h 188 $(CC) $(CFLAGS) $(MY_ARCH) -c $(SRCSUBPATH)/32bit_inode_tests.c -o $@ 189 190$(OBJSUBPATH)/commpage_tests.o : $(SRCSUBPATH)/commpage_tests.c $(SRCSUBPATH)/tests.h 191 $(CC) $(CFLAGS) $(MY_ARCH) -c $(SRCSUBPATH)/commpage_tests.c -o $@ 192 193$(OBJSUBPATH)/atomic_fifo_queue_test.o : $(SRCSUBPATH)/atomic_fifo_queue_test.c $(SRCSUBPATH)/tests.h 194 $(CC) $(CFLAGS) $(MY_ARCH) -c $(SRCSUBPATH)/atomic_fifo_queue_test.c -o $@ 195 196$(OBJSUBPATH)/content_protection_test.o : $(SRCSUBPATH)/content_protection_test.c $(SRCSUBPATH)/tests.h 197 $(CC) $(CFLAGS) $(MY_ARCH) -c $(SRCSUBPATH)/content_protection_test.c -o $@ 198 199$(OBJSUBPATH)/pipes_tests.o : $(SRCSUBPATH)/pipes_tests.c $(SRCSUBPATH)/tests.h 200 $(CC) $(CFLAGS) $(MY_ARCH) -c $(SRCSUBPATH)/pipes_tests.c -o $@ 201 202.PHONY : clean 203clean : 204 rm -Rf $(DSTROOT)/xnu_quick_test 205 rm -Rf $(DSTROOT)/helpers/* 206 rm -Rf $(OBJSUBPATH)/*.o 207