3434 strategy :
3535 fail-fast : true
3636 matrix :
37- # binaries wanted: linux amd64, mac intel, mac M1, windows x86
38- os : [ ubuntu-24.04, macos-15-intel, macos-15, windows-2025 ]
37+ # binaries wanted: linux amd64, linux arm64, mac intel, mac M1, windows x86
38+ os : [ ubuntu-24.04, ubuntu-24.04-arm, macos-15-intel, macos-15, windows-2025 ]
3939 runs-on : ${{ matrix.os }}
4040
4141 steps :
7474 - name : ' Maven clean'
7575 run : ./mvnw clean -Dmrm=false -B -ntp -e
7676
77- - name : ' Patch GraalVM libs for only requiring glibc 2.12'
78- if : ${{ env.OS == 'linux' }}
77+ - name : ' Patch AMD64 GraalVM libs for only requiring glibc 2.12'
78+ if : ${{ env.OS == 'linux' && env.ARCH == 'amd64' }}
7979 shell : bash
8080 run : |
8181 mkdir -p client/target/graalvm-libs-for-glibc-2.12
@@ -95,18 +95,48 @@ jobs:
9595 ld -r /lib/x86_64-linux-gnu/Scrt1.o client/target/dynamic-libc-start.o -o client/target/graalvm-libs-for-glibc-2.12/Scrt1.o
9696 objcopy --redefine-syms=client/src/main/resources/glibc/glibc.redef client/target/graalvm-libs-for-glibc-2.12/Scrt1.o 2>/dev/null
9797
98+ - name : ' Patch ARM64 GraalVM libs for only requiring glibc 2.17'
99+ if : ${{ env.OS == 'linux' && env.ARCH == 'aarch64' }}
100+ shell : bash
101+ run : |
102+ mkdir -p client/target/graalvm-libs-for-glibc-2.17
103+
104+ : patch common libraries
105+ ( find "$GRAALVM_HOME/lib/static/linux-aarch64/glibc" -name '*.a'
106+ ls -1 /lib/aarch64-linux-gnu/libz.a
107+ ls -1 "$GRAALVM_HOME/lib/svm/clibraries/linux-aarch64/libjvm.a"
108+ ls -1 "$GRAALVM_HOME/lib/svm/clibraries/linux-aarch64/liblibchelper.a"
109+ ) | while IFS= read -r input; do
110+ output="client/target/graalvm-libs-for-glibc-2.17/$(basename -- "$input")"
111+ objcopy --redefine-syms=client/src/main/resources/glibc/glibc.redef.aarch64 -- "$input" "$output" 2>/dev/null
112+ done
113+
114+ : patch gcc startfile
115+ gcc -O3 -Os -Wall -Wextra -Werror -Wconversion -Wsign-conversion -Wcast-qual -pedantic -c -o client/target/dynamic-libc-start.o client/src/main/resources/glibc/dynamic-libc-start.c
116+ ld -r /lib/aarch64-linux-gnu/Scrt1.o client/target/dynamic-libc-start.o -o client/target/graalvm-libs-for-glibc-2.17/Scrt1.o
117+ objcopy --redefine-syms=client/src/main/resources/glibc/glibc.redef.aarch64 client/target/graalvm-libs-for-glibc-2.17/Scrt1.o 2>/dev/null
118+
98119 - name : ' Build native distribution'
99120 run : ./mvnw verify -Pnative -Dmrm=false -B -ntp -e -DskipTests -s .mvn/release-settings.xml
100121
101- - name : ' Verify native binary for only requiring glibc 2.12'
102- if : ${{ env.OS == 'linux' }}
122+ - name : ' Verify AMD64 native binary for only requiring glibc 2.12'
123+ if : ${{ env.OS == 'linux' && env.ARCH == 'amd64' }}
103124 shell : bash
104125 run : |
105126 (( 4 == "$(ldd client/target/mvnd | awk '{print $1}' | sort -u | grep -c 'lib\(c\|dl\|rt\|pthread\)\.so\.[0-9]')" )) || ( ldd client/target/mvnd && false )
106127 err=0
107128 objdump -T client/target/mvnd | grep GLIBC_ | grep -v 'GLIBC_\([01]\|2\.[0-9]\|2\.1[012]\)[^0-9]' || err=$?
108129 (( err == 1 ))
109130
131+ - name : ' Verify ARM64 native binary for only requiring glibc 2.17'
132+ if : ${{ env.OS == 'linux' && env.ARCH == 'aarch64' }}
133+ shell : bash
134+ run : |
135+ (( 4 == "$(ldd client/target/mvnd | awk '{print $1}' | sort -u | grep -c 'lib\(c\|dl\|rt\|pthread\)\.so\.[0-9]')" )) || ( ldd client/target/mvnd && false )
136+ err=0
137+ objdump -T client/target/mvnd | grep GLIBC_ | grep -v 'GLIBC_\([01]\|2\.[0-9]\|2\.1[017]\)[^0-9]' || err=$?
138+ (( err == 1 ))
139+
110140 - name : ' Upload artifact'
111141 uses : actions/upload-artifact@v7
112142 with :
@@ -246,6 +276,26 @@ jobs:
246276 asset_name : maven-mvnd-${{ env.VERSION }}-linux-amd64.tar.gz
247277 asset_content_type : application/x-gzip
248278
279+ - name : Deploy maven-mvnd-linux-aarch64.zip
280+ uses : actions/upload-release-asset@v1
281+ env :
282+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
283+ with :
284+ upload_url : ${{ steps.create_release.outputs.upload_url }}
285+ asset_path : mvnd-linux-aarch64/maven-mvnd-${{ env.VERSION }}-linux-aarch64.zip
286+ asset_name : maven-mvnd-${{ env.VERSION }}-linux-aarch64.zip
287+ asset_content_type : application/zip
288+
289+ - name : Deploy maven-mvnd-linux-aarch64.tar.gz
290+ uses : actions/upload-release-asset@v1
291+ env :
292+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
293+ with :
294+ upload_url : ${{ steps.create_release.outputs.upload_url }}
295+ asset_path : mvnd-linux-aarch64/maven-mvnd-${{ env.VERSION }}-linux-aarch64.tar.gz
296+ asset_name : maven-mvnd-${{ env.VERSION }}-linux-aarch64.tar.gz
297+ asset_content_type : application/x-gzip
298+
249299 - name : Deploy maven-mvnd-darwin-amd64.zip
250300 uses : actions/upload-release-asset@v1
251301 env :
0 commit comments