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: Setup cross build test #296

Merged
merged 13 commits into from
Feb 1, 2024
60 changes: 60 additions & 0 deletions .github/workflows/cross.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
name: Cross

on:
pull_request:
branches:
- master
push:
branches:
- master
tags: '*'

jobs:
build-cross-qemu:
runs-on: ubuntu-latest
name: build-cross-qemu-${{ matrix.config.arch }}
strategy:
fail-fast: false
matrix:
config:
- { arch: arm, triple: arm-linux-gnueabihf }
- { arch: aarch64, triple: aarch64-linux-gnu }
- { arch: ppc, triple: powerpc-linux-gnu }
- { arch: ppc64, triple: powerpc64-linux-gnu }
- { arch: ppc64le, triple: powerpc64le-linux-gnu }
- { arch: mips, triple: mips-linux-gnu }
- { arch: mipsel, triple: mipsel-linux-gnu }
# Builds successfully, but tests fail.
# - { arch: mips64, triple: mips64-linux-gnuabi64 }
# - { arch: mips64el, triple: mips64el-linux-gnuabi64 }
- { arch: riscv64, triple: riscv64-linux-gnu }
- { arch: s390x, triple: s390x-linux-gnu }
env:
ARCH: ${{ matrix.config.arch }}
TRIPLE: ${{ matrix.config.triple }}
steps:
- uses: actions/checkout@v4
- name: Install QEMU
# this ensure install latest qemu on ubuntu, apt get version is old
env:
QEMU_SRC: "http://archive.ubuntu.com/ubuntu/pool/universe/q/qemu"
QEMU_VER: "qemu-user-static_7\\.2+dfsg-.*_amd64.deb$"
run: |
DEB=`curl -s $QEMU_SRC/ | grep -o -E 'href="([^"#]+)"' | cut -d'"' -f2 | grep $QEMU_VER | tail -1`
wget $QEMU_SRC/$DEB
sudo dpkg -i $DEB
- name: Install toolchain gcc-${{ matrix.config.triple }}
run: |
sudo apt update
sudo apt install gcc-$TRIPLE -y
- name: Build with ${{ matrix.config.triple }}-gcc
run: make ARCH=$ARCH TOOLPREFIX=$TRIPLE-
- name: Build tests
run: make -C test ARCH=$ARCH TOOLPREFIX=$TRIPLE-
- name: Run Tests
env:
QEMU_EXEC: qemu-${{ matrix.config.arch }}-static
CROSS_LIB: /usr/${{ matrix.config.triple }}
run: |
$QEMU_EXEC -L . -L $CROSS_LIB/ test/test-float
$QEMU_EXEC -L . -L $CROSS_LIB/ test/test-double
7 changes: 4 additions & 3 deletions Make.inc
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ endif

USEGCC ?= 1
USECLANG ?= 0
TOOLPREFIX ?=

ifneq (,$(findstring $(OS),Darwin FreeBSD OpenBSD))
USEGCC ?= 0
Expand All @@ -34,7 +35,7 @@ USECLANG = 1
TOOLPREFIX = llvm-
endif

AR ?= $(TOOLPREFIX)ar
AR := $(TOOLPREFIX)ar

ifeq ($(USECLANG),1)
USEGCC ?= 0
Expand All @@ -43,7 +44,7 @@ CFLAGS_add += -fno-builtin -fno-strict-aliasing
endif

ifeq ($(USEGCC),1)
CC ?= $(TOOLPREFIX)gcc
CC := $(TOOLPREFIX)gcc
CFLAGS_add += -fno-gnu89-inline -fno-builtin
endif

Expand All @@ -59,7 +60,7 @@ override ARCH := aarch64
endif
ifeq ($(findstring arm,$(ARCH)),arm)
override ARCH := arm
MARCH ?= armv7-a
MARCH ?= armv7-a+fp
CFLAGS_add += -mhard-float
endif
ifeq ($(findstring powerpc,$(ARCH)),powerpc)
Expand Down
19 changes: 19 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,25 @@ loongarch64.
i686. GCC 4.8 is the minimum requirement for correct codegen on
older 32-bit architectures.


**Cross Build**
Take `riscv64` as example:
1. install `qemu-riscv64-static`, `gcc-riscv64-linux-gnu`
2. Cross build:
```sh
ARCH=riscv64
TRIPLE=$ARCH-linux-gnu
make ARCH=$ARCH TOOLPREFIX=$TRIPLE- -j
make -C test ARCH=$ARCH TOOLPREFIX=$TRIPLE- -j
```

3. Run test with qemu:
```sh
qemu-$ARCH-static -L . -L /usr/$TRIPLE/ test/test-float
qemu-$ARCH-static -L . -L /usr/$TRIPLE/ test/test-double
```


### CMake

1. Create build directory with `mkdir build` and navigate into it with `cd build`.
Expand Down