1#!/usr/bin/make
2# This file lists all individual tests added over time to test various functionality.
3# The Raft TestBot framework runs the tests based on the targets listed in this file.
4# Please review the following guidelines to ensure successful execution of your test case
5#
6# == Steps followed by Raft testbot ==
7# * find target name from this Makefile. A target is identified by the string <targetname>: related files
8# * build the target with the command "make <targetname>". The current dir is same as of this Makefile
9# * The test is executed with following commands "cd BUILD/dst/; ./<targetname> "
10# * The exit value of <targetname> is logged. (0 = PASS and <any integer> = FAIL) 
11# * remove the BUILD directory
12#
13# == Note about SDKROOT ==
14# The environment variable SDKROOT must be passed to select the appropriate SDK.
15# x86/OSX is the default, so to build for iphone, you must:
16#
17# 64-bit:  $make SDKROOT=iphoneos.internal <targetname>
18# 32-bit:  $make SDKROOT=iphoneos.internal ARCH_CONFIGS="armv7" <targetname>
19#
20# == How to add a new test ==
21# * Create a test directory based on radar #. (for example test_<number>)
22# * Put test specific files in the directory. 
23# * Add an entry in this Makefile (reserved targetnames are {run_tests.sh, xnu_target_executables.list, build_*.log})
24#    targetname: testdir/programname.c
25#        <provide your compile command with output in $(BUILDDIR)>
26#
27# * Check if your target name is listed in the right configurations.
28#   $make list_targets 
29#   optionally you can pass SDKROOT=iphoneos|iphoneos.internal|macosx|macosx.internal and verify
30#   the built binary is of right arch and config.
31#
32# * verify that your test setup works by running the following commands
33#   $make <targetname> 
34#   $cd BUILD/dst/
35#   $./targetname
36#
37# == Easy Option ==
38# look at some example targets in this file and replicate that :)
39#
40
41ifneq ($(SRCROOT),)
42SRCDIR=$(SRCROOT)
43else
44SRCDIR?=$(shell /bin/pwd)
45endif
46
47ifneq ($(DSTROOT),)
48BUILDDIR?=$(DSTROOT)
49else
50BUILDDIR?=$(SRCDIR)/BUILD/dst
51endif
52
53# make sure we have a build directory
54$(shell [ -d "$(BUILDDIR)" ] || mkdir -p $(BUILDDIR))
55
56SDKROOT ?= /
57TARGETSDK:=$(SDKROOT)
58
59
60# setup the TARGETSDK and SDKROOT variables
61ifeq (/,$(SDKROOT))
62SDKROOTPATH=/
63else
64SDKROOTPATH:=$(shell /usr/bin/xcodebuild -sdk $(TARGETSDK) -version Path)
65endif
66
67ifeq ($(SDKROOTPATH),)
68$(error "Unable to find any SDKROOT on host. Exiting")
69endif
70
71PRIVATE_INCLUDES = $(SDKROOTPATH)/System/Library/Frameworks/System.framework/PrivateHeaders
72
73#arch configs if not provided
74ifdef RC_ARCHS
75ARCH_CONFIGS:=$(RC_ARCHS)
76endif
77ifeq ($(ARCH_CONFIGS),)
78ARCH_CONFIGS:=
79ifeq (iPhone,$(findstring iPhone,$(SDKROOTPATH)))
80ARCH_CONFIGS:=-arch armv7
81endif
82
83else
84TMP_ARCHCONF:=$(foreach argarch,$(ARCH_CONFIGS),-arch $(argarch) )
85override ARCH_CONFIGS:=$(TMP_ARCHCONF)
86endif
87
88
89#setup the compiler flags.
90ifeq (iPhone,$(findstring iPhone,$(SDKROOTPATH)))
91CFLAGS=-I$(BUILDDIR) -I. -isysroot $(SDKROOTPATH) $(ARCH_CONFIGS)
92CC=xcrun -sdk $(TARGETSDK) clang 
93MIG=xcrun -sdk $(TARGETSDK) mig
94XCODEBUILD=xcodebuild -sdk iphoneos.internal $(ARCH_CONFIGS)
95CODESIGN=$(shell xcrun -sdk $(TARGETSDK) -find codesign)
96CODESIGN_ALLOCATE=$(shell xcrun -sdk $(TARGETSDK) -find codesign_allocate)
97TARGET_NAME=ios
98else
99#Compiler flags for macosx
100CFLAGS=-I$(BUILDDIR) -I. $(ARCH_CONFIGS)
101CC=clang
102MIG=xcrun mig
103XCODEBUILD=xcodebuild
104CODESIGN=codesign
105CODESIGN_ALLOCATE=$(shell xcrun -find codesign_allocate)
106TARGET_NAME=osx
107endif
108
109#Flags that define the environment
110TARGETOSVERS:=$(shell /usr/bin/xcodebuild -sdk $(TARGETSDK) -version ProductVersion)
111TARGETOSBUILDVERS:=$(shell /usr/bin/xcodebuild -sdk $(TARGETSDK) -version ProductBuildVersion)
112SDKTARGET_STR:=$(subst .,_,$(TARGETSDK))
113MORECFLAGS=-D TARGET_SDK_$(SDKTARGET_STR)=1 -D TARGET_OS_VERS=\"$(TARGETOSVERS)\" -D TARGET_OS_BUILD_VERS=\"$(TARGETOSBUILDVERS)\"
114
115#special recipe for special targets: list_targets and clean
116define _sed_target_extract_script
117/^$$/ { n 
118/^[^ ]*:/p 
119}
120endef
121export sed_target_extract_script=$(_sed_target_extract_script)
122all:
123	@ for TARGET in `make list_targets`; do \
124	  if [ $$TARGET != all ]; then \
125	    make $$TARGET DSTROOT="$(BUILDDIR)/$$TARGET"; \
126	  fi \
127	done
128list_targets:
129	@ make -rpn | sed  -n -e "$$sed_target_extract_script" | cut -d':' -f1 | grep -v '^clean' | grep -v '^list_targets' 
130
131clean:
132	rm -fr ./BUILD/
133# == List of targets for test cases ==
134#Note: target name should be same as the executable in $(BUILDDIR) 
135#And: target name has to be seperate from source directory name. Using "_src" suffix is a good idea.
136sampletest: sampletest.c
137	$(CC) -o $(BUILDDIR)/$@ $^ $(CFLAGS) $(MORECFLAGS)
138
139pipe_test_10807398: pipe_test_10807398_src/parent.c pipe_test_10807398_src/child.c
140	$(CC) -o $(BUILDDIR)/$@   pipe_test_10807398_src/parent.c $(CFLAGS)
141	$(CC) -o $(BUILDDIR)/child  pipe_test_10807398_src/child.c $(CFLAGS)
142
143pipes_fill_procinfo_11179336: pipes_fill_procinfo_11179336.c
144	$(CC) -o $(BUILDDIR)/$@ pipes_fill_procinfo_11179336.c $(CFLAGS)
145
146test_wq_exit_race_panic_10970548: test_wq_exit_race_panic_10970548.c
147	$(CC) -o $(BUILDDIR)/$@ test_wq_exit_race_panic_10970548.c $(CFLAGS)
148
149ptrace_tests_10767133: ptrace_tests_10767133_src/ptrace_tests_10767133.c 
150	$(CC) -O0 -o $(BUILDDIR)/ptrace_tests_10767133  ptrace_tests_10767133_src/ptrace_tests_10767133.c $(CFLAGS) -Wall
151
152ptrace_test_12507045: ptrace_test_12507045_src/ptrace_test.c
153	$(CC) -O0 -o $(BUILDDIR)/ptrace_test_12507045 $< $(CFLAGS)
154
155clock_types_6368156: clock_types_6368156.c
156	$(CC) -o $(BUILDDIR)/$@ $^ $(CFLAGS)
157
158semctl_test_8534495: semctl_test_8534495_src/semctl_test_8534495.c
159	$(CC) -o $(BUILDDIR)/semctl_test_8534495 semctl_test_8534495_src/semctl_test_8534495.c  $(CFLAGS)
160
161ptcwd_test_11269991: ptcwd_test_11269991_src/ptcwd_test_11269991.c
162	$(CC) -o $(BUILDDIR)/ptcwd_test_11269991 ptcwd_test_11269991_src/ptcwd_test_11269991.c $(CFLAGS)
163
164sprace_test_11891562: sprace_test_11891562_src/sprace_test_11891562.c
165	$(CC) -o $(BUILDDIR)/sprace_test_11891562 sprace_test_11891562_src/sprace_test_11891562.c $(CFLAGS)
166
167guarded_fd_tests_11746236: guarded_fd_tests_11746236_src/mach_exc.defs guarded_fd_tests_11746236_src/guarded_test_framework.c guarded_fd_tests_11746236_src/guarded_test.c
168	$(MIG) $(CFLAGS) \
169		-user $(BUILDDIR)/mach_excUser.c \
170		-server $(BUILDDIR)/mach_excServer.c \
171		-header $(BUILDDIR)/mach_exc.h \
172		guarded_fd_tests_11746236_src/mach_exc.defs
173	$(CC) -o $(BUILDDIR)/guarded_fd_tests_11746236 \
174		guarded_fd_tests_11746236_src/guarded_test_framework.c \
175		$(BUILDDIR)/mach_excServer.c $(CFLAGS) -I$(PRIVATE_INCLUDES) -I$(BUILDDIR)
176	$(CC) -o $(BUILDDIR)/guarded_test \
177		guarded_fd_tests_11746236_src/guarded_test.c \
178		-I$(PRIVATE_INCLUDES) $(CFLAGS)
179
180thread_get_state_11918811: thread_get_state_11918811_src/thread_get_state.c
181	$(MIG) $(CFLAGS) \
182		-sheader $(BUILDDIR)/excserver.h \
183		-server $(BUILDDIR)/excserver.c \
184		-header /dev/null -user /dev/null \
185		thread_get_state_11918811_src/excserver.defs
186	$(CC) -o $(BUILDDIR)/thread_get_state_11918811 \
187		thread_get_state_11918811_src/thread_get_state.c \
188		$(BUILDDIR)/excserver.c \
189		$(CFLAGS)
190
191fcntlrangecheck_tests_11202484: fcntlrangecheck_tests_11202484_src/fcntlrangecheck_tests_11202484.c
192	$(CC) -o $(BUILDDIR)/fcntlrangecheck_tests_11202484 fcntlrangecheck_tests_11202484_src/fcntlrangecheck_tests_11202484.c $(CFLAGS)
193
194test_waitqlocktry_12053360: test_waitqlocktry_12053360.c
195	$(CC) -o $(BUILDDIR)/test_waitqlocktry_12053360 test_waitqlocktry_12053360.c $(CFLAGS)
196
197guarded_mach_port_tests_11178535: guarded_mach_port_tests_11178535_src/mach_exc.defs guarded_mach_port_tests_11178535_src/guarded_test_framework.c guarded_mach_port_tests_11178535_src/guarded_test.c
198	$(MIG) $(CFLAGS) \
199		-user $(BUILDDIR)/mach_excUser.c \
200		-server $(BUILDDIR)/mach_excServer.c \
201		-header $(BUILDDIR)/mach_exc.h \
202		guarded_mach_port_tests_11178535_src/mach_exc.defs
203	$(CC) -o $(BUILDDIR)/guarded_mach_port_tests_11178535 \
204		guarded_mach_port_tests_11178535_src/guarded_test_framework.c \
205		$(BUILDDIR)/mach_excServer.c $(CFLAGS) -I$(PRIVATE_INCLUDES) -I$(BUILDDIR)
206	$(CC) -o $(BUILDDIR)/guarded_mp_test \
207		guarded_mach_port_tests_11178535_src/guarded_test.c \
208		-I$(PRIVATE_INCLUDES) $(CFLAGS)
209
210cpu_monitor_tests_11646922: cpu_monitor_tests_11646922_src/cpumon_test_framework.c
211	$(MIG) $(CFLAGS) \
212		-sheader $(BUILDDIR)/excserver.h \
213		-server $(BUILDDIR)/excserver.c \
214		-header /dev/null -user /dev/null \
215		cpu_monitor_tests_11646922_src/mach_exc.defs
216	$(CC) -o $(BUILDDIR)/cpu_monitor_tests_11646922 \
217		cpu_monitor_tests_11646922_src/cpumon_test_framework.c \
218		$(BUILDDIR)/excserver.c \
219		$(CFLAGS) $(MORECFLAGS) -I$(PRIVATE_INCLUDES)
220	$(XCODEBUILD) -project cpu_monitor_tests_11646922_src/cpu_hog/cpu_hog.xcodeproj TARGET_BUILD_DIR=$(BUILDDIR)
221	$(CC) -o $(BUILDDIR)/mem_hog \
222		cpu_monitor_tests_11646922_src/mem_hog/mem_hog.c \
223		$(CFLAGS) $(MORECFLAGS) -I$(PRIVATE_INCLUDES)
224
225monitor_stress_12901965: monitor_stress_12901965_src/monitor_stress/monitor_stress.m
226	echo '#!/bin/sh\n./monitor_stress -e 20\n./monitor_stress -w 3 -e 20' > $(BUILDDIR)/monitor_stress_12901965
227	chmod +x $(BUILDDIR)/monitor_stress_12901965
228	$(XCODEBUILD) -target $(TARGET_NAME) -project monitor_stress_12901965_src/monitor_stress.xcodeproj TARGET_BUILD_DIR=$(BUILDDIR)
229
230codesigntests: codesigntests.c codesigntests-entitlements.plist
231	$(CC) -o $(BUILDDIR)/codesigntests codesigntests.c $(CFLAGS)
232	env CODESIGN_ALLOCATE=$(CODESIGN_ALLOCATE) \
233	    $(CODESIGN) -s - --entitlements codesigntests-entitlements.plist $(BUILDDIR)/codesigntests
234
235libproc_privilege_test_13203438: libproc_privilege_test_13203438_src/libproc_privilege_test_13203438.c
236	$(CC) -o $(BUILDDIR)/libproc_privilege_test_13203438 libproc_privilege_test_13203438_src/libproc_privilege_test_13203438.c $(CFLAGS)
237
238