Skip to content

Commit c728dec

Browse files
committed
add linux/musl-riscv64 build
1 parent 2b95030 commit c728dec

7 files changed

Lines changed: 47 additions & 21 deletions

File tree

.github/workflows/ci.yml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,16 @@ jobs:
3333
name: linux-arm64
3434
- os: ubuntu-24.04
3535
name: linux-ppc64le
36+
- os: ubuntu-24.04
37+
name: linux-riscv64
3638
- os: ubuntu-24.04
3739
name: linux-musl-x64
3840
- os: ubuntu-24.04
3941
name: linux-musl-arm
4042
- os: ubuntu-24.04
4143
name: linux-musl-arm64
44+
- os: ubuntu-24.04
45+
name: linux-musl-riscv64
4246
- os: macos-14
4347
name: osx-x64
4448
- os: macos-14
@@ -55,9 +59,6 @@ jobs:
5559
- name: Build macOS
5660
if: runner.os == 'macOS'
5761
run: ./build.libgit2.sh
58-
- name: Setup QEMU
59-
if: matrix.name == 'linux-musl-arm' || matrix.name == 'linux-musl-arm64'
60-
run: docker run --rm --privileged multiarch/qemu-user-static:register --reset
6162
- name: Build Linux
6263
if: runner.os == 'Linux'
6364
run: ./dockerbuild.sh

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ the following platforms:
1212
- Windows (x86, x64, arm64)
1313
- macOS (x64, arm64)
1414
- Linux
15-
- glibc: (x64, arm, arm64, ppc64le)
16-
- musl: (x64, arm, arm64)
15+
- glibc: (x64, arm, arm64, ppc64le, riscv64)
16+
- musl: (x64, arm, arm64, riscv64)
1717

1818
[lg2s-nb]: https://www.nuget.org/packages/LibGit2Sharp.NativeBinaries
1919
[lg2]: https://libgit2.github.com/

UpdateLibgit2ToSha.ps1

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@ Push-Location $libgit2Directory
124124
<dllmap os="linux" cpu="arm" wordsize="32" dll="$binaryFilename" target="lib/linux-arm/lib$binaryFilename.so" />
125125
<dllmap os="linux" cpu="armv8" wordsize="64" dll="$binaryFilename" target="lib/linux-arm64/lib$binaryFilename.so" />
126126
<dllmap os="linux" cpu="ppc64le" wordsize="64" dll="$binaryFilename" target="lib/linux-ppc64le/lib$binaryFilename.so" />
127+
<dllmap os="linux" cpu="riscv64" wordsize="64" dll="$binaryFilename" target="lib/linux-riscv64/lib$binaryFilename.so" />
127128
<dllmap os="osx" cpu="x86-64" wordsize="64" dll="$binaryFilename" target="lib/osx-x64/lib$binaryFilename.dylib" />
128129
<dllmap os="osx" cpu="armv8" wordsize="64" dll="$binaryFilename" target="lib/osx-arm64/lib$binaryFilename.dylib" />
129130
</configuration>

