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 (,$(SDKROOT))
16	INSTALL_TARGET = install-MacOSX
17else
18	INSTALL_TARGET = install-iOS
19endif
20
21
22
23# Log full compile lines in B&I logs and omit summary lines.
24Verb :=
25Summary := @true
26
27# List of functions needed for each architecture.
28
29# Copies any public headers to DSTROOT.
30installhdrs:
31
32
33# Copies source code to SRCROOT.
34installsrc:
35	cp -r . $(SRCROOT)
36
37
38install:  $(INSTALL_TARGET)
39
40# Copy results to DSTROOT.
41install-MacOSX : $(SYMROOT)/libcompiler_rt.dylib \
42                 $(SYMROOT)/libcompiler_rt-dyld.a 
43	mkdir -p $(DSTROOT)/usr/local/lib/dyld
44	cp $(SYMROOT)/libcompiler_rt-dyld.a  \
45				    $(DSTROOT)/usr/local/lib/dyld/libcompiler_rt.a
46	mkdir -p $(DSTROOT)/usr/lib/system
47	$(call GetCNAVar,STRIP,Platform.darwin_bni,Release,) -S $(SYMROOT)/libcompiler_rt.dylib \
48	    -o $(DSTROOT)/usr/lib/system/libcompiler_rt.dylib
49	cd $(DSTROOT)/usr/lib/system; \
50	    ln -s libcompiler_rt.dylib libcompiler_rt_profile.dylib; \
51	    ln -s libcompiler_rt.dylib libcompiler_rt_debug.dylib
52
53# Rule to make each dylib slice
54$(OBJROOT)/libcompiler_rt-%.dylib : $(OBJROOT)/darwin_bni/Release/%/libcompiler_rt.a
55	echo "const char vers[] = \"@(#) $(RC_ProjectName)-$(RC_ProjectSourceVersion)\"; " > $(OBJROOT)/version.c
56	$(call GetCNAVar,CC,Platform.darwin_bni,Release,$*) \
57	   $(OBJROOT)/version.c -arch $* -dynamiclib \
58	   -install_name /usr/lib/system/libcompiler_rt.dylib \
59	   -compatibility_version 1 -current_version $(RC_ProjectSourceVersion) \
60	   -nodefaultlibs -lSystem -umbrella System -dead_strip \
61	   $(DYLIB_FLAGS) -Wl,-force_load,$^ -o $@ 
62
63# Rule to make fat dylib
64$(SYMROOT)/libcompiler_rt.dylib: $(foreach arch,$(filter-out armv4t,$(RC_ARCHS)), \
65                                        $(OBJROOT)/libcompiler_rt-$(arch).dylib)
66	$(call GetCNAVar,LIPO,Platform.darwin_bni,Release,) -create $^ -o  $@
67
68
69
70
71# Copy results to DSTROOT.
72install-iOS: $(SYMROOT)/libcompiler_rt-static.a \
73             $(SYMROOT)/libcompiler_rt-dyld.a \
74             $(SYMROOT)/libcompiler_rt.dylib
75	mkdir -p $(DSTROOT)/usr/local/lib
76	cp $(SYMROOT)/libcompiler_rt-static.a  \
77				    $(DSTROOT)/usr/local/lib/libcompiler_rt-static.a
78	mkdir -p $(DSTROOT)/usr/local/lib/dyld
79	cp $(SYMROOT)/libcompiler_rt-dyld.a  \
80				    $(DSTROOT)/usr/local/lib/dyld/libcompiler_rt.a
81	mkdir -p $(DSTROOT)/usr/lib/system
82	$(call GetCNAVar,STRIP,Platform.darwin_bni,Release,) -S $(SYMROOT)/libcompiler_rt.dylib \
83	    -o $(DSTROOT)/usr/lib/system/libcompiler_rt.dylib
84
85	
86# Rule to make fat archive
87$(SYMROOT)/libcompiler_rt-static.a : $(foreach arch,$(RC_ARCHS), \
88                         $(OBJROOT)/darwin_bni/Static/$(arch)/libcompiler_rt.a)
89	$(call GetCNAVar,LIPO,Platform.darwin_bni,Release,) -create $^ -o  $@
90
91# rule to make each archive slice for dyld (which removes a few archive members)
92$(OBJROOT)/libcompiler_rt-dyld-%.a : $(OBJROOT)/darwin_bni/Release/%/libcompiler_rt.a
93	cp $^ $@
94	DEL_LIST=`$(AR)  -t $@ | egrep 'apple_versioning|gcc_personality_v0|eprintf' | xargs echo` ; \
95	if [ -n "$${DEL_LIST}" ] ; \
96	then  \
97		$(call GetCNAVar,AR,Platform.darwin_bni,Release,) -d $@ $${DEL_LIST}; \
98		$(call GetCNAVar,RANLIB,Platform.darwin_bni,Release,) $@ ; \
99	fi
100
101# rule to make make archive for dyld
102$(SYMROOT)/libcompiler_rt-dyld.a : $(foreach arch,$(RC_ARCHS), \
103                         $(OBJROOT)/libcompiler_rt-dyld-$(arch).a)
104	$(call GetCNAVar,LIPO,Platform.darwin_bni,Release,) -create $^ -o  $@
105
106