Skip to content

Commit

Permalink
Add linux.riscv64 precompiled support
Browse files Browse the repository at this point in the history
  • Loading branch information
mengzhuo committed May 30, 2024
1 parent ac8fb00 commit 15de97e
Show file tree
Hide file tree
Showing 6 changed files with 66 additions and 1 deletion.
2 changes: 1 addition & 1 deletion .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ jobs:
needs: package_source
strategy:
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
steps:
- name: Checkout repository
Expand Down
1 change: 1 addition & 0 deletions .multi_arch_docker
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ function multi_arch_docker::main() {
export DOCKER_PLATFORMS='linux/amd64'
DOCKER_PLATFORMS+=' linux/arm64'
DOCKER_PLATFORMS+=' linux/arm/v6'
DOCKER_PLATFORMS+=' linux/riscv64'

multi_arch_docker::install_docker_buildx
multi_arch_docker::login_to_docker_hub
Expand Down
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
- SC2327/SC2328: Warn about capturing the output of redirected commands.
- SC2329: Warn when (non-escaping) functions are never invoked.
- SC2330: Warn about unsupported glob matches with [[ .. ]] in BusyBox.
- Precompiled binaries for Linux riscv64 (linux.riscv64)
### Changed
- SC2015 about `A && B || C` no longer triggers when B is a test command.
### Fixed
Expand Down
47 changes: 47 additions & 0 deletions build/linux.riscv64/Dockerfile
Original file line number Diff line number Diff line change
@@ -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"]
15 changes: 15 additions & 0 deletions build/linux.riscv64/build
Original file line number Diff line number Diff line change
@@ -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"
1 change: 1 addition & 0 deletions build/linux.riscv64/tag
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
koalaman/scbuilder-linux-riscv64

0 comments on commit 15de97e

Please sign in to comment.