Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 24 additions & 3 deletions .github/workflows/early-access.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ jobs:
fail-fast: false
matrix:
# binaries wanted: linux amd64, mac M1, mac intel, windows x86
os: [ ubuntu-24.04, macos-15, macos-15-intel, windows-2025 ]
os: [ ubuntu-24.04, ubuntu-22.04-arm, macos-15, macos-15-intel, windows-2025 ]
runs-on: ${{ matrix.os }}

steps:
Expand Down Expand Up @@ -102,8 +102,8 @@ jobs:
- name: 'Maven clean'
run: ./mvnw clean -Dmrm=false -V -B -ntp -e

- name: 'Patch GraalVM libs for only requiring glibc 2.12'
if: ${{ env.OS == 'linux' }}
- name: 'Patch AMD64 GraalVM libs for only requiring glibc 2.28'
if: ${{ env.OS == 'linux' && env.ARCH == 'amd64' }}
shell: bash
run: |
mkdir -p client/target/graalvm-libs-for-glibc-2.12
Expand All @@ -123,6 +123,27 @@ jobs:
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
objcopy --redefine-syms=client/src/main/resources/glibc/glibc.redef client/target/graalvm-libs-for-glibc-2.12/Scrt1.o 2>/dev/null

- name: 'Patch ARM64 GraalVM libs for only requiring glibc 2.28'
if: ${{ env.OS == 'linux' && env.ARCH == 'aarch64' }}
shell: bash
run: |
mkdir -p client/target/graalvm-libs-for-glibc-2.28

: patch common libraries
( find "$GRAALVM_HOME/lib/static/linux-aarch64/glibc" -name '*.a'
ls -1 /lib/aarch64-linux-gnu/libz.a
ls -1 "$GRAALVM_HOME/lib/svm/clibraries/linux-aarch64/libjvm.a"
ls -1 "$GRAALVM_HOME/lib/svm/clibraries/linux-aarch64/liblibchelper.a"
) | while IFS= read -r input; do
output="client/target/graalvm-libs-for-glibc-2.28/$(basename -- "$input")"
objcopy --redefine-syms=client/src/main/resources/glibc/glibc.redef -- "$input" "$output" 2>/dev/null
done

: patch gcc startfile
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
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
objcopy --redefine-syms=client/src/main/resources/glibc/glibc.redef client/target/graalvm-libs-for-glibc-2.28/Scrt1.o 2>/dev/null

- name: 'Build native distribution'
run: ./mvnw verify -Pnative -Dmrm=false -V -B -ntp -e -s .mvn/release-settings.xml

Expand Down
38 changes: 29 additions & 9 deletions .github/workflows/release.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,8 @@ jobs:
strategy:
fail-fast: true
matrix:
# binaries wanted: linux amd64, mac intel, mac M1, windows x86
os: [ ubuntu-24.04, macos-15-intel, macos-15, windows-2025 ]
# binaries wanted: linux amd64, linux arm64, mac intel, mac M1, windows x86
os: [ ubuntu-24.04, ubuntu-22.04-arm, macos-15-intel, macos-15, windows-2025 ]
runs-on: ${{ matrix.os }}

steps:
Expand Down Expand Up @@ -74,31 +74,51 @@ jobs:
- name: 'Maven clean'
run: ./mvnw clean -Dmrm=false -B -ntp -e

- name: 'Patch GraalVM libs for only requiring glibc 2.12'
if: ${{ env.OS == 'linux' }}
- name: 'Patch AMD64 GraalVM libs for only requiring glibc 2.28'
if: runner.os == 'linux' && runner.arch == 'X64'
shell: bash
run: |
mkdir -p client/target/graalvm-libs-for-glibc-2.12
mkdir -p client/target/graalvm-libs-for-glibc-2.28

: patch common libraries
( find "$GRAALVM_HOME/lib/static/linux-amd64/glibc" -name '*.a'
ls -1 /lib/x86_64-linux-gnu/libz.a
ls -1 "$GRAALVM_HOME/lib/svm/clibraries/linux-amd64/libjvm.a"
ls -1 "$GRAALVM_HOME/lib/svm/clibraries/linux-amd64/liblibchelper.a"
) | while IFS= read -r input; do
output="client/target/graalvm-libs-for-glibc-2.12/$(basename -- "$input")"
output="client/target/graalvm-libs-for-glibc-2.28/$(basename -- "$input")"
objcopy --redefine-syms=client/src/main/resources/glibc/glibc.redef -- "$input" "$output" 2>/dev/null
done

: patch gcc startfile
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
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
objcopy --redefine-syms=client/src/main/resources/glibc/glibc.redef client/target/graalvm-libs-for-glibc-2.12/Scrt1.o 2>/dev/null
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
objcopy --redefine-syms=client/src/main/resources/glibc/glibc.redef client/target/graalvm-libs-for-glibc-2.28/Scrt1.o 2>/dev/null

