1 2# 3# Make rules to build compiler_rt in Apple B&I infrastructure 4# 5 6# set ProjSrcRoot appropriately 7ProjSrcRoot := $(SRCROOT) 8# set ProjObjRoot appropriately 9ifdef OBJROOT 10 ProjObjRoot := $(OBJROOT) 11else 12 ProjObjRoot := $(ProjSrcRoot) 13endif 14 15ifeq (,$(RC_PURPLE)) 16 INSTALL_TARGET = install-MacOSX 17else 18 ifeq (,$(RC_INDIGO)) 19 INSTALL_TARGET = install-iOS 20 else 21 INSTALL_TARGET = install-iOS-Simulator 22 endif 23endif 24 25 26 27# Log full compile lines in B&I logs and omit summary lines. 28Verb := 29Summary := @true 30 31# List of functions needed for each architecture. 32 33# Copies any public headers to DSTROOT. 34installhdrs: 35 36 37# Copies source code to SRCROOT. 38installsrc: 39 cp -r . $(SRCROOT) 40 41 42install: $(INSTALL_TARGET) 43 44# Copy results to DSTROOT. 45install-MacOSX : $(SYMROOT)/libcompiler_rt.dylib \ 46 $(SYMROOT)/libcompiler_rt-dyld.a 47 mkdir -p $(DSTROOT)/usr/local/lib/dyld 48 cp $(SYMROOT)/libcompiler_rt-dyld.a \ 49 $(DSTROOT)/usr/local/lib/dyld/libcompiler_rt.a 50 mkdir -p $(DSTROOT)/usr/lib/system 51 $(call GetCNAVar,STRIP,Platform.darwin_bni,Release,) -S $(SYMROOT)/libcompiler_rt.dylib \ 52 -o $(DSTROOT)/usr/lib/system/libcompiler_rt.dylib 53 cd $(DSTROOT)/usr/lib/system; \ 54 ln -s libcompiler_rt.dylib libcompiler_rt_profile.dylib; \ 55 ln -s libcompiler_rt.dylib libcompiler_rt_debug.dylib 56 57# Rule to make each dylib slice 58$(OBJROOT)/libcompiler_rt-%.dylib : $(OBJROOT)/darwin_bni/Release/%/libcompiler_rt.a 59 echo "const char vers[] = \"@(#) $(RC_ProjectName)-$(RC_ProjectSourceVersion)\"; " > $(OBJROOT)/version.c 60 $(call GetCNAVar,CC,Platform.darwin_bni,Release,$*) \ 61 $(OBJROOT)/version.c -arch $* -dynamiclib \ 62 -install_name /usr/lib/system/libcompiler_rt.dylib \ 63 -compatibility_version 1 -current_version $(RC_ProjectSourceVersion) \ 64 -nodefaultlibs -umbrella System -dead_strip \ 65 -Wl,-upward-lunwind \ 66 -Wl,-upward-lsystem_m \ 67 -Wl,-upward-lsystem_c \ 68 -Wl,-upward-lsystem_kernel \ 69 -Wl,-upward-lsystem_platform \ 70 -Wl,-ldyld \ 71 -L$(SDKROOT)/usr/lib/system \ 72 $(DYLIB_FLAGS) -Wl,-force_load,$^ -o $@ 73 74# Rule to make fat dylib 75$(SYMROOT)/libcompiler_rt.dylib: $(foreach arch,$(filter-out armv4t,$(RC_ARCHS)), \ 76 $(OBJROOT)/libcompiler_rt-$(arch).dylib) 77 $(call GetCNAVar,LIPO,Platform.darwin_bni,Release,) -create $^ -o $@ 78 $(call GetCNAVar,DSYMUTIL,Platform.darwin_bni,Release,) $@ 79 80 81# Copy results to DSTROOT. 82install-iOS: $(SYMROOT)/libcompiler_rt-static.a \ 83 $(SYMROOT)/libcompiler_rt-dyld.a \ 84 $(SYMROOT)/libcompiler_rt.dylib 85 mkdir -p $(DSTROOT)/usr/local/lib 86 cp $(SYMROOT)/libcompiler_rt-static.a \ 87 $(DSTROOT)/usr/local/lib/libcompiler_rt-static.a 88 mkdir -p $(DSTROOT)/usr/local/lib/dyld 89 cp $(SYMROOT)/libcompiler_rt-dyld.a \ 90 $(DSTROOT)/usr/local/lib/dyld/libcompiler_rt.a 91 mkdir -p $(DSTROOT)/usr/lib/system 92 $(call GetCNAVar,STRIP,Platform.darwin_bni,Release,) -S $(SYMROOT)/libcompiler_rt.dylib \ 93 -o $(DSTROOT)/usr/lib/system/libcompiler_rt.dylib 94 95# Rule to make fat archive 96$(SYMROOT)/libcompiler_rt-static.a : $(foreach arch,$(RC_ARCHS), \ 97 $(OBJROOT)/darwin_bni/Static/$(arch)/libcompiler_rt.a) 98 $(call GetCNAVar,LIPO,Platform.darwin_bni,Release,) -create $^ -o $@ 99 100# rule to make each archive slice for dyld (which removes a few archive members) 101$(OBJROOT)/libcompiler_rt-dyld-%.a : $(OBJROOT)/darwin_bni/Release/%/libcompiler_rt.a 102 cp $^ $@ 103 DEL_LIST=`$(AR) -t $@ | egrep 'apple_versioning|gcc_personality_v0|eprintf' | xargs echo` ; \ 104 if [ -n "$${DEL_LIST}" ] ; \ 105 then \ 106 $(call GetCNAVar,AR,Platform.darwin_bni,Release,) -d $@ $${DEL_LIST}; \ 107 $(call GetCNAVar,RANLIB,Platform.darwin_bni,Release,) $@ ; \ 108 fi 109 110# rule to make make archive for dyld 111$(SYMROOT)/libcompiler_rt-dyld.a : $(foreach arch,$(RC_ARCHS), \ 112 $(OBJROOT)/libcompiler_rt-dyld-$(arch).a) 113 $(call GetCNAVar,LIPO,Platform.darwin_bni,Release,) -create $^ -o $@ 114 115 116 117# Copy results to DSTROOT. 118install-iOS-Simulator: $(SYMROOT)/libcompiler_rt_sim.dylib \ 119 $(SYMROOT)/libcompiler_rt-dyld.a 120 mkdir -p $(DSTROOT)/$(SDKROOT)/usr/lib/system 121 $(call GetCNAVar,STRIP,Platform.darwin_bni,Release,) -S $(SYMROOT)/libcompiler_rt_sim.dylib \ 122 -o $(DSTROOT)/$(SDKROOT)/usr/lib/system/libcompiler_rt_sim.dylib 123 mkdir -p $(DSTROOT)/$(SDKROOT)/usr/local/lib/dyld 124 cp $(SYMROOT)/libcompiler_rt-dyld.a \ 125 $(DSTROOT)/$(SDKROOT)/usr/local/lib/dyld/libcompiler_rt.a 126 127# Rule to make fat dylib 128$(SYMROOT)/libcompiler_rt_sim.dylib: $(foreach arch,$(RC_ARCHS), \ 129 $(OBJROOT)/libcompiler_rt_sim-$(arch).dylib) 130 $(call GetCNAVar,LIPO,Platform.darwin_bni,Release,) -create $^ -o $@ 131 $(call GetCNAVar,DSYMUTIL,Platform.darwin_bni,Release,) $@ 132 133# Rule to make each dylib slice 134$(OBJROOT)/libcompiler_rt_sim-%.dylib : $(OBJROOT)/darwin_bni/Release/%/libcompiler_rt.a 135 echo "const char vers[] = \"@(#) $(RC_ProjectName)-$(RC_ProjectSourceVersion)\"; " > $(OBJROOT)/version.c 136 $(call GetCNAVar,CC,Platform.darwin_bni,Release,$*) \ 137 $(OBJROOT)/version.c -arch $* -dynamiclib \ 138 -install_name /usr/lib/system/libcompiler_rt_sim.dylib \ 139 -compatibility_version 1 -current_version $(RC_ProjectSourceVersion) \ 140 -Wl,-unexported_symbol,___enable_execute_stack \ 141 -nostdlib \ 142 -Wl,-upward-lunwind_sim \ 143 -Wl,-upward-lsystem_sim_m \ 144 -Wl,-upward-lsystem_sim_c \ 145 -ldyld_sim \ 146 -Wl,-upward-lSystem \ 147 -umbrella System -Wl,-no_implicit_dylibs -L$(SDKROOT)/usr/lib/system -dead_strip \ 148 $(DYLIB_FLAGS) -Wl,-force_load,$^ -o $@ 149 150