Explorar el Código

darkirc: add partially working docker image (bug with libunwind unresolved)

x hace 2 años
padre
commit
291d3e343e
Se han modificado 2 ficheros con 91 adiciones y 0 borrados
  1. 11 0
      bin/darkirc/Makefile
  2. 80 0
      bin/darkirc/android.Dockerfile

+ 11 - 0
bin/darkirc/Makefile

@@ -20,6 +20,17 @@ $(BIN): $(SRC)
 	$(CARGO) build $(TARGET_PRFX)$(RUST_TARGET) --release --package darkirc
 	cp -f ../../target/$(RUST_TARGET)/release/darkirc $@
 
+android:
+	docker build -t test:latest . --file android.Dockerfile
+	# Use this command to get an interactive terminal inside docker:
+	#docker run -v $(shell pwd)/../../:/root/src -it test:latest /bin/bash
+	docker run -v $(shell pwd)/../../:/root/src -t test:latest make _aarch64-android
+
+# Invoked inside docker by the command above
+# We need to mount this directory as a volume using -v so docker can access it
+_aarch64-android:
+	cargo build --release --target aarch64-linux-android --package darkirc
+
 clean:
 	rm -f $(BIN)
 

+ 80 - 0
bin/darkirc/android.Dockerfile

@@ -0,0 +1,80 @@
+FROM ubuntu
+
+RUN apt update
+RUN apt install -yq openjdk-19-jre-headless openjdk-19-jdk-headless
+RUN apt install -yq wget unzip cmake
+
+RUN cd /tmp/ && \
+    wget -O install-rustup.sh https://sh.rustup.rs && \
+    sh install-rustup.sh -yq --default-toolchain none && \
+    rm install-rustup.sh
+ENV PATH "${PATH}:/root/.cargo/bin/"
+RUN rustup default nightly
+RUN rustup target add aarch64-linux-android
+#RUN rustup target add armv7-linux-androideabi
+#RUN rustup target add i686-linux-android
+#RUN rustup target add x86_64-linux-android
+
+# Install Android SDK
+ENV ANDROID_HOME /opt/android-sdk/
+RUN mkdir ${ANDROID_HOME} && \
+    cd ${ANDROID_HOME} && \
+    wget -O cmdline-tools.zip -q https://dl.google.com/android/repository/commandlinetools-linux-10406996_latest.zip && \
+    unzip cmdline-tools.zip && \
+    rm cmdline-tools.zip
+# Required by SDKManager
+RUN cd ${ANDROID_HOME}/cmdline-tools/ && \
+    mkdir latest && \
+    mv bin lib latest
+RUN yes | ${ANDROID_HOME}/cmdline-tools/latest/bin/sdkmanager --licenses
+RUN ${ANDROID_HOME}/cmdline-tools/latest/bin/sdkmanager "platform-tools"
+RUN ${ANDROID_HOME}/cmdline-tools/latest/bin/sdkmanager "platforms;android-34"
+RUN ${ANDROID_HOME}/cmdline-tools/latest/bin/sdkmanager "ndk-bundle"
+RUN ${ANDROID_HOME}/cmdline-tools/latest/bin/sdkmanager "build-tools;34.0.0"
+
+RUN echo '[target.aarch64-linux-android] \n\
+ar = "/opt/android-sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android-ar" \n\
+linker = "/opt/android-sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android30-clang" \n\
+' > /root/.cargo/config
+
+# Needed by the ring dependency
+ENV TARGET_AR /opt/android-sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android-ar
+ENV TARGET_CC /opt/android-sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android30-clang
+
+# Make sqlite3
+RUN apt install -yq file
+RUN cd /tmp/ && \
+    wget -O sqlite.zip https://www.sqlite.org/2023/sqlite-amalgamation-3430000.zip && \
+    unzip sqlite.zip && \
+    rm sqlite.zip && \
+    mv sqlite* sqlite && \
+    cd sqlite && \
+    mkdir build && \
+    mv *.c *.h build/ && \
+    mkdir jni && \
+    echo '\
+APP_ABI := arm64-v8a \n\
+APP_CPPFLAGS += -fexceptions -frtti \n\
+APP_STL := c++_shared' > jni/Application.mk && \
+    echo '\
+LOCAL_PATH := $(call my-dir) \n\
+include $(CLEAR_VARS) \n\
+LOCAL_MODULE            := sqlite3-a \n\
+LOCAL_MODULE_FILENAME   := libsqlite3 \n\
+LOCAL_SRC_FILES         := ../build/sqlite3.c \n\
+LOCAL_C_INCLUDES        := ../build \n\
+LOCAL_EXPORT_C_INCLUDES := ../build \n\
+LOCAL_CFLAGS            := -DSQLITE_THREADSAFE=1 \n\
+include $(BUILD_STATIC_LIBRARY)' > jni/Android.mk && \
+    /opt/android-sdk/ndk-bundle/ndk-build
+ENV RUSTFLAGS "-L/tmp/sqlite/obj/local/arm64-v8a/"
+
+# Bug in cargo
+# https://blog.rust-lang.org/2023/01/09/android-ndk-update-r25.html
+# https://github.com/rust-lang/rust/pull/85806#issuecomment-1096266946
+RUN find ${ANDROID_HOME} -name "libunwind.a" -execdir bash -c 'echo "INPUT(-lunwind)" > libgcc.a' \;
+
+# Make directory for user code
+RUN mkdir /root/src
+WORKDIR /root/src/bin/darkirc/
+