SDKROOT ?= /
ARCHS = x86_64
CC = xcrun -sdk $(SDKROOT) cc
CODESIGN = xcrun -sdk $(SDKROOT) codesign
CFLAGS = -O0 -g -isysroot $(SDKROOT) $(patsubst %, -arch %,$(ARCHS))
LDFLAGS = -Wl,-new_linker -dead_strip \
-isysroot $(SDKROOT) $(patsubst %, -arch %,$(ARCHS))
NOPIE_OPTION = -Wl,-no_pie
EXECUTABLES = exit.nodyld \
exit.nopie.dyld-but-no-Libsystem exit.pie.dyld-but-no-Libsystem \
exit.nopie.dyld-and-Libsystem exit.pie.dyld-and-Libsystem \
exit.nopie exit.pie \
printexecinfo
OBJECTS = exit-asm.o exit.o printexecinfo.o
default: $(EXECUTABLES) run
clean:
rm -f run $(EXECUTABLES)
rm -f run.o $(OBJECTS)
run.o: run.c
$(CC) -c -o $@ $< $(CFLAGS)
run: run.o
$(CC) -o $@ $< $(LDFLAGS)
$(CODESIGN) -s - $@
exit-asm.o: exit-asm.S
$(CC) -c -o $@ $< $(CFLAGS)
exit.o: exit.c
$(CC) -c -o $@ $< $(CFLAGS)
printexecinfo.o: printexecinfo.c
$(CC) -c -o $@ $< $(CFLAGS)
exit.nodyld: exit-asm.o
$(CC) -o $@ $< $(LDFLAGS) -e mystart -nostartfiles -nodefaultlibs -static
$(CODESIGN) -s - $@
exit.nopie.dyld-but-no-Libsystem: exit-asm.o
$(CC) -o $@ $< $(LDFLAGS) -e mystart $(NOPIE_OPTION) -nostartfiles -nodefaultlibs
$(CODESIGN) -s - $@
exit.pie.dyld-but-no-Libsystem: exit-asm.o
$(CC) -o $@ $< $(LDFLAGS) -e mystart -Wl,-pie -nostartfiles -nodefaultlibs
$(CODESIGN) -s - $@
exit.nopie.dyld-and-Libsystem: exit-asm.o
$(CC) -o $@ $< $(LDFLAGS) -e mystart $(NOPIE_OPTION) -nostartfiles -nodefaultlibs -lSystem
$(CODESIGN) -s - $@
exit.pie.dyld-and-Libsystem: exit-asm.o
$(CC) -o $@ $< $(LDFLAGS) -e mystart -Wl,-pie -nostartfiles -nodefaultlibs -lSystem
$(CODESIGN) -s - $@
exit.nopie: exit.o
$(CC) -o $@ $< $(LDFLAGS) -e mystart $(NOPIE_OPTION)
$(CODESIGN) -s - $@
exit.pie: exit.o
$(CC) -o $@ $< $(LDFLAGS) -e mystart -Wl,-pie
$(CODESIGN) -s - $@
printexecinfo: printexecinfo.o
$(CC) -o $@ $< $(LDFLAGS)
$(CODESIGN) -s - $@
quick-test: $(EXECUTABLES) run
./test.sh