Skip to content

Commit 4c9bf0e

Browse files
committed
chore(git): add android cargo build
1 parent 1584eeb commit 4c9bf0e

1 file changed

Lines changed: 48 additions & 4 deletions

File tree

Dockerfile

Lines changed: 48 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,13 @@ RUN mkdir -p ${ANDROID_SDK_ROOT}/cmdline-tools/latest \
3535
ENV 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.
4038
RUN yes | sdkmanager --licenses --sdk_root=${ANDROID_SDK_ROOT}
4139
RUN 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
4546
ENV RUSTUP_HOME=/root/.rustup
4647
ENV 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
7980
RUN 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
82120
RUN 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
86130
RUN git clone https://github.com/tursodatabase/libsql.git /libsql

0 commit comments

Comments
 (0)