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