Skip to content

Commit 6ae360c

Browse files
authored
Restore flag to generate static or dynamic framework (#74)
1 parent 93a0550 commit 6ae360c

File tree

5 files changed

+123
-87
lines changed

5 files changed

+123
-87
lines changed

.github/workflows/release.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ jobs:
1717
- uses: maxim-lobanov/setup-xcode@v1
1818
with:
1919
xcode-version: 26
20-
- uses: passepartoutvpn/action-release-binary-package@master
20+
- uses: partout-io/action-release-binary-package@master
2121
with:
2222
script: "ci-generate.sh"
2323
framework: "openssl.xcframework"

.version

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
3.5.4-0
1+
3.5.4-1

ci-generate.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,6 @@ FW_PATH="$2"
44

55
echo "Compiling OpenSSL $OPENSSL_VERSION"
66
./build-libssl.sh --cleanup --version="$OPENSSL_VERSION"
7-
./create-openssl-framework.sh
7+
./create-openssl-framework.sh dynamic
88

99
mv frameworks/openssl.xcframework "$FW_PATH"

create-openssl-framework.sh

Lines changed: 118 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,17 @@ source scripts/get-openssl-version.sh
33

44
set -euo pipefail
55

6+
if [ $# == 0 ]; then
7+
echo "Usage: `basename $0` static|dynamic"
8+
exit 1
9+
fi
10+
611
if [ ! -d lib ]; then
712
echo "Please run build-libssl.sh first!"
813
exit 1
914
fi
1015

16+
FWTYPE=$1
1117
FWNAME=openssl
1218
FWROOT=frameworks
1319

@@ -89,99 +95,128 @@ function get_openssl_version_from_file() {
8995
echo $(get_openssl_version $std_version)
9096
}
9197

92-
DEVELOPER=`xcode-select -print-path`
93-
FW_EXEC_NAME="${FWNAME}.framework/${FWNAME}"
94-
INSTALL_NAME="@rpath/${FW_EXEC_NAME}"
95-
COMPAT_VERSION="1.0.0"
96-
CURRENT_VERSION="1.0.0"
98+
if [ $FWTYPE == "dynamic" ]; then
99+
DEVELOPER=`xcode-select -print-path`
100+
FW_EXEC_NAME="${FWNAME}.framework/${FWNAME}"
101+
INSTALL_NAME="@rpath/${FW_EXEC_NAME}"
102+
COMPAT_VERSION="1.0.0"
103+
CURRENT_VERSION="1.0.0"
97104

98-
RX='([A-z]+)([0-9]+(\.[0-9]+)*)-([A-z0-9_]+)\.sdk'
105+
RX='([A-z]+)([0-9]+(\.[0-9]+)*)-([A-z0-9_]+)\.sdk'
99106

100-
cd bin
101-
for TARGETDIR in `ls -d *.sdk`; do
102-
if [[ $TARGETDIR =~ $RX ]]; then
103-
PLATFORM="${BASH_REMATCH[1]}"
104-
SDKVERSION="${BASH_REMATCH[2]}"
105-
ARCH="${BASH_REMATCH[4]}"
106-
fi
107+
cd bin
108+
for TARGETDIR in `ls -d *.sdk`; do
109+
if [[ $TARGETDIR =~ $RX ]]; then
110+
PLATFORM="${BASH_REMATCH[1]}"
111+
SDKVERSION="${BASH_REMATCH[2]}"
112+
ARCH="${BASH_REMATCH[4]}"
113+
fi
107114

108-
echo "Assembling .dylib for $PLATFORM $SDKVERSION ($ARCH)"
109-
110-
MIN_SDK_VERSION=$(get_min_sdk "${TARGETDIR}/lib/libcrypto.a")
111-
if [[ $PLATFORM == AppleTVSimulator* ]]; then
112-
MIN_SDK="-platform_version tvos-simulator $MIN_SDK_VERSION $SDKVERSION"
113-
elif [[ $PLATFORM == AppleTV* ]]; then
114-
MIN_SDK="-platform_version tvos $MIN_SDK_VERSION $SDKVERSION"
115-
elif [[ $PLATFORM == MacOSX* ]]; then
116-
MIN_SDK="-platform_version macos $MIN_SDK_VERSION $SDKVERSION"
117-
elif [[ $PLATFORM == Catalyst* ]]; then
118-
MIN_SDK="-platform_version mac-catalyst $MIN_SDK_VERSION $SDKVERSION"
119-
PLATFORM="MacOSX"
120-
elif [[ $PLATFORM == iPhoneSimulator* ]]; then
121-
MIN_SDK="-platform_version ios-simulator $MIN_SDK_VERSION $SDKVERSION"
122-
elif [[ $PLATFORM == WatchOS* ]]; then
123-
MIN_SDK="-platform_version watchos $MIN_SDK_VERSION $SDKVERSION"
124-
elif [[ $PLATFORM == WatchSimulator* ]]; then
125-
MIN_SDK="-platform_version watchos-simulator $MIN_SDK_VERSION $SDKVERSION"
126-
elif [[ $PLATFORM == XRSimulator* ]]; then
127-
MIN_SDK="-platform_version xros-simulator $MIN_SDK_VERSION $SDKVERSION"
128-
elif [[ $PLATFORM == XR* ]]; then
129-
MIN_SDK="-platform_version xros $MIN_SDK_VERSION $SDKVERSION"
130-
else
131-
MIN_SDK="-platform_version ios $MIN_SDK_VERSION $SDKVERSION"
132-
fi
115+
echo "Assembling .dylib for $PLATFORM $SDKVERSION ($ARCH)"
133116

134-
CROSS_TOP="${DEVELOPER}/Platforms/${PLATFORM}.platform/Developer"
135-
CROSS_SDK="${PLATFORM}${SDKVERSION}.sdk"
136-
SDK="${CROSS_TOP}/SDKs/${CROSS_SDK}"
117+
MIN_SDK_VERSION=$(get_min_sdk "${TARGETDIR}/lib/libcrypto.a")
118+
if [[ $PLATFORM == AppleTVSimulator* ]]; then
119+
MIN_SDK="-platform_version tvos-simulator $MIN_SDK_VERSION $SDKVERSION"
120+
elif [[ $PLATFORM == AppleTV* ]]; then
121+
MIN_SDK="-platform_version tvos $MIN_SDK_VERSION $SDKVERSION"
122+
elif [[ $PLATFORM == MacOSX* ]]; then
123+
MIN_SDK="-platform_version macos $MIN_SDK_VERSION $SDKVERSION"
124+
elif [[ $PLATFORM == Catalyst* ]]; then
125+
MIN_SDK="-platform_version mac-catalyst $MIN_SDK_VERSION $SDKVERSION"
126+
PLATFORM="MacOSX"
127+
elif [[ $PLATFORM == iPhoneSimulator* ]]; then
128+
MIN_SDK="-platform_version ios-simulator $MIN_SDK_VERSION $SDKVERSION"
129+
elif [[ $PLATFORM == WatchOS* ]]; then
130+
MIN_SDK="-platform_version watchos $MIN_SDK_VERSION $SDKVERSION"
131+
elif [[ $PLATFORM == WatchSimulator* ]]; then
132+
MIN_SDK="-platform_version watchos-simulator $MIN_SDK_VERSION $SDKVERSION"
133+
elif [[ $PLATFORM == XRSimulator* ]]; then
134+
MIN_SDK="-platform_version xros-simulator $MIN_SDK_VERSION $SDKVERSION"
135+
elif [[ $PLATFORM == XR* ]]; then
136+
MIN_SDK="-platform_version xros $MIN_SDK_VERSION $SDKVERSION"
137+
else
138+
MIN_SDK="-platform_version ios $MIN_SDK_VERSION $SDKVERSION"
139+
fi
137140

138-
TARGETOBJ="${TARGETDIR}/obj"
139-
rm -rf $TARGETOBJ
140-
mkdir $TARGETOBJ
141-
cd $TARGETOBJ
142-
ar -x ../lib/libcrypto.a
143-
ar -x ../lib/libssl.a
144-
cd ..
141+
CROSS_TOP="${DEVELOPER}/Platforms/${PLATFORM}.platform/Developer"
142+
CROSS_SDK="${PLATFORM}${SDKVERSION}.sdk"
143+
SDK="${CROSS_TOP}/SDKs/${CROSS_SDK}"
144+
145+
TARGETOBJ="${TARGETDIR}/obj"
146+
rm -rf $TARGETOBJ
147+
mkdir $TARGETOBJ
148+
cd $TARGETOBJ
149+
ar -x ../lib/libcrypto.a
150+
ar -x ../lib/libssl.a
151+
cd ..
145152

146-
ld obj/*.o \
147-
-dylib \
148-
-lSystem \
149-
-arch $ARCH \
150-
$MIN_SDK \
151-
-syslibroot $SDK \
152-
-compatibility_version $COMPAT_VERSION \
153-
-current_version $CURRENT_VERSION \
154-
-application_extension \
155-
-o $FWNAME.dylib
156-
install_name_tool -id $INSTALL_NAME $FWNAME.dylib
153+
ld obj/*.o \
154+
-dylib \
155+
-lSystem \
156+
-arch $ARCH \
157+
$MIN_SDK \
158+
-syslibroot $SDK \
159+
-compatibility_version $COMPAT_VERSION \
160+
-current_version $CURRENT_VERSION \
161+
-application_extension \
162+
-o $FWNAME.dylib
163+
install_name_tool -id $INSTALL_NAME $FWNAME.dylib
157164

165+
cd ..
166+
done
158167
cd ..
159-
done
160-
cd ..
161168

162-
for SYS in ${ALL_SYSTEMS[@]}; do
163-
SYSDIR="$FWROOT/$SYS"
164-
FWDIR="$SYSDIR/$FWNAME.framework"
165-
DYLIBS=(bin/${SYS}*/$FWNAME.dylib)
166-
167-
if [[ ${#DYLIBS[@]} -gt 0 && -e ${DYLIBS[0]} ]]; then
168-
echo "Creating framework for $SYS"
169-
mkdir -p $FWDIR/Headers
170-
lipo -create ${DYLIBS[@]} -output $FWDIR/$FWNAME
171-
cp -r include/$FWNAME/* $FWDIR/Headers/
172-
cp -L assets/$SYS/Info.plist $FWDIR/Info.plist
173-
MIN_SDK_VERSION=$(get_min_sdk "$FWDIR/$FWNAME")
174-
OPENSSL_VERSION=$(get_openssl_version_from_file "$FWDIR/Headers/opensslv.h")
175-
sed -e "s/\\\$(MIN_SDK_VERSION)/$MIN_SDK_VERSION/g" \
176-
-e "s/\\\$(OPENSSL_VERSION)/$OPENSSL_VERSION/g" \
177-
-i '' "$FWDIR/Info.plist"
178-
echo "Created $FWDIR"
179-
else
180-
echo "Skipped framework for $SYS"
181-
fi
182-
done
169+
for SYS in ${ALL_SYSTEMS[@]}; do
170+
SYSDIR="$FWROOT/$SYS"
171+
FWDIR="$SYSDIR/$FWNAME.framework"
172+
DYLIBS=(bin/${SYS}*/$FWNAME.dylib)
173+
174+
if [[ ${#DYLIBS[@]} -gt 0 && -e ${DYLIBS[0]} ]]; then
175+
echo "Creating framework for $SYS"
176+
mkdir -p $FWDIR/Headers
177+
lipo -create ${DYLIBS[@]} -output $FWDIR/$FWNAME
178+
cp -r include/$FWNAME/* $FWDIR/Headers/
179+
cp -L assets/$SYS/Info.plist $FWDIR/Info.plist
180+
MIN_SDK_VERSION=$(get_min_sdk "$FWDIR/$FWNAME")
181+
OPENSSL_VERSION=$(get_openssl_version_from_file "$FWDIR/Headers/opensslv.h")
182+
sed -e "s/\\\$(MIN_SDK_VERSION)/$MIN_SDK_VERSION/g" \
183+
-e "s/\\\$(OPENSSL_VERSION)/$OPENSSL_VERSION/g" \
184+
-i '' "$FWDIR/Info.plist"
185+
echo "Created $FWDIR"
186+
else
187+
echo "Skipped framework for $SYS"
188+
fi
189+
done
183190

184-
rm bin/*/$FWNAME.dylib
191+
rm bin/*/$FWNAME.dylib
192+
else
193+
for SYS in ${ALL_SYSTEMS[@]}; do
194+
SYSDIR="$FWROOT/$SYS"
195+
FWDIR="$SYSDIR/$FWNAME.framework"
196+
LIBS_CRYPTO=(bin/${SYS}*/lib/libcrypto.a)
197+
LIBS_SSL=(bin/${SYS}*/lib/libssl.a)
198+
199+
if [[ ${#LIBS_CRYPTO[@]} -gt 0 && -e ${LIBS_CRYPTO[0]} && ${#LIBS_SSL[@]} -gt 0 && -e ${LIBS_SSL[0]} ]]; then
200+
echo "Creating framework for $SYS"
201+
mkdir -p $FWDIR/lib
202+
lipo -create ${LIBS_CRYPTO[@]} -output $FWDIR/lib/libcrypto.a
203+
lipo -create ${LIBS_SSL[@]} -output $FWDIR/lib/libssl.a
204+
libtool -static -o $FWDIR/$FWNAME $FWDIR/lib/*.a
205+
rm -rf $FWDIR/lib
206+
mkdir -p $FWDIR/Headers
207+
cp -r include/$FWNAME/* $FWDIR/Headers/
208+
cp -L assets/$SYS/Info.plist $FWDIR/Info.plist
209+
MIN_SDK_VERSION=$(get_min_sdk "$FWDIR/$FWNAME")
210+
OPENSSL_VERSION=$(get_openssl_version_from_file "$FWDIR/Headers/opensslv.h")
211+
sed -e "s/\\\$(MIN_SDK_VERSION)/$MIN_SDK_VERSION/g" \
212+
-e "s/\\\$(OPENSSL_VERSION)/$OPENSSL_VERSION/g" \
213+
-i '' "$FWDIR/Info.plist"
214+
echo "Created $FWDIR"
215+
else
216+
echo "Skipped framework for $SYS"
217+
fi
218+
done
219+
fi
185220

186221
# macOS and Catalyst symlinks
187222
for SYS in ${ALL_SYSTEMS[@]}; do

scripts/build-loop-targets.sh

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,8 @@ do
9191
# Add build target, --prefix and prevent async (references to getcontext(),
9292
# setcontext() and makecontext() result in App Store rejections) and creation
9393
# of shared libraries (default since 1.1.0)
94-
LOCAL_CONFIG_OPTIONS="${TARGET} --prefix=${TARGETDIR} ${CONFIG_OPTIONS} no-async no-shared"
94+
LOCAL_CONFIG_OPTIONS="${TARGET} --prefix=${TARGETDIR} ${CONFIG_OPTIONS} no-apps no-async no-docs no-dsa no-engine no-gost no-legacy no-shared no-ssl no-tests no-zlib"
95+
9596

9697
# Only relevant for 64 bit builds
9798
if [[ "${CONFIG_ENABLE_EC_NISTP_64_GCC_128}" == "true" && "${ARCH}" == *64 ]]; then

0 commit comments

Comments
 (0)