11#
22# 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
99# - 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
1420
1521# Current director
1622PROJECT_DIR =$(shell pwd)
1723
18- BUILD_NUMBER =4
24+ BUILD_NUMBER =5
1925
2026# Version of packages that will be compiled by this meta-package
2127PYTHON_VERSION =3.4.2
22- PYTHON_VER = $(basename $(PYTHON_VERSION ) )
28+ PYTHON_VER = $(basename $(PYTHON_VERSION ) )
2329
2430OPENSSL_VERSION_NUMBER =1.0.2
25- OPENSSL_REVISION =e
31+ OPENSSL_REVISION =f
2632OPENSSL_VERSION =$(OPENSSL_VERSION_NUMBER )$(OPENSSL_REVISION )
2733
34+ BZIP2_VERSION =1.0.6
35+
36+ XZ_VERSION =5.2.2
37+
2838# Supported OS
29- OS = iOS tvOS watchOS
39+ OS = iOS tvOS watchOS
3040
3141# iOS targets
3242TARGETS-iOS =iphonesimulator.x86_64 iphonesimulator.i386 iphoneos.armv7 iphoneos.armv7s iphoneos.arm64
3343CFLAGS-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
3747
3848# tvOS targets
3949TARGETS-tvOS =appletvsimulator.x86_64 appletvos.arm64
4050CFLAGS-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
4353
4454# watchOS targets
4555TARGETS-watchOS =watchsimulator.i386 watchos.armv7k
4656CFLAGS-watchOS=-mwatchos-version-min =2.0
47- CFLAGS-watchos.armv7k = -fembed-bitcode
57+ CFLAGS-watchos.armv7k = -fembed-bitcode
4858PYTHON_CONFIGURE-watchOS=ac_cv_func_sigaltstack =no
4959
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
5263
5364all : $(foreach os,$(OS ) ,$(os ) )
5465
6071distclean : clean
6172 rm -rf downloads
6273
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
6475
6576# ##########################################################################
6677# OpenSSL
@@ -80,6 +91,35 @@ downloads/openssl-$(OPENSSL_VERSION).tgz:
8091 -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
8192 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
8293
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+
83123# ##########################################################################
84124# Python
85125# ##########################################################################
@@ -121,20 +161,28 @@ $(PYTHON_DIR-host)/dist/bin/python$(PYTHON_VER): $(PYTHON_DIR-host)/Makefile
121161# - $2 - OS
122162define build-target
123163ARCH-$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 ) )
126171else
127- MACHINE -$1 = $$(ARCH-$1 )
172+ MACHINE_SIMPLE -$1 = $$(ARCH-$1 )
128173endif
129- SDK-$1= $$(basename $1)
174+ SDK-$1= $$(basename $1)
130175
131176SDK_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 )
134180
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
138186
139187# Unpack OpenSSL
140188$$(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
167215 CROSS_SDK="$$(notdir $$(SDK_ROOT-$1 ) ) " \
168216 make all
169217
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+
170249# Unpack Python
171250$$(PYTHON_DIR-$1 ) /Makefile: downloads/Python-$(PYTHON_VERSION ) .tgz $(PYTHON_HOST )
172251 # Unpack target Python
@@ -178,14 +257,14 @@ $$(PYTHON_DIR-$1)/Makefile: downloads/Python-$(PYTHON_VERSION).tgz $(PYTHON_HOST
178257 # Configure target Python
179258 cd $$(PYTHON_DIR-$1 ) && PATH=$(PROJECT_DIR ) /$(PYTHON_DIR-host ) /dist/bin:$(PATH ) ./configure \
180259 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) \
182261 --prefix=$(PROJECT_DIR ) /$$(PYTHON_DIR-$1 ) /dist \
183262 --without-pymalloc --without-doc-strings --disable-ipv6 --without-ensurepip \
184263 ac_cv_file__dev_ptmx=no ac_cv_file__dev_ptc=no \
185264 $$(PYTHON_CONFIGURE-$2 )
186265
187266# 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
189268 # Build target Python
190269 cd $$(PYTHON_DIR-$1 ) && PATH=$(PROJECT_DIR ) /$(PYTHON_DIR-host ) /dist/bin:$(PATH ) make all install
191270
@@ -195,7 +274,7 @@ build/$2/$$(pyconfig.h-$1): $$(PYTHON_DIR-$1)/dist/include/python$(PYTHON_VER)/p
195274# Dump vars (for test)
196275vars-$1:
197276 @echo "ARCH-$1: $$(ARCH-$1 ) "
198- @echo "MACHINE -$1: $$(MACHINE -$1 ) "
277+ @echo "MACHINE_DETAILED -$1: $$(MACHINE_DETAILED -$1 ) "
199278 @echo "SDK-$1: $$(SDK-$1 ) "
200279 @echo "SDK_ROOT-$1: $$(SDK_ROOT-$1 ) "
201280 @echo "CC-$1: $$(CC-$1 ) "
@@ -216,7 +295,9 @@ endef
216295define build
217296$$(foreach target,$$(TARGETS-$1 ) ,$$(eval $$(call build-target,$$(target ) ,$1) ) )
218297
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
220301PYTHON_FRAMEWORK-$1= build/$1/Python.framework
221302PYTHON_RESOURCES-$1= $$(PYTHON_FRAMEWORK-$1 ) /Versions/$(PYTHON_VER ) /Resources
222303
@@ -256,6 +337,18 @@ build/$1/libcrypto.a: $$(foreach target,$$(TARGETS-$1),$$(OPENSSL_DIR-$$(target)
256337 mkdir -p build/$1
257338 xcrun lipo -create -output $$@ $$^
258339
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+
259352Python.framework-$1: $$(PYTHON_FRAMEWORK-$1 )
260353
261354# Build Python.framework
0 commit comments