@@ -35,12 +35,13 @@ RUN mkdir -p ${ANDROID_SDK_ROOT}/cmdline-tools/latest \
3535ENV PATH="${PATH}:${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin"
3636
3737# Install Android platform and build tools using sdkmanager.
38- # We use `yes |` to automatically accept the licenses. This is not
39- # recommended for production but is common for automated builds.
4038RUN yes | sdkmanager --licenses --sdk_root=${ANDROID_SDK_ROOT}
4139RUN sdkmanager "platforms;android-${ANDROID_API_LEVEL}" "build-tools;${ANDROID_API_LEVEL}.0.0" "ndk-bundle" "cmake;3.22.1" \
4240 --sdk_root=${ANDROID_SDK_ROOT}
4341
42+ # Add NDK to PATH after installation
43+ ENV PATH="${ANDROID_NDK_PATH}:${PATH}"
44+
4445# Install Rust with explicit configuration
4546ENV RUSTUP_HOME=/root/.rustup
4647ENV CARGO_HOME=/root/.cargo
@@ -78,9 +79,52 @@ RUN ls -la /root/.rustup/toolchains/*/lib/rustlib/ | grep -E "(aarch64|armv7|x86
7879# Verify core libraries exist
7980RUN find /root/.rustup -name "libcore*.rlib" -path "*android*" -ls
8081
81- # Test simple compilation
82+ # Set up the Rust configuration for Android cross-compilation
83+ RUN mkdir -p /root/.cargo && \
84+ echo '[target.aarch64-linux-android]' >> /root/.cargo/config.toml && \
85+ echo 'linker = "${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android33-clang"' >> /root/.cargo/config.toml && \
86+ echo 'ar = "${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar"' >> /root/.cargo/config.toml && \
87+ echo '' >> /root/.cargo/config.toml && \
88+ echo '[target.armv7-linux-androideabi]' >> /root/.cargo/config.toml && \
89+ echo 'linker = "${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi33-clang"' >> /root/.cargo/config.toml && \
90+ echo 'ar = "${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar"' >> /root/.cargo/config.toml && \
91+ echo '' >> /root/.cargo/config.toml && \
92+ echo '[target.x86_64-linux-android]' >> /root/.cargo/config.toml && \
93+ echo 'linker = "${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/x86_64-linux-android33-clang"' >> /root/.cargo/config.toml && \
94+ echo 'ar = "${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar"' >> /root/.cargo/config.toml && \
95+ echo '' >> /root/.cargo/config.toml && \
96+ echo '[target.i686-linux-android]' >> /root/.cargo/config.toml && \
97+ echo 'linker = "${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/i686-linux-android33-clang"' >> /root/.cargo/config.toml && \
98+ echo 'ar = "${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar"' >> /root/.cargo/config.toml
99+
100+ # Set environment variables with correct paths
101+ ENV CARGO_TARGET_AARCH64_LINUX_ANDROID_LINKER=${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android33-clang
102+ ENV CARGO_TARGET_ARMV7_LINUX_ANDROIDEABI_LINKER=${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi33-clang
103+ ENV CARGO_TARGET_X86_64_LINUX_ANDROID_LINKER=${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/x86_64-linux-android33-clang
104+ ENV CARGO_TARGET_I686_LINUX_ANDROID_LINKER=${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/i686-linux-android33-clang
105+
106+ ENV CC_aarch64_linux_android=${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android33-clang
107+ ENV CXX_aarch64_linux_android=${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android33-clang++
108+ ENV AR_aarch64_linux_android=${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar
109+
110+ # Debug: Verify the NDK files exist
111+ RUN echo "=== NDK DEBUG ==="
112+ RUN ls -la ${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/ | head -10
113+ RUN ls -la ${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android33-clang || echo "Linker not found!"
114+ RUN ls -la ${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar || echo "AR not found!"
115+
116+ # Test that our NDK linker works
117+ RUN ${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android33-clang --version || echo "Cannot run clang!"
118+
119+ # Test simple compilation with proper linker
82120RUN echo 'fn main() {}' > test.rs
83- RUN rustc --target aarch64-linux-android --edition 2021 test.rs --sysroot $(rustc --print sysroot)
121+
122+ # Test compilation with explicit linker (this should work now)
123+ RUN rustc --target aarch64-linux-android --edition 2021 test.rs \
124+ --sysroot $(rustc --print sysroot) \
125+ -C linker=${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android33-clang
126+
127+ RUN echo "Test compilation successful!"
84128
85129# Clone and build the project
86130RUN git clone https://github.com/tursodatabase/libsql.git /libsql
0 commit comments