slint/.github/workflows/cpp_package.yaml
Simon Hausmann 18db3210d6 Pin Python version for Skia builds on macOS
The Python version installed on the GH runners via homebrew removes the pipes module, which the Skia build needs until https://github.com/slint-ui/slint/issues/6615 is fixed.
2024-10-23 10:26:59 +02:00

239 lines
11 KiB
YAML

# Copyright © SixtyFPS GmbH <info@slint.dev>
# SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-2.0 OR LicenseRef-Slint-Software-3.0
name: Build the C++ binary package
on:
workflow_dispatch:
workflow_call:
inputs:
extra_cmake_flags:
type: string
description: Extra CMake flags to pass to the build.
default: ""
env:
MACOSX_DEPLOYMENT_TARGET: "11.0"
# Keep in sync with features in nightly_snapshot.yaml, slint_tool_binary.yaml, api/node/Cargo.toml, and api/python/Cargo.toml
SLINT_BINARY_FEATURES: "-DSLINT_FEATURE_BACKEND_LINUXKMS_NOSEAT=ON -DSLINT_FEATURE_BACKEND_WINIT=ON -DSLINT_FEATURE_RENDERER_FEMTOVG=ON -DSLINT_FEATURE_RENDERER_SKIA=ON -DSLINT_FEATURE_RENDERER_SOFTWARE=ON"
SLINT_MCU_FEATURES: "-DSLINT_FEATURE_FREESTANDING=ON -DSLINT_FEATURE_RENDERER_SOFTWARE=ON"
# env variable used by espup https://github.com/esp-rs/espup?tab=readme-ov-file#github-api
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
jobs:
cmake_package_desktop:
env:
DYLD_FRAMEWORK_PATH: /Users/runner/work/slint/Qt/6.5.1/clang_64/lib
QT_QPA_PLATFORM: offscreen
CARGO_INCREMENTAL: false
strategy:
matrix:
os: [ubuntu-20.04, macOS-12, macos-14, windows-2022]
include:
- os: ubuntu-20.04
package_suffix: linux
- os: macOS-12
package_suffix: macos-x86_64
- os: macos-14
package_suffix: macos-aarch64
- os: windows-2022
package_suffix: windows
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/install-linux-dependencies
with:
old-ubuntu: true
- name: Install Qt (Ubuntu)
uses: jurplel/install-qt-action@v3
if: matrix.os == 'ubuntu-20.04'
with:
version: 5.15.2
cache: true
- uses: ./.github/actions/setup-rust
- uses: baptiste0928/cargo-install@v3
with:
crate: cargo-about
- name: Prepare licenses
run: bash -x ../../scripts/prepare_binary_package.sh ../..
working-directory: api/cpp/
# Pin Python version until https://github.com/slint-ui/slint/issues/6615 is fixed.
- uses: actions/setup-python@v5
with:
python-version: '3.12'
- uses: ilammy/msvc-dev-cmd@v1
- name: Select MSVC (windows)
run: |
echo "CC=cl.exe" >> $GITHUB_ENV
echo "CXX=cl.exe" >> $GITHUB_ENV
if: matrix.os == 'windows-2022'
- name: C++ Build
uses: lukka/run-cmake@v3.4
with:
cmakeListsOrSettingsJson: CMakeListsTxtAdvanced
cmakeListsTxtPath: CMakeLists.txt
cmakeAppendedArgs: "-DCMAKE_BUILD_TYPE=RelWithDebInfo ${{ env.SLINT_BINARY_FEATURES }} ${{ inputs.extra_cmake_flags }}"
buildDirectory: ${{ runner.workspace }}/cppbuild
buildWithCMakeArgs: "--config Release"
- name: cpack
working-directory: ${{ runner.workspace }}/cppbuild
run: cmake --build . --config Release --target package
- name: "Upload C++ packages"
uses: actions/upload-artifact@v4
with:
name: cpp_bin-${{ matrix.package_suffix }}
path: ${{ runner.workspace }}/cppbuild/Slint-cpp-*
cmake_package_mcu_arm:
env:
CARGO_INCREMENTAL: false
strategy:
matrix:
target: [thumbv7em-none-eabihf]
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/install-linux-dependencies
with:
old-ubuntu: true
- uses: ./.github/actions/setup-rust
with:
target: ${{ matrix.target }}
- name: Install GNU Arm Embedded Toolchain
uses: carlosperate/arm-none-eabi-gcc-action@v1
with:
release: '13.3.Rel1'
- uses: baptiste0928/cargo-install@v3
with:
crate: cargo-about
- name: Prepare licenses
run: bash -x ../../scripts/prepare_binary_package.sh ../..
working-directory: api/cpp/
- name: C++ Build
uses: lukka/run-cmake@v3.4
with:
cmakeListsOrSettingsJson: CMakeListsTxtAdvanced
cmakeListsTxtPath: CMakeLists.txt
cmakeAppendedArgs: "-GNinja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DBUILD_SHARED_LIBS=OFF -DRust_CARGO_TARGET=${{ matrix.target }} -DCMAKE_C_COMPILER=arm-none-eabi-gcc -DCMAKE_CXX_COMPILER=arm-none-eabi-g++ -DCMAKE_AR=arm-none-eabi-ar -DCMAKE_TRY_COMPILE_TARGET_TYPE=STATIC_LIBRARY -DSLINT_COMPILER=download ${{ env.SLINT_MCU_FEATURES }} ${{ inputs.extra_cmake_flags }}"
buildDirectory: ${{ runner.workspace }}/cppbuild
buildWithCMakeArgs: "--config Release"
- name: cpack
working-directory: ${{ runner.workspace }}/cppbuild
run: cpack -G TGZ
- name: "Upload C++ packages"
uses: actions/upload-artifact@v4
with:
name: cpp_mcu_bin-${{ matrix.target }}
path: ${{ runner.workspace }}/cppbuild/Slint-cpp-*
cmake_package_mcu_esp:
env:
CARGO_INCREMENTAL: false
strategy:
matrix:
idf_target: [esp32, esp32s2, esp32s3, esp32p4]
include:
- idf_target: esp32
rust_target: xtensa-esp32-none-elf
- idf_target: esp32s2
rust_target: xtensa-esp32s2-none-elf
- idf_target: esp32s3
rust_target: xtensa-esp32s3-none-elf
- idf_target: esp32p4
rust_target: riscv32imafc-esp-espidf
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/install-linux-dependencies
with:
old-ubuntu: true
- uses: dtolnay/rust-toolchain@stable
- name: install espup
run: |
cargo install espup
espup install
rustup default esp
- name: add esp toolchains to PATH
if: runner.os != 'Windows'
run: |
source "$HOME/export-esp.sh"
echo "$PATH" >> "$GITHUB_PATH"
- uses: baptiste0928/cargo-install@v3
with:
crate: cargo-about
- name: Prepare licenses
run: bash -x ../../scripts/prepare_binary_package.sh ../..
working-directory: api/cpp/
- name: C++ Build
uses: lukka/run-cmake@v3.4
with:
cmakeListsOrSettingsJson: CMakeListsTxtAdvanced
cmakeListsTxtPath: CMakeLists.txt
# NOTE: xtensa-esp-elf-gcc as compiler for the RISC-V targets is wrong, but the compiler argument here is only
# used to ensure that SIZEOF_VOID_P is 4 in the generated cmake config file. Otherwise this build requires no
# C compiler.
cmakeAppendedArgs: "-GNinja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF -DESP_PLATFORM=1 -DIDF_TARGET=${{ matrix.idf_target }} -DRust_CARGO_TARGET=${{ matrix.rust_target }} -DCMAKE_C_COMPILER=xtensa-esp-elf-gcc -DCMAKE_AR=xtensa-esp-elf-ar -DCMAKE_TRY_COMPILE_TARGET_TYPE=STATIC_LIBRARY -DSLINT_LIBRARY_CARGO_FLAGS='-Zbuild-std=core,alloc' -DSLINT_COMPILER=download ${{ env.SLINT_MCU_FEATURES }} ${{ inputs.extra_cmake_flags }}"
buildDirectory: ${{ runner.workspace }}/cppbuild
buildWithCMakeArgs: "--config Release"
- name: cpack
working-directory: ${{ runner.workspace }}/cppbuild
run: cpack -G TGZ
- name: "Upload C++ packages"
uses: actions/upload-artifact@v4
with:
name: cpp_mcu_bin-${{ matrix.idf_target }}
path: ${{ runner.workspace }}/cppbuild/Slint-cpp-*
cmake_slint_compiler:
env:
CARGO_INCREMENTAL: false
strategy:
matrix:
os: [ubuntu-20.04, macOS-12, macos-14, windows-2022]
include:
- os: ubuntu-20.04
package_suffix: Linux-x86_64
- os: macOS-12
package_suffix: Darwin-x86_64
- os: macos-14
package_suffix: Darwin-arm64
- os: windows-2022
package_suffix: Windows
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/install-linux-dependencies
with:
old-ubuntu: true
- uses: ./.github/actions/setup-rust
# Build Slint-compiler with CMake so that CMakeLists.txt can configure C++ specific features
- name: Slint Compiler Build
uses: lukka/run-cmake@v3.4
with:
cmakeListsOrSettingsJson: CMakeListsTxtAdvanced
cmakeListsTxtPath: CMakeLists.txt
cmakeAppendedArgs: "-GNinja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DSLINT_BUILD_RUNTIME=OFF ${{ inputs.extra_cmake_flags }}"
buildDirectory: ${{ runner.workspace }}/cppbuild
buildWithCMakeArgs: "--config Release"
- name: cpack
working-directory: ${{ runner.workspace }}/cppbuild
run: cpack -G TGZ
- name: Extract Slint Compiler binary
working-directory: ${{ runner.workspace }}/cppbuild
shell: bash
run: cmake -E tar xvf Slint-cpp-*.tar.gz
- name: Repackage
working-directory: ${{ runner.workspace }}/cppbuild
shell: bash
run: |
cd Slint-cpp-*/bin
cmake -E tar czf ../../slint-compiler-${{ matrix.package_suffix }}.tar.gz slint-compiler*
- name: "Upload Slint compiler package"
uses: actions/upload-artifact@v4
with:
name: slint-compiler-bin-${{ matrix.package_suffix }}
path: ${{ runner.workspace }}/cppbuild/slint-compiler-*.tar.gz