Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
106 changes: 82 additions & 24 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,6 @@ jobs:
files: "${{ github.workspace }}/artifacts/libsimple-windows-${{ matrix.arch }}.zip"
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
BUILD_TYPE: ${{ github.ref_type == 'tag' && 'Release' || 'Debug' }}

Linux:
runs-on: ${{ matrix.os }}
Expand All @@ -147,14 +146,9 @@ jobs:
matrix:
os: [ubuntu-22.04, ubuntu-24.04-arm, ubuntu-latest]
timeout-minutes: 60
env:
BUILD_TYPE: ${{ startsWith(github.ref, 'refs/tags/') && 'Release' || 'Debug' }}
steps:
- name: "Release Build Type"
if: startsWith(github.ref, 'refs/tags/')
run: echo "BUILD_TYPE=Release" >> $GITHUB_ENV
- name: "Debug Build Type"
if: startsWith(github.ref, 'refs/tags/') != true
run: echo "BUILD_TYPE=Debug" >> $GITHUB_ENV

- uses: actions/checkout@v6
with:
fetch-depth: 0
Expand Down Expand Up @@ -187,15 +181,8 @@ jobs:
uses: lukka/run-cmake@v10
continue-on-error: false
with:
configurePreset: 'ninja-vcpkg-coverage'
buildPreset: 'ninja-vcpkg-coverage'

- name: 'Run CMake without coverage'
if: startsWith(github.ref, 'refs/tags/')
uses: lukka/run-cmake@v10
with:
configurePreset: 'ninja-vcpkg-release'
buildPreset: 'ninja-vcpkg-release'
configurePreset: ${{ startsWith(github.ref, 'refs/tags/') && 'ninja-vcpkg-release' || 'ninja-vcpkg-coverage' }}
buildPreset: ${{ startsWith(github.ref, 'refs/tags/') && 'ninja-vcpkg-release' || 'ninja-vcpkg-coverage' }}

- name: 'Run CTest'
if: ${{ startsWith(github.ref, 'refs/tags/') != true && matrix.os == 'ubuntu-latest' }}
Expand Down Expand Up @@ -292,14 +279,9 @@ jobs:
MacOS:
runs-on: macos-latest
needs: Linux
env:
BUILD_TYPE: ${{ startsWith(github.ref, 'refs/tags/') && 'Release' || 'Debug' }}
steps:
- name: "Release Build Type"
if: startsWith(github.ref, 'refs/tags/')
run: echo "BUILD_TYPE=Release" >> $GITHUB_ENV
- name: "Debug Build Type"
if: startsWith(github.ref, 'refs/tags/') != true
run: echo "BUILD_TYPE=Debug" >> $GITHUB_ENV

- uses: actions/checkout@v6
with:
submodules: true
Expand Down Expand Up @@ -380,3 +362,79 @@ jobs:
- name: build-iOS
if: success()
run: ./build-ios.sh

- name: Package iOS
if: startsWith(github.ref, 'refs/tags/')
run: |
mkdir libsimple-ios-xcframework
cp -r output/libsimple.xcframework output/dict libsimple-ios-xcframework/
zip -r libsimple-ios-xcframework.zip libsimple-ios-xcframework
working-directory: "${{ github.workspace }}"

- name: Release iOS
if: startsWith(github.ref, 'refs/tags/')
uses: softprops/action-gh-release@v2
with:
draft: true
files: "${{ github.workspace }}/libsimple-ios-xcframework.zip"
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

Android:
runs-on: ubuntu-latest
needs: Linux
strategy:
fail-fast: true
matrix:
abi: [arm64-v8a, x86_64]
steps:
- uses: actions/checkout@v6
with:
submodules: true

- name: Resolve Android NDK
run: |
if [ -z "${ANDROID_NDK_LATEST_HOME:-}" ]; then
echo "ANDROID_NDK_LATEST_HOME is not available on this runner." >&2
exit 1
fi
echo "ANDROID_NDK_HOME=${ANDROID_NDK_LATEST_HOME}" >> "$GITHUB_ENV"

- name: Configure Android
run: |
cmake -S "${{ github.workspace }}" -B "${{ github.workspace }}/build-android-${{ matrix.abi }}" \
-DCMAKE_TOOLCHAIN_FILE="${ANDROID_NDK_HOME}/build/cmake/android.toolchain.cmake" \
-DANDROID_ABI="${{ matrix.abi }}" \
-DANDROID_PLATFORM=android-21 \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX="${{ github.workspace }}/output-android-${{ matrix.abi }}" \
-DBUILD_TEST_EXAMPLE=OFF \
-DBUILD_SHELL=OFF

- name: Build Android
run: cmake --build "${{ github.workspace }}/build-android-${{ matrix.abi }}" --config Release --parallel

- name: Install Android
run: cmake --install "${{ github.workspace }}/build-android-${{ matrix.abi }}" --config Release

- name: Verify Android outputs
run: |
test -f "output-android-${{ matrix.abi }}/bin/libsimple.so"
test -f "output-android-${{ matrix.abi }}/bin/dict/jieba.dict.utf8"

