Skip to content

Commit 8790d37

Browse files
committed
👷 (feat): Add ARM64 Builds
1 parent 45bab8f commit 8790d37

File tree

4 files changed

+74
-33
lines changed

4 files changed

+74
-33
lines changed

.github/workflows/early-access.yaml

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ jobs:
6363
fail-fast: false
6464
matrix:
6565
# binaries wanted: linux amd64, mac M1, mac intel, windows x86
66-
os: [ ubuntu-24.04, macos-15, macos-15-intel, windows-2025 ]
66+
os: [ ubuntu-24.04, ubuntu-22.04-arm, macos-15, macos-15-intel, windows-2025 ]
6767
runs-on: ${{ matrix.os }}
6868

6969
steps:
@@ -102,8 +102,8 @@ jobs:
102102
- name: 'Maven clean'
103103
run: ./mvnw clean -Dmrm=false -V -B -ntp -e
104104

105-
- name: 'Patch GraalVM libs for only requiring glibc 2.12'
106-
if: ${{ env.OS == 'linux' }}
105+
- name: 'Patch AMD64 GraalVM libs for only requiring glibc 2.28'
106+
if: ${{ env.OS == 'linux' && env.ARCH == 'amd64' }}
107107
shell: bash
108108
run: |
109109
mkdir -p client/target/graalvm-libs-for-glibc-2.12
@@ -123,6 +123,27 @@ jobs:
123123
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
124124
objcopy --redefine-syms=client/src/main/resources/glibc/glibc.redef client/target/graalvm-libs-for-glibc-2.12/Scrt1.o 2>/dev/null
125125
126+
- name: 'Patch ARM64 GraalVM libs for only requiring glibc 2.28'
127+
if: ${{ env.OS == 'linux' && env.ARCH == 'aarch64' }}
128+
shell: bash
129+
run: |
130+
mkdir -p client/target/graalvm-libs-for-glibc-2.28
131+
132+
: patch common libraries
133+
( find "$GRAALVM_HOME/lib/static/linux-aarch64/glibc" -name '*.a'
134+
ls -1 /lib/aarch64-linux-gnu/libz.a
135+
ls -1 "$GRAALVM_HOME/lib/svm/clibraries/linux-aarch64/libjvm.a"
136+
ls -1 "$GRAALVM_HOME/lib/svm/clibraries/linux-aarch64/liblibchelper.a"
137+
) | while IFS= read -r input; do
138+
output="client/target/graalvm-libs-for-glibc-2.28/$(basename -- "$input")"
139+
objcopy --redefine-syms=client/src/main/resources/glibc/glibc.redef -- "$input" "$output" 2>/dev/null
140+
done
141+
142+
: patch gcc startfile
143+
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
144+
ld -r /lib/aarch64-linux-gnu/Scrt1.o client/target/dynamic-libc-start.o -o client/target/graalvm-libs-for-glibc-2.28/Scrt1.o
145+
objcopy --redefine-syms=client/src/main/resources/glibc/glibc.redef client/target/graalvm-libs-for-glibc-2.28/Scrt1.o 2>/dev/null
146+
126147
- name: 'Build native distribution'
127148
run: ./mvnw verify -Pnative -Dmrm=false -V -B -ntp -e -s .mvn/release-settings.xml
128149

.github/workflows/release.yaml

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@ jobs:
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-22.04-arm, macos-15-intel, macos-15, windows-2025 ]
3939
runs-on: ${{ matrix.os }}
4040

4141
steps:
@@ -74,31 +74,51 @@ jobs:
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.28'
78+
if: runner.os == 'linux' && runner.arch == 'X64'
7979
shell: bash
8080
run: |
81-
mkdir -p client/target/graalvm-libs-for-glibc-2.12
81+
mkdir -p client/target/graalvm-libs-for-glibc-2.28
8282
8383
: patch common libraries
8484
( find "$GRAALVM_HOME/lib/static/linux-amd64/glibc" -name '*.a'
8585
ls -1 /lib/x86_64-linux-gnu/libz.a
8686
ls -1 "$GRAALVM_HOME/lib/svm/clibraries/linux-amd64/libjvm.a"
8787
ls -1 "$GRAALVM_HOME/lib/svm/clibraries/linux-amd64/liblibchelper.a"
8888
) | while IFS= read -r input; do
89-
output="client/target/graalvm-libs-for-glibc-2.12/$(basename -- "$input")"
89+
output="client/target/graalvm-libs-for-glibc-2.28/$(basename -- "$input")"
9090
objcopy --redefine-syms=client/src/main/resources/glibc/glibc.redef -- "$input" "$output" 2>/dev/null
9191
done
9292
9393
: patch gcc startfile
9494
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
95-
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
96-
objcopy --redefine-syms=client/src/main/resources/glibc/glibc.redef client/target/graalvm-libs-for-glibc-2.12/Scrt1.o 2>/dev/null
95+
ld -r /lib/x86_64-linux-gnu/Scrt1.o client/target/dynamic-libc-start.o -o client/target/graalvm-libs-for-glibc-2.28/Scrt1.o
96+
objcopy --redefine-syms=client/src/main/resources/glibc/glibc.redef client/target/graalvm-libs-for-glibc-2.28/Scrt1.o 2>/dev/null
97+
98+
- name: 'Patch ARM64 GraalVM libs for only requiring glibc 2.28'
99+
if: runner.os == 'linux' && runner.arch == 'ARM64'
100+
shell: bash
101+
run: |
102+
mkdir -p client/target/graalvm-libs-for-glibc-2.28
97103
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.28/$(basename -- "$input")"
111+
objcopy --redefine-syms=client/src/main/resources/glibc/glibc.redef -- "$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.28/Scrt1.o
117+
objcopy --redefine-syms=client/src/main/resources/glibc/glibc.redef client/target/graalvm-libs-for-glibc-2.28/Scrt1.o 2>/dev/null
98118
- name: 'Build native distribution'
99119
run: ./mvnw verify -Pnative -Dmrm=false -B -ntp -e -DskipTests -s .mvn/release-settings.xml
100120

