1SDKROOT ?= / 2ifeq "$(RC_TARGET_CONFIG)" "iPhone" 3Embedded?=YES 4else 5Embedded?=$(shell echo $(SDKROOT) | grep -iq iphoneos && echo YES || echo NO) 6endif 7 8ifdef RC_ARCHS 9 ARCHS:=$(RC_ARCHS) 10 else 11 ifeq "$(Embedded)" "YES" 12 ARCHS:=armv7 armv7s arm64 13 else 14 ARCHS:=x86_64 i386 15 endif 16endif 17 18CC = $(shell xcrun -sdk "$(SDKROOT)" -find cc) 19STRIP = $(shell xcrun -sdk "$(SDKROOT)" -find strip) 20CODESIGN = $(shell xcrun -sdk "$(SDKROOT)" -find codesign) 21export CODESIGN_ALLOCATE := $(shell xcrun -sdk "$(SDKROOT)" -find codesign_allocate) 22DSYMUTIL = $(shell xcrun -sdk "$(SDKROOT)" -find dsymutil) 23CFLAGS = -O0 -g -isysroot $(SDKROOT) $(patsubst %, -arch %,$(ARCHS)) 24LDFLAGS = -dead_strip \ 25 -isysroot $(SDKROOT) $(patsubst %, -arch %,$(ARCHS)) 26 27OBJROOT?=$(shell /bin/pwd)/BUILD/obj 28SYMROOT?=$(shell /bin/pwd)/BUILD/sym 29DSTROOT?=$(shell /bin/pwd)/BUILD/dst 30 31EXECUTABLES = exit.nodyld \ 32 exit.nopie.dyld-but-no-Libsystem exit.pie.dyld-but-no-Libsystem \ 33 exit.nopie.dyld-and-Libsystem exit.pie.dyld-and-Libsystem \ 34 exit.nopie exit.pie \ 35 printexecinfo run test 36OBJECTS = exit-asm.o exit.o printexecinfo.o run.o 37 38default: $(addprefix $(DSTROOT)/,$(EXECUTABLES)) 39 40clean: 41 rm -f $(addprefix $(OBJROOT)/,$(OBJECTS)) 42 rm -f $(addprefix $(SYMROOT)/,$(EXECUTABLES)) 43 rm -rf $(addsuffix .dSYM,$(addprefix $(SYMROOT)/,$(EXECUTABLES))) 44 rm -f $(addprefix $(DSTROOT)/,$(EXECUTABLES)) 45 46# DEPENDENCIES 47$(addprefix $(DSTROOT)/,$(EXECUTABLES)): DSTROOT SYMROOT 48 49$(addprefix $(OBJROOT)/,$(OBJECTS)): OBJROOT 50 51DSTROOT SYMROOT OBJROOT: 52 mkdir -p $($@) 53 54# OBJECTS 55 56$(OBJROOT)/exit-asm.o: exit-asm.S OBJROOT 57 $(CC) -c -o $@ $< $(CFLAGS) 58 59$(OBJROOT)/exit.o: exit.c OBJROOT 60 $(CC) -c -o $@ $< $(CFLAGS) 61 62$(OBJROOT)/printexecinfo.o: printexecinfo.c OBJROOT 63 $(CC) -c -o $@ $< $(CFLAGS) 64 65$(OBJROOT)/run.o: run.c OBJROOT 66 $(CC) -c -o $@ $< $(CFLAGS) 67 68# EXECUTABLES 69 70$(DSTROOT)/exit.nodyld: $(OBJROOT)/exit-asm.o 71 $(CC) -o $@ $< $(LDFLAGS) -e _main -nostartfiles -nodefaultlibs -static -Wl,-segalign,0x4000 72 $(CODESIGN) -s - $@ 73 74$(DSTROOT)/exit.nopie.dyld-but-no-Libsystem: $(OBJROOT)/exit-asm.o 75 $(CC) -o $@ $< $(LDFLAGS) -e _main -Wl,-no_pie -nostartfiles -nodefaultlibs -Wl,-no_new_main 76 $(CODESIGN) -s - $@ 77 78$(DSTROOT)/exit.pie.dyld-but-no-Libsystem: $(OBJROOT)/exit-asm.o 79 $(CC) -o $@ $< $(LDFLAGS) -e _main -Wl,-pie -nostartfiles -nodefaultlibs -Wl,-no_new_main 80 $(CODESIGN) -s - $@ 81 82$(DSTROOT)/exit.nopie.dyld-and-Libsystem: $(OBJROOT)/exit-asm.o 83 $(CC) -o $@ $< $(LDFLAGS) -Wl,-no_pie -nostartfiles -nodefaultlibs -lSystem 84 $(CODESIGN) -s - $@ 85 86$(DSTROOT)/exit.pie.dyld-and-Libsystem: $(OBJROOT)/exit-asm.o 87 $(CC) -o $@ $< $(LDFLAGS) -Wl,-pie -nostartfiles -nodefaultlibs -lSystem 88 $(CODESIGN) -s - $@ 89 90$(DSTROOT)/exit.nopie: $(OBJROOT)/exit.o 91 $(CC) -o $@ $< $(LDFLAGS) -Wl,-no_pie 92 $(CODESIGN) -s - $@ 93 94$(DSTROOT)/exit.pie: $(OBJROOT)/exit.o 95 $(CC) -o $@ $< $(LDFLAGS) -Wl,-pie 96 $(CODESIGN) -s - $@ 97 98$(DSTROOT)/printexecinfo: $(OBJROOT)/printexecinfo.o 99 $(CC) -o $@ $< $(LDFLAGS) 100 $(CODESIGN) -s - $@ 101 102$(DSTROOT)/run: $(OBJROOT)/run.o 103 $(CC) -o $(SYMROOT)/run $< $(LDFLAGS) 104 $(DSYMUTIL) $(SYMROOT)/run 105 $(STRIP) -S -o $@ $(SYMROOT)/run 106 $(CODESIGN) -s - $@ 107 108$(DSTROOT)/test: test.sh 109 install -m 755 $< $@ 110