Merge pull request #1322 from lnis-uofu/patch_update #4793
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Test | |
# Run CI on push, PR, and weekly. | |
on: | |
push: | |
pull_request: | |
schedule: | |
- cron: "0 0 * * 0 " # weekly | |
# Environment variables | |
env: | |
# Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.) | |
BUILD_TYPE: Release | |
MAKEFLAGS: "-j8" | |
DOCKER_REPO: ${{ secrets.DOCKER_REPO }} | |
# (Boolean) Setting this value to True, will force linux tet always | |
IGNORE_DOCKER_TEST: ${{ secrets.IGNORE_DOCKER_TEST }} | |
REPO_OWNER: ${{ github.repository_owner }} | |
# Multiple job to tests | |
jobs: | |
change_detect: | |
name: "Detect code changes" | |
runs-on: ubuntu-20.04 | |
outputs: | |
# this is output as string, see https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idoutputs | |
source_modified: ${{ steps.changes.outputs.status_code == '1' }} | |
force_upload: false | |
sha_short: ${{ steps.changes.outputs.sha_short }} | |
docker_repo: ${{ steps.changes.outputs.docker_repo }} | |
steps: | |
- name: Cancel previous | |
uses: styfle/[email protected] | |
with: | |
access_token: ${{ github.token }} | |
- name: Checkout OpenFPGA repo | |
uses: actions/checkout@v3 | |
with: | |
fetch-depth: 0 | |
- name: Check for source code changes | |
id: changes | |
run: | | |
git diff origin/master HEAD --name-status -- . ':!openfpga_flow' ':!docs' | |
if git diff origin/master HEAD --name-status --exit-code -- . ':!openfpga_flow' ':!docs'; then | |
echo "::set-output name=status_code::0" | |
else | |
echo "::set-output name=status_code::$?" | |
fi | |
if [[ (${GITHUB_REF} == 'refs/heads/master') || -n "${IGNORE_DOCKER_TEST}" ]]; then | |
echo "Current branch is master forcing source_modified" | |
echo "::set-output name=status_code::1" | |
fi | |
if [[ -n "${DOCKER_REPO}" ]]; then | |
echo "name=docker_repo::$REPO_OWNER" | |
echo "::set-output name=docker_repo::$REPO_OWNER" | |
else | |
echo "name=docker_repo::lnis-uofu" | |
echo "::set-output name=docker_repo::lnis-uofu" | |
fi | |
echo "::set-output name=sha_short::$(git rev-parse --short HEAD)" | |
# Test the compilation compatibility | |
linux_build: | |
needs: change_detect | |
if: ${{ fromJSON(needs.change_detect.outputs.source_modified) }} | |
name: ${{ matrix.config.name }} | |
runs-on: ubuntu-20.04 | |
# Note: dependencies are installed in the container. See details about dependency list in docker/Dockerfile.master | |
# Comment the line out when base image is built again | |
#container: ghcr.io/${{ needs.change_detect.outputs.docker_repo }}/openfpga-build-${{ matrix.config.cc}} | |
# Branch on different OS and settings | |
strategy: | |
fail-fast: false | |
matrix: | |
config: | |
- name: "Build Compatibility: GCC-7 (Ubuntu 20.04)" | |
cc: gcc-7 | |
cxx: g++-7 | |
- name: "Build Compatibility: GCC-8 (Ubuntu 20.04)" | |
cc: gcc-8 | |
cxx: g++-8 | |
- name: "Build Compatibility: GCC-9 (Ubuntu 20.04)" | |
cc: gcc-9 | |
cxx: g++-9 | |
- name: "Build Compatibility: GCC-10 (Ubuntu 20.04)" | |
cc: gcc-10 | |
cxx: g++-10 | |
- name: "Build Compatibility: GCC-11 (Ubuntu 20.04)" | |
cc: gcc-11 | |
cxx: g++-11 | |
- name: "Build Compatibility: Clang-6 (Ubuntu 20.04)" | |
cc: clang-6.0 | |
cxx: clang++-6.0 | |
- name: "Build Compatibility: Clang-7 (Ubuntu 20.04)" | |
cc: clang-7 | |
cxx: clang++-7 | |
- name: "Build Compatibility: Clang-8 (Ubuntu 20.04)" | |
cc: clang-8 | |
cxx: clang++-8 | |
- name: "Build Compatibility: Clang-10 (Ubuntu 20.04)" | |
cc: clang-10 | |
cxx: clang++-10 | |
# Define the steps to run the build job | |
env: | |
CC: ${{ matrix.config.cc }} | |
CXX: ${{ matrix.config.cxx }} | |
steps: | |
- name: Cancel previous | |
uses: styfle/[email protected] | |
with: | |
access_token: ${{ github.token }} | |
- name: Checkout OpenFPGA repo | |
uses: actions/checkout@v3 | |
- name: Install dependencies | |
run: sudo bash ./.github/workflows/install_dependencies_build.sh | |
- name: Dump tool versions | |
run: | | |
cmake --version | |
${CC} --version | |
${CXX} --version | |
- uses: hendrikmuhs/ccache-action@v1 | |
- name: Build | |
shell: bash | |
run: | | |
make all BUILD_TYPE=$BUILD_TYPE | |
# Check the cache size and see if it is over the limit | |
- name: Check ccache size | |
run: ccache -s | |
- name: Upload artifact | |
uses: actions/upload-artifact@v2 | |
if: ${{ matrix.config.cc == 'gcc-8'}} | |
with: | |
name: openfpga | |
path: | | |
build/vtr-verilog-to-routing/abc/abc | |
build/vtr-verilog-to-routing/abc/libabc.a | |
build/vtr-verilog-to-routing/ace2/ace | |
build/vtr-verilog-to-routing/vpr/libvpr.a | |
build/vtr-verilog-to-routing/vpr/vpr | |
build/openfpga/libopenfpga.a | |
build/openfpga/openfpga_shell.so | |
build/openfpga/openfpga | |
build/yosys/share | |
build/yosys/bin | |
openfpga_flow | |
openfpga.sh | |
linux_build_opt: | |
needs: change_detect | |
if: ${{ fromJSON(needs.change_detect.outputs.source_modified) }} | |
name: ${{ matrix.config.name }} | |
runs-on: ubuntu-20.04 | |
# Note: dependencies are installed in the container. See details about dependency list in docker/Dockerfile.master | |
# Comment the line out when base image is built again | |
#container: ghcr.io/${{ needs.change_detect.outputs.docker_repo }}/openfpga-build-${{ matrix.config.cc}} | |
# Branch on different OS and settings | |
strategy: | |
fail-fast: false | |
matrix: | |
config: | |
- name: "Build w/o Yosys (Ubuntu 20.04)" | |
cc: gcc-9 | |
cxx: g++-9 | |
cmake_flags: "-DOPENFPGA_WITH_YOSYS=OFF" | |
- name: "Build w/o Yosys plugin (Ubuntu 20.04)" | |
cc: gcc-9 | |
cxx: g++-9 | |
cmake_flags: "-DOPENFPGA_WITH_YOSYS_PLUGIN=OFF" | |
- name: "Build w/o test (Ubuntu 20.04)" | |
cc: gcc-9 | |
cxx: g++-9 | |
cmake_flags: "-DOPENFPGA_WITH_TEST=OFF" | |
- name: "Build w/o version number (Ubuntu 20.04)" | |
cc: gcc-9 | |
cxx: g++-9 | |
cmake_flags: "-DOPENFPGA_WITH_VERSION=OFF" | |
- name: "Build w/o SWIG support (Ubuntu 20.04)" | |
cc: gcc-9 | |
cxx: g++-9 | |
cmake_flags: "-DOPENFPGA_WITH_SWIG=OFF" | |
# Define the steps to run the build job | |
env: | |
CC: ${{ matrix.config.cc }} | |
CXX: ${{ matrix.config.cxx }} | |
steps: | |
- name: Cancel previous | |
uses: styfle/[email protected] | |
with: | |
access_token: ${{ github.token }} | |
- name: Checkout OpenFPGA repo | |
uses: actions/checkout@v3 | |
- name: Install dependencies | |
run: sudo bash ./.github/workflows/install_dependencies_build.sh | |
- name: Dump tool versions | |
run: | | |
cmake --version | |
${CC} --version | |
${CXX} --version | |
- uses: hendrikmuhs/ccache-action@v1 | |
- name: Build | |
shell: bash | |
run: | | |
make all BUILD_TYPE=$BUILD_TYPE CMAKE_FLAGS="${{ matrix.config.cmake_flags }}" | |
ubuntu_support: | |
needs: change_detect | |
if: ${{ fromJSON(needs.change_detect.outputs.source_modified) }} | |
name: ${{ matrix.config.name }} | |
runs-on: ubuntu-22.04 | |
strategy: | |
fail-fast: false | |
matrix: | |
config: | |
- name: "Build (Ubuntu 22.04)" | |
cc: gcc-11 | |
cxx: g++-11 | |
# Define the steps to run the build job | |
env: | |
CC: ${{ matrix.config.cc }} | |
CXX: ${{ matrix.config.cxx }} | |
steps: | |
- name: Cancel previous | |
uses: styfle/[email protected] | |
with: | |
access_token: ${{ github.token }} | |
- name: Checkout OpenFPGA repo | |
uses: actions/checkout@v3 | |
- name: Install dependencies | |
run: sudo bash ./.github/workflows/install_dependencies_build_ubuntu22p04.sh | |
- name: Dump tool versions | |
run: | | |
cmake --version | |
${CC} --version | |
${CXX} --version | |
- uses: hendrikmuhs/ccache-action@v1 | |
- name: Build | |
shell: bash | |
run: | | |
make all BUILD_TYPE=$BUILD_TYPE | |
debug_build: | |
needs: change_detect | |
if: ${{ fromJSON(needs.change_detect.outputs.source_modified) }} | |
# Prevents from running on forks where no custom runners are available | |
#if: ${{ fromJSON(needs.change_detect.outputs.source_modified) }} && ${{ github.repository_owner == 'lnis-uofu' }} | |
name: ${{ matrix.config.name }} | |
runs-on: ubuntu-22.04 | |
strategy: | |
fail-fast: false | |
matrix: | |
config: | |
- name: "Debug Build (Ubuntu 22.04)" | |
cc: gcc-11 | |
cxx: g++-11 | |
build_type: debug | |
cores: 4 | |
# Define the steps to run the build job | |
env: | |
CC: ${{ matrix.config.cc }} | |
CXX: ${{ matrix.config.cxx }} | |
steps: | |
- name: Cancel previous | |
uses: styfle/[email protected] | |
with: | |
access_token: ${{ github.token }} | |
- name: Checkout OpenFPGA repo | |
uses: actions/checkout@v3 | |
- name: Install dependencies | |
run: | | |
sudo bash ./.github/workflows/install_dependencies_build_ubuntu22p04.sh | |
sudo bash ./.github/workflows/install_dependencies_run_ubuntu22p04.sh | |
sudo python3 -m pip install -r requirements.txt | |
- name: Dump tool versions | |
run: | | |
cmake --version | |
${CC} --version | |
${CXX} --version | |
- uses: hendrikmuhs/ccache-action@v1 | |
- name: Build | |
shell: bash | |
run: | | |
make all BUILD_TYPE=${{ matrix.config.build_type }} -j ${{ matrix.config.cores }} | |
- name: Quick Test | |
shell: bash | |
run: | | |
source openfpga.sh && run-task compilation_verification --debug --show_thread_logs | |
no_warning_build: | |
needs: change_detect | |
if: ${{ fromJSON(needs.change_detect.outputs.source_modified) }} | |
name: ${{ matrix.config.name }} | |
runs-on: ubuntu-22.04 | |
strategy: | |
fail-fast: false | |
matrix: | |
config: | |
- name: "No-warning Build (Ubuntu 22.04)" | |
cc: gcc-11 | |
cxx: g++-11 | |
build_type: release | |
cores: 4 | |
# Define the steps to run the build job | |
env: | |
CC: ${{ matrix.config.cc }} | |
CXX: ${{ matrix.config.cxx }} | |
steps: | |
- name: Cancel previous | |
uses: styfle/[email protected] | |
with: | |
access_token: ${{ github.token }} | |
- name: Checkout OpenFPGA repo | |
uses: actions/checkout@v3 | |
- name: Install dependencies | |
run: | | |
sudo bash ./.github/workflows/install_dependencies_build_ubuntu22p04.sh | |
sudo bash ./.github/workflows/install_dependencies_run_ubuntu22p04.sh | |
sudo python3 -m pip install -r requirements.txt | |
- name: Dump tool versions | |
run: | | |
cmake --version | |
${CC} --version | |
${CXX} --version | |
- uses: hendrikmuhs/ccache-action@v1 | |
- name: Build | |
shell: bash | |
run: | | |
make all BUILD_TYPE=${{ matrix.config.build_type }} -j ${{ matrix.config.cores }} CMAKE_FLAGS="-DOPENFPGA_ENABLE_STRICT_COMPILE=ON" | |
- name: Quick Test | |
shell: bash | |
run: | | |
source openfpga.sh && run-task compilation_verification --debug --show_thread_logs | |
docker_distribution: | |
name: Build docker image for distribution | |
runs-on: ubuntu-20.04 | |
needs: [linux_build, change_detect] | |
steps: | |
- name: Cancel previous | |
uses: styfle/[email protected] | |
with: | |
access_token: ${{ github.token }} | |
- name: Checkout OpenFPGA repo | |
uses: actions/checkout@v3 | |
- name: Download a built artifacts | |
uses: actions/download-artifact@v2 | |
with: | |
name: openfpga | |
- name: Set up QEMU | |
uses: docker/setup-qemu-action@v1 | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v1 | |
- name: Login to GitHub Container Registry | |
if: ${{ (github.ref == 'refs/heads/master' && (env.DOCKER_REPO)) || (needs.change_detect.outputs.force_upload == true) }} | |
uses: docker/login-action@v1 | |
with: | |
registry: ghcr.io | |
username: ${{ github.repository_owner }} | |
password: ${{ secrets.CR_PAT }} | |
- name: Build and push master image | |
uses: docker/build-push-action@v2 | |
with: | |
context: . | |
file: ./docker/Dockerfile.master | |
push: ${{ (github.ref == 'refs/heads/master' && (env.DOCKER_REPO)) || needs.change_detect.outputs.force_upload }} | |
tags: | | |
ghcr.io/${{ needs.change_detect.outputs.docker_repo }}/openfpga-master:latest | |
ghcr.io/${{ needs.change_detect.outputs.docker_repo }}/openfpga-master:${{ needs.change_detect.outputs.sha_short }} | |
linux_regression_tests: | |
name: linux_regression_tests | |
runs-on: ubuntu-20.04 | |
needs: [linux_build, change_detect] | |
container: ghcr.io/${{ needs.change_detect.outputs.docker_repo }}/openfpga-env | |
strategy: | |
fail-fast: false | |
matrix: | |
config: | |
- name: basic_reg_yosys_only_test | |
- name: basic_reg_test | |
- name: fpga_verilog_reg_test | |
- name: fpga_bitstream_reg_test | |
- name: fpga_sdc_reg_test | |
- name: fpga_spice_reg_test | |
- name: micro_benchmark_reg_test | |
- name: quicklogic_reg_test | |
- name: vtr_benchmark_reg_test | |
- name: iwls_benchmark_reg_test | |
- name: tcl_reg_test | |
steps: | |
- name: Cancel previous | |
uses: styfle/[email protected] | |
with: | |
access_token: ${{ github.token }} | |
- name: Checkout OpenFPGA repo | |
uses: actions/checkout@v3 | |
- name: Download a built artifacts | |
uses: actions/download-artifact@v2 | |
with: | |
name: openfpga | |
- name: chmod | |
run: | | |
chmod +x build/vtr-verilog-to-routing/abc/abc | |
chmod +x build/vtr-verilog-to-routing/ace2/ace | |
chmod +x build/vtr-verilog-to-routing/vpr/vpr | |
chmod +x build/openfpga/openfpga | |
chmod +x build/yosys/bin/yosys | |
chmod +x build/yosys/bin/yosys-abc | |
chmod +x build/yosys/bin/yosys-config | |
chmod +x build/yosys/bin/yosys-filterlib | |
chmod +x build/yosys/bin/yosys-smtbmc | |
- name: ${{matrix.config.name}}_GCC-8_(Ubuntu 20.04) | |
shell: bash | |
run: source openfpga.sh && source openfpga_flow/regression_test_scripts/${{matrix.config.name}}.sh --debug --show_thread_logs | |
- name: Upload artifact | |
uses: actions/upload-artifact@v2 | |
if: ${{ failure() }} | |
with: | |
name: failed_${{matrix.config.name}}_regression_log | |
retention-days: 1 | |
path: | | |
openfpga_flow/**/*.log | |
docker_regression_tests: | |
needs: change_detect | |
if: ${{ !fromJSON(needs.change_detect.outputs.source_modified) }} | |
name: docker_regression_tests | |
runs-on: ubuntu-20.04 | |
container: | |
image: ghcr.io/${{ needs.change_detect.outputs.docker_repo }}/openfpga-master:latest | |
options: --user root --workdir /home/openfpga_user | |
strategy: | |
fail-fast: false | |
matrix: | |
config: | |
- name: basic_reg_yosys_only_test | |
- name: basic_reg_test | |
- name: fpga_verilog_reg_test | |
- name: fpga_bitstream_reg_test | |
- name: fpga_sdc_reg_test | |
- name: fpga_spice_reg_test | |
- name: micro_benchmark_reg_test | |
- name: quicklogic_reg_test | |
- name: vtr_benchmark_reg_test | |
- name: iwls_benchmark_reg_test | |
- name: tcl_reg_test | |
steps: | |
- name: Cancel previous | |
uses: styfle/[email protected] | |
with: | |
access_token: ${{ github.token }} | |
- name: Checkout OpenFPGA repo | |
uses: actions/checkout@v3 | |
- name: ${{matrix.config.name}}_GCC-8_(Ubuntu 20.04) | |
shell: bash | |
run: | | |
bash .github/workflows/install_dependencies_run.sh | |
${PYTHON_EXEC} -m pip install -r requirements.txt | |
rsync -am --exclude='openfpga_flow/**' /opt/openfpga/. . | |
unset OPENFPGA_PATH | |
source openfpga.sh && source openfpga_flow/regression_test_scripts/${{matrix.config.name}}.sh --debug --show_thread_logs | |
- name: Upload artifact | |
uses: actions/upload-artifact@v2 | |
if: ${{ failure() }} | |
with: | |
name: failed_${{matrix.config.name}}_regression_log | |
retention-days: 1 | |
path: openfpga_flow/**/*.log |