1SDKROOT ?= /
2ARCHS = x86_64
3CC = xcrun -sdk $(SDKROOT) cc
4CODESIGN = xcrun -sdk $(SDKROOT) codesign
5CFLAGS = -O0 -g -isysroot $(SDKROOT) $(patsubst %, -arch %,$(ARCHS))
6LDFLAGS = -Wl,-new_linker -dead_strip \
7	-isysroot $(SDKROOT) $(patsubst %, -arch %,$(ARCHS))
8NOPIE_OPTION = -Wl,-no_pie
9
10EXECUTABLES = exit.nodyld \
11	exit.nopie.dyld-but-no-Libsystem exit.pie.dyld-but-no-Libsystem \
12	exit.nopie.dyld-and-Libsystem exit.pie.dyld-and-Libsystem \
13	exit.nopie exit.pie \
14	printexecinfo
15OBJECTS = exit-asm.o exit.o printexecinfo.o
16
17default: $(EXECUTABLES) run
18
19clean:
20	rm -f run $(EXECUTABLES)
21	rm -f run.o $(OBJECTS)
22
23run.o: run.c
24	$(CC) -c -o $@ $< $(CFLAGS)
25
26run: run.o
27	$(CC) -o $@ $< $(LDFLAGS)
28	$(CODESIGN) -s - $@
29
30# OBJECTS
31
32exit-asm.o: exit-asm.S
33	$(CC) -c -o $@ $< $(CFLAGS)
34
35exit.o: exit.c
36	$(CC) -c -o $@ $< $(CFLAGS)
37
38printexecinfo.o: printexecinfo.c
39	$(CC) -c -o $@ $< $(CFLAGS)
40
41# EXECUTABLES
42
43exit.nodyld: exit-asm.o
44	$(CC) -o $@ $< $(LDFLAGS) -e mystart -nostartfiles -nodefaultlibs -static
45	$(CODESIGN) -s - $@
46
47
48exit.nopie.dyld-but-no-Libsystem: exit-asm.o
49	$(CC) -o $@ $< $(LDFLAGS) -e mystart $(NOPIE_OPTION) -nostartfiles -nodefaultlibs
50	$(CODESIGN) -s - $@
51
52exit.pie.dyld-but-no-Libsystem: exit-asm.o
53	$(CC) -o $@ $< $(LDFLAGS) -e mystart -Wl,-pie -nostartfiles -nodefaultlibs
54	$(CODESIGN) -s - $@
55
56exit.nopie.dyld-and-Libsystem: exit-asm.o
57	$(CC) -o $@ $< $(LDFLAGS) -e mystart $(NOPIE_OPTION) -nostartfiles -nodefaultlibs -lSystem
58	$(CODESIGN) -s - $@
59
60exit.pie.dyld-and-Libsystem: exit-asm.o
61	$(CC) -o $@ $< $(LDFLAGS) -e mystart -Wl,-pie -nostartfiles -nodefaultlibs -lSystem
62	$(CODESIGN) -s - $@
63
64exit.nopie: exit.o
65	$(CC) -o $@ $< $(LDFLAGS) -e mystart $(NOPIE_OPTION)
66	$(CODESIGN) -s - $@
67
68exit.pie: exit.o
69	$(CC) -o $@ $< $(LDFLAGS) -e mystart -Wl,-pie
70	$(CODESIGN) -s - $@
71
72printexecinfo: printexecinfo.o
73	$(CC) -o $@ $< $(LDFLAGS)
74	$(CODESIGN) -s - $@
75
76# ACTIONS
77
78quick-test: $(EXECUTABLES) run
79	./test.sh
80