From c10e8c087c5e8c37a2d07b0bee91103cd1fe6b91 Mon Sep 17 00:00:00 2001 From: Zsombor Balogh Date: Tue, 19 Oct 2021 19:33:51 +0100 Subject: [PATCH 1/2] Build and load arm64 native libraries of java-runtime-interface-client --- .../api/client/runtimeapi/NativeClient.java | 10 +++++----- .../src/main/jni/Dockerfile.glibc | 4 +++- .../src/main/jni/Dockerfile.musl | 3 ++- .../src/main/jni/build-jni-lib.sh | 14 ++++++++++---- 4 files changed, 20 insertions(+), 11 deletions(-) diff --git a/aws-lambda-java-runtime-interface-client/src/main/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/NativeClient.java b/aws-lambda-java-runtime-interface-client/src/main/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/NativeClient.java index f3cda8bc..8326641f 100644 --- a/aws-lambda-java-runtime-interface-client/src/main/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/NativeClient.java +++ b/aws-lambda-java-runtime-interface-client/src/main/java/com/amazonaws/services/lambda/runtime/api/client/runtimeapi/NativeClient.java @@ -14,8 +14,10 @@ class NativeClient { private static final String nativeLibPath = "/tmp/.aws-lambda-runtime-interface-client"; private static final String[] libsToTry = { - "/aws-lambda-runtime-interface-client.glibc.so", - "/aws-lambda-runtime-interface-client.musl.so", + "/aws-lambda-runtime-interface-client.x86_64.glibc.so", + "/aws-lambda-runtime-interface-client.arm64.glibc.so", + "/aws-lambda-runtime-interface-client.x86_64.musl.so", + "/aws-lambda-runtime-interface-client.arm64.musl.so", }; private static final Throwable[] exceptions = new Throwable[libsToTry.length]; static { @@ -25,9 +27,7 @@ class NativeClient { Files.copy(lib, Paths.get(nativeLibPath), StandardCopyOption.REPLACE_EXISTING); System.load(nativeLibPath); loaded = true; - } catch (UnsatisfiedLinkError e) { - exceptions[i] = e; - } catch (Exception e) { + } catch (UnsatisfiedLinkError | Exception e) { exceptions[i] = e; } } diff --git a/aws-lambda-java-runtime-interface-client/src/main/jni/Dockerfile.glibc b/aws-lambda-java-runtime-interface-client/src/main/jni/Dockerfile.glibc index 9d46d2f9..faa8365d 100644 --- a/aws-lambda-java-runtime-interface-client/src/main/jni/Dockerfile.glibc +++ b/aws-lambda-java-runtime-interface-client/src/main/jni/Dockerfile.glibc @@ -1,5 +1,7 @@ # we use centos 7 to build against glibc 2.17 -FROM centos:7 + +ARG IMAGE_SOURCE=centos:7 +FROM ${IMAGE_SOURCE} ARG CURL_VERSION diff --git a/aws-lambda-java-runtime-interface-client/src/main/jni/Dockerfile.musl b/aws-lambda-java-runtime-interface-client/src/main/jni/Dockerfile.musl index d34253fa..426dd328 100644 --- a/aws-lambda-java-runtime-interface-client/src/main/jni/Dockerfile.musl +++ b/aws-lambda-java-runtime-interface-client/src/main/jni/Dockerfile.musl @@ -1,4 +1,5 @@ -FROM alpine:3 +ARG IMAGE_SOURCE=alpine:3 +FROM ${IMAGE_SOURCE} ARG CURL_VERSION diff --git a/aws-lambda-java-runtime-interface-client/src/main/jni/build-jni-lib.sh b/aws-lambda-java-runtime-interface-client/src/main/jni/build-jni-lib.sh index cac239a6..754294f0 100755 --- a/aws-lambda-java-runtime-interface-client/src/main/jni/build-jni-lib.sh +++ b/aws-lambda-java-runtime-interface-client/src/main/jni/build-jni-lib.sh @@ -8,9 +8,15 @@ DST_DIR=${1} CURL_VERSION=7.77.0 # compile the native library -docker build -f "${SRC_DIR}/Dockerfile.glibc" --build-arg CURL_VERSION=${CURL_VERSION} -t lambda-java-jni-lib-glibc "${SRC_DIR}" -docker run --rm --entrypoint /bin/cat lambda-java-jni-lib-glibc /src/aws-lambda-runtime-interface-client.so > "${DST_DIR}"/classes/aws-lambda-runtime-interface-client.glibc.so +docker build -f "${SRC_DIR}/Dockerfile.glibc" --build-arg CURL_VERSION="${CURL_VERSION}" --build-arg IMAGE_SOURCE=centos:7 -t lambda-java-jni-lib-glibc-x86_64 "${SRC_DIR}" +docker run --rm --entrypoint /bin/cat lambda-java-jni-lib-glibc /src/aws-lambda-runtime-interface-client.so > "${DST_DIR}"/classes/aws-lambda-runtime-interface-client.x86_64.glibc.so -docker build -f "${SRC_DIR}/Dockerfile.musl" --build-arg CURL_VERSION=${CURL_VERSION} -t lambda-java-jni-lib-musl "${SRC_DIR}" -docker run --rm --entrypoint /bin/cat lambda-java-jni-lib-musl /src/aws-lambda-runtime-interface-client.so > "${DST_DIR}"/classes/aws-lambda-runtime-interface-client.musl.so +docker build -f "${SRC_DIR}/Dockerfile.glibc" --build-arg CURL_VERSION="${CURL_VERSION}" --build-arg IMAGE_SOURCE=arm64v8/centos:7 -t lambda-java-jni-lib-glibc-arm64 "${SRC_DIR}" +docker run --rm --entrypoint /bin/cat lambda-java-jni-lib-glibc /src/aws-lambda-runtime-interface-client.so > "${DST_DIR}"/classes/aws-lambda-runtime-interface-client.arm64.glibc.so + +docker build -f "${SRC_DIR}/Dockerfile.musl" --build-arg CURL_VERSION="${CURL_VERSION}" --build-arg IMAGE_SOURCE=alpine:3.12 -t lambda-java-jni-lib-musl-x86_64 "${SRC_DIR}" +docker run --rm --entrypoint /bin/cat lambda-java-jni-lib-musl /src/aws-lambda-runtime-interface-client.so > "${DST_DIR}"/classes/aws-lambda-runtime-interface-client.x86_64.musl.so + +docker build -f "${SRC_DIR}/Dockerfile.musl" --build-arg CURL_VERSION="${CURL_VERSION}" --build-arg IMAGE_SOURCE=arm64v8/alpine:3 -t lambda-java-jni-lib-musl-arm64 "${SRC_DIR}" +docker run --rm --entrypoint /bin/cat lambda-java-jni-lib-musl /src/aws-lambda-runtime-interface-client.so > "${DST_DIR}"/classes/aws-lambda-runtime-interface-client.arm64.musl.so From d08061202329abde8024cf11b3e4b7f2e7619544 Mon Sep 17 00:00:00 2001 From: Zsombor Balogh Date: Tue, 19 Oct 2021 20:02:30 +0100 Subject: [PATCH 2/2] Use correct images for retrieving libs --- .../src/main/jni/build-jni-lib.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/aws-lambda-java-runtime-interface-client/src/main/jni/build-jni-lib.sh b/aws-lambda-java-runtime-interface-client/src/main/jni/build-jni-lib.sh index 754294f0..b3bae0e3 100755 --- a/aws-lambda-java-runtime-interface-client/src/main/jni/build-jni-lib.sh +++ b/aws-lambda-java-runtime-interface-client/src/main/jni/build-jni-lib.sh @@ -9,14 +9,14 @@ CURL_VERSION=7.77.0 # compile the native library docker build -f "${SRC_DIR}/Dockerfile.glibc" --build-arg CURL_VERSION="${CURL_VERSION}" --build-arg IMAGE_SOURCE=centos:7 -t lambda-java-jni-lib-glibc-x86_64 "${SRC_DIR}" -docker run --rm --entrypoint /bin/cat lambda-java-jni-lib-glibc /src/aws-lambda-runtime-interface-client.so > "${DST_DIR}"/classes/aws-lambda-runtime-interface-client.x86_64.glibc.so +docker run --rm --entrypoint /bin/cat lambda-java-jni-lib-glibc-x86_64 /src/aws-lambda-runtime-interface-client.so > "${DST_DIR}"/classes/aws-lambda-runtime-interface-client.x86_64.glibc.so docker build -f "${SRC_DIR}/Dockerfile.glibc" --build-arg CURL_VERSION="${CURL_VERSION}" --build-arg IMAGE_SOURCE=arm64v8/centos:7 -t lambda-java-jni-lib-glibc-arm64 "${SRC_DIR}" -docker run --rm --entrypoint /bin/cat lambda-java-jni-lib-glibc /src/aws-lambda-runtime-interface-client.so > "${DST_DIR}"/classes/aws-lambda-runtime-interface-client.arm64.glibc.so +docker run --rm --entrypoint /bin/cat lambda-java-jni-lib-glibc-arm64 /src/aws-lambda-runtime-interface-client.so > "${DST_DIR}"/classes/aws-lambda-runtime-interface-client.arm64.glibc.so docker build -f "${SRC_DIR}/Dockerfile.musl" --build-arg CURL_VERSION="${CURL_VERSION}" --build-arg IMAGE_SOURCE=alpine:3.12 -t lambda-java-jni-lib-musl-x86_64 "${SRC_DIR}" -docker run --rm --entrypoint /bin/cat lambda-java-jni-lib-musl /src/aws-lambda-runtime-interface-client.so > "${DST_DIR}"/classes/aws-lambda-runtime-interface-client.x86_64.musl.so +docker run --rm --entrypoint /bin/cat lambda-java-jni-lib-musl-x86_64 /src/aws-lambda-runtime-interface-client.so > "${DST_DIR}"/classes/aws-lambda-runtime-interface-client.x86_64.musl.so docker build -f "${SRC_DIR}/Dockerfile.musl" --build-arg CURL_VERSION="${CURL_VERSION}" --build-arg IMAGE_SOURCE=arm64v8/alpine:3 -t lambda-java-jni-lib-musl-arm64 "${SRC_DIR}" -docker run --rm --entrypoint /bin/cat lambda-java-jni-lib-musl /src/aws-lambda-runtime-interface-client.so > "${DST_DIR}"/classes/aws-lambda-runtime-interface-client.arm64.musl.so +docker run --rm --entrypoint /bin/cat lambda-java-jni-lib-musl-arm64 /src/aws-lambda-runtime-interface-client.so > "${DST_DIR}"/classes/aws-lambda-runtime-interface-client.arm64.musl.so