From eb5c464d9f51a0e5822ea551320cd1a658b4653e Mon Sep 17 00:00:00 2001 From: Rasmus Karlsson Date: Tue, 16 Sep 2025 11:50:45 +0200 Subject: [PATCH 1/2] feat: build Linux aarch64 in CI --- .github/workflows/build.yml | 57 ++++++++++++++++++++++++++++- cmake/toolchain-linux-aarch64.cmake | 14 +++++++ 2 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 cmake/toolchain-linux-aarch64.cmake diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 03630d3..20e07c4 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -89,8 +89,63 @@ jobs: path: build/macos-aarch64/librlawt.dylib retention-days: 1 if-no-files-found: error + linux-aarch64: + runs-on: ubuntu-24.04 + container: + image: ubuntu:20.04 + env: + DEBIAN_FRONTEND: "noninteractive" + JAVA_HOME_AARCH64: "/usr/lib/jvm/java-1.11.0-openjdk-arm64" + steps: + - uses: actions/checkout@v4 + - name: install dependencies + run: | + set -e -x + + # Ensure the default sources that are defined in /etc/apt/sources.list do not attempt + # to be used for arm64/aarch64 packages. + sed -i 's/^\(deb\s\)/\1[arch=amd64] /' /etc/apt/sources.list + + # Allow us to install arm64 packages for cross compilation + mkdir -p /etc/apt/sources.list.d + cat <<'EOF' > /etc/apt/sources.list.d/aarch64.list + deb [arch=arm64] http://ports.ubuntu.com/ focal main multiverse universe + deb [arch=arm64] http://ports.ubuntu.com/ focal-security main multiverse universe + deb [arch=arm64] http://ports.ubuntu.com/ focal-backports main multiverse universe + deb [arch=arm64] http://ports.ubuntu.com/ focal-updates main multiverse universe + EOF + dpkg --add-architecture arm64 + + # The default CMake find Java will + apt update + apt install -y \ + cmake \ + openjdk-11-jdk \ + openjdk-11-jdk:arm64 \ + libgl-dev:arm64 \ + g++-aarch64-linux-gnu + - name: build linux-aarch64 + run: | + set -e -x + + cmake -B build/linux-aarch64 \ + -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-linux-aarch64.cmake \ + -DJAVA_AWT_LIBRARY=$JAVA_HOME_AARCH64/lib/libjawt.so \ + -DJAVA_JVM_LIBRARY=$JAVA_HOME_AARCH64/lib/server/libjvm.so \ + -DJAVA_INCLUDE_PATH=$JAVA_HOME_AARCH64/include \ + -DJAVA_INCLUDE_PATH2=$JAVA_HOME_AARCH64/include/linux \ + -DJAVA_AWT_INCLUDE_PATH=$JAVA_HOME_AARCH64/include \ + . + + cmake --build build/linux-aarch64 --config Release + - uses: actions/upload-artifact@v4 + with: + name: linux-aarch64 + path: build/linux-aarch64/librlawt.so + retention-days: 1 + if-no-files-found: error linux-amd64: - needs: [windows, macos] + needs: [windows, macos, linux-aarch64] runs-on: ubuntu-24.04 container: image: amd64/ubuntu:20.04 diff --git a/cmake/toolchain-linux-aarch64.cmake b/cmake/toolchain-linux-aarch64.cmake new file mode 100644 index 0000000..f1a4a8b --- /dev/null +++ b/cmake/toolchain-linux-aarch64.cmake @@ -0,0 +1,14 @@ +set(CMAKE_SYSTEM_NAME Linux) +set(CMAKE_SYSTEM_PROCESSOR aarch64) + +set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc) +set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++) + +# set(CMAKE_SYSROOT /usr/lib/jvm/java-1.11.0-openjdk-arm64) + +set(CMAKE_FIND_ROOT_PATH /usr/aarch64-linux-gnu) + +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) From a36e9b9a10bfa5e906aa34470981067b2087336c Mon Sep 17 00:00:00 2001 From: Rasmus Karlsson Date: Sat, 8 Nov 2025 15:32:42 +0100 Subject: [PATCH 2/2] finish my sentence --- .github/workflows/build.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 20e07c4..5e50479 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -116,7 +116,8 @@ jobs: EOF dpkg --add-architecture arm64 - # The default CMake find Java will + # We install the x86_64 version of openjdk here because CMake's FindJNDI module + # will use it to figure out which version of java is installed apt update apt install -y \ cmake \