diff --git a/.github/actions/build-dev-builder-image/action.yml b/.github/actions/build-dev-builder-image/action.yml index c1755113a6..f15d2996fc 100644 --- a/.github/actions/build-dev-builder-image/action.yml +++ b/.github/actions/build-dev-builder-image/action.yml @@ -62,6 +62,16 @@ runs: IMAGE_NAMESPACE=${{ inputs.dockerhub-image-namespace }} \ IMAGE_TAG=${{ inputs.version }} + - name: Build and push android dev builder image to dockerhub + shell: bash + run: + make dev-builder \ + BASE_IMAGE=android \ + BUILDX_MULTI_PLATFORM_BUILD=true \ + IMAGE_REGISTRY=${{ inputs.dockerhub-image-registry }} \ + IMAGE_NAMESPACE=${{ inputs.dockerhub-image-namespace }} \ + IMAGE_TAG=${{ inputs.version }} + - name: Login to ACR uses: docker/login-action@v2 continue-on-error: true diff --git a/Makefile b/Makefile index e285529646..c0ef6cb65a 100644 --- a/Makefile +++ b/Makefile @@ -55,11 +55,15 @@ else BUILDX_MULTI_PLATFORM_BUILD_OPTS := -o type=docker endif +ifneq ($(strip $(CARGO_BUILD_EXTRA_OPTS)),) + CARGO_BUILD_OPTS += ${CARGO_BUILD_EXTRA_OPTS} +endif + ##@ Build .PHONY: build build: ## Build debug version greptime. - cargo build ${CARGO_BUILD_OPTS} + cargo ${CARGO_EXTENSION} build ${CARGO_BUILD_OPTS} .POHNY: build-by-dev-builder build-by-dev-builder: ## Build greptime by dev-builder. @@ -67,11 +71,34 @@ build-by-dev-builder: ## Build greptime by dev-builder. -v ${PWD}:/greptimedb -v ${CARGO_REGISTRY_CACHE}:/root/.cargo/registry \ -w /greptimedb ${IMAGE_REGISTRY}/${IMAGE_NAMESPACE}/dev-builder-${BASE_IMAGE}:latest \ make build \ + CARGO_EXTENSION="${CARGO_EXTENSION}" \ CARGO_PROFILE=${CARGO_PROFILE} \ FEATURES=${FEATURES} \ TARGET_DIR=${TARGET_DIR} \ TARGET=${TARGET} \ - RELEASE=${RELEASE} + RELEASE=${RELEASE} \ + CARGO_BUILD_EXTRA_OPTS="${CARGO_BUILD_EXTRA_OPTS}" + +.PHONY: build-android-bin +build-android-bin: ## Build greptime binary for android. + docker run --network=host \ + -v ${PWD}:/greptimedb -v ${CARGO_REGISTRY_CACHE}:/root/.cargo/registry \ + -w /greptimedb ${IMAGE_REGISTRY}/${IMAGE_NAMESPACE}/dev-builder-android:latest \ + make build \ + CARGO_EXTENSION="ndk --platform 23 -t aarch64-linux-android" \ + CARGO_PROFILE=release \ + FEATURES="${FEATURES}" \ + TARGET_DIR="${TARGET_DIR}" \ + TARGET="${TARGET}" \ + RELEASE="${RELEASE}" \ + CARGO_BUILD_EXTRA_OPTS="--bin greptime --no-default-features" + +.PHONY: strip-android-bin +strip-android-bin: ## Strip greptime binary for android. + docker run --network=host \ + -v ${PWD}:/greptimedb \ + -w /greptimedb ${IMAGE_REGISTRY}/${IMAGE_NAMESPACE}/dev-builder-android:latest \ + bash -c '$${NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-strip /greptimedb/target/aarch64-linux-android/release/greptime' .PHONY: clean clean: ## Clean the project. diff --git a/docker/dev-builder/android/Dockerfile b/docker/dev-builder/android/Dockerfile new file mode 100644 index 0000000000..b3e7730b13 --- /dev/null +++ b/docker/dev-builder/android/Dockerfile @@ -0,0 +1,41 @@ +FROM --platform=linux/amd64 saschpe/android-ndk:34-jdk17.0.8_7-ndk25.2.9519653-cmake3.22.1 + +ENV LANG en_US.utf8 +WORKDIR /greptimedb + +# Rename libunwind to libgcc +RUN cp ${NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/14.0.7/lib/linux/aarch64/libunwind.a ${NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/14.0.7/lib/linux/aarch64/libgcc.a + +# Install dependencies. +RUN apt-get update && apt-get install -y \ + libssl-dev \ + protobuf-compiler \ + curl \ + git \ + build-essential \ + pkg-config \ + python3 \ + python3-dev \ + python3-pip \ + && pip3 install --upgrade pip \ + && pip3 install pyarrow + +# Trust workdir +RUN git config --global --add safe.directory /greptimedb + +# Install Rust. +SHELL ["/bin/bash", "-c"] +RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- --no-modify-path --default-toolchain none -y +ENV PATH /root/.cargo/bin/:$PATH + +# Add android toolchains +ARG RUST_TOOLCHAIN +RUN rustup toolchain install ${RUST_TOOLCHAIN} +RUN rustup target add aarch64-linux-android + +# Install cargo-ndk +RUN cargo install cargo-ndk +ENV ANDROID_NDK_HOME $NDK_ROOT + +# Builder entrypoint. +CMD ["cargo", "ndk", "--platform", "23", "-t", "aarch64-linux-android", "build", "--bin", "greptime", "--profile", "release", "--no-default-features"]