1
1
#
2
2
# Useful targets:
3
- # - all - build everything
4
- # - iOS - build everything for iOS
5
- # - tvOS - build everything for tvOS
6
- # - watchOS - build everything for watchOS
7
- # - OpenSSL.framework-iOS - build OpenSSL.framework for iOS
8
- # - OpenSSL.framework-tvOS - build OpenSSL.framework for tvOS
3
+ # - all - build everything
4
+ # - iOS - build everything for iOS
5
+ # - tvOS - build everything for tvOS
6
+ # - watchOS - build everything for watchOS
7
+ # - OpenSSL.framework-iOS - build OpenSSL.framework for iOS
8
+ # - OpenSSL.framework-tvOS - build OpenSSL.framework for tvOS
9
9
# - OpenSSL.framework-watchOS - build OpenSSL.framework for watchOS
10
- # - Python.framework-iOS - build Python.framework for iOS
11
- # - Python.framework-tvOS - build Python.framework for tvOS
12
- # - Python.framework-watchOS - build Python.framework for watchOS
13
- # - Python-host - build host python
10
+ # - BZip2-iOS - build BZip2 library for iOS
11
+ # - BZip2-tvOS - build BZip2 library for tvOS
12
+ # - BZip2-watchOS - build BZip2 library for watchOS
13
+ # - XZ-iOS - build XZ library for iOS
14
+ # - XZ-tvOS - build XZ library for tvOS
15
+ # - XZ-watchOS - build XZ library for watchOS
16
+ # - Python.framework-iOS - build Python.framework for iOS
17
+ # - Python.framework-tvOS - build Python.framework for tvOS
18
+ # - Python.framework-watchOS - build Python.framework for watchOS
19
+ # - Python-host - build host python
14
20
15
21
# Current director
16
22
PROJECT_DIR =$(shell pwd)
17
23
18
- BUILD_NUMBER =4
24
+ BUILD_NUMBER =5
19
25
20
26
# Version of packages that will be compiled by this meta-package
21
27
PYTHON_VERSION =3.4.2
22
- PYTHON_VER = $(basename $(PYTHON_VERSION ) )
28
+ PYTHON_VER = $(basename $(PYTHON_VERSION ) )
23
29
24
30
OPENSSL_VERSION_NUMBER =1.0.2
25
- OPENSSL_REVISION =e
31
+ OPENSSL_REVISION =f
26
32
OPENSSL_VERSION =$(OPENSSL_VERSION_NUMBER )$(OPENSSL_REVISION )
27
33
34
+ BZIP2_VERSION =1.0.6
35
+
36
+ XZ_VERSION =5.2.2
37
+
28
38
# Supported OS
29
- OS = iOS tvOS watchOS
39
+ OS = iOS tvOS watchOS
30
40
31
41
# iOS targets
32
42
TARGETS-iOS =iphonesimulator.x86_64 iphonesimulator.i386 iphoneos.armv7 iphoneos.armv7s iphoneos.arm64
33
43
CFLAGS-iOS=-miphoneos-version-min =7.0
34
- CFLAGS-iphoneos.armv7 = -fembed-bitcode
35
- CFLAGS-iphoneos.armv7s = -fembed-bitcode
36
- CFLAGS-iphoneos.arm64 = -fembed-bitcode
44
+ CFLAGS-iphoneos.armv7 = -fembed-bitcode
45
+ CFLAGS-iphoneos.armv7s = -fembed-bitcode
46
+ CFLAGS-iphoneos.arm64 = -fembed-bitcode
37
47
38
48
# tvOS targets
39
49
TARGETS-tvOS =appletvsimulator.x86_64 appletvos.arm64
40
50
CFLAGS-tvOS=-mtvos-version-min =9.0
41
- CFLAGS-appletvos.arm64 = -fembed-bitcode
42
- PYTHON_CONFIGURE-tvOS = ac_cv_func_sigaltstack=no
51
+ CFLAGS-appletvos.arm64 = -fembed-bitcode
52
+ PYTHON_CONFIGURE-tvOS = ac_cv_func_sigaltstack=no
43
53
44
54
# watchOS targets
45
55
TARGETS-watchOS =watchsimulator.i386 watchos.armv7k
46
56
CFLAGS-watchOS=-mwatchos-version-min =2.0
47
- CFLAGS-watchos.armv7k = -fembed-bitcode
57
+ CFLAGS-watchos.armv7k = -fembed-bitcode
48
58
PYTHON_CONFIGURE-watchOS=ac_cv_func_sigaltstack =no
49
59
50
- # override machine for arm64
51
- MACHINE-arm64 =aarch64
60
+ # override machine types for arm64
61
+ MACHINE_DETAILED-arm64 =aarch64
62
+ MACHINE_SIMPLE-arm64 =arm
52
63
53
64
all : $(foreach os,$(OS ) ,$(os ) )
54
65
60
71
distclean : clean
61
72
rm -rf downloads
62
73
63
- downloads : downloads/openssl-$(OPENSSL_VERSION ) .tgz downloads/Python-$(PYTHON_VERSION ) .tgz
74
+ downloads : downloads/openssl-$(OPENSSL_VERSION ) .tgz downloads/bzip2- $( BZIP2_VERSION ) .tgz downloads/xz- $( XZ_VERSION ) .tgz downloads/ Python-$(PYTHON_VERSION ) .tgz
64
75
65
76
# ##########################################################################
66
77
# OpenSSL
@@ -80,6 +91,35 @@ downloads/openssl-$(OPENSSL_VERSION).tgz:
80
91
-if [ ! -e downloads/openssl-$( OPENSSL_VERSION) .tgz ]; then curl --fail -L http://openssl.org/source/openssl-$(OPENSSL_VERSION ) .tar.gz -o downloads/openssl-$(OPENSSL_VERSION ) .tgz; fi
81
92
if [ ! -e downloads/openssl-$( OPENSSL_VERSION) .tgz ]; then curl --fail -L http://openssl.org/source/old/$( OPENSSL_VERSION_NUMBER) /openssl-$( OPENSSL_VERSION) .tar.gz -o downloads/openssl-$( OPENSSL_VERSION) .tgz; fi
82
93
94
+
95
+ # ##########################################################################
96
+ # BZip2
97
+ # ##########################################################################
98
+
99
+ # Clean the bzip2 project
100
+ clean-bzip2 :
101
+ rm -rf build/* /bzip2-$(BZIP2_VERSION ) -* \
102
+ build/* /bzip2
103
+
104
+ # Download original OpenSSL source code archive.
105
+ downloads/bzip2-$(BZIP2_VERSION ) .tgz :
106
+ mkdir -p downloads
107
+ if [ ! -e downloads/bzip2-$( BZIP2_VERSION) .tgz ]; then curl --fail -L http://www.bzip.org/$( BZIP2_VERSION) /bzip2-$( BZIP2_VERSION) .tar.gz -o downloads/bzip2-$( BZIP2_VERSION) .tgz; fi
108
+
109
+ # ##########################################################################
110
+ # XZ (LZMA)
111
+ # ##########################################################################
112
+
113
+ # Clean the XZ project
114
+ clean-xz :
115
+ rm -rf build/* /xz-$(XZ_VERSION ) -* \
116
+ build/* /xz
117
+
118
+ # Download original OpenSSL source code archive.
119
+ downloads/xz-$(XZ_VERSION ) .tgz :
120
+ mkdir -p downloads
121
+ if [ ! -e downloads/xz-$( XZ_VERSION) .tgz ]; then curl --fail -L http://tukaani.org/xz/xz-$( XZ_VERSION) .tar.gz -o downloads/xz-$( XZ_VERSION) .tgz; fi
122
+
83
123
# ##########################################################################
84
124
# Python
85
125
# ##########################################################################
@@ -121,20 +161,28 @@ $(PYTHON_DIR-host)/dist/bin/python$(PYTHON_VER): $(PYTHON_DIR-host)/Makefile
121
161
# - $2 - OS
122
162
define build-target
123
163
ARCH-$1= $$(subst .,,$$(suffix $1) )
124
- ifdef MACHINE-$$(ARCH-$1)
125
- MACHINE-$1 = $$(MACHINE-$$(ARCH-$1 ) )
164
+ ifdef MACHINE_DETAILED-$$(ARCH-$1)
165
+ MACHINE_DETAILED-$1 = $$(MACHINE_DETAILED-$$(ARCH-$1 ) )
166
+ else
167
+ MACHINE_DETAILED-$1 = $$(ARCH-$1 )
168
+ endif
169
+ ifdef MACHINE_SIMPLE-$$(ARCH-$1)
170
+ MACHINE_SIMPLE-$1 = $$(MACHINE_SIMPLE-$$(ARCH-$1 ) )
126
171
else
127
- MACHINE -$1 = $$(ARCH-$1 )
172
+ MACHINE_SIMPLE -$1 = $$(ARCH-$1 )
128
173
endif
129
- SDK-$1= $$(basename $1)
174
+ SDK-$1= $$(basename $1)
130
175
131
176
SDK_ROOT-$1= $$(shell xcrun --sdk $$(SDK-$1 ) --show-sdk-path)
132
- CC-$1= xcrun --sdk $$(SDK-$1 ) clang\
133
- -arch $$(ARCH-$1 ) --sysroot=$$(SDK_ROOT-$1 ) $$(CFLAGS-$2 ) $$(CFLAGS-$1 )
177
+ CC-$1= xcrun --sdk $$(SDK-$1 ) clang\
178
+ -arch $$(ARCH-$1 ) --sysroot=$$(SDK_ROOT-$1 ) $$(CFLAGS-$2 ) $$(CFLAGS-$1 )
179
+ LDFLAGS-$1= -arch $$(ARCH-$1 ) -isysroot=$$(SDK_ROOT-$1 )
134
180
135
- OPENSSL_DIR-$1= build/$2/openssl-$(OPENSSL_VERSION ) -$1
136
- PYTHON_DIR-$1= build/$2/Python-$(PYTHON_VERSION ) -$1
137
- pyconfig.h-$1= pyconfig-$$(ARCH-$1 ) .h
181
+ OPENSSL_DIR-$1= build/$2/openssl-$(OPENSSL_VERSION ) -$1
182
+ BZIP2_DIR-$1= build/$2/bzip2-$(BZIP2_VERSION ) -$1
183
+ XZ_DIR-$1= build/$2/xz-$(XZ_VERSION ) -$1
184
+ PYTHON_DIR-$1= build/$2/Python-$(PYTHON_VERSION ) -$1
185
+ pyconfig.h-$1= pyconfig-$$(ARCH-$1 ) .h
138
186
139
187
# Unpack OpenSSL
140
188
$$(OPENSSL_DIR-$1 ) /Makefile: downloads/openssl-$(OPENSSL_VERSION ) .tgz
@@ -167,6 +215,37 @@ $$(OPENSSL_DIR-$1)/libssl.a $$(OPENSSL_DIR-$1)/libcrypto.a: $$(OPENSSL_DIR-$1)/M
167
215
CROSS_SDK="$$(notdir $$(SDK_ROOT-$1 ) ) " \
168
216
make all
169
217
218
+ # Unpack BZip2
219
+ $$(BZIP2_DIR-$1 ) /Makefile: downloads/bzip2-$(BZIP2_VERSION ) .tgz
220
+ # Unpack sources
221
+ mkdir -p $$(BZIP2_DIR-$1 )
222
+ tar zxf downloads/bzip2-$(BZIP2_VERSION ) .tgz --strip-components 1 -C $$(BZIP2_DIR-$1 )
223
+ # Patch sources to use correct compiler
224
+ sed -ie 's# CC=gcc#CC=$$(CC-$1)#' $$(BZIP2_DIR-$1)/Makefile
225
+ # Patch sources to use correct install directory
226
+ sed -ie 's# PREFIX=/usr/local#PREFIX=$(PROJECT_DIR)/build/$2/bzip2#' $$(BZIP2_DIR-$1)/Makefile
227
+
228
+ # Build BZip2
229
+ $$(BZIP2_DIR-$1 ) /libbz2.a: $$(BZIP2_DIR-$1 ) /Makefile
230
+ cd $$(BZIP2_DIR-$1 ) && make install
231
+
232
+ # Unpack XZ
233
+ $$(XZ_DIR-$1 ) /Makefile: downloads/xz-$(XZ_VERSION ) .tgz
234
+ # Unpack sources
235
+ mkdir -p $$(XZ_DIR-$1 )
236
+ tar zxf downloads/xz-$(XZ_VERSION ) .tgz --strip-components 1 -C $$(XZ_DIR-$1 )
237
+ # Configure the build
238
+ cd $$(XZ_DIR-$1 ) && ./configure \
239
+ CC="$$(CC-$1 ) " \
240
+ LDFLAGS="$$(LDFLAGS-$1 ) " \
241
+ --disable-shared --enable-static \
242
+ --host=$$(MACHINE_SIMPLE-$1 ) -apple-darwin \
243
+ --prefix=$(PROJECT_DIR ) /build/$2/xz
244
+
245
+ # Build XZ
246
+ $$(XZ_DIR-$1 ) /src/liblzma/.libs/liblzma.a: $$(XZ_DIR-$1 ) /Makefile
247
+ cd $$(XZ_DIR-$1 ) && make && make install
248
+
170
249
# Unpack Python
171
250
$$(PYTHON_DIR-$1 ) /Makefile: downloads/Python-$(PYTHON_VERSION ) .tgz $(PYTHON_HOST )
172
251
# Unpack target Python
@@ -178,14 +257,14 @@ $$(PYTHON_DIR-$1)/Makefile: downloads/Python-$(PYTHON_VERSION).tgz $(PYTHON_HOST
178
257
# Configure target Python
179
258
cd $$(PYTHON_DIR-$1 ) && PATH=$(PROJECT_DIR ) /$(PYTHON_DIR-host ) /dist/bin:$(PATH ) ./configure \
180
259
CC="$$(CC-$1 ) " LD="$$(CC-$1 ) " \
181
- --host=$$(MACHINE -$1 ) -apple-ios --build=x86_64-apple-darwin$(shell uname -r) \
260
+ --host=$$(MACHINE_DETAILED -$1 ) -apple-ios --build=x86_64-apple-darwin$(shell uname -r) \
182
261
--prefix=$(PROJECT_DIR ) /$$(PYTHON_DIR-$1 ) /dist \
183
262
--without-pymalloc --without-doc-strings --disable-ipv6 --without-ensurepip \
184
263
ac_cv_file__dev_ptmx=no ac_cv_file__dev_ptc=no \
185
264
$$(PYTHON_CONFIGURE-$2 )
186
265
187
266
# Build Python
188
- $$(PYTHON_DIR-$1 ) /dist/lib/libpython$(PYTHON_VER ) .a: $$( PYTHON_DIR-$1 ) /Makefile build/$2/OpenSSL.framework
267
+ $$(PYTHON_DIR-$1 ) /dist/lib/libpython$(PYTHON_VER ) .a: build/$2/OpenSSL.framework build/$2/bzip2/lib/libbz2.a build/$2/xz/lib/liblzma.a $$( PYTHON_DIR-$1 ) /Makefile
189
268
# Build target Python
190
269
cd $$(PYTHON_DIR-$1 ) && PATH=$(PROJECT_DIR ) /$(PYTHON_DIR-host ) /dist/bin:$(PATH ) make all install
191
270
@@ -195,7 +274,7 @@ build/$2/$$(pyconfig.h-$1): $$(PYTHON_DIR-$1)/dist/include/python$(PYTHON_VER)/p
195
274
# Dump vars (for test)
196
275
vars-$1:
197
276
@echo "ARCH-$1: $$(ARCH-$1 ) "
198
- @echo "MACHINE -$1: $$(MACHINE -$1 ) "
277
+ @echo "MACHINE_DETAILED -$1: $$(MACHINE_DETAILED -$1 ) "
199
278
@echo "SDK-$1: $$(SDK-$1 ) "
200
279
@echo "SDK_ROOT-$1: $$(SDK_ROOT-$1 ) "
201
280
@echo "CC-$1: $$(CC-$1 ) "
@@ -216,7 +295,9 @@ endef
216
295
define build
217
296
$$(foreach target,$$(TARGETS-$1 ) ,$$(eval $$(call build-target,$$(target ) ,$1) ) )
218
297
219
- OPENSSL_FRAMEWORK-$1= build/$1/OpenSSL.framework
298
+ OPENSSL_FRAMEWORK-$1= build/$1/OpenSSL.framework
299
+ BZIP2_LIB-$1= build/$1/bzip2/lib/libbz2.a
300
+ XZ_LIB-$1= build/$1/xz/lib/liblzma.a
220
301
PYTHON_FRAMEWORK-$1= build/$1/Python.framework
221
302
PYTHON_RESOURCES-$1= $$(PYTHON_FRAMEWORK-$1 ) /Versions/$(PYTHON_VER ) /Resources
222
303
@@ -256,6 +337,18 @@ build/$1/libcrypto.a: $$(foreach target,$$(TARGETS-$1),$$(OPENSSL_DIR-$$(target)
256
337
mkdir -p build/$1
257
338
xcrun lipo -create -output $$@ $$^
258
339
340
+ BZip2-$1: $$(BZIP2_LIB-$1 )
341
+
342
+ build/$1/bzip2/lib/libbz2.a: $$(foreach target,$$(TARGETS-$1 ) ,$$(BZIP2_DIR-$$(target ) ) /libbz2.a)
343
+ mkdir -p build/$1/bzip2/lib
344
+ xcrun lipo -create -o $$(BZIP2_LIB-$1 ) $$^
345
+
346
+ XZ-$1: $$(XZ_LIB-$1 )
347
+
348
+ build/$1/xz/lib/liblzma.a: $$(foreach target,$$(TARGETS-$1 ) ,$$(XZ_DIR-$$(target ) ) /src/liblzma/.libs/liblzma.a)
349
+ mkdir -p build/$1/xz/lib
350
+ xcrun lipo -create -o $$(XZ_LIB-$1 ) $$^
351
+
259
352
Python.framework-$1: $$(PYTHON_FRAMEWORK-$1 )
260
353
261
354
# Build Python.framework
0 commit comments