Skip to content

Commit 663a5ce

Browse files
committed
chore(git): add android cargo build
1 parent 4d6cb6d commit 663a5ce

1 file changed

Lines changed: 40 additions & 30 deletions

File tree

Dockerfile

Lines changed: 40 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -56,55 +56,65 @@ RUN rustup default stable
5656
RUN rustup target add aarch64-linux-android armv7-linux-androideabi x86_64-linux-android i686-linux-android
5757

5858
# Debug toolchain setup
59-
RUN echo "=== TOOLCHAIN DEBUG ==="
60-
RUN rustup show
61-
RUN rustup target list --installed
62-
RUN ls -la /root/.rustup/toolchains/*/lib/rustlib/ | grep -E "(aarch64|armv7|x86_64|i686).*android"
63-
RUN find /root/.rustup -name "libcore*.rlib" -path "*android*" -ls
59+
RUN echo "=== TOOLCHAIN DEBUG ===" && \
60+
rustup show && \
61+
rustup target list --installed && \
62+
ls -la /root/.rustup/toolchains/*/lib/rustlib/ | grep -E "(aarch64|armv7|x86_64|i686).*android" && \
63+
find /root/.rustup -name "libcore*.rlib" -path "*android*" -ls
6464

6565
# Verify NDK libraries (especially libunwind)
66-
RUN echo "=== NDK LIBRARY DEBUG ==="
67-
RUN find ${NDK_SYSROOT} -name "libunwind*" -ls
68-
RUN ls -la ${NDK_SYSROOT}/usr/lib/aarch64-linux-android/${ANDROID_API_LEVEL} || echo "aarch64 API ${ANDROID_API_LEVEL} library directory not found!"
69-
RUN ls -la ${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android* || echo "No aarch64 linkers found!"
66+
RUN echo "=== NDK LIBRARY DEBUG ===" && \
67+
find ${NDK_SYSROOT} -name "libunwind*" -ls && \
68+
ls -la ${NDK_SYSROOT}/usr/lib/aarch64-linux-android/${ANDROID_API_LEVEL} || echo "aarch64 API ${ANDROID_API_LEVEL} library directory not found!" && \
69+
ls -la ${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android* || echo "No aarch64 linkers found!"
7070

71-
# Configure Cargo for Android cross-compilation
71+
# Configure Cargo for Android cross-compilation (all 4 ABIs)
7272
RUN echo "=== SETTING UP CARGO CONFIG ===" && \
73-
AARCH64_CLANG=$(find ${ANDROID_NDK_HOME} -name "*aarch64-linux-android${ANDROID_API_LEVEL}-clang" -type f | head -1) && \
74-
LLVM_AR=$(find ${ANDROID_NDK_HOME} -name "llvm-ar" -type f | head -1) && \
75-
echo "Found binaries:" && \
76-
echo " aarch64 clang: $AARCH64_CLANG" && \
77-
echo " llvm-ar: $LLVM_AR" && \
7873
mkdir -p /root/.cargo && \
79-
echo '[target.aarch64-linux-android]' > /root/.cargo/config.toml && \
80-
echo "linker = \"$AARCH64_CLANG\"" >> /root/.cargo/config.toml && \
81-
echo "ar = \"$LLVM_AR\"" >> /root/.cargo/config.toml && \
82-
echo "rustflags = [\"-C\", \"link-arg=--sysroot=${NDK_SYSROOT}\", \"-C\", \"link-arg=-L${NDK_SYSROOT}/usr/lib/aarch64-linux-android\", \"-C\", \"link-arg=-L${NDK_SYSROOT}/usr/lib/aarch64-linux-android/${ANDROID_API_LEVEL}\"]" >> /root/.cargo/config.toml && \
83-
echo '' >> /root/.cargo/config.toml && \
84-
cat /root/.cargo/config.toml
85-
86-
87-
# Test with Cargo
74+
cat > /root/.cargo/config.toml <<'EOF'
75+
[target.aarch64-linux-android]
76+
linker = "/usr/lib/android-sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android22-clang"
77+
ar = "/usr/lib/android-sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar"
78+
rustflags = ["-C", "link-arg=--sysroot=/usr/lib/android-sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/sysroot", "-C", "link-arg=-L/usr/lib/android-sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/aarch64-linux-android/22"]
79+
80+
[target.armv7-linux-androideabi]
81+
linker = "/usr/lib/android-sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi22-clang"
82+
ar = "/usr/lib/android-sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar"
83+
rustflags = ["-C", "link-arg=--sysroot=/usr/lib/android-sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/sysroot", "-C", "link-arg=-L/usr/lib/android-sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/22"]
84+
85+
[target.x86_64-linux-android]
86+
linker = "/usr/lib/android-sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/bin/x86_64-linux-android22-clang"
87+
ar = "/usr/lib/android-sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar"
88+
rustflags = ["-C", "link-arg=--sysroot=/usr/lib/android-sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/sysroot", "-C", "link-arg=-L/usr/lib/android-sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/x86_64-linux-android/22"]
89+
90+
[target.i686-linux-android]
91+
linker = "/usr/lib/android-sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/bin/i686-linux-android22-clang"
92+
ar = "/usr/lib/android-sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar"
93+
rustflags = ["-C", "link-arg=--sysroot=/usr/lib/android-sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/sysroot", "-C", "link-arg=-L/usr/lib/android-sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/i686-linux-android/22"]
94+
EOF
95+
96+
# Test with Cargo for all Android ABIs
8897
RUN echo "=== TESTING WITH CARGO ===" && \
8998
mkdir -p src && \
9099
echo '[package]' > Cargo.toml && \
91100
echo 'name = "test"' >> Cargo.toml && \
92101
echo 'version = "0.1.0"' >> Cargo.toml && \
93102
echo 'edition = "2021"' >> Cargo.toml && \
94103
echo 'fn main() { println!("Hello Android!"); }' > src/main.rs && \
95-
cargo build --target x86_64-linux-android --verbose
104+
for TARGET in aarch64-linux-android armv7-linux-androideabi x86_64-linux-android i686-linux-android; do \
105+
echo ">>> Building for $TARGET"; \
106+
cargo build --target $TARGET --verbose; \
107+
done
96108

97-
# Test direct rustc compilation
109+
# Test direct rustc compilation for aarch64
98110
RUN echo "=== TESTING WITH RUSTC ===" && \
99111
echo 'fn main() {}' > test.rs && \
100112
rustc --target aarch64-linux-android --edition 2021 test.rs \
101113
--sysroot ${NDK_SYSROOT} \
102114
-C linker=${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android${ANDROID_API_LEVEL}-clang \
103115
-C link-arg=-L${NDK_SYSROOT}/usr/lib/aarch64-linux-android \
104-
-C link-arg=-L${NDK_SYSROOT}/usr/lib/aarch64-linux-android/${ANDROID_API_LEVEL} \
105-
-L ${NDK_SYSROOT}/usr/lib/x86_64-linux-android \
106-
-L ${NDK_SYSROOT}/usr/lib/x86_64-linux-android/${ANDROID_API_LEVEL}
116+
-C link-arg=-L${NDK_SYSROOT}/usr/lib/aarch64-linux-android/${ANDROID_API_LEVEL}
107117

108118
RUN echo "Test compilation successful!"
109119

110-
CMD ["bash"]
120+
CMD ["bash"]

0 commit comments

Comments
 (0)