docker/linux

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,36 @@
1-
FROM kmturley/crossbuild
2-
ARG ARCH='amd64'
3-
ENV CROSS_TRIPLE=${ARCH}
4-
RUN apt update && apt -y install pkg-config
1+
FROM ubuntu:24.04
2+
ARG ARCH=amd64
3+
ARG IS_MUSL=false
4+
5+
# 1. Install common host utilities
6+
RUN apt-get update && apt-get install -y \
7+
build-essential cmake git pkg-config wget xz-utils
8+
9+
# 2. Setup GLIBC Cross-Compilers (if not musl)
10+
RUN if [ "$IS_MUSL" = "false" ]; then \
11+
if [ "$ARCH" = "arm64" ]; then apt-get install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnu && echo "CC=aarch64-linux-gnu-gcc\nCXX=aarch64-linux-gnu-g++" >> /env_vars; \
12+
elif [ "$ARCH" = "armhf" ]; then apt-get install -y gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf && echo "CC=arm-linux-gnueabihf-gcc\nCXX=arm-linux-gnueabihf-g++" >> /env_vars; \
13+
elif [ "$ARCH" = "powerpc64le" ]; then apt-get install -y gcc-powerpc64le-linux-gnu g++-powerpc64le-linux-gnu && echo "CC=powerpc64le-linux-gnu-gcc\nCXX=powerpc64le-linux-gnu-g++" >> /env_vars; \
14+
elif [ "$ARCH" = "riscv64" ]; then apt-get install -y gcc-riscv64-linux-gnu g++-riscv64-linux-gnu && echo "CC=riscv64-linux-gnu-gcc\nCXX=riscv64-linux-gnu-g++" >> /env_vars; \
15+
else echo "CC=gcc\nCXX=g++" >> /env_vars; fi \
16+
fi
17+
18+
# 3. Setup MUSL Cross-Compilers via Dyne.org mirror (if musl)
19+
RUN if [ "$IS_MUSL" = "true" ]; then \
20+
if [ "$ARCH" = "arm64" ]; then FILE_NAME="dyne-gcc-musl-arm_64.tar.xz" && BIN_PREFIX="aarch64-linux-musl"; \
21+
elif [ "$ARCH" = "armhf" ]; then FILE_NAME="dyne-gcc-musl-arm_hf.tar.xz" && BIN_PREFIX="arm-linux-musleabihf"; \
22+
elif [ "$ARCH" = "riscv64" ]; then FILE_NAME="dyne-gcc-musl-riscv_64.tar.xz" && BIN_PREFIX="riscv64-linux-musl"; \
23+
else FILE_NAME="dyne-gcc-musl-x86_64.tar.xz" && BIN_PREFIX="x86_64-linux-musl"; fi && \
24+
mkdir -p /opt/musl-cross && \
25+
wget "https://files.dyne.org/musl/${FILE_NAME}" && \
26+
tar -xJf ${FILE_NAME} -C /opt/musl-cross --strip-components=1 && \
27+
rm ${FILE_NAME} && \
28+
echo "PATH=/opt/musl-cross/gcc-musl/bin:$PATH" >> /env_vars && \
29+
echo "CC=${BIN_PREFIX}-gcc\nCXX=${BIN_PREFIX}-g++" >> /env_vars; \
30+
fi
531

632
WORKDIR /nativebinaries
733
COPY . /nativebinaries/
834

9-
CMD ["/bin/bash", "-c", "./build.libgit2.sh"]
35+
# Inject environmental paths dynamically to run the libgit2 build script natively
36+
CMD ["/bin/bash", "-c", "export $(cat /env_vars | xargs) && ./build.libgit2.sh"]

docker/musl

Lines changed: 0 additions & 8 deletions
This file was deleted.

dockerbuild.sh

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,21 @@ elif [[ $RID =~ arm ]]; then
99
arch="armhf"
1010
elif [[ $RID =~ ppc64le ]]; then
1111
arch="powerpc64le"
12+
elif [[ $RID =~ riscv64 ]]; then
13+
arch="riscv64"
1214
else
1315
arch="amd64"
1416
fi
1517

1618
if [[ $RID == linux-musl* ]]; then
17-
dockerfile="docker/musl"
19+
is_musl="true"
1820
else
19-
dockerfile="docker/linux"
21+
is_musl="false"
2022
fi
2123

22-
docker buildx build -t $RID -f $dockerfile --build-arg ARCH=$arch .
24+
docker build -t $RID -f docker/linux \
25+
--build-arg ARCH=$arch \
26+
--build-arg IS_MUSL=$is_musl .
2327

2428
docker run -t -e RID=$RID --name=$RID $RID
2529

nuget.package/libgit2/LibGit2Sharp.dll.config

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
<dllmap os="linux" cpu="arm" wordsize="32" dll="git2-3f4182d" target="lib/linux-arm/libgit2-3f4182d.so" />
44
<dllmap os="linux" cpu="armv8" wordsize="64" dll="git2-3f4182d" target="lib/linux-arm64/libgit2-3f4182d.so" />
55
<dllmap os="linux" cpu="ppc64le" wordsize="64" dll="git2-3f4182d" target="lib/linux-ppc64le/libgit2-3f4182d.so" />
6+
<dllmap os="linux" cpu="riscv64" wordsize="64" dll="git2-3f4182d" target="lib/linux-riscv64/libgit2-3f4182d.so" />
67
<dllmap os="osx" cpu="x86-64" wordsize="64" dll="git2-3f4182d" target="lib/osx-x64/libgit2-3f4182d.dylib" />
78
<dllmap os="osx" cpu="armv8" wordsize="64" dll="git2-3f4182d" target="lib/osx-arm64/libgit2-3f4182d.dylib" />
89
</configuration>

0 commit comments

Comments
 (0)