From 63948effecb0d89984018e51658601e01853c9af Mon Sep 17 00:00:00 2001 From: Kibnet Philosoff Date: Wed, 29 Jan 2025 16:18:10 +0300 Subject: [PATCH 01/14] ci: Add android builds of libgit2 --- .github/workflows/ci.yml | 37 +++++++++++--- build.libgit2.sh | 51 +++++++++++++++---- .../libgit2-arm64-toolchain.cmake | 12 +++++ .../libgit2-armv7-toolchain.cmake | 12 +++++ 4 files changed, 95 insertions(+), 17 deletions(-) create mode 100644 cmake-toolchains/libgit2-arm64-toolchain.cmake create mode 100644 cmake-toolchains/libgit2-armv7-toolchain.cmake diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5482c7d4..4b7bb8c8 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -43,6 +43,12 @@ jobs: name: osx-x64 - os: macos-13 name: osx-arm64 + - os: ubuntu-24.04 + name: android-arm + param: -android-arm + - os: ubuntu-24.04 + name: android-arm64 + param: -android-arm64 fail-fast: false steps: - name: Checkout @@ -56,23 +62,38 @@ jobs: if: runner.os == 'macOS' run: ./build.libgit2.sh - name: Setup QEMU - if: matrix.name == 'linux-musl-arm' || matrix.name == 'linux-musl-arm64' + if: contains(matrix.name, 'linux-musl-arm') run: docker run --rm --privileged multiarch/qemu-user-static:register --reset + + - name: Setup Android NDK + if: contains(matrix.name, 'android') + run: | + sudo apt-get update + sudo apt-get install -y unzip + wget https://dl.google.com/android/repository/android-ndk-r23b-linux.zip + unzip android-ndk-r23b-linux.zip + echo "ANDROID_NDK=$PWD/android-ndk-r23b" >> $GITHUB_ENV + - name: Build Linux - if: runner.os == 'Linux' + if: runner.os == 'Linux' && (!contains(matrix.name, 'android')) run: ./dockerbuild.sh + + - name: Build for Android + if: runner.os == 'Linux' && contains(matrix.name, 'android') + run: ./build.libgit2.sh + - name: Upload artifacts uses: actions/upload-artifact@v4.4.3 with: name: ${{ matrix.name }} path: nuget.package/runtimes/${{ matrix.name }} package: - name: Create package - needs: build - runs-on: ubuntu-24.04 - env: - DOTNET_NOLOGO: true - steps: + name: Create package + needs: build + runs-on: ubuntu-24.04 + env: + DOTNET_NOLOGO: true + steps: - name: Checkout uses: actions/checkout@v4.2.2 with: diff --git a/build.libgit2.sh b/build.libgit2.sh index 3ac9e48e..a9365c2f 100755 --- a/build.libgit2.sh +++ b/build.libgit2.sh @@ -26,16 +26,49 @@ pushd libgit2/build export _BINPATH=`pwd` -cmake -DCMAKE_BUILD_TYPE:STRING=Release \ - -DBUILD_TESTS:BOOL=OFF \ - -DUSE_SSH=exec \ - -DLIBGIT2_FILENAME=git2-$SHORTSHA \ - -DCMAKE_OSX_ARCHITECTURES=$OSXARCHITECTURE \ - -DUSE_HTTPS=$USEHTTPS \ - -DUSE_BUNDLED_ZLIB=ON \ - .. -cmake --build . +# Проверка, собираем ли для Android +if [[ "$RID" == *"android"* ]]; then + echo "Building for Android: $RID" + export ANDROID_TOOLCHAIN_ROOT="${ANDROID_NDK}" + export android_target_abi=21 + + if [[ "$RID" == "android-arm64" ]]; then + export TOOLCHAIN_FILE="../cmake-toolchains/libgit2-arm64-toolchain.cmake" + else + export TOOLCHAIN_FILE="../cmake-toolchains/libgit2-armv7-toolchain.cmake" + fi + cmake -DCMAKE_BUILD_TYPE=Release \ + -DUSE_SSH=exec \ + -DLIBGIT2_FILENAME=git2-$SHORTSHA \ + -DUSE_HTTPS=$USEHTTPS \ + -DUSE_BUNDLED_ZLIB=ON \ + -DCMAKE_TOOLCHAIN_FILE="$TOOLCHAIN_FILE" \ + .. + +else + # Сборка для Mac/Linux по умолчанию + if [[ $OS == "Darwin" ]]; then + cmake -DCMAKE_BUILD_TYPE=Release \ + -DBUILD_TESTS=OFF \ + -DUSE_SSH=exec \ + -DLIBGIT2_FILENAME=git2-$SHORTSHA \ + -DCMAKE_OSX_ARCHITECTURES=$OSXARCHITECTURE \ + -DUSE_HTTPS=$USEHTTPS \ + -DUSE_BUNDLED_ZLIB=ON \ + .. + else + cmake -DCMAKE_BUILD_TYPE=Release \ + -DBUILD_TESTS=OFF \ + -DUSE_SSH=exec \ + -DLIBGIT2_FILENAME=git2-$SHORTSHA \ + -DUSE_HTTPS=$USEHTTPS \ + -DUSE_BUNDLED_ZLIB=ON \ + .. + fi +fi + +cmake --build . popd if [[ $RID == "" ]]; then diff --git a/cmake-toolchains/libgit2-arm64-toolchain.cmake b/cmake-toolchains/libgit2-arm64-toolchain.cmake new file mode 100644 index 00000000..9b0d1dd4 --- /dev/null +++ b/cmake-toolchains/libgit2-arm64-toolchain.cmake @@ -0,0 +1,12 @@ +SET(CMAKE_SYSTEM_NAME Linux) +SET(CMAKE_SYSTEM_VERSION Android) + +SET(CMAKE_C_COMPILER $ENV{ANDROID_TOOLCHAIN_ROOT}/bin/aarch64-linux-android$ENV{android_target_abi}-clang) +SET(CMAKE_CXX_COMPILER $ENV{ANDROID_TOOLCHAIN_ROOT}/bin/aarch64-linux-android$ENV{android_target_abi}-clang++) +SET(CMAKE_FIND_ROOT_PATH $ENV{ANDROID_TOOLCHAIN_ROOT}/sysroot/) + +SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) + + diff --git a/cmake-toolchains/libgit2-armv7-toolchain.cmake b/cmake-toolchains/libgit2-armv7-toolchain.cmake new file mode 100644 index 00000000..44d8d763 --- /dev/null +++ b/cmake-toolchains/libgit2-armv7-toolchain.cmake @@ -0,0 +1,12 @@ +SET(CMAKE_SYSTEM_NAME Linux) +SET(CMAKE_SYSTEM_VERSION Android) + +SET(CMAKE_C_COMPILER $ENV{ANDROID_TOOLCHAIN_ROOT}/bin/armv7a-linux-androideabi$ENV{android_target_abi}-clang) +SET(CMAKE_CXX_COMPILER $ENV{ANDROID_TOOLCHAIN_ROOT}/bin/armv7a-linux-androideabi$ENV{android_target_abi}-clang++) +SET(CMAKE_FIND_ROOT_PATH $ENV{ANDROID_TOOLCHAIN_ROOT}/sysroot/) + +SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) + + From 321d11660a9ac9e755aa6375d141175bdea7a478 Mon Sep 17 00:00:00 2001 From: Kibnet Philosoff Date: Fri, 31 Jan 2025 11:41:01 +0300 Subject: [PATCH 02/14] fix: Set toolchain root --- .github/workflows/ci.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4b7bb8c8..d1805296 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -72,6 +72,8 @@ jobs: sudo apt-get install -y unzip wget https://dl.google.com/android/repository/android-ndk-r23b-linux.zip unzip android-ndk-r23b-linux.zip + TOOLCHAIN_ROOT="$PWD/android-ndk-r23b/toolchains/llvm/prebuilt/linux-x86_64" + echo "ANDROID_TOOLCHAIN_ROOT=$TOOLCHAIN_ROOT" >> $GITHUB_ENV echo "ANDROID_NDK=$PWD/android-ndk-r23b" >> $GITHUB_ENV - name: Build Linux From 12d613372aece6102a183eb9cc039ab6f0b800b7 Mon Sep 17 00:00:00 2001 From: Kibnet Philosoff Date: Fri, 31 Jan 2025 12:01:23 +0300 Subject: [PATCH 03/14] fix: Debug NDK path --- .github/workflows/ci.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d1805296..0c6cbcf0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -75,7 +75,16 @@ jobs: TOOLCHAIN_ROOT="$PWD/android-ndk-r23b/toolchains/llvm/prebuilt/linux-x86_64" echo "ANDROID_TOOLCHAIN_ROOT=$TOOLCHAIN_ROOT" >> $GITHUB_ENV echo "ANDROID_NDK=$PWD/android-ndk-r23b" >> $GITHUB_ENV + - name: Debug NDK + if: contains(matrix.name, 'android') + run: | + echo "ANDROID_NDK=$ANDROID_NDK" + echo "Contents of $ANDROID_NDK:" + ls -R $ANDROID_NDK | head -n 200 + echo "ANDROID_TOOLCHAIN_ROOT=$ANDROID_TOOLCHAIN_ROOT" + echo "Contents of $ANDROID_TOOLCHAIN_ROOT/bin:" + ls -l $ANDROID_TOOLCHAIN_ROOT/bin | head -n 50 - name: Build Linux if: runner.os == 'Linux' && (!contains(matrix.name, 'android')) run: ./dockerbuild.sh From b9287a95d31e5eabe888a714350c1542219cea76 Mon Sep 17 00:00:00 2001 From: Kibnet Philosoff Date: Fri, 31 Jan 2025 12:06:18 +0300 Subject: [PATCH 04/14] fix --- build.libgit2.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.libgit2.sh b/build.libgit2.sh index a9365c2f..c7f7caf9 100755 --- a/build.libgit2.sh +++ b/build.libgit2.sh @@ -33,9 +33,9 @@ if [[ "$RID" == *"android"* ]]; then export android_target_abi=21 if [[ "$RID" == "android-arm64" ]]; then - export TOOLCHAIN_FILE="../cmake-toolchains/libgit2-arm64-toolchain.cmake" + export TOOLCHAIN_FILE="./cmake-toolchains/libgit2-arm64-toolchain.cmake" else - export TOOLCHAIN_FILE="../cmake-toolchains/libgit2-armv7-toolchain.cmake" + export TOOLCHAIN_FILE="./cmake-toolchains/libgit2-armv7-toolchain.cmake" fi cmake -DCMAKE_BUILD_TYPE=Release \ From 37c8cfddc6b23b1a27dba582562452707b6e36ce Mon Sep 17 00:00:00 2001 From: Kibnet Philosoff Date: Fri, 31 Jan 2025 12:23:47 +0300 Subject: [PATCH 05/14] android ndk --- .github/workflows/ci.yml | 22 ++-------------- build.libgit2.sh | 4 +-- install_ndk.sh | 55 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 59 insertions(+), 22 deletions(-) create mode 100644 install_ndk.sh diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0c6cbcf0..27f8728c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -64,35 +64,17 @@ jobs: - name: Setup QEMU if: contains(matrix.name, 'linux-musl-arm') run: docker run --rm --privileged multiarch/qemu-user-static:register --reset - - name: Setup Android NDK if: contains(matrix.name, 'android') run: | - sudo apt-get update - sudo apt-get install -y unzip - wget https://dl.google.com/android/repository/android-ndk-r23b-linux.zip - unzip android-ndk-r23b-linux.zip - TOOLCHAIN_ROOT="$PWD/android-ndk-r23b/toolchains/llvm/prebuilt/linux-x86_64" - echo "ANDROID_TOOLCHAIN_ROOT=$TOOLCHAIN_ROOT" >> $GITHUB_ENV - echo "ANDROID_NDK=$PWD/android-ndk-r23b" >> $GITHUB_ENV - - name: Debug NDK - if: contains(matrix.name, 'android') - run: | - echo "ANDROID_NDK=$ANDROID_NDK" - echo "Contents of $ANDROID_NDK:" - ls -R $ANDROID_NDK | head -n 200 - - echo "ANDROID_TOOLCHAIN_ROOT=$ANDROID_TOOLCHAIN_ROOT" - echo "Contents of $ANDROID_TOOLCHAIN_ROOT/bin:" - ls -l $ANDROID_TOOLCHAIN_ROOT/bin | head -n 50 + ./install_ndk.sh + echo "ANDROID_TOOLCHAIN_ROOT=$ANDROID_HOME/ndk/$NDK_VERSION/toolchains/llvm/prebuilt/linux-x86_64" >> $GITHUB_ENV - name: Build Linux if: runner.os == 'Linux' && (!contains(matrix.name, 'android')) run: ./dockerbuild.sh - - name: Build for Android if: runner.os == 'Linux' && contains(matrix.name, 'android') run: ./build.libgit2.sh - - name: Upload artifacts uses: actions/upload-artifact@v4.4.3 with: diff --git a/build.libgit2.sh b/build.libgit2.sh index c7f7caf9..a9365c2f 100755 --- a/build.libgit2.sh +++ b/build.libgit2.sh @@ -33,9 +33,9 @@ if [[ "$RID" == *"android"* ]]; then export android_target_abi=21 if [[ "$RID" == "android-arm64" ]]; then - export TOOLCHAIN_FILE="./cmake-toolchains/libgit2-arm64-toolchain.cmake" + export TOOLCHAIN_FILE="../cmake-toolchains/libgit2-arm64-toolchain.cmake" else - export TOOLCHAIN_FILE="./cmake-toolchains/libgit2-armv7-toolchain.cmake" + export TOOLCHAIN_FILE="../cmake-toolchains/libgit2-armv7-toolchain.cmake" fi cmake -DCMAKE_BUILD_TYPE=Release \ diff --git a/install_ndk.sh b/install_ndk.sh new file mode 100644 index 00000000..b2b3dd6c --- /dev/null +++ b/install_ndk.sh @@ -0,0 +1,55 @@ +#!/usr/bin/env bash + +set -e + +# OPTIONAL: Install required packages (uncomment if needed) +# sudo apt-get update +# sudo apt-get install -y curl unzip + +BUILD_ROOT="$HOME/puppylibsbuild" +mkdir -p "$BUILD_ROOT" +cd "$BUILD_ROOT" + +# Paths and versions +TOOLS="$BUILD_ROOT/tools" +ANDROID_CMD_TOOLS="$TOOLS/android-cmdline-tools" +ANDROID_HOME="$BUILD_ROOT/android-sdk" +CMAKE_VERSION="3.31.1" +NDK_VERSION="26.3.11579264" + +# Create directories +mkdir -p "$ANDROID_CMD_TOOLS" +mkdir -p "$ANDROID_HOME" + +echo "Downloading Android command line tools..." +curl -L -o cmdline-tools.zip https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip + +# Unzip and move to the final location +unzip cmdline-tools.zip -d "$TOOLS/" +mv "$TOOLS/cmdline-tools" "$ANDROID_CMD_TOOLS" + +# Define sdkmanager path +ANDROID_SDKMANAGER="$ANDROID_CMD_TOOLS/bin/sdkmanager" +chmod +x "$ANDROID_SDKMANAGER" + +echo "Installing CMake $CMAKE_VERSION via sdkmanager..." +yes | "$ANDROID_SDKMANAGER" --install "cmake;$CMAKE_VERSION" --sdk_root="$ANDROID_HOME" + +# Path to the installed CMake +CMAKE_DIR="$ANDROID_HOME/cmake/$CMAKE_VERSION" +CMAKE_PATH="$CMAKE_DIR/bin/cmake" + +echo "CMake version:" +"$CMAKE_PATH" --version + +echo "Installing NDK $NDK_VERSION..." +yes | "$ANDROID_SDKMANAGER" --channel=0 --install "ndk;$NDK_VERSION" --sdk_root="$ANDROID_HOME" + +echo "NDK installation complete." + +# OPTIONAL: If you need to automatically set environment variables for subsequent steps, +# you can echo them into $GITHUB_ENV or similar: +# echo "ANDROID_HOME=$ANDROID_HOME" >> $GITHUB_ENV +# echo "ANDROID_NDK=$ANDROID_HOME/ndk/$NDK_VERSION" >> $GITHUB_ENV + +echo "All done." From 4dee86a3906c0a23d16bc228ae4b5ff4df1a9550 Mon Sep 17 00:00:00 2001 From: Kibnet Philosoff Date: Fri, 31 Jan 2025 12:27:04 +0300 Subject: [PATCH 06/14] fix --- install_ndk.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install_ndk.sh b/install_ndk.sh index b2b3dd6c..515f15db 100644 --- a/install_ndk.sh +++ b/install_ndk.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/bash set -e From 52cfca69a85f463ab7d4b909fb9957dd902a179f Mon Sep 17 00:00:00 2001 From: Kibnet Philosoff Date: Fri, 31 Jan 2025 12:29:58 +0300 Subject: [PATCH 07/14] fix --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 27f8728c..1ee44d0a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -67,6 +67,7 @@ jobs: - name: Setup Android NDK if: contains(matrix.name, 'android') run: | + chmod +x install_ndk.sh ./install_ndk.sh echo "ANDROID_TOOLCHAIN_ROOT=$ANDROID_HOME/ndk/$NDK_VERSION/toolchains/llvm/prebuilt/linux-x86_64" >> $GITHUB_ENV - name: Build Linux From f56758ebdac208a2bb56d33dedf5b376b9a9260a Mon Sep 17 00:00:00 2001 From: Kibnet Philosoff Date: Fri, 31 Jan 2025 12:31:01 +0300 Subject: [PATCH 08/14] bash --- install_ndk.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install_ndk.sh b/install_ndk.sh index 515f15db..b2b3dd6c 100644 --- a/install_ndk.sh +++ b/install_ndk.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash set -e From 5fa885212080a0930b4b0c20609797f9e2870de0 Mon Sep 17 00:00:00 2001 From: Kibnet Philosoff Date: Fri, 31 Jan 2025 12:41:45 +0300 Subject: [PATCH 09/14] china --- install_ndk.sh | 107 +++++++++++++++++++++++++++++-------------------- 1 file changed, 64 insertions(+), 43 deletions(-) diff --git a/install_ndk.sh b/install_ndk.sh index b2b3dd6c..3f4e460d 100644 --- a/install_ndk.sh +++ b/install_ndk.sh @@ -1,55 +1,76 @@ -#!/usr/bin/env bash +#!/bin/bash -set -e +##################### +# usage: ./thisscript.sh [repo_path] +# the repo path used for locate the `local.properties` file, +# this script will append cmake.dir into it, +# if not specify, will use $GITHUB_WORKSPACE, +# if $GITHUB_WORKSPACE is empty, will use `/home/runner/work/PuppyGit/PuppyGit`, it is the actually value of $GITHUB_WORKSPACE +##################### -# OPTIONAL: Install required packages (uncomment if needed) -# sudo apt-get update -# sudo apt-get install -y curl unzip +#echo "Updating package list..." +#sudo apt update +# +#echo "Installing: curl cmake make tar libssl-dev maven unzip" +#sudo apt install -y curl cmake make tar libssl-dev maven unzip -BUILD_ROOT="$HOME/puppylibsbuild" -mkdir -p "$BUILD_ROOT" -cd "$BUILD_ROOT" -# Paths and versions -TOOLS="$BUILD_ROOT/tools" -ANDROID_CMD_TOOLS="$TOOLS/android-cmdline-tools" -ANDROID_HOME="$BUILD_ROOT/android-sdk" -CMAKE_VERSION="3.31.1" -NDK_VERSION="26.3.11579264" -# Create directories -mkdir -p "$ANDROID_CMD_TOOLS" -mkdir -p "$ANDROID_HOME" +export build_root=$HOME/libsbuild +mkdir -p $build_root +cd $build_root -echo "Downloading Android command line tools..." -curl -L -o cmdline-tools.zip https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip - -# Unzip and move to the final location -unzip cmdline-tools.zip -d "$TOOLS/" -mv "$TOOLS/cmdline-tools" "$ANDROID_CMD_TOOLS" - -# Define sdkmanager path -ANDROID_SDKMANAGER="$ANDROID_CMD_TOOLS/bin/sdkmanager" -chmod +x "$ANDROID_SDKMANAGER" +# export ndk_filename="android-ndk-r26d-linux" +# echo "Downloading: ndk" +# curl -L -o "${build_root}/$ndk_filename.zip" "https://dl.google.com/android/repository/${ndk_filename}.zip" +# export ANDROID_NDK_ROOT=$build_root/android-ndk +# mkdir -p $ANDROID_NDK_ROOT +# echo "Extracting: ndk" +# -q : only show msg when err +# unzip -q "$ndk_filename.zip" +# mv android-ndk-r26d/* $ANDROID_NDK_ROOT -echo "Installing CMake $CMAKE_VERSION via sdkmanager..." -yes | "$ANDROID_SDKMANAGER" --install "cmake;$CMAKE_VERSION" --sdk_root="$ANDROID_HOME" - -# Path to the installed CMake -CMAKE_DIR="$ANDROID_HOME/cmake/$CMAKE_VERSION" -CMAKE_PATH="$CMAKE_DIR/bin/cmake" +echo "Downloading: Android SDK" +# ANDROID_HOME is android sdk root, is sdk root, not ndk root +export TOOLS=$build_root/tools +export ANDROID_CMD_TOOLS=$TOOLS/android-cmdline-tools +export ANDROID_HOME=$build_root/android-sdk +export CMAKE_VERSION=3.31.1 +export NDK_VERSION=26.3.11579264 +# 创建目标目录以及依赖目录,虽然后面会删一下cmd tools目录,但这个创建依然是有意义的,意义在于创建依赖目录,所以即使后面会删除cmd tools目录,这条命令也依然应该保留 +mkdir -p $ANDROID_CMD_TOOLS +mkdir -p $ANDROID_HOME +curl -L -o cmdline-tools.zip https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip +# 删一下,确保mv后目录结构不变 +rm -rf $ANDROID_CMD_TOOLS +# 解压然后移动,确保先删后解压移动,以免当解压后的目录和移动的目标目录同名时误删 +unzip cmdline-tools.zip -d $TOOLS/ +mv $TOOLS/cmdline-tools $ANDROID_CMD_TOOLS +export ANDROID_SDKMANAGER=$ANDROID_CMD_TOOLS/bin/sdkmanager +chmod +x $ANDROID_SDKMANAGER +echo "install cmake by Android sdkmanager" +yes | $ANDROID_SDKMANAGER --install "cmake;$CMAKE_VERSION" --sdk_root=$ANDROID_HOME +# $ANDROID_HOME/cmdline-tools/bin/sdkmanager --list --sdk_root=$ANDROID_HOME +# cmake root dir +export CMAKE_DIR=$ANDROID_HOME/cmake/$CMAKE_VERSION +# cmake 可执行文件路径 +export CMAKE_PATH=$CMAKE_DIR/bin/cmake -echo "CMake version:" -"$CMAKE_PATH" --version +echo "print cmake version" +$CMAKE_PATH --version -echo "Installing NDK $NDK_VERSION..." -yes | "$ANDROID_SDKMANAGER" --channel=0 --install "ndk;$NDK_VERSION" --sdk_root="$ANDROID_HOME" +echo "downloading android ndk..." +# channel 0 stable, 1 beta, 3 canary, see: https://github.com/android/ndk-samples/wiki/Configure-NDK-Path#the-sdkmanager-command-line-tool +yes | $ANDROID_SDKMANAGER --channel=0 --install "ndk;$NDK_VERSION" --sdk_root=$ANDROID_HOME -echo "NDK installation complete." +echo "set sdk.dir to local.properties for gradle" +REPO_PATH=${1:-$GITHUB_WORKSPACE} +REPO_PATH=${REPO_PATH:-/home/runner/work/PuppyGit/PuppyGit} +LOCAL_PROPERTIES_PATH=$REPO_PATH/local.properties +echo -e "\nsdk.dir=$ANDROID_HOME" >> $LOCAL_PROPERTIES_PATH +echo "local.properties at: $LOCAL_PROPERTIES_PATH" +echo "cat local.properties:" +cat $LOCAL_PROPERTIES_PATH -# OPTIONAL: If you need to automatically set environment variables for subsequent steps, -# you can echo them into $GITHUB_ENV or similar: -# echo "ANDROID_HOME=$ANDROID_HOME" >> $GITHUB_ENV -# echo "ANDROID_NDK=$ANDROID_HOME/ndk/$NDK_VERSION" >> $GITHUB_ENV -echo "All done." +echo "Installation complete" From 3eabb50a0214707eee6307eaf33cb39c82ddd322 Mon Sep 17 00:00:00 2001 From: Kibnet Philosoff Date: Fri, 31 Jan 2025 12:54:11 +0300 Subject: [PATCH 10/14] fix --- .github/workflows/ci.yml | 8 +++++++- install_ndk.sh | 36 +++++------------------------------- 2 files changed, 12 insertions(+), 32 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1ee44d0a..eb66c527 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -69,7 +69,13 @@ jobs: run: | chmod +x install_ndk.sh ./install_ndk.sh - echo "ANDROID_TOOLCHAIN_ROOT=$ANDROID_HOME/ndk/$NDK_VERSION/toolchains/llvm/prebuilt/linux-x86_64" >> $GITHUB_ENV + - name: Debug environment + run: | + echo "ANDROID_SDK_ROOT=$ANDROID_SDK_ROOT" + echo "ANDROID_NDK=$ANDROID_NDK" + echo "ANDROID_TOOLCHAIN_ROOT=$ANDROID_TOOLCHAIN_ROOT" + which ndk-build || true + which ndk-which || true - name: Build Linux if: runner.os == 'Linux' && (!contains(matrix.name, 'android')) run: ./dockerbuild.sh diff --git a/install_ndk.sh b/install_ndk.sh index 3f4e460d..03e45aaa 100644 --- a/install_ndk.sh +++ b/install_ndk.sh @@ -1,35 +1,9 @@ #!/bin/bash -##################### -# usage: ./thisscript.sh [repo_path] -# the repo path used for locate the `local.properties` file, -# this script will append cmake.dir into it, -# if not specify, will use $GITHUB_WORKSPACE, -# if $GITHUB_WORKSPACE is empty, will use `/home/runner/work/PuppyGit/PuppyGit`, it is the actually value of $GITHUB_WORKSPACE -##################### - -#echo "Updating package list..." -#sudo apt update -# -#echo "Installing: curl cmake make tar libssl-dev maven unzip" -#sudo apt install -y curl cmake make tar libssl-dev maven unzip - - - export build_root=$HOME/libsbuild mkdir -p $build_root cd $build_root -# export ndk_filename="android-ndk-r26d-linux" -# echo "Downloading: ndk" -# curl -L -o "${build_root}/$ndk_filename.zip" "https://dl.google.com/android/repository/${ndk_filename}.zip" -# export ANDROID_NDK_ROOT=$build_root/android-ndk -# mkdir -p $ANDROID_NDK_ROOT -# echo "Extracting: ndk" -# -q : only show msg when err -# unzip -q "$ndk_filename.zip" -# mv android-ndk-r26d/* $ANDROID_NDK_ROOT - echo "Downloading: Android SDK" # ANDROID_HOME is android sdk root, is sdk root, not ndk root export TOOLS=$build_root/tools @@ -37,13 +11,13 @@ export ANDROID_CMD_TOOLS=$TOOLS/android-cmdline-tools export ANDROID_HOME=$build_root/android-sdk export CMAKE_VERSION=3.31.1 export NDK_VERSION=26.3.11579264 -# 创建目标目录以及依赖目录,虽然后面会删一下cmd tools目录,但这个创建依然是有意义的,意义在于创建依赖目录,所以即使后面会删除cmd tools目录,这条命令也依然应该保留 + mkdir -p $ANDROID_CMD_TOOLS mkdir -p $ANDROID_HOME curl -L -o cmdline-tools.zip https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip -# 删一下,确保mv后目录结构不变 + rm -rf $ANDROID_CMD_TOOLS -# 解压然后移动,确保先删后解压移动,以免当解压后的目录和移动的目标目录同名时误删 + unzip cmdline-tools.zip -d $TOOLS/ mv $TOOLS/cmdline-tools $ANDROID_CMD_TOOLS export ANDROID_SDKMANAGER=$ANDROID_CMD_TOOLS/bin/sdkmanager @@ -53,7 +27,7 @@ yes | $ANDROID_SDKMANAGER --install "cmake;$CMAKE_VERSION" --sdk_root=$ANDROID_H # $ANDROID_HOME/cmdline-tools/bin/sdkmanager --list --sdk_root=$ANDROID_HOME # cmake root dir export CMAKE_DIR=$ANDROID_HOME/cmake/$CMAKE_VERSION -# cmake 可执行文件路径 +# cmake export CMAKE_PATH=$CMAKE_DIR/bin/cmake echo "print cmake version" @@ -65,7 +39,7 @@ yes | $ANDROID_SDKMANAGER --channel=0 --install "ndk;$NDK_VERSION" --sdk_root=$A echo "set sdk.dir to local.properties for gradle" REPO_PATH=${1:-$GITHUB_WORKSPACE} -REPO_PATH=${REPO_PATH:-/home/runner/work/PuppyGit/PuppyGit} +REPO_PATH=${REPO_PATH:-/home/runner/work/libgit2sharp.nativebinaries/libgit2sharp.nativebinaries} LOCAL_PROPERTIES_PATH=$REPO_PATH/local.properties echo -e "\nsdk.dir=$ANDROID_HOME" >> $LOCAL_PROPERTIES_PATH echo "local.properties at: $LOCAL_PROPERTIES_PATH" From 49ae03914155c93d4d85842cff96bd857cb1d924 Mon Sep 17 00:00:00 2001 From: Kibnet Philosoff Date: Fri, 31 Jan 2025 13:03:17 +0300 Subject: [PATCH 11/14] fix --- .github/workflows/ci.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index eb66c527..93717970 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -69,6 +69,8 @@ jobs: run: | chmod +x install_ndk.sh ./install_ndk.sh + - name: Force the correct SDK/NDK path + run: echo "ANDROID_TOOLCHAIN_ROOT=$ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64" >> $GITHUB_ENV - name: Debug environment run: | echo "ANDROID_SDK_ROOT=$ANDROID_SDK_ROOT" From 6e4e441aab12103b6de2856710cb6e94dbb83be5 Mon Sep 17 00:00:00 2001 From: Kibnet Philosoff Date: Fri, 31 Jan 2025 13:08:11 +0300 Subject: [PATCH 12/14] fix --- .github/workflows/ci.yml | 11 +---------- build.libgit2.sh | 2 +- 2 files changed, 2 insertions(+), 11 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 93717970..21180d33 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -68,16 +68,7 @@ jobs: if: contains(matrix.name, 'android') run: | chmod +x install_ndk.sh - ./install_ndk.sh - - name: Force the correct SDK/NDK path - run: echo "ANDROID_TOOLCHAIN_ROOT=$ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64" >> $GITHUB_ENV - - name: Debug environment - run: | - echo "ANDROID_SDK_ROOT=$ANDROID_SDK_ROOT" - echo "ANDROID_NDK=$ANDROID_NDK" - echo "ANDROID_TOOLCHAIN_ROOT=$ANDROID_TOOLCHAIN_ROOT" - which ndk-build || true - which ndk-which || true + ./install_ndk.sh - name: Build Linux if: runner.os == 'Linux' && (!contains(matrix.name, 'android')) run: ./dockerbuild.sh diff --git a/build.libgit2.sh b/build.libgit2.sh index a9365c2f..15eb1d2a 100755 --- a/build.libgit2.sh +++ b/build.libgit2.sh @@ -29,7 +29,7 @@ export _BINPATH=`pwd` # Проверка, собираем ли для Android if [[ "$RID" == *"android"* ]]; then echo "Building for Android: $RID" - export ANDROID_TOOLCHAIN_ROOT="${ANDROID_NDK}" + export ANDROID_TOOLCHAIN_ROOT="${ANDROID_NDK}/toolchains/llvm/prebuilt/linux-x86_64" export android_target_abi=21 if [[ "$RID" == "android-arm64" ]]; then From 1cc7b9430c1cae7449b7fe0326f08b8f169e0627 Mon Sep 17 00:00:00 2001 From: Kibnet Philosoff Date: Fri, 31 Jan 2025 15:10:38 +0300 Subject: [PATCH 13/14] cStandart --- build.libgit2.sh | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/build.libgit2.sh b/build.libgit2.sh index 15eb1d2a..231af681 100755 --- a/build.libgit2.sh +++ b/build.libgit2.sh @@ -39,13 +39,18 @@ if [[ "$RID" == *"android"* ]]; then fi cmake -DCMAKE_BUILD_TYPE=Release \ - -DUSE_SSH=exec \ - -DLIBGIT2_FILENAME=git2-$SHORTSHA \ - -DUSE_HTTPS=$USEHTTPS \ - -DUSE_BUNDLED_ZLIB=ON \ - -DCMAKE_TOOLCHAIN_FILE="$TOOLCHAIN_FILE" \ - .. - + -DUSE_SSH=ON \ + -DBUILD_TESTS=OFF \ + -DBUILD_CLI=OFF \ + -DBUILD_EXAMPLES=OFF \ + -DBUILD_FUZZERS=OFF \ + -DBUILD_SHARED_LIBS=ON \ + -DCMAKE_C_STANDARD=99 \ + -DLIBGIT2_FILENAME=git2-$SHORTSHA \ + -DUSE_HTTPS=$USEHTTPS \ + -DUSE_BUNDLED_ZLIB=ON \ + -DCMAKE_TOOLCHAIN_FILE="$TOOLCHAIN_FILE" \ + .. else # Сборка для Mac/Linux по умолчанию if [[ $OS == "Darwin" ]]; then From 86d95a79f7a0a693af53a5d49c1b662598d0daf1 Mon Sep 17 00:00:00 2001 From: Kibnet Philosoff Date: Fri, 31 Jan 2025 19:04:02 +0300 Subject: [PATCH 14/14] =?UTF-8?q?=D1=84=D0=B8=D0=BA=D1=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.libgit2.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.libgit2.sh b/build.libgit2.sh index 231af681..fe807f53 100755 --- a/build.libgit2.sh +++ b/build.libgit2.sh @@ -39,7 +39,7 @@ if [[ "$RID" == *"android"* ]]; then fi cmake -DCMAKE_BUILD_TYPE=Release \ - -DUSE_SSH=ON \ + -DUSE_SSH=OFF \ -DBUILD_TESTS=OFF \ -DBUILD_CLI=OFF \ -DBUILD_EXAMPLES=OFF \