Add linux.riscv64 precompiled support
This commit is contained in:
parent
ac8fb00504
commit
15de97e33f
|
@ -47,7 +47,7 @@ jobs:
|
||||||
needs: package_source
|
needs: package_source
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
build: [linux.x86_64, linux.aarch64, linux.armv6hf, darwin.x86_64, darwin.aarch64, windows.x86_64]
|
build: [linux.x86_64, linux.aarch64, linux.armv6hf, linux.riscv64, darwin.x86_64, darwin.aarch64, windows.x86_64]
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
|
|
|
@ -80,6 +80,7 @@ function multi_arch_docker::main() {
|
||||||
export DOCKER_PLATFORMS='linux/amd64'
|
export DOCKER_PLATFORMS='linux/amd64'
|
||||||
DOCKER_PLATFORMS+=' linux/arm64'
|
DOCKER_PLATFORMS+=' linux/arm64'
|
||||||
DOCKER_PLATFORMS+=' linux/arm/v6'
|
DOCKER_PLATFORMS+=' linux/arm/v6'
|
||||||
|
DOCKER_PLATFORMS+=' linux/riscv64'
|
||||||
|
|
||||||
multi_arch_docker::install_docker_buildx
|
multi_arch_docker::install_docker_buildx
|
||||||
multi_arch_docker::login_to_docker_hub
|
multi_arch_docker::login_to_docker_hub
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
- SC2327/SC2328: Warn about capturing the output of redirected commands.
|
- SC2327/SC2328: Warn about capturing the output of redirected commands.
|
||||||
- SC2329: Warn when (non-escaping) functions are never invoked.
|
- SC2329: Warn when (non-escaping) functions are never invoked.
|
||||||
- SC2330: Warn about unsupported glob matches with [[ .. ]] in BusyBox.
|
- SC2330: Warn about unsupported glob matches with [[ .. ]] in BusyBox.
|
||||||
|
- Precompiled binaries for Linux riscv64 (linux.riscv64)
|
||||||
### Changed
|
### Changed
|
||||||
- SC2015 about `A && B || C` no longer triggers when B is a test command.
|
- SC2015 about `A && B || C` no longer triggers when B is a test command.
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
|
@ -0,0 +1,47 @@
|
||||||
|
FROM ubuntu:22.04
|
||||||
|
|
||||||
|
ENV TARGETNAME linux.riscv64
|
||||||
|
ENV TARGET riscv64-linux-gnu
|
||||||
|
|
||||||
|
USER root
|
||||||
|
ENV DEBIAN_FRONTEND noninteractive
|
||||||
|
|
||||||
|
# Init base
|
||||||
|
RUN apt update -y
|
||||||
|
|
||||||
|
# Install qemu
|
||||||
|
RUN apt install -y --no-install-recommends build-essential ninja-build python3 pkg-config libglib2.0-dev libpixman-1-dev curl ca-certificates python3-virtualenv
|
||||||
|
WORKDIR /qemu
|
||||||
|
RUN curl -Lv "https://download.qemu.org/qemu-9.0.0.tar.xz" | tar xJ --strip-components=1
|
||||||
|
RUN ./configure --target-list=riscv64-linux-user --static --disable-system --disable-pie
|
||||||
|
RUN cd build && ninja qemu-riscv64
|
||||||
|
ENV QEMU_EXECVE 1
|
||||||
|
|
||||||
|
|
||||||
|
# Set up a riscv64 userspace
|
||||||
|
RUN apt install -y --no-install-recommends debootstrap
|
||||||
|
RUN debootstrap --arch=riscv64 --foreign jammy /rvfs http://ports.ubuntu.com/ubuntu-ports
|
||||||
|
RUN cp /qemu/build/qemu-riscv64 /rvfs/usr/bin/qemu-riscv64-static
|
||||||
|
|
||||||
|
RUN printf > /bin/rv '%s\n' '#!/bin/sh' 'chroot /rvfs /usr/bin/qemu-riscv64-static /usr/bin/env "$@"'
|
||||||
|
RUN chmod +x /bin/rv
|
||||||
|
RUN [ ! -e /rvfs/debootstrap ] || rv '/debootstrap/debootstrap' --second-stage
|
||||||
|
|
||||||
|
# Install deps in the chroot
|
||||||
|
RUN printf > /rvfs/etc/apt/sources.list '%s\n' 'deb http://ports.ubuntu.com/ubuntu-ports jammy main universe'
|
||||||
|
RUN rv apt update -y
|
||||||
|
RUN rv apt install -y --no-install-recommends ghc cabal-install
|
||||||
|
|
||||||
|
# Finally we can build the current dependencies. This takes hours.
|
||||||
|
# jobs must be 1, GHS riscv will use about 40G memory
|
||||||
|
RUN rv cabal update
|
||||||
|
RUN IFS=";" && rv cabal install --dependencies-only --jobs=1 ShellCheck
|
||||||
|
RUN IFS=';' && rv cabal install --lib --jobs=1 fgl
|
||||||
|
|
||||||
|
# Clean up
|
||||||
|
RUN rm -rf /qemu
|
||||||
|
|
||||||
|
# Copy the build script
|
||||||
|
WORKDIR /rvfs/scratch
|
||||||
|
COPY build /rvfs/usr/bin/build
|
||||||
|
ENTRYPOINT ["/bin/rv", "/usr/bin/build"]
|
|
@ -0,0 +1,15 @@
|
||||||
|
#!/bin/sh
|
||||||
|
set -xe
|
||||||
|
{
|
||||||
|
tar xzv --strip-components=1
|
||||||
|
chmod +x striptests && ./striptests
|
||||||
|
mkdir "$TARGETNAME"
|
||||||
|
cabal update
|
||||||
|
( IFS=';'; cabal build --enable-executable-static )
|
||||||
|
find . -name shellcheck -type f -exec mv {} "$TARGETNAME/" \;
|
||||||
|
ls -l "$TARGETNAME"
|
||||||
|
"$TARGET-strip" -s "$TARGETNAME/shellcheck"
|
||||||
|
ls -l "$TARGETNAME"
|
||||||
|
qemu-riscv64-static "$TARGETNAME/shellcheck" --version
|
||||||
|
} >&2
|
||||||
|
tar czv "$TARGETNAME"
|
|
@ -0,0 +1 @@
|
||||||
|
koalaman/scbuilder-linux-riscv64
|
Loading…
Reference in New Issue