1CC = $(shell xcrun -sdk "$(SDKROOT)"  -find clang)
2ifneq (,$(SDKROOT))
3	SDK_DIR = $(shell xcodebuild -version -sdk "$(SDKROOT)" Path)
4endif
5
6OFLAG = -Os
7CFLAGS = $(OFLAG) -Wall $(RC_NONARCH_CFLAGS)
8
9SRCROOT = .
10SYMROOT = .
11OBJROOT = .
12
13PAX = /bin/pax -rw
14MKDIR = /bin/mkdir -p
15CHMOD = /bin/chmod
16LIPO = /usr/bin/lipo
17
18ifeq (,$(RC_ARCHS))
19	# build for the local arch only
20	ARCH_CFLAGS =
21else
22	# assume the toolchain supports static compilation for all request archs
23	ARCH_CFLAGS = $(patsubst %,-arch %,$(RC_ARCHS))
24	ifneq (,$(SDK_DIR))
25		ARCH_CFLAGS := $(ARCH_CFLAGS) -isysroot $(SDK_DIR) 
26	endif
27endif
28
29# v1 = MacOSX 10.4 and earlier, iPhone n/a
30# v2 = MacOSX 10.5 and later, iPhone 2.0 or later
31# v3 = MacOSX 10.6 and later, iPhone 2.0 or later
32# v4 = MacOSX 10.6 and later, iPhone 3.1 or later
33
34ifeq (,$(RC_PURPLE))
35	OS_MIN_V1	= -mmacosx-version-min=10.4
36	OS_MIN_V2	= -mmacosx-version-min=10.5
37	OS_MIN_V3	= -mmacosx-version-min=10.6
38	OS_MIN_V4	= -mmacosx-version-min=10.6
39	INSTALL_TARGET  = install_macosx
40else
41	ifeq (,$(RC_INDIGO))
42		OS_MIN_V2	= -miphoneos-version-min=2.0
43		OS_MIN_V3	= -miphoneos-version-min=2.0
44		OS_MIN_V4	= -miphoneos-version-min=3.1
45		INSTALL_TARGET  = install_iphone
46	else
47		OS_MIN_V2	= -mmacosx-version-min=10.5
48		OS_MIN_V3	= -mmacosx-version-min=10.5
49		OS_MIN_V4	= -mmacosx-version-min=10.6
50		INSTALL_TARGET  = install_ios_simulator
51	endif
52endif
53 
54USRLIBDIR = /usr/lib
55LOCLIBDIR = /usr/local/lib
56DSTDIRS = $(DSTROOT)$(USRLIBDIR) $(DSTROOT)$(LOCLIBDIR)
57
58INSTALLSRC_FILES = Makefile crt.c icplusplus.c lazy_dylib_loader.c start.s dyld_glue.s lazy_dylib_helper.s
59
60INTERMEDIATE_FILES =	\
61			$(SYMROOT)/crt1.v1.o  $(SYMROOT)/crt1.v2.o $(SYMROOT)/crt1.v3.o $(SYMROOT)/crt1.v4.o \
62			$(SYMROOT)/gcrt1.o $(SYMROOT)/crt0.o \
63			$(SYMROOT)/dylib1.v1.o $(SYMROOT)/dylib1.v2.o \
64			$(SYMROOT)/bundle1.v1.o \
65			$(SYMROOT)/lazydylib1.o
66
67# default target for development builds
68all: $(INTERMEDIATE_FILES) 
69
70
71$(SYMROOT)/crt1.v1.o: start.s crt.c dyld_glue.s 
72	$(CC) -r $(ARCH_CFLAGS) -Os $(OS_MIN_V1) -mdynamic-no-pic -nostdlib -keep_private_externs $^ -o $@  -DCRT -DOLD_LIBSYSTEM_SUPPORT
73
74$(SYMROOT)/crt1.v2.o: start.s crt.c dyld_glue.s 
75	$(CC) -r $(ARCH_CFLAGS) -Os $(OS_MIN_V2) -nostdlib -keep_private_externs $^ -o $@  -DCRT
76
77$(SYMROOT)/crt1.v3.o: start.s crt.c
78	$(CC) -r $(ARCH_CFLAGS) -Os $(OS_MIN_V3) -nostdlib -keep_private_externs $^ -o $@  -DADD_PROGRAM_VARS 
79
80$(SYMROOT)/crt1.v4.o: start.s crt.c
81	$(CC) -r $(ARCH_CFLAGS) -Os $(OS_MIN_V4) -nostdlib -keep_private_externs $^ -o $@  -DADD_PROGRAM_VARS 
82
83$(SYMROOT)/gcrt1.o: start.s crt.c dyld_glue.s 
84	$(CC) -r $(ARCH_CFLAGS) -Os $(OS_MIN_V1) -nostdlib -keep_private_externs $^ -o $@  -DGCRT  -DOLD_LIBSYSTEM_SUPPORT
85
86
87$(SYMROOT)/crt0.o: start.s crt.c
88	$(CC) -r $(ARCH_CFLAGS) -Os -static -Wl,-new_linker -nostdlib -keep_private_externs $^ -o $@ 
89
90
91$(SYMROOT)/dylib1.v1.o: dyld_glue.s icplusplus.c
92	$(CC) -r $(ARCH_CFLAGS) -Os $(OS_MIN_V1)  -nostdlib -keep_private_externs $^ -o $@  -DCFM_GLUE
93
94$(SYMROOT)/dylib1.v2.o: dyld_glue.s
95	$(CC) -r $(ARCH_CFLAGS) -Os $(OS_MIN_V2)  -nostdlib -keep_private_externs $^ -o $@  -DCFM_GLUE
96		
97
98$(SYMROOT)/bundle1.v1.o: dyld_glue.s
99	$(CC) -r $(ARCH_CFLAGS) -Os $(OS_MIN_V1)  -nostdlib -keep_private_externs $^ -o $@ 
100
101
102
103$(SYMROOT)/lazydylib1.o: lazy_dylib_helper.s lazy_dylib_loader.c 
104	$(CC) -r $(ARCH_CFLAGS) -Os -nostdlib -keep_private_externs $^ -o $@ 
105
106clean:
107	rm -f $(OBJROOT)/*.o $(SYMROOT)/*.o
108
109
110install: all $(DSTDIRS) $(INSTALL_TARGET)
111
112
113install_iphone:
114	cp $(SYMROOT)/crt1.v2.o		$(DSTROOT)$(USRLIBDIR)/crt1.o
115	cp $(SYMROOT)/crt1.v4.o		$(DSTROOT)$(USRLIBDIR)/crt1.3.1.o
116	cp $(SYMROOT)/dylib1.v2.o	$(DSTROOT)$(USRLIBDIR)/dylib1.o
117	cp $(SYMROOT)/bundle1.v1.o	$(DSTROOT)$(USRLIBDIR)/bundle1.o
118	cp $(SYMROOT)/lazydylib1.o	$(DSTROOT)$(USRLIBDIR)/lazydylib1.o
119	cp $(SYMROOT)/gcrt1.o		$(DSTROOT)$(USRLIBDIR)/gcrt1.o
120	cp $(SYMROOT)/crt0.o		$(DSTROOT)$(LOCLIBDIR)/crt0.o
121
122
123install_macosx:
124	cp $(SYMROOT)/crt1.v3.o		$(DSTROOT)$(USRLIBDIR)/crt1.10.6.o
125	cp $(SYMROOT)/crt1.v2.o		$(DSTROOT)$(USRLIBDIR)/crt1.10.5.o
126	cp $(SYMROOT)/crt1.v1.o		$(DSTROOT)$(USRLIBDIR)/crt1.o
127	cp $(SYMROOT)/gcrt1.o		$(DSTROOT)$(USRLIBDIR)/gcrt1.o
128	cp $(SYMROOT)/dylib1.v2.o	$(DSTROOT)$(USRLIBDIR)/dylib1.10.5.o
129	cp $(SYMROOT)/dylib1.v1.o 	$(DSTROOT)$(USRLIBDIR)/dylib1.o
130	cp $(SYMROOT)/bundle1.v1.o	$(DSTROOT)$(USRLIBDIR)/bundle1.o
131	cp $(SYMROOT)/lazydylib1.o	$(DSTROOT)$(USRLIBDIR)/lazydylib1.o
132	cp $(SYMROOT)/crt0.o		$(DSTROOT)$(LOCLIBDIR)/crt0.o
133
134install_ios_simulator:
135	rm -rf $(DSTROOT)
136	mkdir -p $(DSTROOT)/$(SDK_DIR)/$(USRLIBDIR)
137	cp $(SYMROOT)/crt1.v2.o		$(DSTROOT)/$(SDK_DIR)/$(USRLIBDIR)/crt1.10.5.o
138	cp $(SYMROOT)/crt1.v4.o		$(DSTROOT)/$(SDK_DIR)/$(USRLIBDIR)/crt1.10.6.o
139	cp $(SYMROOT)/lazydylib1.o	$(DSTROOT)/$(SDK_DIR)/$(USRLIBDIR)/lazydylib1.o
140	cp $(SYMROOT)/dylib1.v2.o	$(DSTROOT)/$(SDK_DIR)/$(USRLIBDIR)/dylib1.o
141	cp $(SYMROOT)/bundle1.v1.o	$(DSTROOT)/$(SDK_DIR)/$(USRLIBDIR)/bundle1.o
142	cd $(DSTROOT)/$(SDK_DIR)/$(USRLIBDIR); ln -s crt1.10.6.o crt1.o; ln -s crt1.10.5.o crt1.3.1.o
143	
144	
145installhdrs:
146
147installsrc:
148	$(MKDIR) $(SRCROOT)
149	$(CHMOD) 755 $(SRCROOT)
150	$(PAX) $(INSTALLSRC_FILES) $(SRCROOT)
151	$(CHMOD) 444 $(SRCROOT)/*
152
153$(OJBROOT) $(SYMROOT) $(DSTDIRS):
154	$(MKDIR) $@
155
156