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

Refactor CI: add clang, ubsan, asan, macos, windows #85

Merged
merged 10 commits into from
Jun 4, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading