Skip to content

Commit

Permalink
Refactor CI: add clang, ubsan, asan, macos, windows (#85)
Browse files Browse the repository at this point in the history
* Add clang build to CI

* Refactor CI flow, add clang builds

* add asan, ubsan and regression CI flows

* make SystemC source code location configurable

* add macos build

add macos build

* replace nproc

* add macos ubsan, asan and regression

* add windows build

* fix cmake install

* prettier names
  • Loading branch information
aut0 authored Jun 4, 2024
1 parent 6f6e318 commit 176a3b0
Show file tree
Hide file tree
Showing 7 changed files with 312 additions and 28 deletions.
59 changes: 59 additions & 0 deletions .github/workflows/asan.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
name: asan

on:
push:
pull_request:

jobs:
ubuntu:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
version: [20.04, 22.04]
platform: [linux/amd64, linux/arm64]
target: [clang-shared-regression-asan]
steps:
- name: Install qemu-user-static
run: |
if [[ "${{ matrix.platform }}" == "linux/arm64" ]]; then
sudo apt-get update && sudo apt-get install -y qemu-user-static
fi
- name: Checkout
uses: actions/checkout@v4
- name: Build
run: |
docker buildx build --platform ${{ matrix.platform }} -t systemc_test --build-arg UBUNTU_VERSION=${{ matrix.version }} -f docker/ubuntu.dockerfile .
docker run -e SYSTEMC_CI_TARGET=${{ matrix.target }} systemc_test
almalinux:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
version: [8, 9]
platform: [linux/amd64, linux/arm64]
target: [clang-shared-regression-asan]
steps:
- name: Install qemu-user-static
run: |
if [[ "${{ matrix.platform }}" == "linux/arm64" ]]; then
sudo apt-get update && sudo apt-get install -y qemu-user-static
fi
- name: Checkout
uses: actions/checkout@v4
- name: Build
run: |
docker buildx build --platform ${{ matrix.platform }} -t systemc_test --build-arg ALMA_VERSION=${{ matrix.version }} -f docker/alma.dockerfile .
docker run -e SYSTEMC_CI_TARGET=${{ matrix.target }} systemc_test
macos:
runs-on: macos-latest
strategy:
fail-fast: false
matrix:
target: [clang-shared-regression-asan]
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Build
run: |
SYSTEMC_CI_TARGET=${{ matrix.target }} SYSTEMC_SRC_PATH=$PWD docker/entrypoint.sh
42 changes: 32 additions & 10 deletions .github/workflows/cmake.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,14 @@ on:
pull_request:

jobs:
build_ubuntu:
ubuntu:
runs-on: ubuntu-latest
continue-on-error: true
strategy:
fail-fast: false
matrix:
version: [20.04, 22.04]
platform: [linux/amd64, linux/arm64]
regression: [ON, OFF]
target: [gcc-shared, gcc-static, clang-shared, clang-static]
steps:
- name: Install qemu-user-static
run: |
Expand All @@ -23,16 +23,16 @@ jobs:
uses: actions/checkout@v4
- name: Build
run: |
docker buildx build --platform ${{ matrix.platform }} -t systemc_test --build-arg UBUNTU_VERSION=${{ matrix.version }} --build-arg BUILD_REGRESSION=${{ matrix.regression }} -f docker/ubuntu.dockerfile .
docker run systemc_test
build_almalinux:
docker buildx build --platform ${{ matrix.platform }} -t systemc_test --build-arg UBUNTU_VERSION=${{ matrix.version }} -f docker/ubuntu.dockerfile .
docker run -e SYSTEMC_CI_TARGET=${{ matrix.target }} systemc_test
almalinux:
runs-on: ubuntu-latest
continue-on-error: true
strategy:
fail-fast: false
matrix:
version: [8, 9]
platform: [linux/amd64, linux/arm64]
regression: [ON, OFF]
target: [gcc-shared, gcc-static, clang-shared, clang-static]
steps:
- name: Install qemu-user-static
run: |
Expand All @@ -43,5 +43,27 @@ jobs:
uses: actions/checkout@v4
- name: Build
run: |
docker buildx build --platform ${{ matrix.platform }} -t systemc_test --build-arg ALMA_VERSION=${{ matrix.version }} --build-arg BUILD_REGRESSION=${{ matrix.regression }} -f docker/alma.dockerfile .
docker run systemc_test
docker buildx build --platform ${{ matrix.platform }} -t systemc_test --build-arg ALMA_VERSION=${{ matrix.version }} -f docker/alma.dockerfile .
docker run -e SYSTEMC_CI_TARGET=${{ matrix.target }} systemc_test
macos:
runs-on: macos-latest
strategy:
fail-fast: false
matrix:
target: [clang-shared, clang-static]
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Build
run: |
SYSTEMC_CI_TARGET=${{ matrix.target }} SYSTEMC_SRC_PATH=$PWD docker/entrypoint.sh
windows:
runs-on: windows-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Build
run: |
cmake -B BUILD/RELEASE/BUILD .
cmake --build BUILD/RELEASE/BUILD --config RELEASE --parallel
cmake --install BUILD/RELEASE/BUILD --config RELEASE
69 changes: 69 additions & 0 deletions .github/workflows/regressions.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
name: regressions

on:
push:
pull_request:

jobs:
ubuntu:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
version: [20.04, 22.04]
platform: [linux/amd64, linux/arm64]
target: [gcc-shared-regression, clang-shared-regression]
steps:
- name: Install qemu-user-static
run: |
if [[ "${{ matrix.platform }}" == "linux/arm64" ]]; then
sudo apt-get update && sudo apt-get install -y qemu-user-static
fi
- name: Checkout
uses: actions/checkout@v4
- name: Build
run: |
docker buildx build --platform ${{ matrix.platform }} -t systemc_test --build-arg UBUNTU_VERSION=${{ matrix.version }} -f docker/ubuntu.dockerfile .
docker run -e SYSTEMC_CI_TARGET=${{ matrix.target }} systemc_test
almalinux:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
version: [8, 9]
platform: [linux/amd64, linux/arm64]
target: [gcc-shared-regression, clang-shared-regression]
steps:
- name: Install qemu-user-static
run: |
if [[ "${{ matrix.platform }}" == "linux/arm64" ]]; then
sudo apt-get update && sudo apt-get install -y qemu-user-static
fi
- name: Checkout
uses: actions/checkout@v4
- name: Build
run: |
docker buildx build --platform ${{ matrix.platform }} -t systemc_test --build-arg ALMA_VERSION=${{ matrix.version }} -f docker/alma.dockerfile .
docker run -e SYSTEMC_CI_TARGET=${{ matrix.target }} systemc_test
macos:
runs-on: macos-latest
strategy:
fail-fast: false
matrix:
target: [clang-shared-regression]
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Build
run: |
SYSTEMC_CI_TARGET=${{ matrix.target }} SYSTEMC_SRC_PATH=$PWD docker/entrypoint.sh
windows:
runs-on: windows-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Build
run: |
cmake -B BUILD/RELEASE/BUILD -DENABLE_REGRESSION=true .
cmake --build BUILD/RELEASE/BUILD --config RELEASE --parallel
cmake --install BUILD/RELEASE/BUILD --config RELEASE
59 changes: 59 additions & 0 deletions .github/workflows/ubsan.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
name: ubsan

on:
push:
pull_request:

jobs:
ubuntu:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
version: [20.04, 22.04]
platform: [linux/amd64, linux/arm64]
target: [clang-shared-regression-ubsan]
steps:
- name: Install qemu-user-static
run: |
if [[ "${{ matrix.platform }}" == "linux/arm64" ]]; then
sudo apt-get update && sudo apt-get install -y qemu-user-static
fi
- name: Checkout
uses: actions/checkout@v4
- name: Build
run: |
docker buildx build --platform ${{ matrix.platform }} -t systemc_test --build-arg UBUNTU_VERSION=${{ matrix.version }} -f docker/ubuntu.dockerfile .
docker run -e SYSTEMC_CI_TARGET=${{ matrix.target }} systemc_test
almalinux:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
version: [8, 9]
platform: [linux/amd64, linux/arm64]
target: [clang-shared-regression-ubsan]
steps:
- name: Install qemu-user-static
run: |
if [[ "${{ matrix.platform }}" == "linux/arm64" ]]; then
sudo apt-get update && sudo apt-get install -y qemu-user-static
fi
- name: Checkout
uses: actions/checkout@v4
- name: Build
run: |
docker buildx build --platform ${{ matrix.platform }} -t systemc_test --build-arg ALMA_VERSION=${{ matrix.version }} -f docker/alma.dockerfile .
docker run -e SYSTEMC_CI_TARGET=${{ matrix.target }} systemc_test
macos:
runs-on: macos-latest
strategy:
fail-fast: false
matrix:
target: [clang-shared-regression-ubsan]
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Build
run: |
SYSTEMC_CI_TARGET=${{ matrix.target }} SYSTEMC_SRC_PATH=$PWD docker/entrypoint.sh
15 changes: 6 additions & 9 deletions docker/alma.dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -3,22 +3,19 @@ ARG IMAGE=almalinux:$ALMA_VERSION

FROM $IMAGE

ARG BUILD_REGRESSION=OFF

WORKDIR /app

RUN dnf install -y \
cmake \
gcc \
gcc-c++ \
clang \
libasan \
libubsan \
&& dnf clean all

# Copy the current directory contents into the container at /app
COPY . /app

RUN cmake -B BUILD/RELEASE/BUILD -DCMAKE_INSTALL_PREFIX=$PWD/BUILD/RELEASE -DCMAKE_CXX_FLAGS="-Werror" -DENABLE_REGRESSION=$BUILD_REGRESSION .
RUN cmake --build BUILD/RELEASE/BUILD/ --parallel
RUN cmake -B BUILD/RELEASE_STATIC/BUILD -DCMAKE_INSTALL_PREFIX=$PWD/BUILD/RELEASE -DCMAKE_CXX_FLAGS="-Werror" -DBUILD_SHARED_LIBS=OFF -DENABLE_REGRESSION=$BUILD_REGRESSION .
RUN cmake --build BUILD/RELEASE_STATIC/BUILD/ --parallel

CMD ["/bin/bash", "-c", "make -j `nproc` -C BUILD/RELEASE/BUILD/ check && make -j `nproc` -C BUILD/RELEASE_STATIC/BUILD/ check"]
# Setup entrypoint CI script
COPY ./docker/entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
83 changes: 83 additions & 0 deletions docker/entrypoint.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
#!/bin/bash
set -euxo pipefail

if [[ -z "${SYSTEMC_CI_TARGET}" ]]; then
echo "SYSTEMC_CI_TARGET environment variable needs to be set"
exit 1
fi

: ${SYSTEMC_SRC_PATH:="/app"}

# Build with -Werror by default
CXX_FLAGS="-Werror"

case "$SYSTEMC_CI_TARGET" in
gcc-shared)
CC=gcc
CXX=g++
BUILD_SHARED_LIBRARY=true
BUILD_REGRESSIONS=false
;;
gcc-static)
CC=gcc
CXX=g++
BUILD_SHARED_LIBRARY=false
BUILD_REGRESSIONS=false
;;
gcc-shared-regression)
CC=gcc
CXX=g++
BUILD_SHARED_LIBRARY=true
BUILD_REGRESSIONS=true
;;
clang-shared)
CC=clang
CXX=clang++
BUILD_SHARED_LIBRARY=true
BUILD_REGRESSIONS=false
;;
clang-static)
CC=clang
CXX=clang++
BUILD_SHARED_LIBRARY=false
BUILD_REGRESSIONS=false
;;
clang-shared-regression)
CC=clang
CXX=clang++
BUILD_SHARED_LIBRARY=true
BUILD_REGRESSIONS=true
;;
clang-shared-regression-asan)
CC=clang
CXX=clang++
BUILD_SHARED_LIBRARY=true
BUILD_REGRESSIONS=true
CXX_FLAGS="$CXX_FLAGS -fsanitize=address"
;;
clang-shared-regression-ubsan)
CC=clang
CXX=clang++
BUILD_SHARED_LIBRARY=true
BUILD_REGRESSIONS=true
CXX_FLAGS="$CXX_FLAGS -fsanitize=undefined"
;;
*)
echo "Error: Unknown SYSTEMC_CI_TARGET '$SYSTEMC_CI_TARGET'"
exit 1
;;
esac

cd $SYSTEMC_SRC_PATH
cmake -B BUILD/RELEASE-${SYSTEMC_CI_TARGET}/BUILD \
-DCMAKE_INSTALL_PREFIX=${SYSTEMC_SRC_PATH}/BUILD/${SYSTEMC_CI_TARGET} \
-DCMAKE_CXX_FLAGS="$CXX_FLAGS" \
-DCMAKE_C_COMPILER=$CC \
-DCMAKE_CXX_COMPILER=$CXX \
-DENABLE_REGRESSION=$BUILD_REGRESSIONS \
-DBUILD_SHARED_LIBS=$BUILD_SHARED_LIBRARY .
cmake --build BUILD/RELEASE-${SYSTEMC_CI_TARGET}/BUILD/ --parallel
cmake --install BUILD/RELEASE-${SYSTEMC_CI_TARGET}/BUILD/
make -j `getconf _NPROCESSORS_ONLN` -C BUILD/RELEASE-${SYSTEMC_CI_TARGET}/BUILD/ check

exit 0
Loading

0 comments on commit 176a3b0

Please sign in to comment.