@@ -9,52 +9,33 @@ OPENSSL_VERSION_NUMBER=1.0.2
99OPENSSL_REVISION =d
1010OPENSSL_VERSION =$(OPENSSL_VERSION_NUMBER )$(OPENSSL_REVISION )
1111
12- # 32 bit iOS Simulator build commands and flags
13- IOS_SIMULATOR_SDK_ROOT =$(shell xcrun --sdk iphonesimulator --show-sdk-path)
14- IOS_SIMULATOR_CC =$(shell xcrun -find -sdk iphonesimulator clang) -arch i386 --sysroot=$(IOS_SIMULATOR_SDK_ROOT ) -miphoneos-version-min=7.0
12+ OS = iOS tvOS watchOS
13+ TARGETS-iOS = iphonesimulator.x86_64 iphonesimulator.i386\
14+ iphoneos.armv7 iphoneos.armv7s iphoneos.arm64
15+ CFLAGS-iOS = -miphoneos-version-min=7.0
16+ CFLAGS-iphoneos.armv7 = -fembed-bitcode
17+ CFLAGS-iphoneos.armv7s = -fembed-bitcode
18+ CFLAGS-iphoneos.arm64 = -fembed-bitcode
1519
16- # 64 bit iOS Simulator build commands and flags
17- IOS_SIMULATOR_64_SDK_ROOT = $( shell xcrun --sdk iphonesimulator --show-sdk-path)
18- IOS_SIMULATOR_64_CC = $( shell xcrun -find -sdk iphonesimulator clang) -arch x86_64 --sysroot= $( IOS_SIMULATOR_64_SDK_ROOT ) -miphoneos-version-min=7.0
20+ TARGETS-tvOS = appletvsimulator.x86_64 appletvos.arm64
21+ CFLAGS-tvOS = -mtvos-version-min=9.0
22+ CFLAGS-appletvos.arm64 = -fembed-bitcode
1923
20- # iOS ARMV7 build commands and flags
21- IOS_ARMV7_SDK_ROOT = $( shell xcrun --sdk iphoneos --show-sdk-path)
22- IOS_ARMV7_CC = $( shell xcrun -find -sdk iphoneos clang) -arch armv7 -fembed-bitcode --sysroot= $( IOS_ARMV7_SDK_ROOT ) -miphoneos-version-min=7.0
24+ TARGETS-watchOS = watchsimulator.i386 watchos.armv7k
25+ CFLAGS-watchOS = -mwatchos-version-min=2.0
26+ CFLAGS-watchos. armv7= -fembed-bitcode
2327
24- # iOS ARMV7S build commands and flags
25- IOS_ARMV7S_SDK_ROOT =$(shell xcrun --sdk iphoneos --show-sdk-path)
26- IOS_ARMV7S_CC =$(shell xcrun -find -sdk iphoneos clang) -arch armv7s -fembed-bitcode --sysroot=$(IOS_ARMV7S_SDK_ROOT ) -miphoneos-version-min=7.0
27-
28- # iOS ARM64 build commands and flags
29- IOS_ARM64_SDK_ROOT =$(shell xcrun --sdk iphoneos --show-sdk-path)
30- IOS_ARM64_CC =$(shell xcrun -find -sdk iphoneos clang) -arch arm64 -fembed-bitcode --sysroot=$(IOS_ARM64_SDK_ROOT ) -miphoneos-version-min=7.0
31-
32-
33- all : Python-$(PYTHON_VERSION ) -iOS-support.b$(BUILD_NUMBER ) .tar.gz
28+ all : $(foreach os,$(OS ) ,Python-$(PYTHON_VERSION ) -$(os ) -support.b$(BUILD_NUMBER ) .tar.gz)
3429
3530# Clean all builds
3631clean :
37- rm -rf build dist Python-$(PYTHON_VERSION ) -iOS -support.b$(BUILD_NUMBER ) .tar.gz
32+ rm -rf build dist $( foreach os, $( OS ) , Python-$(PYTHON_VERSION ) -$( os ) -support.b$(BUILD_NUMBER ) .tar.gz)
3833
3934# Full clean - includes all downloaded products
4035distclean : clean
4136 rm -rf downloads
4237
43- Python-$(PYTHON_VERSION ) -iOS-support.b$(BUILD_NUMBER ) .tar.gz : dist/OpenSSL.framework dist/Python.framework
44- cd dist && tar zcvf ../Python-$(PYTHON_VERSION ) -iOS-support.b$(BUILD_NUMBER ) .tar.gz Python.framework OpenSSL.framework
45-
46- # ##########################################################################
47- # Working directories
48- # ##########################################################################
49-
50- downloads :
51- mkdir -p downloads
52-
53- build :
54- mkdir -p build
55-
56- dist :
57- mkdir -p dist
38+ downloads : downloads/openssl-$(OPENSSL_VERSION ) .tgz downloads/Python-$(PYTHON_VERSION ) .tgz
5839
5940# ##########################################################################
6041# OpenSSL
@@ -64,183 +45,95 @@ dist:
6445
6546# Clean the OpenSSL project
6647clean-OpenSSL :
67- rm -rf build/openssl- $( OPENSSL_VERSION )
48+ rm -rf build/OpenSSL
6849 rm -rf dist/OpenSSL.framework
6950
7051# Download original OpenSSL source code archive.
71- downloads/openssl-$(OPENSSL_VERSION ) .tgz : downloads
52+ downloads/openssl-$(OPENSSL_VERSION ) .tgz :
53+ mkdir downloads
7254 -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
7355 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
7456
75- build/OpenSSL/ios-simulator-i386/libssl.a : build downloads/openssl-$(OPENSSL_VERSION ) .tgz
76- # Unpack sources
77- cd build && tar zxf ../downloads/openssl-$(OPENSSL_VERSION ) .tgz
78- cd build && mv openssl-$(OPENSSL_VERSION ) ios-simulator-i386
79- mkdir -p build/OpenSSL
80- cd build && mv ios-simulator-i386 OpenSSL
81- # Tweak the Makefile to include sysroot and iOS minimum version
82- cd build/OpenSSL/ios-simulator-i386 && \
83- sed -ie " s!^CFLAG=!CFLAG=-isysroot $( IOS_SIMULATOR_SDK_ROOT) -arch i386 -miphoneos-version-min=7.0 !" Makefile
84- # Configure the build
85- cd build/OpenSSL/ios-simulator-i386 && \
86- CC=" $( IOS_SIMULATOR_CC) " \
87- CROSS_TOP=" $( dir $( IOS_SIMULATOR_SDK_ROOT) ) .." \
88- CROSS_SDK=" $( notdir $( IOS_SIMULATOR_SDK_ROOT) ) " \
89- ./Configure iphoneos-cross --openssldir=$(PROJECTDIR ) /build/OpenSSL/ios-simulator-i386
90- # Make the build
91- cd build/OpenSSL/ios-simulator-i386 && \
92- CC=" $( IOS_SIMULATOR_CC) " \
93- CROSS_TOP=" $( dir $( IOS_SIMULATOR_SDK_ROOT) ) .." \
94- CROSS_SDK=" $( notdir $( IOS_SIMULATOR_SDK_ROOT) ) " \
95- make all
57+ define build-openssl-target
58+ ARCH-$1= $$(subst .,,$$(suffix $1) )
59+ SDK-$1= $$(basename $1)
9660
97- build/OpenSSL/ios-simulator-x86_64/libssl.a : build downloads/openssl-$(OPENSSL_VERSION ) .tgz
98- # Unpack sources
99- cd build && tar zxf ../downloads/openssl-$(OPENSSL_VERSION ) .tgz
100- cd build && mv openssl-$(OPENSSL_VERSION ) ios-simulator-x86_64
101- mkdir -p build/OpenSSL
102- cd build && mv ios-simulator-x86_64 OpenSSL
103- # Tweak the Makefile to include sysroot and iOS minimum version
104- cd build/OpenSSL/ios-simulator-x86_64 && \
105- sed -ie " s!^CFLAG=!CFLAG=-isysroot $( IOS_SIMULATOR_64_SDK_ROOT) -arch x86_64 -miphoneos-version-min=7.0 !" Makefile
106- # Configure the build
107- cd build/OpenSSL/ios-simulator-x86_64 && \
108- CC=" $( IOS_SIMULATOR_64_CC) " \
109- CROSS_TOP=" $( dir $( IOS_SIMULATOR_64_SDK_ROOT) ) .." \
110- CROSS_SDK=" $( notdir $( IOS_SIMULATOR_64_SDK_ROOT) ) " \
111- ./Configure darwin64-x86_64-cc --openssldir=$(PROJECTDIR ) /build/OpenSSL/ios-simulator-x86_64
112- # Make the build
113- cd build/OpenSSL/ios-simulator-x86_64 && \
114- CC=" $( IOS_SIMULATOR_64_CC) " \
115- CROSS_TOP=" $( dir $( IOS_SIMULATOR_64_SDK_ROOT) ) .." \
116- CROSS_SDK=" $( notdir $( IOS_SIMULATOR_64_SDK_ROOT) ) " \
117- make all
61+ SDK_ROOT-$1= $$(shell xcrun --sdk $$(SDK-$1 ) --show-sdk-path)
62+ CC-$1= $$(shell xcrun -find -sdk $$(SDK-$1 ) clang) \
63+ -arch $$(ARCH-$1 ) --sysroot=$$(SDK_ROOT-$1 ) $$(CFLAGS-$2 ) $$(CFLAGS-$1 )
11864
119- build/OpenSSL/ios-armv7/libssl.a : build downloads/openssl-$(OPENSSL_VERSION ) .tgz
65+ build/OpenSSL/$1/Makefile: downloads/openssl-$(OPENSSL_VERSION ) .tgz
12066 # Unpack sources
121- cd build && tar zxf ../downloads/openssl-$(OPENSSL_VERSION ) .tgz
122- cd build && mv openssl-$(OPENSSL_VERSION ) ios-armv7
123- mkdir -p build/OpenSSL
124- cd build && mv ios-armv7 OpenSSL
125- # Tweak the Makefile to include sysroot and iOS minimum version
126- cd build/OpenSSL/ios-armv7 && \
127- sed -ie " s!^CFLAG=!CFLAG=-isysroot $( IOS_ARMV7_SDK_ROOT) -arch armv7 -miphoneos-version-min=7.0 !" Makefile
67+ mkdir -p build/OpenSSL/$1
68+ tar zxf downloads/openssl-$(OPENSSL_VERSION ) .tgz --strip-components 1 -C build/OpenSSL/$1
69+ ifeq ($$(findstring simulator,$$(SDK-$1 ) ) ,)
12870 # Tweak ui_openssl.c
129- cd build/OpenSSL/ios-armv7 && \
130- sed -ie " s!static volatile sig_atomic_t intr_signal;!static volatile intr_signal;!" crypto/ui/ui_openssl.c
71+ sed -ie "s!static volatile sig_atomic_t intr_signal;!static volatile intr_signal;!" build/OpenSSL/$1/crypto/ui/ui_openssl.c
72+ endif
73+ ifeq ($$(findstring iphone,$$(SDK-$1 ) ) ,)
74+ # Patch apps/speed.c to not use fork() since it's not available on tvOS
75+ sed -ie 's/define HAVE_FORK 1/define HAVE_FORK 0/' build/OpenSSL/$1/apps/speed.c
76+ # Patch Configure to build for tvOS or watchOS, not iOS
77+ LANG=C sed -ie 's/-D_REENTRANT:iOS/-D_REENTRANT:$2/' build/OpenSSL/$1/Configure
78+ endif
13179 # Configure the build
132- cd build/OpenSSL/ios-armv7 && \
133- CC=" $( IOS_ARMV7_CC) " \
134- CROSS_TOP=" $( dir $( IOS_ARMV7_SDK_ROOT) ) .." \
135- CROSS_SDK=" $( notdir $( IOS_ARMV7_SDK_ROOT) ) " \
136- ./Configure iphoneos-cross --openssldir=$(PROJECTDIR ) /build/OpenSSL/ios-armv7
137- # Make the build
138- cd build/OpenSSL/ios-armv7 && \
139- CC=" $( IOS_ARMV7_CC) " \
140- CROSS_TOP=" $( dir $( IOS_ARMV7_SDK_ROOT) ) .." \
141- CROSS_SDK=" $( notdir $( IOS_ARMV7_SDK_ROOT) ) " \
142- make all
80+ cd build/OpenSSL/$1 && \
81+ CC="$$(CC-$1 ) " \
82+ CROSS_TOP="$$(dir $$(SDK_ROOT-$1 ) ) .." \
83+ CROSS_SDK="$$(notdir $$(SDK_ROOT-$1 ) ) " \
84+ ./Configure iphoneos-cross no-asm --openssldir=$(PROJECTDIR ) /build/OpenSSL/$1
14385
144- build/OpenSSL/ios-armv7s/libssl.a : build downloads/openssl-$(OPENSSL_VERSION ) .tgz
145- # Unpack sources
146- cd build && tar zxf ../downloads/openssl-$(OPENSSL_VERSION ) .tgz
147- cd build && mv openssl-$(OPENSSL_VERSION ) ios-armv7s
148- mkdir -p build/OpenSSL
149- cd build && mv ios-armv7s OpenSSL
150- # Tweak the Makefile to include sysroot and iOS minimum version
151- cd build/OpenSSL/ios-armv7s && \
152- sed -ie " s!^CFLAG=!CFLAG=-isysroot $( IOS_ARMV7S_SDK_ROOT) -arch armv7s -miphoneos-version-min=7.0 !" Makefile
153- # Tweak ui_openssl.c
154- cd build/OpenSSL/ios-armv7s && \
155- sed -ie " s!static volatile sig_atomic_t intr_signal;!static volatile intr_signal;!" crypto/ui/ui_openssl.c
156- # Configure the build
157- cd build/OpenSSL/ios-armv7s && \
158- CC=" $( IOS_ARMV7S_CC) " \
159- CROSS_TOP=" $( dir $( IOS_ARMV7S_SDK_ROOT) ) .." \
160- CROSS_SDK=" $( notdir $( IOS_ARMV7S_SDK_ROOT) ) " \
161- ./Configure iphoneos-cross --openssldir=$(PROJECTDIR ) /build/OpenSSL/ios-armv7s
86+ build/OpenSSL/$1/libssl.a build/OpenSSL/$1/libcrypto.a: build/OpenSSL/$1/Makefile
16287 # Make the build
163- cd build/OpenSSL/ios-armv7s && \
164- CC=" $( IOS_ARMV7S_CC ) " \
165- CROSS_TOP=" $( dir $( IOS_ARMV7S_SDK_ROOT ) ) .." \
166- CROSS_SDK=" $( notdir $( IOS_ARMV7S_SDK_ROOT ) ) " \
88+ cd build/OpenSSL/$1 && \
89+ CC="$$( CC-$1 ) " \
90+ CROSS_TOP="$$ (dir $$( SDK_ROOT-$1 ) ) .." \
91+ CROSS_SDK="$$ (notdir $$( SDK_ROOT-$1 ) ) " \
16792 make all
16893
169- build/OpenSSL/ios-arm64/libssl.a : build downloads/openssl-$(OPENSSL_VERSION ) .tgz
170- # Unpack sources
171- cd build && tar zxf ../downloads/openssl-$(OPENSSL_VERSION ) .tgz
172- cd build && mv openssl-$(OPENSSL_VERSION ) ios-arm64
173- mkdir -p build/OpenSSL
174- cd build && mv ios-arm64 OpenSSL
175- # Tweak the Makefile to include sysroot and iOS minimum version
176- cd build/OpenSSL/ios-arm64 && \
177- sed -ie " s!^CFLAG=!CFLAG=-isysroot $( IOS_ARM64_SDK_ROOT) -arch arm64 -miphoneos-version-min=7.0 !" Makefile
178- # Tweak ui_openssl.c
179- cd build/OpenSSL/ios-arm64 && \
180- sed -ie " s!static volatile sig_atomic_t intr_signal;!static volatile intr_signal;!" crypto/ui/ui_openssl.c
181- # Configure the build
182- cd build/OpenSSL/ios-arm64 && \
183- CC=" $( IOS_ARM64_CC) " \
184- CROSS_TOP=" $( dir $( IOS_ARM64_SDK_ROOT) ) .." \
185- CROSS_SDK=" $( notdir $( IOS_ARM64_SDK_ROOT) ) " \
186- ./Configure iphoneos-cross --openssldir=$(PROJECTDIR ) /build/OpenSSL/ios-arm64
187- # Make the build
188- cd build/OpenSSL/ios-arm64 && \
189- CC=" $( IOS_ARM64_CC) " \
190- CROSS_TOP=" $( dir $( IOS_ARM64_SDK_ROOT) ) .." \
191- CROSS_SDK=" $( notdir $( IOS_ARM64_SDK_ROOT) ) " \
192- make all
94+ vars-$1:
95+ @echo "ARCH-$1: $$(ARCH-$1 ) "
96+ @echo "SDK-$1: $$(SDK-$1 ) "
97+ @echo "SDK_ROOT-$1: $$(SDK_ROOT-$1 ) "
98+ @echo "CC-$1: $$(CC-$1 ) "
99+ endef
100+
101+ define build-openssl
102+ $$(foreach target,$$(TARGETS-$1 ) ,$$(eval $$(call build-openssl-target,$$(target ) ,$1) ) )
103+
104+ Python-$(PYTHON_VERSION ) -$1-support.b$(BUILD_NUMBER ) .tar.gz: dist/$1/OpenSSL.framework dist/$1/Python.framework
105+ tar zcvf $$@ -C dist/$1 Python.framework OpenSSL.framework
193106
194- build/OpenSSL/libssl.a : \
195- build/OpenSSL/ios-simulator-i386/libssl.a \
196- build/OpenSSL/ios-simulator-x86_64/libssl.a \
197- build/OpenSSL/ios-armv7/libssl.a \
198- build/OpenSSL/ios-armv7s/libssl.a \
199- build/OpenSSL/ios-arm64/libssl.a
200- cd build/OpenSSL && \
201- lipo -create \
202- ios-simulator-i386/libssl.a \
203- ios-simulator-x86_64/libssl.a \
204- ios-armv7/libssl.a \
205- ios-armv7s/libssl.a \
206- ios-arm64/libssl.a \
207- -output libssl.a
208-
209- build/OpenSSL/libcrypto.a : \
210- build/OpenSSL/ios-simulator-i386/libssl.a \
211- build/OpenSSL/ios-simulator-x86_64/libssl.a \
212- build/OpenSSL/ios-armv7/libssl.a \
213- build/OpenSSL/ios-armv7s/libssl.a \
214- build/OpenSSL/ios-arm64/libssl.a
215- cd build/OpenSSL && \
216- lipo -create \
217- ios-simulator-i386/libcrypto.a \
218- ios-simulator-x86_64/libcrypto.a \
219- ios-armv7/libcrypto.a \
220- ios-armv7s/libcrypto.a \
221- ios-arm64/libcrypto.a \
222- -output libcrypto.a
223-
224- dist/OpenSSL.framework : dist build/OpenSSL/libssl.a build/OpenSSL/libcrypto.a
107+ build/OpenSSL/$1/libssl.a: $$(foreach target,$$(TARGETS-$1 ) ,build/OpenSSL/$$(target ) /libssl.a)
108+ mkdir -p build/OpenSSL/$1
109+ lipo -create $$^ -output $$@
110+
111+ build/OpenSSL/$1/libcrypto.a: $$(foreach target,$$(TARGETS-$1 ) ,build/OpenSSL/$$(target ) /libcrypto.a)
112+ mkdir -p build/OpenSSL/$1
113+ lipo -create $$^ -output $$@
114+
115+ dist/$1/OpenSSL.framework: build/OpenSSL/$1/libssl.a build/OpenSSL/$1/libcrypto.a
225116 # Create framework directory structure
226- cd dist && mkdir -p OpenSSL.framework
227- cd dist && mkdir -p OpenSSL.framework/Versions/$(OPENSSL_VERSION ) /
228- cd dist/OpenSSL.framework/Versions && ln -fs $(OPENSSL_VERSION ) Current
117+ mkdir -p dist/$1/OpenSSL.framework/Versions/$(OPENSSL_VERSION )
118+ ln -fs $(OPENSSL_VERSION ) dist/$1/OpenSSL.framework/Versions/Current
229119
230- # Copy the headers (use the version from the x86_64 simulator because reasons)
231- cp -r build/OpenSSL/ios-simulator-x86_64 /include dist/OpenSSL.framework/Versions/Current/Headers
120+ # Copy the headers (use the version from the simulator because reasons)
121+ cp -r build/OpenSSL/$$( firstword $$( TARGETS-$1 ) ) /include dist/$1 /OpenSSL.framework/Versions/Current/Headers
232122
233123 # Link the current Headers to the top level
234- cd dist/OpenSSL.framework && ln -fs Versions/Current/Headers
124+ ln -fs Versions/Current/Headers dist/$1/OpenSSL.framework
235125
236126 # Create the fat library
237- libtool -no_warning_for_no_symbols -static \
238- -o dist/OpenSSL.framework/Versions/Current/OpenSSL \
239- build/OpenSSL/libcrypto.a \
240- build/OpenSSL/libssl.a
127+ $( shell xcrun -find libtool) -no_warning_for_no_symbols -static \
128+ -o dist/$1/ OpenSSL.framework/Versions/Current/OpenSSL \
129+ build/OpenSSL/$1/ libcrypto.a \
130+ build/OpenSSL/$1/ libssl.a
241131
242132 # Link the fat Library to the top level
243- cd dist/OpenSSL.framework && ln -fs Versions/Current/OpenSSL
133+ ln -fs Versions/Current/OpenSSL dist/$1/OpenSSL.framework
134+ endef
135+
136+ $(foreach os,$(OS),$(eval $(call build-openssl,$(os))))
244137
245138# ##########################################################################
246139# Python
@@ -253,18 +146,23 @@ clean-Python:
253146 rm -rf dist/Python.framework
254147
255148# Download original Python source code archive.
256- downloads/Python-$(PYTHON_VERSION ) .tgz : downloads
149+ downloads/Python-$(PYTHON_VERSION ) .tgz :
150+ mkdir downloads
257151 if [ ! -e downloads/Python-$( PYTHON_VERSION) .tgz ]; then curl -L https://www.python.org/ftp/python/$( PYTHON_VERSION) /Python-$( PYTHON_VERSION) .tgz > downloads/Python-$( PYTHON_VERSION) .tgz; fi
258152
259- # build/Python-$(PYTHON_VERSION)/Python.framework: build dist/OpenSSL.framework downloads/Python-$(PYTHON_VERSION).tgz
260- build/Python-$(PYTHON_VERSION ) /Python.framework : build downloads/Python-$(PYTHON_VERSION ) .tgz
153+ build/Python-$(PYTHON_VERSION ) /Makefile : downloads/Python-$(PYTHON_VERSION ) .tgz
261154 # Unpack sources
262- cd build && tar zxf ../downloads/Python-$(PYTHON_VERSION ) .tgz
155+ mkdir build
156+ tar zxf downloads/Python-$(PYTHON_VERSION ) .tgz -C build
263157 # Apply patches
264158 cd build/Python-$(PYTHON_VERSION ) && patch -p1 < ../../patch/Python/Python.patch
265159 cd build/Python-$(PYTHON_VERSION ) && cp ../../patch/Python/Setup.embedded Modules/Setup.embedded
160+
161+ # build/Python-$(PYTHON_VERSION)/Python.framework: dist/OpenSSL.framework build/Python-$(PYTHON_VERSION)/Makefile
162+ build/Python-$(PYTHON_VERSION ) /iOS/Python.framework : build/Python-$(PYTHON_VERSION ) /Makefile
266163 # Configure and make the build
267164 cd build/Python-$(PYTHON_VERSION ) /iOS && make
268165
269- dist/Python.framework : dist build/Python-$(PYTHON_VERSION ) /Python.framework
270- cd dist && mv ../build/Python-$(PYTHON_VERSION ) /Python.framework .
166+ dist/Python.framework : build/Python-$(PYTHON_VERSION ) /Python.framework
167+ mkdir dist
168+ mv build/Python-$(PYTHON_VERSION ) /Python.framework dist
0 commit comments