Skip to content

Commit 020f3b3

Browse files
authored
support aarch64-linux for docker on macos (#53)
1 parent d7e3160 commit 020f3b3

File tree

5 files changed

+53
-10
lines changed

5 files changed

+53
-10
lines changed

Diff for: .github/workflows/ci.yml

+20-8
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,11 @@ jobs:
1515
include:
1616
- build: x86_64-linux
1717
os: ubuntu-latest
18+
docker: true
19+
- build: aarch64-linux
20+
os: ubuntu-latest
21+
target: aarch64-unknown-linux-gnu
22+
docker: true
1823
- build: x86_64-macos
1924
os: macos-latest
2025
- build: aarch64-macos
@@ -44,23 +49,30 @@ jobs:
4449
- name: Set build target for cross-compiling
4550
if: matrix.target != ''
4651
run: |
47-
echo CARGO_BUILD_TARGET=${{ matrix.target }} >> $GITHUB_ENV
48-
echo JNILIB_RUST_TARGET=${{ matrix.target }} >> $GITHUB_ENV
49-
echo GRADLE_ARGS="${GRADLE_ARGS} -x test">> $GITHUB_ENV
52+
echo CARGO_BUILD_TARGET=${{ matrix.target }} >> build_env.txt
53+
echo JNILIB_RUST_TARGET=${{ matrix.target }} >> build_env.txt
54+
echo GRADLE_ARGS="${GRADLE_ARGS} -x test">> build_env.txt
55+
cat build_env.txt >> $GITHUB_ENV
5056
rustup target add ${{ matrix.target }}
5157
# Run gradle in a docker container to build the JNI lib on Linux for old glibc compatibility
5258
- name: Build with Gradle (Linux)
53-
if: ${{ startsWith(matrix.os, 'ubuntu') }}
59+
if: ${{ matrix.docker }}
5460
run: |
55-
docker build -t build-image ./ci/docker/x86_64-linux
56-
docker run --rm --volume $PWD:/build --workdir /build build-image ./gradlew build copyJniLib -x javadoc
61+
if [ ! -e build_env.txt ]; then
62+
touch build_env.txt
63+
fi
64+
docker build -t build-image ./ci/docker/${{ matrix.build }}
65+
docker run --rm --volume $PWD:/build --workdir /build \
66+
--env-file build_env.txt \
67+
build-image \
68+
./gradlew build copyJniLib -x javadoc ${GRADLE_ARGS}
5769
# Otherwise, run gradle normally to build the JNI lib
5870
- name: Build with Gradle
59-
if: ${{ !startsWith(matrix.os, 'ubuntu') }}
71+
if: ${{ !matrix.docker }}
6072
run: ./gradlew build copyJniLib ${GRADLE_ARGS}
6173
- name: List shared library files
6274
run:
63-
ls build/jni-libs
75+
file build/jni-libs/*
6476
- name: Save JNI lib output
6577
if: startsWith(github.ref, 'refs/tags/')
6678
uses: actions/upload-artifact@v2

Diff for: ci/docker/aarch64-linux/.cargo_config

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
[target.aarch64-unknown-linux-gnu]
2+
linker = "aarch64-linux-gnu-gcc"

Diff for: ci/docker/aarch64-linux/Dockerfile

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
FROM ubuntu:16.04
2+
3+
ARG TOOLCHAIN=nightly-2022-12-11
4+
5+
RUN apt-get update && apt-get install -y curl git gcc openjdk-8-jdk-headless gcc-aarch64-linux-gnu ca-certificates
6+
7+
ENV PATH=$PATH:/rust/bin:/root/.cargo/bin
8+
ENV JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
9+
ENV CARGO_BUILD_TARGET=aarch64-unknown-linux-gnu
10+
ENV JNILIB_RUST_TARGET=aarch64-unknown-linux-gnu
11+
12+
# Confirm that the JAVA_HOME var is set correctly
13+
RUN ls ${JAVA_HOME}/bin/java
14+
15+
# Install rustup
16+
RUN curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain=${TOOLCHAIN} --profile=minimal && rustc --version
17+
RUN rustup component add rustfmt
18+
19+
RUN rustup target add ${CARGO_BUILD_TARGET}
20+
21+
# Workaround for https://github.com/rust-lang/cargo/issues/4133
22+
# Linker tool needs to be specified explicitly
23+
COPY .cargo_config /root/.cargo/config

Diff for: ci/docker/x86_64-linux/Dockerfile

+4-2
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,11 @@ ARG TOOLCHAIN=nightly-2022-12-11
55
RUN yum install -y git gcc java-11-openjdk
66

77
ENV PATH=$PATH:/rust/bin:/root/.cargo/bin
8-
ENV JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.19.0.7-1.el7_9.x86_64
8+
ENV JAVA_HOME=/etc/alternatives/jre_11_openjdk
9+
10+
# Confirm that the JAVA_HOME var is set correctly
11+
RUN ls ${JAVA_HOME}/bin/java
912

1013
# Install rustup
1114
RUN curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain=${TOOLCHAIN} --profile=minimal && rustc --version
1215
RUN rustup component add rustfmt
13-

Diff for: src/main/java/io/github/kawamuray/wasmtime/NativeLibraryLoader.java

+4
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ private enum Arch {
9797
@AllArgsConstructor
9898
private enum Platform {
9999
LINUX(Os.LINUX, Arch.X86_64, "lib", ".so"),
100+
LINUX_AARCH64(Os.LINUX, Arch.AARCH64, "lib", ".so"),
100101
MACOS(Os.MACOS, Arch.X86_64, "lib", ".dylib"),
101102
MACOS_AARCH64(Os.MACOS, Arch.AARCH64, "lib", ".dylib"),
102103
WINDOWS(Os.WINDOWS, Arch.X86_64, "", ".dll");
@@ -111,6 +112,9 @@ private static Platform detectPlatform() {
111112
String os = System.getProperty("os.name").toLowerCase();
112113
String arch = System.getProperty("os.arch").toLowerCase();
113114
if (os.contains("linux")) {
115+
if (arch.equals("aarch64")) {
116+
return Platform.LINUX_AARCH64;
117+
}
114118
return Platform.LINUX;
115119
}
116120
if (os.contains("mac os") || os.contains("darwin")) {

0 commit comments

Comments
 (0)