Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ci: Add android builds of libgit2 #166

Open
wants to merge 14 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 22 additions & 8 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -56,23 +62,31 @@ 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: |
chmod +x install_ndk.sh
./install_ndk.sh
- 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/[email protected]
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/[email protected]
with:
Expand Down
56 changes: 47 additions & 9 deletions build.libgit2.sh
Original file line number Diff line number Diff line change
Expand Up @@ -26,16 +26,54 @@ 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}/toolchains/llvm/prebuilt/linux-x86_64"
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=OFF \
-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
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
Expand Down
12 changes: 12 additions & 0 deletions cmake-toolchains/libgit2-arm64-toolchain.cmake
Original file line number Diff line number Diff line change
@@ -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)


12 changes: 12 additions & 0 deletions cmake-toolchains/libgit2-armv7-toolchain.cmake
Original file line number Diff line number Diff line change
@@ -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)


50 changes: 50 additions & 0 deletions install_ndk.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
#!/bin/bash

export build_root=$HOME/libsbuild
mkdir -p $build_root
cd $build_root

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

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

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 "print cmake version"
$CMAKE_PATH --version

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 "set sdk.dir to local.properties for gradle"
REPO_PATH=${1:-$GITHUB_WORKSPACE}
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"
echo "cat local.properties:"
cat $LOCAL_PROPERTIES_PATH


echo "Installation complete"