build: replace xgo with NDK for Android builds

This commit is contained in:
x0b 2021-03-17 18:00:16 +01:00 committed by Nick Craig-Wood
parent f6dbb98a1d
commit 5577c7b760
1 changed files with 80 additions and 41 deletions

View File

@ -213,50 +213,89 @@ jobs:
# Deploy binaries if enabled in config && not a PR && not a fork # Deploy binaries if enabled in config && not a PR && not a fork
if: matrix.deploy && github.head_ref == '' && github.repository == 'rclone/rclone' if: matrix.deploy && github.head_ref == '' && github.repository == 'rclone/rclone'
xgo: android:
timeout-minutes: 60 timeout-minutes: 30
name: "xgo cross compile" name: "android-all"
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
steps: # Upgrade together with NDK version
- name: Set up Go 1.14
uses: actions/setup-go@v1
with:
go-version: 1.14
- name: Checkout # Upgrade together with Go version. Using a GitHub-provided version saves around 2 minutes.
uses: actions/checkout@v1 - name: Force NDK version
with: run: echo "y" | sudo ${ANDROID_HOME}/tools/bin/sdkmanager --install "ndk;21.4.7075529" | grep -v = || true
# Checkout into a fixed path to avoid import path problems on go < 1.11
path: ./src/github.com/rclone/rclone
- name: Set environment variables - name: Go module cache
shell: bash uses: actions/cache@v2
run: | with:
echo 'GOPATH=${{ runner.workspace }}' >> $GITHUB_ENV path: ~/go/pkg/mod
echo '${{ runner.workspace }}/bin' >> $GITHUB_PATH key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
restore-keys: |
${{ runner.os }}-go-
- name: Cross-compile rclone - name: arm-v7a Set environment variables
run: | shell: bash
docker pull billziss/xgo-cgofuse run: |
GO111MODULE=off go get -v github.com/karalabe/xgo # don't add to go.mod echo "CC=$(echo $ANDROID_HOME/ndk/21.4.7075529/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi16-clang)" >> $GITHUB_ENV
# xgo \ echo "CC_FOR_TARGET=$CC" >> $GITHUB_ENV
# -image=billziss/xgo-cgofuse \ echo 'GOOS=android' >> $GITHUB_ENV
# -targets=darwin/amd64,linux/386,linux/amd64,windows/386,windows/amd64 \ echo 'GOARCH=arm' >> $GITHUB_ENV
# -tags cmount \ echo 'GOARM=7' >> $GITHUB_ENV
# -dest build \ echo 'CGO_ENABLED=1' >> $GITHUB_ENV
# . echo 'CGO_LDFLAGS=-fuse-ld=lld -s -w' >> $GITHUB_ENV
xgo \ - name: arm-v7a build
-image=billziss/xgo-cgofuse \ run: go build -v -tags android -trimpath -o build/rclone-android-16-armv7a .
-targets=android/* \
-dest build \
.
- name: Build rclone - name: arm64-v8a Set environment variables
shell: bash shell: bash
run: | run: |
make echo "CC=$(echo $ANDROID_HOME/ndk/21.4.7075529/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android21-clang)" >> $GITHUB_ENV
echo "CC_FOR_TARGET=$CC" >> $GITHUB_ENV
echo 'GOOS=android' >> $GITHUB_ENV
echo 'GOARCH=arm64' >> $GITHUB_ENV
echo 'CGO_ENABLED=1' >> $GITHUB_ENV
echo 'CGO_LDFLAGS=-fuse-ld=lld -s -w' >> $GITHUB_ENV
- name: Upload artifacts - name: arm64-v8a build
run: | run: go build -v -tags android -trimpath -o build/rclone-android-21-armv8a .
make ci_upload
env: - name: x86 Set environment variables
RCLONE_CONFIG_PASS: ${{ secrets.RCLONE_CONFIG_PASS }} shell: bash
# Upload artifacts if not a PR && not a fork run: |
if: github.head_ref == '' && github.repository == 'rclone/rclone' echo "CC=$(echo $ANDROID_HOME/ndk/21.4.7075529/toolchains/llvm/prebuilt/linux-x86_64/bin/i686-linux-android16-clang)" >> $GITHUB_ENV
echo "CC_FOR_TARGET=$CC" >> $GITHUB_ENV
echo 'GOOS=android' >> $GITHUB_ENV
echo 'GOARCH=386' >> $GITHUB_ENV
echo 'CGO_ENABLED=1' >> $GITHUB_ENV
echo 'CGO_LDFLAGS=-fuse-ld=lld -s -w' >> $GITHUB_ENV
- name: x86 build
run: go build -v -tags android -trimpath -o build/rclone-android-16-x86 .
- name: x64 Set environment variables
shell: bash
run: |
echo "CC=$(echo $ANDROID_HOME/ndk/21.4.7075529/toolchains/llvm/prebuilt/linux-x86_64/bin/x86_64-linux-android21-clang)" >> $GITHUB_ENV
echo "CC_FOR_TARGET=$CC" >> $GITHUB_ENV
echo 'GOOS=android' >> $GITHUB_ENV
echo 'GOARCH=amd64' >> $GITHUB_ENV
echo 'CGO_ENABLED=1' >> $GITHUB_ENV
echo 'CGO_LDFLAGS=-fuse-ld=lld -s -w' >> $GITHUB_ENV
- name: x64 build
run: go build -v -tags android -trimpath -o build/rclone-android-21-x64 .
- name: Upload artifacts
run: |
make ci_upload
env:
RCLONE_CONFIG_PASS: ${{ secrets.RCLONE_CONFIG_PASS }}
# Upload artifacts if not a PR && not a fork
if: github.head_ref == '' && github.repository == 'rclone/rclone'