- name: 'Patch ARM64 GraalVM libs for only requiring glibc 2.28'
if: runner.os == 'linux' && runner.arch == 'ARM64'
shell: bash
run: |
mkdir -p client/target/graalvm-libs-for-glibc-2.28

: patch common libraries
( find "$GRAALVM_HOME/lib/static/linux-aarch64/glibc" -name '*.a'
ls -1 /lib/aarch64-linux-gnu/libz.a
ls -1 "$GRAALVM_HOME/lib/svm/clibraries/linux-aarch64/libjvm.a"
ls -1 "$GRAALVM_HOME/lib/svm/clibraries/linux-aarch64/liblibchelper.a"
) | while IFS= read -r input; do
output="client/target/graalvm-libs-for-glibc-2.28/$(basename -- "$input")"
objcopy --redefine-syms=client/src/main/resources/glibc/glibc.redef -- "$input" "$output" 2>/dev/null
done

: patch gcc startfile
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
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
objcopy --redefine-syms=client/src/main/resources/glibc/glibc.redef client/target/graalvm-libs-for-glibc-2.28/Scrt1.o 2>/dev/null
- name: 'Build native distribution'
run: ./mvnw verify -Pnative -Dmrm=false -B -ntp -e -DskipTests -s .mvn/release-settings.xml

- name: 'Verify native binary for only requiring glibc 2.12'
- name: 'Verify native binary for only requiring glibc 2.28'
if: ${{ env.OS == 'linux' }}
shell: bash
run: |
Expand Down
4 changes: 2 additions & 2 deletions client/src/main/resources/glibc/dynamic-libc-start.c
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,8 @@
#include <dlfcn.h>
#include <stdint.h>

__asm__(".symver dlsym,dlsym@GLIBC_2.2.5");
__asm__(".symver dlvsym,dlvsym@GLIBC_2.2.5");
__asm__(".symver dlsym,dlsym@GLIBC_2.28");
__asm__(".symver dlvsym,dlvsym@GLIBC_2.28");

/* __libc_csu_init is statically linked into each program, and passed to __libc_start_main
* when the program is running with an old glibc (<2.34).
Expand Down
38 changes: 19 additions & 19 deletions client/src/main/resources/glibc/glibc.redef
Original file line number Diff line number Diff line change
Expand Up @@ -15,22 +15,22 @@
# specific language governing permissions and limitations
# under the License.
__libc_start_main __dynamic_libc_start_main
clock_gettime clock_gettime@GLIBC_2.2.5
dlopen dlopen@GLIBC_2.2.5
dlsym dlsym@GLIBC_2.2.5
memcpy memcpy@GLIBC_2.2.5
posix_spawn posix_spawn@GLIBC_2.2.5
pthread_attr_getguardsize pthread_attr_getguardsize@GLIBC_2.2.5
pthread_attr_getstack pthread_attr_getstack@GLIBC_2.2.5
pthread_attr_setstacksize pthread_attr_setstacksize@GLIBC_2.2.5
pthread_condattr_setclock pthread_condattr_setclock@GLIBC_2.3.3
pthread_create pthread_create@GLIBC_2.2.5
pthread_getattr_np pthread_getattr_np@GLIBC_2.2.5
pthread_join pthread_join@GLIBC_2.2.5
pthread_kill pthread_kill@GLIBC_2.2.5
pthread_mutex_trylock pthread_mutex_trylock@GLIBC_2.2.5
pthread_setname_np pthread_setname_np@GLIBC_2.12
sem_destroy sem_destroy@GLIBC_2.2.5
sem_init sem_init@GLIBC_2.2.5
sem_post sem_post@GLIBC_2.2.5
sem_wait sem_wait@GLIBC_2.2.5
clock_gettime clock_gettime@GLIBC_2.28
dlopen dlopen@GLIBC_2.28
dlsym dlsym@GLIBC_2.28
memcpy memcpy@GLIBC_2.28
posix_spawn posix_spawn@GLIBC_2.28
pthread_attr_getguardsize pthread_attr_getguardsize@GLIBC_2.28
pthread_attr_getstack pthread_attr_getstack@GLIBC_2.28
pthread_attr_setstacksize pthread_attr_setstacksize@GLIBC_2.28
pthread_condattr_setclock pthread_condattr_setclock@GLIBC_2.28
pthread_create pthread_create@GLIBC_2.28
pthread_getattr_np pthread_getattr_np@GLIBC_2.28
pthread_join pthread_join@GLIBC_2.28
pthread_kill pthread_kill@GLIBC_2.28
pthread_mutex_trylock pthread_mutex_trylock@GLIBC_2.28
pthread_setname_np pthread_setname_np@GLIBC_2.18
sem_destroy sem_destroy@GLIBC_2.28
sem_init sem_init@GLIBC_2.28
sem_post sem_post@GLIBC_2.28
sem_wait sem_wait@GLIBC_2.28