]> git.saurik.com Git - cycript.git/blob - xcode.mk
d87951fb9a0e51b123405aadaf8d469c0bfedafd
[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 lipo := $(shell xcrun --sdk iphoneos -f lipo)
24
25 libs :=
26 libs += .libs/cycript
27 libs += .libs/libcycript.dylib
28 libs += .libs/libcycript-any.dylib
29 libs += .libs/libcycript-sys.dylib
30 libs += .libs/libcycript-sim.dylib
31 libs += .libs/libcycript.o
32
33 framework :=
34 framework += Cycript.framework/Cycript
35 framework += Cycript.framework/Headers/Cycript.h
36
37 all: cycript $(libs) $(framework)
38
39 cycript.zip: all
40 rm -f $@
41 zip -r9y $@ .libs/cycript .libs/*.dylib Cycript.framework
42
43 package: cycript.zip
44
45 clean:
46 rm -rf cycript .libs
47
48 # make stubbornly refuses to believe that these @'s are bugs
49 # http://osdir.com/ml/help-make-gnu/2012-04/msg00008.html
50
51 define build_mac
52 .PHONY: build-mac-$(1)
53 build-mac-$(1):
54 $(MAKE) -C build.mac-$(1)
55 build.mac-$(1)/.libs/cycript: build-mac-$(1)
56 @
57 build.mac-$(1)/.libs/libcycript.dylib: build-mac-$(1)
58 @
59 build.mac-$(1)/.libs/libcycript-any.dylib: build-mac-$(1)
60 @
61 endef
62
63 $(foreach arch,i386 x86_64,$(eval $(call build_mac,$(arch))))
64
65 define build_ios
66 .PHONY: build-ios-$(1)
67 build-ios-$(1):
68 $(MAKE) -C build.ios-$(1)
69 build.ios-$(1)/.libs/libcycript.a: build-ios-$(1)
70 @
71 endef
72
73 $(foreach arch,armv6 armv7 armv7s,$(eval $(call build_ios,$(arch))))
74
75 define build_sim
76 .PHONY: build-sim-$(1)
77 build-sim-$(1):
78 $(MAKE) -C build.sim-$(1)
79 build.sim-$(1)/.libs/libcycript.dylib: build-sim-$(1)
80 @
81 build.sim-$(1)/.libs/libcycript.a: build-sim-$(1)
82 @
83 endef
84
85 $(foreach arch,i386,$(eval $(call build_sim,$(arch))))
86
87 define build_arm
88 build.ios-$(1)/.libs/cycript: build-ios-$(1)
89 @
90 build.ios-$(1)/.libs/libcycript.dylib: build-ios-$(1)
91 @
92 build.ios-$(1)/.libs/libcycript-any.dylib: build-ios-$(1)
93 @
94 endef
95
96 $(foreach arch,armv6,$(eval $(call build_arm,$(arch))))
97
98 .libs/%: build.mac-i386/.libs/% build.mac-x86_64/.libs/% build.ios-armv6/.libs/%
99 @mkdir -p .libs
100 $(lipo) -create -output $@ $^
101
102 .libs/libcycript-sys.dylib:
103 @mkdir -p .libs
104 ln -sf libcycript.dylib $@
105
106 .libs/libcycript-sim.dylib: build.sim-i386/.libs/libcycript.dylib
107 @mkdir -p .libs
108 cp -af $< $@
109
110 .libs/libcycript-%.o: build.%/.libs/libcycript.a
111 @mkdir -p .libs
112 ld -r -arch $$($(lipo) -detailed_info $< | sed -e '/^Non-fat file: / ! d; s/.*: //') -o $@ -all_load $< libffi.a
113
114 .libs/libcycript.o: .libs/libcycript-ios-armv6.o .libs/libcycript-ios-armv7.o .libs/libcycript-ios-armv7s.o .libs/libcycript-sim-i386.o
115 $(lipo) -create -output $@ $^
116
117 Cycript.framework/Cycript: .libs/libcycript.o
118 @mkdir -p $(dir $@)
119 cp -a $< $@
120
121 Cycript.framework/Headers/Cycript.h: Cycript.h
122 @mkdir -p $(dir $@)
123 cp -a $< $@
124
125 cycript: cycript.in
126 cp -af $< $@
127 chmod 755 $@
128
129 .PHONY: all clean package