mirror of
https://github.com/libsdl-org/SDL.git
synced 2026-10-28 09:34:46 +08:00
ci: Add HarmonyOS/OpenHarmony builds to Github Actions.
This builds SDL with CMake, like a normal library, and a small app with "hvigor", which is HarmonyOS's equivalent to Android's gradle, to test the parts that CMake doesn't touch. This is added to the non-priority builds. [sdl-ci-filter *]
This commit is contained in:
1 parent
47f8ad78a3
commit
c314de7ce9
3 files changed
+84
No files matched your search
@@ -0,0 +1,61 @@
|
||||
name: 'Setup HarmonyOS toolchain'
|
||||
description: 'Download HarmonyOS command line tools and setup CMake toolchain'
|
||||
runs:
|
||||
using: 'composite'
|
||||
steps:
|
||||
- name: 'Calculate variables'
|
||||
id: calc
|
||||
shell: sh
|
||||
run: |
|
||||
version="6.1.1.280"
|
||||
case "${{ runner.os }}-${{ runner.arch }}" in
|
||||
"Linux-X64")
|
||||
archive="commandline-tools-linux-x64-${version}.zip"
|
||||
;;
|
||||
"macOS-X86" | "macOS-X64")
|
||||
archive="commandline-tools-mac-x86-${version}.zip"
|
||||
;;
|
||||
"macOS-ARM64")
|
||||
archive="commandline-tools-mac-arm64-${version}.zip"
|
||||
;;
|
||||
"Windows-X64")
|
||||
archive="commandline-tools-windows-x64-${version}.zip"
|
||||
;;
|
||||
*)
|
||||
echo "Unsupported ${{ runner.os }}-${{ runner.arch }}"
|
||||
exit 1;
|
||||
;;
|
||||
esac
|
||||
echo "url=https://libsdl.org/harmonyos-devtools/${archive}" >> ${GITHUB_OUTPUT}
|
||||
echo "archive=${archive}" >> ${GITHUB_OUTPUT}
|
||||
echo "version=${version}" >> ${GITHUB_OUTPUT}
|
||||
echo "cache-key=${archive}-${{ runner.os }}-${{ runner.arch }}" >> ${GITHUB_OUTPUT}
|
||||
- name: 'Restore cached ${{ steps.calc.outputs.archive }}'
|
||||
id: cache-restore
|
||||
uses: actions/cache/restore@v5
|
||||
with:
|
||||
path: '${{ runner.temp }}/${{ steps.calc.outputs.archive }}'
|
||||
key: ${{ steps.calc.outputs.cache-key }}
|
||||
- name: 'Download HarmonyOS command line tools ${{ steps.calc.outputs.version }} for ${{ runner.os }} (${{ runner.arch }})'
|
||||
if: ${{ !steps.cache-restore.outputs.cache-hit || steps.cache-restore.outputs.cache-hit == 'false' }}
|
||||
shell: pwsh
|
||||
run: |
|
||||
Invoke-WebRequest "${{ steps.calc.outputs.url }}" -OutFile "${{ runner.temp }}/${{ steps.calc.outputs.archive }}"
|
||||
- name: 'Cache ${{ steps.calc.outputs.archive }}'
|
||||
if: ${{ !steps.cache-restore.outputs.cache-hit || steps.cache-restore.outputs.cache-hit == 'false' }}
|
||||
uses: actions/cache/save@v5
|
||||
with:
|
||||
path: '${{ runner.temp }}/${{ steps.calc.outputs.archive }}'
|
||||
key: ${{ steps.calc.outputs.cache-key }}
|
||||
- name: 'Extract HarmonyOS command line tools archive'
|
||||
shell: pwsh
|
||||
run: |
|
||||
unzip "${{ runner.temp }}/${{ steps.calc.outputs.archive }}" -d "${{ runner.temp }}"
|
||||
- name: 'Set output variables'
|
||||
id: final
|
||||
shell: pwsh
|
||||
run: |
|
||||
echo "${{ runner.temp }}/command-line-tools/sdk/default/openharmony/toolchains" >> $env:GITHUB_PATH
|
||||
echo "${{ runner.temp }}/command-line-tools/bin" >> $env:GITHUB_PATH
|
||||
|
||||
|
||||
@@ -85,6 +85,7 @@ class SdlPlatform(Enum):
|
||||
OpenBSD = "openbsd"
|
||||
NGage = "ngage"
|
||||
DJGPP = "djgpp"
|
||||
HarmonyOS = "harmonyos"
|
||||
|
||||
|
||||
class Msys2Platform(Enum):
|
||||
@@ -116,10 +117,12 @@ class JobSpec:
|
||||
xcode: bool = False
|
||||
android_mk: bool = False
|
||||
android_gradle: bool = False
|
||||
harmonyos_hvigor: bool = False
|
||||
lean: bool = False
|
||||
android_arch: Optional[str] = None
|
||||
android_abi: Optional[str] = None
|
||||
android_platform: Optional[int] = None
|
||||
openharmony_platform: Optional[str] = None
|
||||
msys2_platform: Optional[Msys2Platform] = None
|
||||
intel: Optional[IntelCompiler] = None
|
||||
apple_framework: Optional[bool] = None
|
||||
@@ -179,6 +182,7 @@ JOB_SPECS = {
|
||||
"freebsd": JobSpec(name="FreeBSD", priority=False, os=JobOs.UbuntuLatest, platform=SdlPlatform.FreeBSD, artifact="SDL-freebsd-x64", ),
|
||||
"ngage": JobSpec(name="N-Gage", priority=False, os=JobOs.WindowsLatest, platform=SdlPlatform.NGage, artifact="SDL-ngage", ),
|
||||
"djgpp": JobSpec(name="DOS (DJGPP)", priority=False, os=JobOs.UbuntuLatest, platform=SdlPlatform.DJGPP, artifact="SDL-djgpp", ),
|
||||
"harmonyos-hvigor": JobSpec(name="HarmonyOS/OpenHarmony (hvigor)", priority=False, os=JobOs.UbuntuLatest, platform=SdlPlatform.HarmonyOS, artifact=None, no_cmake=True, harmonyos_hvigor=True ),
|
||||
}
|
||||
|
||||
|
||||
@@ -241,6 +245,7 @@ class JobDetails:
|
||||
android_ndk: bool = False
|
||||
android_mk: bool = False
|
||||
android_gradle: bool = False
|
||||
harmonyos_hvigor: bool = False
|
||||
minidump: bool = False
|
||||
intel: bool = False
|
||||
msys2_msystem: str = ""
|
||||
@@ -316,6 +321,7 @@ class JobDetails:
|
||||
"android-apks": my_shlex_join(self.android_apks),
|
||||
"android-gradle": self.android_gradle,
|
||||
"android-mk": self.android_mk,
|
||||
"harmonyos-hvigor": self.harmonyos_hvigor,
|
||||
"werror": self.werror,
|
||||
"sudo": self.sudo,
|
||||
"msvc-vcvars-arch": self.msvc_vcvars_arch,
|
||||
@@ -912,6 +918,12 @@ def spec_to_job(spec: JobSpec, key: str, trackmem_symbol_names: bool, ctest_args
|
||||
job.run_tests = False
|
||||
job.test_pkg_config = False
|
||||
job.cmake_toolchain_file = "$GITHUB_WORKSPACE/build-scripts/i586-pc-msdosdjgpp.cmake"
|
||||
case SdlPlatform.HarmonyOS:
|
||||
job.harmonyos_hvigor = spec.harmonyos_hvigor
|
||||
job.run_tests = False
|
||||
job.shared_lib = SharedLibType.SO
|
||||
job.static_lib = StaticLibType.A
|
||||
job.apt_packages = []
|
||||
case _:
|
||||
raise ValueError(f"Unsupported platform={spec.platform}")
|
||||
|
||||
|
||||
@@ -110,6 +110,10 @@ jobs:
|
||||
uses: ./.github/actions/setup-djgpp-toolchain
|
||||
id: setup-djgpp-toolchain
|
||||
if: ${{ matrix.platform.platform == 'djgpp' }}
|
||||
- name: 'Set up HarmonyOS toolchain'
|
||||
uses: ./.github/actions/setup-harmonyos-toolchain
|
||||
id: setup-harmonyos-toolchain
|
||||
if: ${{ matrix.platform.platform == 'harmonyos' }}
|
||||
- name: 'Setup Intel oneAPI toolchain'
|
||||
id: intel
|
||||
if: ${{ matrix.platform.intel }}
|
||||
@@ -395,6 +399,13 @@ jobs:
|
||||
run: |
|
||||
cd build-cmake/org.libsdl.testspriteminimal
|
||||
./gradlew -i assembleRelease -PBUILD_WITH_CMAKE=1
|
||||
- name: 'Build HarmonyOS app (hvigor)'
|
||||
if: ${{ matrix.platform.harmonyos-hvigor }}
|
||||
# the unmodified openharmony-project tries to compile "myapp.c" and expects the root of the SDL source tree to be located at "SDL" inside that project tree. Add symlinks to make this work out, then build with our helper script, which runs hvigorw.
|
||||
run: |
|
||||
ln -sf ../../../../.. openharmony-project/entry/src/main/cpp/SDL
|
||||
ln -sf SDL/test/testdynaudioreopen.c openharmony-project/entry/src/main/cpp/myapp.c
|
||||
./build-scripts/harmonyos-tool.sh openharmony-project --clean --build
|
||||
- name: 'Build (xcode)'
|
||||
if: ${{ matrix.platform.xcode-sdk != '' }}
|
||||
run: |
|
||||
|
||||
Reference in new issue
Block a user