]> git.saurik.com Git - cycript.git/blob - xcode.mk
Apple no longer supports *_stret() on -arch arm64.
[cycript.git] / xcode.mk
1 # Cycript - Optimizing JavaScript Compiler/Runtime
2 # Copyright (C) 2009-2013 Jay Freeman (saurik)
3
4 # GNU General Public License, Version 3 {{{
5 #
6 # Cycript is free software: you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published
8 # by the Free Software Foundation, either version 3 of the License,
9 # or (at your option) any later version.
10 #
11 # Cycript is distributed in the hope that it will be useful, but
12 # WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 # GNU General Public License for more details.
15 #
16 # You should have received a copy of the GNU General Public License
17 # along with Cycript. If not, see <http://www.gnu.org/licenses/>.
18 # }}}
19
20 .DELETE_ON_ERROR:
21 SHELL := /bin/bash
22
23 include codesign.mk
24
25 lipo := $(shell xcrun --sdk iphoneos -f lipo)
26
27 cycript :=
28 cycript += Cycript_/cycript
29 cycript += Cycript_/libcycript.dylib
30 cycript += Cycript_/libcycript-any.dylib
31 cycript += Cycript_/libcycript-sys.dylib
32 cycript += Cycript_/libcycript-sim.dylib
33
34 framework :=
35 framework += Cycript.framework/Cycript
36 framework += Cycript.framework/Headers/Cycript.h
37
38 all: cycript $(cycript) $(framework)
39
40 cycript.zip: all
41 rm -f $@
42 zip -r9y $@ cycript Cycript_ Cycript.framework
43
44 package: cycript.zip
45
46 clean:
47 rm -rf cycript Cycript_ libcycript*.o
48
49 # make stubbornly refuses to believe that these @'s are bugs
50 # http://osdir.com/ml/help-make-gnu/2012-04/msg00008.html
51
52 define build_mac
53 .PHONY: build-mac-$(1)
54 build-mac-$(1):
55 $(MAKE) -C build.mac-$(1)
56 build.mac-$(1)/.libs/cycript: build-mac-$(1)
57 @
58 build.mac-$(1)/.libs/libcycript.dylib: build-mac-$(1)
59 @
60 build.mac-$(1)/.libs/libcycript-any.dylib: build-mac-$(1)
61 @
62 endef
63
64 $(foreach arch,i386 x86_64,$(eval $(call build_mac,$(arch))))
65
66 define build_ios
67 .PHONY: build-ios-$(1)
68 build-ios-$(1):
69 $(MAKE) -C build.ios-$(1)
70 build.ios-$(1)/.libs/libcycript.a: build-ios-$(1)
71 @
72 endef
73
74 $(foreach arch,armv6 armv7 armv7s,$(eval $(call build_ios,$(arch))))
75
76 define build_sim
77 .PHONY: build-sim-$(1)
78 build-sim-$(1):
79 $(MAKE) -C build.sim-$(1)
80 build.sim-$(1)/.libs/libcycript.dylib: build-sim-$(1)
81 @
82 build.sim-$(1)/.libs/libcycript.a: build-sim-$(1)
83 @
84 endef
85
86 $(foreach arch,i386,$(eval $(call build_sim,$(arch))))
87
88 define build_arm
89 build.ios-$(1)/.libs/cycript: build-ios-$(1)
90 @
91 build.ios-$(1)/.libs/libcycript.dylib: build-ios-$(1)
92 @
93 build.ios-$(1)/.libs/libcycript-any.dylib: build-ios-$(1)
94 @
95 endef
96
97 $(foreach arch,armv6,$(eval $(call build_arm,$(arch))))
98
99 Cycript_/%: build.mac-i386/.libs/% build.mac-x86_64/.libs/% build.ios-armv6/.libs/%
100 @mkdir -p $(dir $@)
101 $(lipo) -create -output $@ $^
102 # XXX: this should probably not entitle the dylibs
103 codesign -s $(codesign) --entitlement cycript.xml $@
104
105 Cycript_/libcycript-sys.dylib:
106 @mkdir -p $(dir $@)
107 ln -sf libcycript.dylib $@
108
109 Cycript_/libcycript-sim.dylib: build.sim-i386/.libs/libcycript.dylib
110 @mkdir -p $(dir $@)
111 cp -af $< $@
112 codesign -s $(codesign) $@
113
114 libcycript-%.o: build.%/.libs/libcycript.a
115 @mkdir -p $(dir $@)
116 ld -r -arch $$($(lipo) -detailed_info $< | sed -e '/^Non-fat file: / ! d; s/.*: //') -o $@ -all_load $< libffi.a
117
118 libcycript.o: libcycript-ios-armv6.o libcycript-ios-armv7.o libcycript-ios-armv7s.o libcycript-sim-i386.o
119 $(lipo) -create -output $@ $^
120
121 Cycript.framework/Cycript: libcycript.o
122 @mkdir -p $(dir $@)
123 cp -a $< $@
124
125 Cycript.framework/Headers/Cycript.h: Cycript.h
126 @mkdir -p $(dir $@)
127 cp -a $< $@
128
129 cycript: cycript.in
130 cp -af $< $@
131 chmod 755 $@
132
133 .PHONY: all clean package