Skip to content

Merge pull request #6 from IoTSharp/copilot/rewrite-readme-and-changelog #11

Merge pull request #6 from IoTSharp/copilot/rewrite-readme-and-changelog

Merge pull request #6 from IoTSharp/copilot/rewrite-readme-and-changelog #11

Workflow file for this run

name: 构建 LVGL 原生库
on:
push:
branches: [main, develop, master]
pull_request:
branches: [main, master]
workflow_dispatch:
workflow_call:
jobs:
build:
name: 构建 ${{ matrix.rid }}
runs-on: ${{ matrix.os }}
permissions:
contents: read
strategy:
fail-fast: false
matrix:
include:
# Windows — 通过 MSVC -A 参数构建多架构
- rid: win-x64
os: windows-latest
cmake_generator: "Visual Studio 17 2022"
cmake_arch: x64
- rid: win-x86
os: windows-latest
cmake_generator: "Visual Studio 17 2022"
cmake_arch: Win32
- rid: win-arm64
os: windows-latest
cmake_generator: "Visual Studio 17 2022"
cmake_arch: ARM64
# Linux — 原生 x64(与 LVGL 官方 CI 一致,使用 ubuntu-24.04)
- rid: linux-x64
os: ubuntu-24.04
cmake_extra: ""
# Linux — ARM 交叉编译(硬浮点)
- rid: linux-arm
os: ubuntu-24.04
apt_packages: gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf
cmake_extra: >-
-DCMAKE_TOOLCHAIN_FILE=$GITHUB_WORKSPACE/libs/cmake/toolchains/arm-linux-gnueabihf.cmake
# Linux — ARM64 交叉编译
- rid: linux-arm64
os: ubuntu-24.04
apt_packages: gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
cmake_extra: >-
-DCMAKE_TOOLCHAIN_FILE=$GITHUB_WORKSPACE/libs/cmake/toolchains/aarch64-linux-gnu.cmake
steps:
- name: 检出代码
uses: actions/checkout@v4
with:
submodules: recursive
# ─── 将 lv_conf.h 复制到 lvgl 源码目录 ────────────────────────────────
# LVGL 的 CMake 在 CMAKE_SOURCE_DIR(libs/lvgl/)中查找 lv_conf.h,
# 而该文件位于上一级 libs/lv_conf.h,因此需要复制到正确位置。
- name: 复制 lv_conf.h 到 lvgl 源码目录
shell: bash
run: cp libs/lv_conf.h libs/lvgl/lv_conf.h
# ─── Linux:安装构建依赖(参考 LVGL 官方 CI)──────────────────────────
# 参考:https://github.com/lvgl/lvgl/blob/master/.github/workflows/ccpp.yml
# 基础依赖:cmake、ninja-build;交叉编译时额外安装对应工具链
- name: 安装 Linux 构建依赖
if: runner.os == 'Linux'
run: |
sudo apt-get update -qq
sudo apt-get install -y cmake ninja-build ${{ matrix.apt_packages }}
# ─── Windows 构建 ────────────────────────────────────────────────────────
- name: CMake 配置(Windows)
if: runner.os == 'Windows'
shell: bash
run: |
cmake -S libs/lvgl -B libs/lvgl/build_shared \
-G "${{ matrix.cmake_generator }}" \
-A "${{ matrix.cmake_arch }}" \
-DCONFIG_LV_BUILD_EXAMPLES=OFF \
-DCONFIG_LV_BUILD_DEMOS=OFF \
-DCONFIG_LV_USE_THORVG_INTERNAL=OFF \
-DBUILD_SHARED_LIBS=ON \
-DCONFIG_LV_USE_PRIVATE_API=ON
- name: 编译(Windows)
if: runner.os == 'Windows'
shell: bash
run: cmake --build libs/lvgl/build_shared --config Release
# ─── Linux 构建(使用 Ninja,参考 LVGL 官方 CI)─────────────────────────
- name: CMake 配置(Linux)
if: runner.os == 'Linux'
run: |
cmake -S libs/lvgl -B libs/lvgl/build_shared \
-G Ninja \
-DCMAKE_BUILD_TYPE=Release \
${{ matrix.cmake_extra }} \
-DCONFIG_LV_BUILD_EXAMPLES=OFF \
-DCONFIG_LV_BUILD_DEMOS=OFF \
-DCONFIG_LV_USE_THORVG_INTERNAL=OFF \
-DBUILD_SHARED_LIBS=ON \
-DCONFIG_LV_USE_PRIVATE_API=ON
- name: 编译(Linux)
if: runner.os == 'Linux'
run: cmake --build libs/lvgl/build_shared
# ─── 收集输出文件 ────────────────────────────────────────────────────────
- name: 收集原生库文件
shell: bash
run: |
mkdir -p native_output
# Windows:从 Release 子目录复制 DLL
find libs/lvgl/build_shared -name "lvgl.dll" | head -1 | xargs -I{} cp {} native_output/ 2>/dev/null || true
# Linux:复制 SO 文件(优先无版本号的符号链接)
so=$(find libs/lvgl/build_shared -name "liblvgl.so" | head -1)
if [ -n "$so" ]; then
cp "$so" native_output/liblvgl.so
fi
ls -la native_output/
- name: 上传原生库制品
uses: actions/upload-artifact@v4
with:
name: native-${{ matrix.rid }}
path: native_output/
if-no-files-found: error