Skip to content

Update build.yml

Update build.yml #297

Workflow file for this run

name: Build Lib
on: [push, pull_request]
env:
LINK_JOBS: 16
JOBS: 16
MODE: release
XMAKE_ARGS: -v
ANDROID_NDK_VERSION: r27c
OHOS_SDK_VERSION: 5.0.0-Release
jobs:
build:
strategy:
fail-fast: false
matrix:
include:
- os: windows-latest
name: Windows (x64)
plat: windows
arch: x64
- os: windows-latest
name: Windows (x86)
plat: windows
arch: x86
- os: windows-latest
name: Windows (arm64)
plat: windows
arch: arm64
- os: ubuntu-latest
name: OpenHarmony (arm64-v8a)
plat: harmony
arch: arm64-v8a
- os: ubuntu-latest
name: OpenHarmony (armeabi-v7a)
plat: harmony
arch: armeabi-v7a
- os: ubuntu-latest
name: OpenHarmony (x86_64)
plat: harmony
arch: x86_64
- os: ubuntu-latest
name: Android (arm64-v8a)
plat: android
arch: arm64-v8a
- os: ubuntu-latest
name: Android (armeabi-v7a)
plat: android
arch: armeabi-v7a
- os: ubuntu-latest
name: Android (x86)
plat: android
arch: x86
- os: ubuntu-latest
name: Android (x86_64)
plat: android
arch: x86_64
- os: ubuntu-latest
name: Android (riscv64)
plat: android
arch: riscv64
- os: ubuntu-latest
name: Linux (x64)
plat: linux
arch: x64
- os: ubuntu-latest
name: Linux (arm64)
plat: linux
arch: arm64
triplet: aarch64-linux-gnu
libc_arch: arm64
- os: ubuntu-latest
name: Linux (arm32)
plat: linux
arch: arm32
triplet: arm-linux-gnueabihf
libc_arch: armhf
- os: ubuntu-latest
name: Linux (ppc64)
plat: linux
arch: ppc64le
triplet: powerpc64le-linux-gnu
libc_arch: ppc64el
- os: ubuntu-latest
name: Linux (riscv)
plat: linux
arch: riscv64
triplet: riscv64-linux-gnu
libc_arch: riscv64
- os: ubuntu-latest
name: Linux (loongarch64)
plat: linux
arch: loong64
- os: ubuntu-latest
name: FreeBSD (x64)
plat: freebsd
arch: x64
- os: ubuntu-latest
name: FreeBSD (arm64)
plat: freebsd
arch: arm64
- os: macos-latest
name: MacOS (arm64)
plat: macos
arch: arm64
- os: macos-13
name: MacOS (x86)
plat: macos
arch: x64
- os: macos-latest
name: IphoneOS
plat: iphoneos
arch: arm64
- os: macos-latest
name: WatchOS
plat: watchos
arch: armv7k
name: Build ${{ matrix.name }}
runs-on: ${{ matrix.os }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Install xmake
if: matrix.plat != 'freebsd'
uses: xmake-io/github-action-setup-xmake@v1
with:
xmake-version: branch@master
- name: Setup OpenHarmony SDK
if: matrix.plat == 'harmony'
run: |
wget https://repo.huaweicloud.com/openharmony/os/${{ env.OHOS_SDK_VERSION }}/ohos-sdk-windows_linux-public.tar.gz
tar -zxvf ohos-sdk-windows_linux-public.tar.gz
unzip linux/native*.zip
- name: Setup Android NDK
if: matrix.plat == 'android'
run: |
wget https://dl.google.com/android/repository/android-ndk-${{ env.ANDROID_NDK_VERSION }}-linux.zip
unzip android-ndk-${{ env.ANDROID_NDK_VERSION }}-linux.zip
- name: Build MacOS
if: matrix.plat == 'macos'
run: xmake f -m ${{ env.MODE }} -yc ${{ env.XMAKE_ARGS }}
- name: Configure IOS
if: matrix.plat == 'iphoneos'
run: xmake f -p iphoneos -m ${{ env.MODE }} -yc ${{ env.XMAKE_ARGS }}
- name: Configure WatchOS
if: matrix.plat == 'watchos'
run: xmake f -p watchos -a ${{ matrix.arch }} -m ${{ env.MODE }} -yc ${{ env.XMAKE_ARGS }}
- name: Configure OpenHarmony
if: matrix.plat == 'harmony'
run: xmake f -p harmony -a ${{ matrix.arch }} --sdk=${{ github.workspace }}/native -m ${{ env.MODE }} -yc ${{ env.XMAKE_ARGS }}
- name: Configure Android
if: matrix.plat == 'android'
run: xmake f -p android -a ${{ matrix.arch }} --ndk=${{ github.workspace }}/android-ndk-${{ env.ANDROID_NDK_VERSION }} -m ${{ env.MODE }} -yc ${{ env.XMAKE_ARGS }}
- name: Configure Linux
if: ${{ matrix.plat == 'linux' && matrix.arch == 'x64' }}
run: xmake f -a ${{ matrix.arch }} -m ${{ env.MODE }} -yc ${{ env.XMAKE_ARGS }}
- name: Configure Linux Cross
if: ${{ matrix.plat == 'linux' && matrix.arch != 'x64' && matrix.arch != 'loong64' }}
run: |
sudo apt update
sudo apt install gcc-multilib g++-multilib
sudo apt install gcc-${{ matrix.triplet }} g++-${{ matrix.triplet }}
sudo apt install libc6-dev-${{ matrix.libc_arch }}-cross
xmake f -a ${{ matrix.arch }} --sdk=/usr --cross=${{ matrix.triplet }}- -m ${{ env.MODE }} -yc ${{ env.XMAKE_ARGS }} --cxxflags="-Wno-undef" --ldflags="-Wno-undef"
- name: Configure Linux LoongArch
if: ${{ matrix.plat == 'linux' && matrix.arch == 'loong64' }}
run: |
wget https://github.com/loongson/build-tools/releases/download/2024.11.01/x86_64-cross-tools-loongarch64-binutils_2.43.1-gcc_14.2.0-glibc_2.40.tar.xz
tar -Jxvf x86_64-cross-tools-loongarch64-binutils_2.43.1-gcc_14.2.0-glibc_2.40.tar.xz
xmake f -a ${{ matrix.arch }} --sdk=${{ github.workspace }}/cross-tools -m ${{ env.MODE }} -yc ${{ env.XMAKE_ARGS }} --cxxflags="-Wno-undef" --ldflags="-Wno-undef"
- name: Configure Windows
if: matrix.plat == 'windows'
run: xmake f --toolchain=msvc -a ${{ matrix.arch }} -m ${{ env.MODE }} -yc ${{ env.XMAKE_ARGS }}
- name: Build
if: matrix.plat != 'freebsd'
run: xmake -y --jobs=${{ env.JOBS }} --linkjobs=${{ env.LINK_JOBS }} ${{ env.XMAKE_ARGS }}
- name: Build FreeBSD (x86_64)
if: matrix.plat == 'freebsd' && matrix.arch == 'x64'
uses: cross-platform-actions/[email protected]
with:
operating_system: freebsd
architecture: x86-64
version: '13.3'
memory: 8G
shell: bash
environment_variables: LINK_JOBS JOBS MODE XMAKE_ARGS
run: |
sudo pkg install -y git cmake ninja gmake
git clone --recursive https://github.com/xmake-io/xmake.git
cd ./xmake
/usr/bin/make --version
./configure --make=/usr/bin/make
gmake
./scripts/get.sh __local__ __install_only__
source ~/.xmake/profile
cd ..
xmake f -m ${{ env.MODE }} -yc ${{ env.XMAKE_ARGS }}
xmake -y --jobs=${{ env.JOBS }} --linkjobs=${{ env.LINK_JOBS }} ${{ env.XMAKE_ARGS }}
mv build/bsd build/freebsd
mv build/freebsd/x86_64 build/freebsd/x64
- name: Build FreeBSD (arm64)
if: matrix.plat == 'freebsd' && matrix.arch == 'arm64'
uses: cross-platform-actions/[email protected]
with:
operating_system: freebsd
architecture: arm64
version: '13.3'
memory: 8G
shell: bash
environment_variables: LINK_JOBS JOBS MODE XMAKE_ARGS
run: |
sudo pkg install -y git cmake ninja gmake
git clone --recursive https://github.com/xmake-io/xmake.git
cd ./xmake
/usr/bin/make --version
./configure --make=/usr/bin/make
gmake
./scripts/get.sh __local__ __install_only__
source ~/.xmake/profile
cd ..
xmake f -m ${{ env.MODE }} -yc ${{ env.XMAKE_ARGS }}
xmake -y --jobs=${{ env.JOBS }} --linkjobs=${{ env.LINK_JOBS }} ${{ env.XMAKE_ARGS }}
mv build/bsd build/freebsd
- name: Fix MacOS Target Path (Stage 1)
if: ${{ matrix.plat == 'macos' }}
run: mv build/macosx build/macos
- name: Fix MacOS Target Path (Stage 2)
if: ${{ matrix.plat == 'macos' && matrix.arch == 'x64' }}
run: mv build/macos/x86_64 build/macos/x64
- name: Fix Path
run: |
cd build/${{ matrix.plat }}/${{ matrix.arch }}
mv ${{ env.MODE }}/* .
cd ../../..
- name: Upload Artifacts
uses: actions/upload-artifact@v3
with:
name: build
path: build/