- name: Package Android
if: startsWith(github.ref, 'refs/tags/')
run: |
mkdir "libsimple-android-${{ matrix.abi }}"
cp -r "output-android-${{ matrix.abi }}/bin/libsimple.so" "output-android-${{ matrix.abi }}/bin/dict" "libsimple-android-${{ matrix.abi }}/"
zip -r "libsimple-android-${{ matrix.abi }}.zip" "libsimple-android-${{ matrix.abi }}"
working-directory: "${{ github.workspace }}"

- name: Release Android
if: startsWith(github.ref, 'refs/tags/')
uses: softprops/action-gh-release@v2
with:
draft: true
files: "${{ github.workspace }}/libsimple-android-${{ matrix.abi }}.zip"
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[![Downloads](https://img.shields.io/github/downloads/wangfenjin/simple/total)](https://img.shields.io/github/downloads/wangfenjin/simple/total)
[![build](https://github.com/wangfenjin/simple/workflows/CI/badge.svg)](https://github.com/wangfenjin/simple/actions?query=workflow%3ACI)
[![build](https://github.com/wangfenjin/simple/actions/workflows/main.yml/badge.svg?branch=master)](https://github.com/wangfenjin/simple/actions/workflows/main.yml)
[![codecov](https://codecov.io/gh/wangfenjin/simple/branch/master/graph/badge.svg?token=8SHLFZ3RB4)](https://codecov.io/gh/wangfenjin/simple)
[![CodeFactor](https://www.codefactor.io/repository/github/wangfenjin/simple/badge)](https://www.codefactor.io/repository/github/wangfenjin/simple)
[![License: MIT](https://img.shields.io/badge/Dual_License-MIT_or_GPL_v3_later-blue.svg)](https://github.com/wangfenjin/simple/blob/master/LICENSE)
Expand Down
62 changes: 52 additions & 10 deletions build-ios.sh
Original file line number Diff line number Diff line change
@@ -1,15 +1,57 @@
#!/bin/sh

current_dir=$(pwd)/$(dirname "$0")
build_dir="${current_dir}/build-ios"
lib_prefix="${current_dir}/output"
set -eu

cmake "$current_dir" -G Xcode -DCMAKE_TOOLCHAIN_FILE=contrib/ios.toolchain.cmake \
-DPLATFORM=OS64COMBINED -DENABLE_BITCODE=1 \
-DCMAKE_INSTALL_PREFIX="" -B "$build_dir" \
-DDEPLOYMENT_TARGET=8.0
script_dir=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
toolchain_file="${script_dir}/contrib/ios.toolchain.cmake"
ios_output_root="${script_dir}/output-ios"
final_output_root="${script_dir}/output"
headers_dir="${ios_output_root}/headers"

cd "$build_dir" || exit
build_variant() {
platform="$1"
build_dir="${script_dir}/build-ios-${platform}"
install_dir="${ios_output_root}/${platform}"

cmake --build "$build_dir" --config Release
cmake --install "$build_dir" --config Release --prefix "${lib_prefix}"
cmake -S "${script_dir}" -B "${build_dir}" -G Xcode \
-DCMAKE_TOOLCHAIN_FILE="${toolchain_file}" \
-DPLATFORM="${platform}" \
-DENABLE_BITCODE=1 \
-DDEPLOYMENT_TARGET=8.0 \
-DCMAKE_INSTALL_PREFIX=""

cmake --build "${build_dir}" --config Release
cmake --install "${build_dir}" --config Release --prefix "${install_dir}"
}

rm -rf "${ios_output_root}" "${final_output_root}/libsimple.xcframework" "${final_output_root}/dict"
mkdir -p "${headers_dir}" "${final_output_root}"
cp "${script_dir}"/src/*.h "${headers_dir}/"

build_variant OS64
build_variant SIMULATOR64
build_variant SIMULATORARM64

sim64_lib="${ios_output_root}/SIMULATOR64/bin/libsimple.a"
simarm64_lib="${ios_output_root}/SIMULATORARM64/bin/libsimple.a"
sim_universal_dir="${ios_output_root}/SIMULATOR_UNIVERSAL/bin"
sim_universal_lib="${sim_universal_dir}/libsimple.a"

mkdir -p "${sim_universal_dir}"
sim64_archs="$(lipo -archs "${sim64_lib}")"
simarm64_archs="$(lipo -archs "${simarm64_lib}")"

if printf '%s' "${sim64_archs}" | grep -q 'x86_64' && printf '%s' "${sim64_archs}" | grep -q 'arm64'; then
cp "${sim64_lib}" "${sim_universal_lib}"
elif printf '%s' "${simarm64_archs}" | grep -q 'x86_64' && printf '%s' "${simarm64_archs}" | grep -q 'arm64'; then
cp "${simarm64_lib}" "${sim_universal_lib}"
else
lipo -create "${sim64_lib}" "${simarm64_lib}" -output "${sim_universal_lib}"
fi

xcodebuild -create-xcframework \
-library "${ios_output_root}/OS64/bin/libsimple.a" -headers "${headers_dir}" \
-library "${sim_universal_lib}" -headers "${headers_dir}" \
-output "${final_output_root}/libsimple.xcframework"

cp -R "${ios_output_root}/OS64/bin/dict" "${final_output_root}/dict"
Loading