101-
- name: 'Verify native binary for only requiring glibc 2.12'
121+
- name: 'Verify native binary for only requiring glibc 2.28'
102122
if: ${{ env.OS == 'linux' }}
103123
shell: bash
104124
run: |

client/src/main/resources/glibc/dynamic-libc-start.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@
2727
#include <dlfcn.h>
2828
#include <stdint.h>
2929

30-
__asm__(".symver dlsym,dlsym@GLIBC_2.2.5");
31-
__asm__(".symver dlvsym,dlvsym@GLIBC_2.2.5");
30+
__asm__(".symver dlsym,dlsym@GLIBC_2.28");
31+
__asm__(".symver dlvsym,dlvsym@GLIBC_2.28");
3232

3333
/* __libc_csu_init is statically linked into each program, and passed to __libc_start_main
3434
* when the program is running with an old glibc (<2.34).

client/src/main/resources/glibc/glibc.redef

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -15,22 +15,22 @@
1515
# specific language governing permissions and limitations
1616
# under the License.
1717
__libc_start_main __dynamic_libc_start_main
18-
clock_gettime clock_gettime@GLIBC_2.2.5
19-
dlopen dlopen@GLIBC_2.2.5
20-
dlsym dlsym@GLIBC_2.2.5
21-
memcpy memcpy@GLIBC_2.2.5
22-
posix_spawn posix_spawn@GLIBC_2.2.5
23-
pthread_attr_getguardsize pthread_attr_getguardsize@GLIBC_2.2.5
24-
pthread_attr_getstack pthread_attr_getstack@GLIBC_2.2.5
25-
pthread_attr_setstacksize pthread_attr_setstacksize@GLIBC_2.2.5
26-
pthread_condattr_setclock pthread_condattr_setclock@GLIBC_2.3.3
27-
pthread_create pthread_create@GLIBC_2.2.5
28-
pthread_getattr_np pthread_getattr_np@GLIBC_2.2.5
29-
pthread_join pthread_join@GLIBC_2.2.5
30-
pthread_kill pthread_kill@GLIBC_2.2.5
31-
pthread_mutex_trylock pthread_mutex_trylock@GLIBC_2.2.5
32-
pthread_setname_np pthread_setname_np@GLIBC_2.12
33-
sem_destroy sem_destroy@GLIBC_2.2.5
34-
sem_init sem_init@GLIBC_2.2.5
35-
sem_post sem_post@GLIBC_2.2.5
36-
sem_wait sem_wait@GLIBC_2.2.5
18+
clock_gettime clock_gettime@GLIBC_2.28
19+
dlopen dlopen@GLIBC_2.28
20+
dlsym dlsym@GLIBC_2.28
21+
memcpy memcpy@GLIBC_2.28
22+
posix_spawn posix_spawn@GLIBC_2.28
23+
pthread_attr_getguardsize pthread_attr_getguardsize@GLIBC_2.28
24+
pthread_attr_getstack pthread_attr_getstack@GLIBC_2.28
25+
pthread_attr_setstacksize pthread_attr_setstacksize@GLIBC_2.28
26+
pthread_condattr_setclock pthread_condattr_setclock@GLIBC_2.28
27+
pthread_create pthread_create@GLIBC_2.28
28+
pthread_getattr_np pthread_getattr_np@GLIBC_2.28
29+
pthread_join pthread_join@GLIBC_2.28
30+
pthread_kill pthread_kill@GLIBC_2.28
31+
pthread_mutex_trylock pthread_mutex_trylock@GLIBC_2.28
32+
pthread_setname_np pthread_setname_np@GLIBC_2.18
33+
sem_destroy sem_destroy@GLIBC_2.28
34+
sem_init sem_init@GLIBC_2.28
35+
sem_post sem_post@GLIBC_2.28
36+
sem_wait sem_wait@GLIBC_2.28

0 commit comments

Comments
 (0)