name: linux_build # Run CI on # - each push # - each pull request # - scheduled 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" # Multiple job to tests jobs: # Test the compilation compatibility linux_build: name: ${{ matrix.config.name }} runs-on: ubuntu-18.04 container: ghcr.io/lnis-uofu/openfpga-buildenv-${{ matrix.config.cc}} # Branch on different OS and settings strategy: fail-fast: false matrix: config: - name: "Build Compatibility: GCC-5 (Ubuntu 18.04)" cc: gcc-5 cxx: g++-5 - name: "Build Compatibility: GCC-6 (Ubuntu 18.04)" cc: gcc-6 cxx: g++-6 - name: "Build Compatibility: GCC-7 (Ubuntu 18.04)" cc: gcc-7 cxx: g++-7 - name: "Build Compatibility: GCC-8 (Ubuntu 18.04)" cc: gcc-8 cxx: g++-8 - name: "Build Compatibility: GCC-9 (Ubuntu 18.04)" cc: gcc-9 cxx: g++-9 - name: "Build Compatibility: Clang-6 (Ubuntu 18.04)" cc: clang-6.0 cxx: clang++-6.0 - name: "Build Compatibility: Clang-8 (Ubuntu 18.04)" cc: clang-8 cxx: clang++-8 # Define the steps to run the build job env: CC: ${{ matrix.config.cc }} CXX: ${{ matrix.config.cxx }} CCACHE_COMPRESS: "true" CCACHE_COMPRESSLEVEL: "6" CCACHE_MAXSIZE: "400M" CCACHE_LOGFILE: ccache_log CCACHE_DIR: /__w/OpenFPGA/.ccache steps: - name: Checkout OpenFPGA repo uses: actions/checkout@v2 with: submodules: true - name: Dump tool versions run: | cmake --version iverilog -V vvp -V - name: Prepare ccache timestamp id: ccache_cache_timestamp shell: cmake -P {0} run: | string(TIMESTAMP current_date "%Y-%m-%d-%H;%M;%S" UTC) message("::set-output name=timestamp::${current_date}") - name: Create CMake build environment # Some projects don't allow in-source building, so create a separate build directory # We'll use this as our working directory for all subsequent commands run: cmake -E make_directory build - name: Setup ccache uses: actions/cache@v2 with: path: | /__w/OpenFPGA/.ccache key: ${{ matrix.config.cc }}-ccache-${{ github.ref}} restore-keys: | ${{ matrix.config.cc }}-ccache- - name: Configure CMake # Use a bash shell so we can use the same syntax for environment variable # access regardless of the host operating system shell: bash working-directory: build # Note the current convention is to use the -S and -B options here to specify source # and build directories, but this is only available with CMake 3.13 and higher. # The CMake binaries on the Github Actions machines are (as of this writing) 3.12 # run: | ccache -p ccache -z cmake .. -DCMAKE_BUILD_TYPE=$BUILD_TYPE - name: Build working-directory: build shell: bash # Execute the build. You can specify a specific target with "--target " run: | cmake --build . --config $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: | abc/abc abc/libabc.a ace2/ace ace2/libace.a openfpga/libopenfpga.a openfpga/openfpga vpr/libvpr.a vpr/vpr yosys/share/ yosys/yosys yosys/yosys-abc yosys/yosys-config yosys/yosys-filterlib yosys/yosys-smtbmc docker_distribution: name: Build docker image for distribution runs-on: ubuntu-latest needs: linux_build steps: - name: Checkout OpenFPGA repo uses: actions/checkout@v2 - 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 uses: docker/login-action@v1 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.CR_PAT }} - name: Build and push uses: docker/build-push-action@v2 with: context: . file: ./docker/Dockerfile.run push: true tags: ghcr.io/lnis-uofu/openfpga-run:latest regression_tests: name: Regression tests runs-on: ubuntu-18.04 container: ghcr.io/lnis-uofu/openfpga-buildenv-test needs: linux_build strategy: fail-fast: false matrix: config: - name: "Basic Regression Tests: GCC-8 (Ubuntu 18.04)" script: basic_reg_test.sh - name: "FPGA-Verilog Regression Tests: GCC-8 (Ubuntu 18.04)" script: fpga_verilog_reg_test.sh - name: "FPGA-Bitstream Regression Tests: GCC-8 (Ubuntu 18.04)" script: fpga_bitstream_reg_test.sh - name: "FPGA-SDC Regression Tests: GCC-8 (Ubuntu 18.04)" script: fpga_sdc_reg_test.sh - name: "FPGA-SPICE Regression Tests: GCC-8 (Ubuntu 18.04)" script: fpga_spice_reg_test.sh steps: - name: Checkout OpenFPGA repo uses: actions/checkout@v2 - name: Download a built artifacts uses: actions/download-artifact@v2 with: name: openfpga - name: chmod run: | chmod +x abc/abc chmod +x ace2/ace chmod +x openfpga/openfpga chmod +x vpr/vpr chmod +x yosys/yosys chmod +x yosys/yosys-abc chmod +x yosys/yosys-config chmod +x yosys/yosys-filterlib chmod +x yosys/yosys-smtbmc - name: ${{matrix.config.name}} shell: bash run: source .github/workflows/${{matrix.config.script}}