Skip to content

Add new architecture support (Linux x86, Windows x86, Windows ArmV7) and improve build system #769

Add new architecture support (Linux x86, Windows x86, Windows ArmV7) and improve build system

Add new architecture support (Linux x86, Windows x86, Windows ArmV7) and improve build system #769

Workflow file for this run

name: Build
on:
push:
branches:
- "*"
pull_request:
workflow_dispatch:
jobs:
Linux-Build:
strategy:
fail-fast: true
matrix:
architecture:
- name: x86_64
linux_name: x86-64-linux-gnu
exec_name: x86_64-linux-gnu
- name: x86
linux_name: i686-linux-gnu
exec_name: i686-linux-gnu
- name: aarch64
linux_name: aarch64-linux-gnu
exec_name: aarch64-linux-gnu
- name: armv7
linux_name: arm-linux-gnueabihf
exec_name: arm-linux-gnueabihf
- name: ppc64le
linux_name: powerpc64le-linux-gnu
exec_name: powerpc64le-linux-gnu
- name: riscv64
linux_name: riscv64-linux-gnu
exec_name: riscv64-linux-gnu
- name: s390x
linux_name: s390x-linux-gnu
exec_name: s390x-linux-gnu
java_version: [ 8, 11, 17, 21 ]
name: Linux-${{ matrix.architecture.name }}-Build-JDK${{ matrix.java_version }}
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup JDK
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: ${{ matrix.java_version }}
architecture: 'x64'
check-latest: true
- name: Install GCC
run: |
sudo apt-get install -y gcc-${{ matrix.architecture.linux_name }} g++-${{ matrix.architecture.linux_name }}
sudo update-alternatives --install /usr/bin/cc cc /usr/bin/${{ matrix.architecture.exec_name}}-gcc 200
sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/${{ matrix.architecture.exec_name}}-g++ 200
- name: Build
run: mvn -B -V -ntp --file pom.xml -P linux-${{ matrix.architecture.name }} "-Dmaven.test.skip=true" clean package
- name: Upload build
uses: actions/upload-artifact@v4
with:
name: Linux-${{ matrix.architecture.name }}-Build-JDK${{ matrix.java_version }}
path: .
compression-level: 9
Windows-Build:
strategy:
fail-fast: true
matrix:
architecture:
- name: x86_64
msvc_code: x64
- name: x86
msvc_code: x64_x86
- name: aarch64
msvc_code: x64_arm64
- name: armv7
msvc_code: x64_arm
java_version: [ 8, 11, 17, 21 ]
name: Windows-${{ matrix.architecture.name }}-Build-JDK${{ matrix.java_version }}
runs-on: windows-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup JDK
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: ${{ matrix.java_version }}
architecture: 'x64'
check-latest: true
- name: Enable compiler
uses: ilammy/msvc-dev-cmd@v1
with:
arch: ${{ matrix.architecture.msvc_code }}
- name: Build
run: mvn -B -V -ntp --file pom.xml -P windows-${{ matrix.architecture.name }} "-Dmaven.test.skip=true" clean package
- name: Upload build
uses: actions/upload-artifact@v4
with:
name: Windows-${{ matrix.architecture.name }}-Build-JDK${{ matrix.java_version }}
path: .
compression-level: 9
OSX-Build:
strategy:
fail-fast: true
matrix:
architecture:
- name: x86_64
- name: aarch64
java_version: [ 8, 11, 17, 21 ]
name: OSX-${{ matrix.architecture.name }}-Build-JDK${{ matrix.java_version }}
runs-on: macos-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup JDK
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: ${{ matrix.java_version }}
architecture: 'x64'
check-latest: true
- name: Build
run: mvn -B -V -ntp --file pom.xml -P osx-${{ matrix.architecture.name }} "-Dmaven.test.skip=true" clean package
- name: Upload build
uses: actions/upload-artifact@v4
with:
name: OSX-${{ matrix.architecture.name }}-Build-JDK${{ matrix.java_version }}
path: .
compression-level: 9
Complete-Build:
strategy:
fail-fast: true
matrix:
java_version: [ 8, 11, 17, 21 ]
needs: [ Linux-Build, Windows-Build, OSX-Build ]
name: Complete-Build-JDK${{ matrix.java_version }}
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup JDK
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: ${{ matrix.java_version }}
architecture: 'x64'
check-latest: true
- name: Download builds
uses: actions/download-artifact@v4
with:
pattern: "*-JDK${{ matrix.java_version }}"
path: builds/
merge-multiple: false
- name: Copy builds
shell: /usr/bin/bash -e {0}
run: |
OUT=$PWD
rootPaths=($(find ./builds/*/natives/ -type d -name "target" | grep -oiP '(.*)\/([^-]*-[^-]*)-Build-JDK([0-9]*)(?=\/natives\/\2\/target)'))
paths=($(find ./builds/*/natives/ -type d -name "target" | grep -oiP '(?:(.*)\/([^-]*-[^-]*)-Build-JDK([0-9]*)\/)natives\/\2\/target'))
for i in "${!paths[@]}"; do
rootPath="${rootPaths[$i]}"
rootPathLen="${#rootPath}"
path="${paths[$i]}"
cd $rootPath
path=.${path:rootPathLen:256}
cp -r --parent $path $OUT
cd $OUT
done
- name: Build
run: mvn -B -V -ntp --file pom.xml -P release "-Dmaven.test.skip=true" package
- name: Upload build
uses: actions/upload-artifact@v4
with:
name: Complete-Build-JDK${{ matrix.java_version }}
path: .
compression-level: 9
Linux-Test:
strategy:
fail-fast: true
matrix:
architecture:
- name: x86_64
runs_on: ubuntu-24.04
java_distro: 'temurin'
java_name: x64
linux_name: amd64
is_ports: false
qemu_package_name: x86
qemu_name: x86_64
- name: x86
runs_on: ubuntu-22.04
java_distro: 'liberica'
java_name: x86
linux_name: i386
is_ports: false
qemu_package_name: x86
qemu_name: i386
- name: aarch64
runs_on: ubuntu-24.04
java_distro: 'temurin'
java_name: aarch64
linux_name: arm64
is_ports: true
qemu_package_name: arm
qemu_name: aarch64
- name: armv7
runs_on: ubuntu-24.04
java_distro: 'temurin'
java_name: arm
linux_name: armhf
is_ports: true
qemu_package_name: arm
qemu_name: armhf
- name: ppc64le
runs_on: ubuntu-24.04
java_distro: 'temurin'
java_name: ppc64le
linux_name: ppc64el
is_ports: true
qemu_package_name: ppc
qemu_name: ppc64el
- name: riscv64
runs_on: ubuntu-24.04
java_distro: 'temurin'
java_name: riscv64
linux_name: riscv64
is_ports: true
qemu_package_name: misc
qemu_name: riscv64
- name: s390x
runs_on: ubuntu-24.04
java_distro: 'temurin'
java_name: s390x
linux_name: s390x
is_ports: true
qemu_package_name: misc
qemu_name: s390x
java_version: [ 8, 11, 17, 21 ]
exclude:
- architecture:
name: armv7
java_distro: 'temurin'
java_version: 17
- architecture:
name: armv7
java_distro: 'temurin'
java_version: 21
- architecture:
name: s390x
java_distro: 'temurin'
java_version: 8
- architecture:
name: riscv64
java_distro: 'temurin'
java_version: 8
- architecture:
name: riscv64
java_distro: 'temurin'
java_version: 11
needs: Linux-Build
name: Linux-${{ matrix.architecture.name }}-Test-JDK${{ matrix.java_version }}
runs-on: ${{ matrix.architecture.runs_on }}
steps:
- name: Setup QEMU
run: |
sudo dpkg --add-architecture ${{ matrix.architecture.linux_name }}
sudo rm -f /etc/apt/sources.list /etc/apt/sources.list.d/ubuntu.sources
if [[ ${{ matrix.architecture.is_ports }} != true ]]; then
echo "deb [arch=amd64,${{ matrix.architecture.linux_name }}] http://azure.archive.ubuntu.com/ubuntu/ $(lsb_release -sc) main restricted universe multiverse" | sudo tee /etc/apt/sources.list.d/ubuntu.list
echo "deb [arch=amd64,${{ matrix.architecture.linux_name }}] http://azure.archive.ubuntu.com/ubuntu/ $(lsb_release -sc)-updates main restricted universe multiverse" | sudo tee /etc/apt/sources.list.d/ubuntu-updates.list
echo "deb [arch=amd64,${{ matrix.architecture.linux_name }}] http://azure.archive.ubuntu.com/ubuntu/ $(lsb_release -sc)-security main restricted universe multiverse" | sudo tee /etc/apt/sources.list.d/ubuntu-security.list
else
echo "deb [arch=amd64] http://azure.archive.ubuntu.com/ubuntu/ $(lsb_release -sc) main restricted universe multiverse" | sudo tee /etc/apt/sources.list.d/ubuntu.list
echo "deb [arch=amd64] http://azure.archive.ubuntu.com/ubuntu/ $(lsb_release -sc)-updates main restricted universe multiverse" | sudo tee /etc/apt/sources.list.d/ubuntu-updates.list
echo "deb [arch=amd64] http://azure.archive.ubuntu.com/ubuntu/ $(lsb_release -sc)-security main restricted universe multiverse" | sudo tee /etc/apt/sources.list.d/ubuntu-security.list
fi
if [[ ${{ matrix.architecture.is_ports}} == true ]]; then
echo "deb [arch=${{ matrix.architecture.linux_name }}] http://azure.ports.ubuntu.com/ubuntu-ports/ $(lsb_release -sc) main restricted universe multiverse" | sudo tee /etc/apt/sources.list.d/ubuntu-ports.list
echo "deb [arch=${{ matrix.architecture.linux_name }}] http://azure.ports.ubuntu.com/ubuntu-ports/ $(lsb_release -sc)-updates main restricted universe multiverse" | sudo tee /etc/apt/sources.list.d/ubuntu-ports-updates.list
echo "deb [arch=${{ matrix.architecture.linux_name }}] http://azure.ports.ubuntu.com/ubuntu-ports/ $(lsb_release -sc)-security main restricted universe multiverse" | sudo tee /etc/apt/sources.list.d/ubuntu-ports-security.list
fi
sudo apt-get update -y
sudo apt-get --fix-broken install
sudo NEEDRESTART_SUSPEND=true apt-get install -y qemu-system-${{ matrix.architecture.qemu_package_name }} qemu-user qemu-utils \
libc6:amd64 libc6:${{ matrix.architecture.linux_name }} libstdc++6:amd64 libstdc++6:${{ matrix.architecture.linux_name }} libtinfo6:amd64 libtinfo6:${{ matrix.architecture.linux_name }} \
libatomic1:amd64 libatomic1:${{ matrix.architecture.linux_name }} zlib1g:amd64 zlib1g:${{ matrix.architecture.linux_name }}
cd /opt
sudo apt-get download bash:${{ matrix.architecture.linux_name }}
sudo mkdir -p bashdata
sudo ar x bash_*.deb --output=bashdata
sudo tar xf bashdata/data.tar.* -C bashdata
if [[ -f bashdata/usr/bin/bash ]]; then
sudo mv bashdata/usr/bin/bash /opt/bash
elif [[ -f bashdata/bin/bash ]]; then
sudo mv bashdata/bin/bash /opt/bash
fi
sudo rm -r bash_*.deb bashdata
- name: Setup JDK
uses: actions/setup-java@v4
with:
distribution: ${{ matrix.architecture.java_distro }}
java-version: ${{ matrix.java_version }}
architecture: ${{ matrix.architecture.java_name }}
check-latest: true
- name: Download build
uses: actions/download-artifact@v4
with:
name: Linux-${{ matrix.architecture.name }}-Build-JDK${{ matrix.java_version }}
path: .
- name: Test
run: |
qemu-${{ matrix.architecture.qemu_name }} /opt/bash -c "mvn -B -V -ntp --file pom.xml -P release test"
Windows-Test:
strategy:
fail-fast: false
matrix:
architecture:
- name: x86_64
runs_on: windows-2022
java_distro: 'temurin'
java_name: x64
- name: x86
runs_on: windows-2022
java_distro: 'temurin'
java_name: x86
- name: aarch64
runs_on: self-hosted
java_distro: 'liberica'
java_name: aarch64
java_version: [ 8, 11, 17, 21 ]
exclude:
- architecture:
name: x86
java_distro: 'temurin'
java_version: 21
- architecture:
name: aarch64
java_distro: 'liberica'
java_version: 8
needs: Windows-Build
name: Windows-${{ matrix.architecture.name }}-Test-JDK${{ matrix.java_version }}
runs-on: ${{ matrix.architecture.runs_on }}
steps:
- name: Setup JDK
uses: actions/setup-java@v4
with:
distribution: ${{ matrix.architecture.java_distro }}
java-version: ${{ matrix.java_version }}
architecture: ${{ matrix.architecture.java_name }}
check-latest: true
- name: Download build
uses: actions/download-artifact@v4
with:
name: Windows-${{ matrix.architecture.name }}-Build-JDK${{ matrix.java_version }}
path: .
- name: Test
run: |
mvn -B -V -ntp --file pom.xml -P release test
OSX-Test:
strategy:
fail-fast: true
matrix:
architecture:
- name: x86_64
runs_on: macos-14
java_distro: 'temurin'
java_name: x64
- name: aarch64
runs_on: macos-14
java_distro: 'temurin'
java_name: aarch64
java_version: [ 8, 11, 17, 21 ]
include:
- architecture:
name: aarch64
runs_on: macos-14
java_distro: 'liberica'
java_name: aarch64
java_version: 8
exclude:
- architecture:
name: aarch64
java_distro: 'temurin'
java_version: 8
needs: OSX-Build
name: OSX-${{ matrix.architecture.name }}-Test-JDK${{ matrix.java_version }}
runs-on: ${{ matrix.architecture.runs_on }}
steps:
- name: Setup JDK
uses: actions/setup-java@v4
with:
distribution: ${{ matrix.architecture.java_distro }}
java-version: ${{ matrix.java_version }}
architecture: ${{ matrix.architecture.java_name }}
check-latest: true
- name: Download build
uses: actions/download-artifact@v4
with:
name: OSX-${{ matrix.architecture.name }}-Build-JDK${{ matrix.java_version }}
path: .
- name: Test
run: |
mvn -B -V -ntp --file pom.xml -P release test