[I] Build for Linux on aarch64 [maven-mvnd]
PMExtra opened a new issue, #888: URL: https://github.com/apache/maven-mvnd/issues/888 I found some issues and resolved them when building mvnd for Linux on aarch64. I'm using docker image `ubuntu:22.04` on aarch64 machine. This is my patch: ```patch diff --git a/client/pom.xml b/client/pom.xml index 679cc23d..3a900043 100644 --- a/client/pom.xml +++ b/client/pom.xml @@ -228,6 +228,8 @@ -H:-ParseRuntimeOptions -H:+AddAllCharsets -H:+ReportExceptionStackTraces + -H:+TraceNativeToolUsage + -H:PageSize=65536 -ea diff --git a/client/src/main/resources/glibc/dynamic-libc-start.c b/client/src/main/resources/glibc/dynamic-libc-start.c index 2272b255..09097cbc 100644 --- a/client/src/main/resources/glibc/dynamic-libc-start.c +++ b/client/src/main/resources/glibc/dynamic-libc-start.c @@ -27,8 +27,8 @@ #include #include -__asm__(".symver dlsym,dlsym@GLIBC_2.2.5"); -__asm__(".symver dlvsym,dlvsym@GLIBC_2.2.5"); +__asm__(".symver dlsym,dlsym@GLIBC_2.17"); +__asm__(".symver dlvsym,dlvsym@GLIBC_2.17"); /* __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). diff --git a/client/src/main/resources/glibc/glibc.redef b/client/src/main/resources/glibc/glibc.redef index 10342159..4d330e02 100644 --- a/client/src/main/resources/glibc/glibc.redef +++ b/client/src/main/resources/glibc/glibc.redef @@ -15,21 +15,21 @@ # 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_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.17 +dlopen dlopen@GLIBC_2.17 +dlsym dlsym@GLIBC_2.17 +memcpy memcpy@GLIBC_2.17 +posix_spawn posix_spawn@GLIBC_2.17 +pthread_attr_getguardsize pthread_attr_getguardsize@GLIBC_2.17 +pthread_attr_getstack pthread_attr_getstack@GLIBC_2.17 +pthread_attr_setstacksize pthread_attr_setstacksize@GLIBC_2.17 +pthread_condattr_setclock pthread_condattr_setclock@GLIBC_2.17 +pthread_create pthread_create@GLIBC_2.17 +pthread_getattr_np pthread_getattr_np@GLIBC_2.17 +pthread_join pthread_join@GLIBC_2.17 +pthread_kill pthread_kill@GLIBC_2.17 +pthread_setname_np pthread_setname_np@GLIBC_2.17 +sem_destroy sem_destroy@GLIBC_2.17 +sem_init sem_init@GLIBC_2.17 +sem_post sem_post@GLIBC_2.17 +sem_wait sem_wait@GLIBC_2.17 ``` After the patch, it builds successfully and works fine on my machine. I'm looking forward to the official release of Linux aarch64 pre-built distribution. But until then, this patch may help some people in need, so I share it. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: issues-unsubscr...@maven.apache.org.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org
Re: [I] Build for Linux on aarch64 [maven-mvnd]
gnodet commented on issue #888: URL: https://github.com/apache/maven-mvnd/issues/888#issuecomment-1767722017 My understanding is that it would go against https://github.com/apache/maven-mvnd/issues/823. Can this patch be adapted to be inlined and only require glibc 2.12 ? It would be nice to be able to provide native binaries for linux-arm64, but I don't think GitHub action has any runner yet (see https://github.com/actions/runner-images/issues/5631). -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: issues-unsubscr...@maven.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org
Re: [I] Build for Linux on aarch64 [maven-mvnd]
PMExtra commented on issue #888: URL: https://github.com/apache/maven-mvnd/issues/888#issuecomment-1767766564 I'm sorry that I do not specialize in native programming. So, I'm unsure if my build only requires glibc@2.12. But I built the project followed by the official workflow (https://github.com/apache/maven-mvnd/blob/1.0-m7/.github/workflows/release.yaml#L67) which contains #825 that solves #823. I just replaced all `amd64` or `x86_64` with `aarch64` after this patch. Then everything was fine, even the `Verify native binary for only requiring glibc 2.12` script passed. (https://github.com/apache/maven-mvnd/blob/1.0-m7/.github/workflows/release.yaml#L91). When I copy the target to another aarch64 machine that runs Kylin-OS (a Linux distribution that seems like CentOS 8), it still works fine. It is worth mentioning that my `PAGE_SIZE` is 64k rather than 4k (maybe 4k is more common). So I have to set `-H:PageSize=65536`. We can get more information from https://github.com/oracle/graal/pull/5605 -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: issues-unsubscr...@maven.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org
Re: [I] Build for Linux on aarch64 [maven-mvnd]
PMExtra commented on issue #888: URL: https://github.com/apache/maven-mvnd/issues/888#issuecomment-1767772118 By the way, I built the project by Docker which runs on my Apple M1 Macbook. So, can we use the macOS runner to start up a container and then build the project for linux-aarch64? -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: issues-unsubscr...@maven.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org
Re: [I] Build for Linux on aarch64 [maven-mvnd]
gnodet commented on issue #888: URL: https://github.com/apache/maven-mvnd/issues/888#issuecomment-1767863966 > By the way, I built the project by Docker which runs on my Apple M1 Macbook. > > So, can we use the macOS runner to start up a container and then build the project for linux-aarch64? The mentioned runner is my laptop :-) If you can create a PR that would add provide a script that can generate the linux-aarch64 binaries, I should be able to upload those during the release process (please add the step to https://github.com/apache/maven-mvnd/blob/master/RELEASING.adoc in the PR...) -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: issues-unsubscr...@maven.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org
Re: [I] Build for Linux on aarch64 [maven-mvnd]
gzm55 commented on issue #888: URL: https://github.com/apache/maven-mvnd/issues/888#issuecomment-1873664250 > I'm sorry that I do not specialize in native programming. So, I'm unsure if my build only requires glibc@2.12. > > But I built the project followed by the official workflow (https://github.com/apache/maven-mvnd/blob/1.0-m7/.github/workflows/release.yaml#L67) which contains #825 that solves #823. > > I just replaced all `amd64` or `x86_64` with `aarch64` after this patch. > > Then everything was fine, even the `Verify native binary for only requiring glibc 2.12` script passed. (https://github.com/apache/maven-mvnd/blob/1.0-m7/.github/workflows/release.yaml#L91). > > When I copy the target to another aarch64 machine that runs Kylin-OS (a Linux distribution that seems like CentOS 8), it still works fine. > > It is worth mentioning that my `PAGE_SIZE` is 64k rather than 4k (maybe 4k is more common). So I have to set `-H:PageSize=65536`. We can get more information from [oracle/graal#5605](https://github.com/oracle/graal/pull/5605) For aarch64 arch, the oldest public released glibc is glibc-2.17 for CentOS7. It is reasonable that we limit the running glibc >= 2.17 on aarch64 cpu. But the resource should be upload for each hardware (x64/arm64). Also the UT in CI could be improved to check dependencies strictly for each arch. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: issues-unsubscr...@maven.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org