Skip to content

ci: add a Linux aarch64 build - #2

Open
WizzardSK wants to merge 1 commit into
libretro:libretrofrom
WizzardSK:ci-linux-aarch64
Open

ci: add a Linux aarch64 build#2
WizzardSK wants to merge 1 commit into
libretro:libretrofrom
WizzardSK:ci-linux-aarch64

Conversation

@WizzardSK

Copy link
Copy Markdown

The libretro buildbot ships no aarch64 Linux build of dosbox-core, so the core can't be installed from RetroArch's Core Downloader on ARM64 Linux machines (ARM Chromebooks, SBCs, ARM laptops). Nothing blocks it: the build already knows this architecture - on an aarch64 host it configures itself with -DC_DYNREC -DC_TARGETCPU="ARMV8LE", i.e. the ARMv8 dynrec backend - and android-arm64-v8a already builds these sources for ARM64.

The job mirrors libretro-build-linux-x64:

# Linux ARM 64-bit
libretro-build-linux-aarch64:
  extends:
    - .libretro-linux-aarch64-make-default
    - .core-defs

plus the matching /linux-aarch64.yml template include.

What I verified on aarch64 (postmarketOS on a Snapdragon 670 Chromebook, glibc): every dosbox-core source file - core, libretro glue, voodoo, fluidsynth/BASSMIDI/MT-32 midi backends - compiles cleanly with no source changes and with the ARMv8 dynrec selected, and the bundled dependencies (SDL 1.2, SDL_net, fluidsynth, munt, ogg, vorbis, opus, opusfile, FLAC, libsndfile) all build for aarch64 too.

What I could not finish, and why it isn't an ARM problem: the final link needs deps_bin/lib/libmpg123.a, and bundled mpg123 doesn't compile under my local GCC 15 - deps/mpg123/src/compat/compat.c:500 assigns a void (*)(void) to a __sighandler_t, which GCC 14+ makes a hard error. The buildbot images use GCC 12, where that's only a warning, so CI should be unaffected. Verifying via the CI job on this PR is the way to confirm.

One unrelated thing I noticed while doing this: with BUNDLED_AUDIO_CODECS=1 (the default), Makefile.libretro:266 always links libmpg123.a and libopusfile.a, but neither is a prerequisite of anything - $(OBJECTS) only depends on $(FLUIDSYNTH) $(MUNT) $(SDLNET), and $(LIBMPG123)/$(OPUSFILE) are reachable only through the phony mpg123/opusfile targets. So a clean checkout built with plain make -f Makefile.libretro platform=unix fails at link on any architecture until those two are built by hand. Not something this PR touches, but you may want to add them to the $(OBJECTS) prerequisite line.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant