@@ -56,55 +56,65 @@ RUN rustup default stable
5656RUN 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)
7272RUN 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
8897RUN 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
98110RUN 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
108118RUN echo "Test compilation successful!"
109119
110- CMD ["bash" ]
120+ CMD ["bash" ]
0 commit comments