Skip to content

Commit dfa1cc8

Browse files
committed
Add minizip and minizip-ng static dependency build and fetch support
1 parent 5e2ee2a commit dfa1cc8

19 files changed

Lines changed: 2487 additions & 0 deletions
Lines changed: 325 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,325 @@
1+
name: Build minizip-ng static libraries
2+
3+
on:
4+
workflow_call:
5+
inputs:
6+
zlib_ng_release_tag:
7+
required: false
8+
type: string
9+
workflow_dispatch:
10+
inputs:
11+
zlib_ng_release_tag:
12+
description: Optional zlib-ng release tag to use
13+
required: false
14+
type: string
15+
push:
16+
branches: [ master ]
17+
paths:
18+
- minizip-ng/**
19+
- zlib-ng/fetch.sh
20+
- .github/scripts/latest-release-tag.sh
21+
- .github/workflows/build-minizip-ng.yml
22+
pull_request:
23+
branches: [ master ]
24+
paths:
25+
- minizip-ng/**
26+
- zlib-ng/fetch.sh
27+
- .github/scripts/latest-release-tag.sh
28+
- .github/workflows/build-minizip-ng.yml
29+
30+
env:
31+
MINIZIP_NG_VERSION: 4.2.2
32+
ZLIB_NG_VERSION: 2.1.6
33+
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
34+
35+
jobs:
36+
prepare:
37+
name: Resolve zlib-ng release
38+
runs-on: ubuntu-24.04
39+
outputs:
40+
zlib_ng_release_tag: ${{ steps.release.outputs.zlib_ng_release_tag }}
41+
42+
steps:
43+
- name: Checkout source code
44+
uses: actions/checkout@v6
45+
46+
- name: Resolve zlib-ng release tag
47+
id: release
48+
env:
49+
REQUESTED_ZLIB_NG_RELEASE_TAG: ${{ inputs.zlib_ng_release_tag }}
50+
run: |
51+
if [ -n "${REQUESTED_ZLIB_NG_RELEASE_TAG}" ]; then
52+
zlib_ng_release_tag="${REQUESTED_ZLIB_NG_RELEASE_TAG}"
53+
else
54+
zlib_ng_release_tag="$(.github/scripts/latest-release-tag.sh zlib-ng "${ZLIB_NG_VERSION}")"
55+
fi
56+
57+
echo "Using zlib-ng release ${zlib_ng_release_tag}"
58+
echo "zlib_ng_release_tag=${zlib_ng_release_tag}" >> "$GITHUB_OUTPUT"
59+
60+
build-linux:
61+
name: Build ${{ matrix.platform_arch }}
62+
needs: prepare
63+
strategy:
64+
fail-fast: false
65+
matrix:
66+
include:
67+
- project: linux-amd64
68+
runner: ubuntu-22.04
69+
docker_platform: linux/amd64
70+
platform_arch: linux/x86_64
71+
zlib_platform: linux
72+
zlib_arch: x86_64
73+
use_qemu: false
74+
- project: linux-arm32v7
75+
runner: ubuntu-22.04
76+
docker_platform: linux/arm/v7
77+
platform_arch: linux/armv7l
78+
zlib_platform: linux
79+
zlib_arch: armv7l
80+
use_qemu: true
81+
- project: linux-arm64
82+
runner: ubuntu-22.04-arm
83+
docker_platform: linux/arm64
84+
platform_arch: linux/aarch64
85+
zlib_platform: linux
86+
zlib_arch: aarch64
87+
use_qemu: false
88+
89+
runs-on: ${{ matrix.runner }}
90+
91+
steps:
92+
- name: Checkout source code
93+
uses: actions/checkout@v6
94+
95+
- name: Allow multiarch
96+
if: ${{ matrix.use_qemu }}
97+
run: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
98+
99+
- name: Fetch zlib-ng prebuilts
100+
run: |
101+
bash zlib-ng/fetch.sh \
102+
--platform "${{ matrix.zlib_platform }}" \
103+
--arch "${{ matrix.zlib_arch }}" \
104+
--release-tag "${{ needs.prepare.outputs.zlib_ng_release_tag }}"
105+
106+
- name: Build static libraries
107+
run: |
108+
docker run \
109+
--platform ${{ matrix.docker_platform }} \
110+
-v "${PWD}:/sources" \
111+
-w /sources \
112+
-t totalcross/${{ matrix.project }}:v1.0.7 \
113+
bash -lc "
114+
cmake --version &&
115+
cmake -S /sources/minizip-ng -B /sources/minizip-ng/build/${{ matrix.project }} \
116+
-DCMAKE_BUILD_TYPE=Release \
117+
-DZLIB_DIR=/sources/zlib-ng/local/${{ matrix.zlib_platform }}/${{ matrix.zlib_arch }} \
118+
-G Ninja &&
119+
cmake --build /sources/minizip-ng/build/${{ matrix.project }} &&
120+
cmake --install /sources/minizip-ng/build/${{ matrix.project }} --prefix /sources/minizip-ng/build/${{ matrix.project }}/install &&
121+
bash /sources/minizip-ng/scripts/package-artifact.sh \
122+
/sources/minizip-ng/build/${{ matrix.project }} \
123+
/sources/minizip-ng/build/${{ matrix.project }}/install \
124+
${{ matrix.platform_arch }}
125+
"
126+
127+
- name: Upload artifact
128+
uses: actions/upload-artifact@v7
129+
with:
130+
name: minizip-ng-${{ matrix.project }}
131+
path: minizip-ng/build/${{ matrix.project }}/minizip-ng-*.tar.gz
132+
133+
build-windows:
134+
name: Build windows/${{ matrix.arch }}
135+
needs: prepare
136+
strategy:
137+
fail-fast: false
138+
matrix:
139+
include:
140+
- arch: x86
141+
runner: windows-2022
142+
cmake_platform: Win32
143+
- arch: x64
144+
runner: windows-2022
145+
cmake_platform: x64
146+
- arch: arm64
147+
runner: windows-11-arm
148+
cmake_platform: ARM64
149+
150+
runs-on: ${{ matrix.runner }}
151+
152+
steps:
153+
- name: Checkout source code
154+
uses: actions/checkout@v6
155+
156+
- name: Fetch zlib-ng prebuilts
157+
shell: bash
158+
run: |
159+
bash zlib-ng/fetch.sh \
160+
--platform windows \
161+
--arch ${{ matrix.arch }} \
162+
--release-tag "${{ needs.prepare.outputs.zlib_ng_release_tag }}"
163+
164+
- name: Build static libraries
165+
shell: bash
166+
run: |
167+
cmake -S minizip-ng -B minizip-ng/build/windows-${{ matrix.arch }} \
168+
-DCMAKE_BUILD_TYPE=Release \
169+
-DZLIB_DIR="$PWD/zlib-ng/local/windows/${{ matrix.arch }}" \
170+
-G "Visual Studio 17 2022" \
171+
-A ${{ matrix.cmake_platform }}
172+
cmake --build minizip-ng/build/windows-${{ matrix.arch }} --config Release
173+
cmake --install minizip-ng/build/windows-${{ matrix.arch }} --config Release --prefix minizip-ng/build/windows-${{ matrix.arch }}/install
174+
bash minizip-ng/scripts/package-artifact.sh minizip-ng/build/windows-${{ matrix.arch }} minizip-ng/build/windows-${{ matrix.arch }}/install windows/${{ matrix.arch }}
175+
176+
- name: Upload artifact
177+
uses: actions/upload-artifact@v7
178+
with:
179+
name: minizip-ng-windows-${{ matrix.arch }}
180+
path: minizip-ng/build/windows-${{ matrix.arch }}/minizip-ng-*.tar.gz
181+
182+
build-android:
183+
name: Build android/arm64-v8a
184+
needs: prepare
185+
runs-on: ubuntu-24.04
186+
187+
steps:
188+
- name: Checkout source code
189+
uses: actions/checkout@v6
190+
191+
- name: Setup Android SDK
192+
uses: android-actions/setup-android@v3
193+
with:
194+
packages: ''
195+
196+
- name: Install Android NDK
197+
run: sdkmanager "ndk;28.2.13676358" "cmake;3.22.1"
198+
199+
- name: Fetch zlib-ng prebuilts
200+
run: |
201+
bash zlib-ng/fetch.sh \
202+
--platform android \
203+
--arch arm64-v8a \
204+
--release-tag "${{ needs.prepare.outputs.zlib_ng_release_tag }}"
205+
206+
- name: Build static libraries
207+
run: |
208+
cmake -S minizip-ng -B minizip-ng/build/android-arm64-v8a \
209+
-DCMAKE_BUILD_TYPE=Release \
210+
-DZLIB_DIR="$PWD/zlib-ng/local/android/arm64-v8a" \
211+
-DCMAKE_TOOLCHAIN_FILE="${ANDROID_HOME}/ndk/28.2.13676358/build/cmake/android.toolchain.cmake" \
212+
-DANDROID_ABI=arm64-v8a \
213+
-DANDROID_PLATFORM=android-23 \
214+
-DANDROID_USE_LEGACY_TOOLCHAIN_FILE=OFF \
215+
-G Ninja
216+
cmake --build minizip-ng/build/android-arm64-v8a
217+
cmake --install minizip-ng/build/android-arm64-v8a --prefix minizip-ng/build/android-arm64-v8a/install
218+
bash minizip-ng/scripts/package-artifact.sh minizip-ng/build/android-arm64-v8a minizip-ng/build/android-arm64-v8a/install android/arm64-v8a
219+
220+
- name: Upload artifact
221+
uses: actions/upload-artifact@v7
222+
with:
223+
name: minizip-ng-android-arm64-v8a
224+
path: minizip-ng/build/android-arm64-v8a/minizip-ng-*.tar.gz
225+
226+
build-apple:
227+
name: Build ${{ matrix.platform }}/${{ matrix.arch }}
228+
needs: prepare
229+
strategy:
230+
fail-fast: false
231+
matrix:
232+
include:
233+
- platform: macos
234+
arch: arm64
235+
build_dir: macos-arm64
236+
cmake_generator: Ninja
237+
cmake_args: -DCMAKE_OSX_ARCHITECTURES=arm64
238+
- platform: ios
239+
arch: arm64
240+
build_dir: ios-arm64
241+
cmake_generator: Xcode
242+
cmake_args: -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphoneos -DCMAKE_OSX_ARCHITECTURES=arm64 -DCMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_ALLOWED=NO
243+
- platform: ios-simulator
244+
arch: arm64
245+
build_dir: ios-simulator-arm64
246+
cmake_generator: Xcode
247+
cmake_args: -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_SYSROOT=iphonesimulator -DCMAKE_OSX_ARCHITECTURES=arm64 -DCMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_ALLOWED=NO
248+
249+
runs-on: macos-15
250+
251+
steps:
252+
- name: Checkout source code
253+
uses: actions/checkout@v6
254+
255+
- name: Fetch zlib-ng prebuilts
256+
run: |
257+
bash zlib-ng/fetch.sh \
258+
--platform "${{ matrix.platform }}" \
259+
--arch "${{ matrix.arch }}" \
260+
--release-tag "${{ needs.prepare.outputs.zlib_ng_release_tag }}"
261+
262+
- name: Build static libraries
263+
run: |
264+
cmake -S minizip-ng -B minizip-ng/build/${{ matrix.build_dir }} \
265+
-DCMAKE_BUILD_TYPE=Release \
266+
-DZLIB_DIR="$PWD/zlib-ng/local/${{ matrix.platform }}/${{ matrix.arch }}" \
267+
${{ matrix.cmake_args }} \
268+
-G "${{ matrix.cmake_generator }}"
269+
cmake --build minizip-ng/build/${{ matrix.build_dir }} --config Release
270+
cmake --install minizip-ng/build/${{ matrix.build_dir }} --config Release --prefix minizip-ng/build/${{ matrix.build_dir }}/install
271+
bash minizip-ng/scripts/package-artifact.sh minizip-ng/build/${{ matrix.build_dir }} minizip-ng/build/${{ matrix.build_dir }}/install ${{ matrix.platform }}/${{ matrix.arch }}
272+
273+
- name: Upload artifact
274+
uses: actions/upload-artifact@v7
275+
with:
276+
name: minizip-ng-${{ matrix.build_dir }}
277+
path: minizip-ng/build/${{ matrix.build_dir }}/minizip-ng-*.tar.gz
278+
279+
package-ios:
280+
name: Package iOS XCFramework
281+
needs: build-apple
282+
runs-on: macos-15
283+
284+
steps:
285+
- name: Download iOS device artifact
286+
uses: actions/download-artifact@v7
287+
with:
288+
name: minizip-ng-ios-arm64
289+
path: package-input/ios
290+
291+
- name: Download iOS simulator artifact
292+
uses: actions/download-artifact@v7
293+
with:
294+
name: minizip-ng-ios-simulator-arm64
295+
path: package-input/ios-simulator
296+
297+
- name: Create XCFramework
298+
run: |
299+
mkdir -p package-work package-output
300+
tar -xzf package-input/ios/minizip-ng-ios-arm64.tar.gz -C package-work
301+
tar -xzf package-input/ios-simulator/minizip-ng-ios-simulator-arm64.tar.gz -C package-work
302+
303+
device_root="${PWD}/package-work/minizip-ng/ios/arm64"
304+
simulator_root="${PWD}/package-work/minizip-ng/ios-simulator/arm64"
305+
device_lib="$(find "${device_root}/lib" -type f \( -name "libminizip*.a" -o -name "minizip*.a" \) | head -n 1)"
306+
simulator_lib="$(find "${simulator_root}/lib" -type f \( -name "libminizip*.a" -o -name "minizip*.a" \) | head -n 1)"
307+
308+
if [ -z "${device_lib}" ] || [ -z "${simulator_lib}" ]; then
309+
echo "Unable to locate minizip-ng iOS static libraries" >&2
310+
exit 1
311+
fi
312+
313+
xcodebuild -create-xcframework \
314+
-library "${device_lib}" -headers "${device_root}/include" \
315+
-library "${simulator_lib}" -headers "${simulator_root}/include" \
316+
-output package-output/minizip-ng-ios.xcframework
317+
318+
cd package-output
319+
ditto -c -k --sequesterRsrc --keepParent minizip-ng-ios.xcframework minizip-ng-ios.xcframework.zip
320+
321+
- name: Upload XCFramework artifact
322+
uses: actions/upload-artifact@v7
323+
with:
324+
name: minizip-ng-ios-xcframework
325+
path: package-output/minizip-ng-ios.xcframework.zip

0 commit comments

Comments
 (0)