Skip to content

chipyard-ci-full-flow #4

chipyard-ci-full-flow

chipyard-ci-full-flow #4

name: chipyard-ci-full-flow
on:
# run ci on pull requests targeting following branches (runs on the merge commit)
pull_request:
branches:
- main
- '1.[0-9]*.x'
schedule:
# run at 00:00 on sunday
- cron: "0 0 * * 0"
defaults:
run:
shell: bash -leo pipefail {0}
env:
# temporary directories should be located in /scratch (since it's larger)
REMOTE_WORK_DIR: /scratch/buildbot/cy-ci-shared/cy-workdir-${{ github.sha }}
JAVA_TMP_DIR: /scratch/buildbot/cy-ci-shared/cy-javatmpdir-${{ github.sha }}
jobs:
cancel-prior-workflows:
name: cancel-prior-workflows
runs-on: ubuntu-latest
steps:
- name: Cancel Previous Runs
uses: styfle/[email protected]
with:
access_token: ${{ github.token }}
start-workflow:
name: start-workflow
# unable to access env context in job.if thus have to put gh-a context expression directly here.
# note that the check is using a boolean true instead of string 'true' since it's directly using
# the expression not a variable like if checking against the env context string.
if: ${{ contains(github.event.pull_request.labels.*.name, 'ci:disable') != true }}
runs-on: ubuntu-22.04
steps:
- run: true
# Set up a set of boolean conditions to control which branches of the CI
# workflow will execute This is based off the conditional job execution
# example here: https://github.com/dorny/paths-filter#examples
change-filters:
name: filter-jobs-on-changes
runs-on: ubuntu-latest
needs: start-workflow
# Queried by downstream jobs to determine if they should run.
outputs:
needs-rtl: ${{ steps.filter.outputs.all_count != steps.filter.outputs.skip-rtl_count }}
steps:
- uses: actions/checkout@v4
- name: Git workaround
uses: ./.github/actions/git-workaround
- uses: dorny/paths-filter@v3
id: filter
with:
filters: |
all:
- '**'
# If any of the files changed match, do a doc build
docs: &docs-filter
- 'docs/**'
- '.readthedocs.yml'
# If all files match to this filter, skip the main ci pipeline
skip-rtl:
- *docs-filter
- '**/*.md'
- '**/.gitignore'
- '.github/ISSUE_TEMPLATE/**'
- '.github/PULL_REQUEST_TEMPLATE.md'
- '.github/dependabot.yml'
- '.mergify.yml'
full-flow:
name: full-flow
needs: [change-filters, cancel-prior-workflows]
if: needs.change-filters.outputs.needs-rtl == 'true'
runs-on: as4
steps:
- name: Delete old checkout
run: |
ls -alh .
rm -rf ${{ github.workspace }}/* || true
rm -rf ${{ github.workspace }}/.* || true
ls -alh .
- uses: actions/checkout@v4
- name: Setup repo copy
run: |
git clone $GITHUB_WORKSPACE ${{ env.REMOTE_WORK_DIR }}
- name: Setup repo
run: |
cd ${{ env.REMOTE_WORK_DIR }}
eval "$(conda shell.bash hook)"
mkdir ${{ env.JAVA_TMP_DIR }}
export MAKEFLAGS="-j32"
git submodule sync
./build-setup.sh -v
- name: Run config finder
run: |
cd ${{ env.REMOTE_WORK_DIR }}
eval "$(conda shell.bash hook)"
source env.sh
cd sims/verilator
make find-config-fragments
- name: Run smoke test
run: |
cd ${{ env.REMOTE_WORK_DIR }}
eval "$(conda shell.bash hook)"
source env.sh
cd sims/verilator
make verilog
- name: VLSI test
run: |
cd ${{ env.REMOTE_WORK_DIR }}
eval "$(conda shell.bash hook)"
source env.sh
cd vlsi
# remove extra channels if put in by default (avoid clashing deps)
conda config --remove channels litex-hub || true
conda config --remove channels defaults || true
# NOTE: most conda installs are in separate conda envs because they mess up
# each other's versions (for no apparent reason) and we need the latest versions
# installs for example-sky130.yml
conda create -y --prefix ./.conda-sky130 -c defaults -c litex-hub open_pdks.sky130a=1.0.457_0_g32e8f23
git clone https://github.com/rahulk29/sram22_sky130_macros.git
git -C sram22_sky130_macros checkout 1f20d16
# installs for example-openroad.yml
conda create -y --prefix ./.conda-yosys -c defaults -c litex-hub yosys=0.27_4_gb58664d44
conda create -y --prefix ./.conda-openroad -c defaults -c litex-hub openroad=2.0_7070_g0264023b6
conda create -y --prefix ./.conda-klayout -c defaults -c litex-hub klayout=0.28.5_98_g87e2def28
conda create -y --prefix ./.conda-signoff -c defaults -c litex-hub magic=8.3.376_0_g5e5879c netgen=1.5.250_0_g178b172
echo "# Tutorial configs" > tutorial.yml
echo "# pdk" > tutorial.yml
echo "technology.sky130.sky130A: $PWD/.conda-sky130/share/pdk/sky130A" >> tutorial.yml
echo "technology.sky130.sram22_sky130_macros: $PWD/sram22_sky130_macros" >> tutorial.yml
echo "" >> tutorial.yml
echo "# tools" >> tutorial.yml
echo "synthesis.yosys.yosys_bin: $PWD/.conda-yosys/bin/yosys" >> tutorial.yml
echo "par.openroad.openroad_bin: $PWD/.conda-openroad/bin/openroad" >> tutorial.yml
echo "par.openroad.klayout_bin: $PWD/.conda-klayout/bin/klayout" >> tutorial.yml
echo "drc.magic.magic_bin: $PWD/.conda-signoff/bin/magic" >> tutorial.yml
echo "drc.klayout.klayout_bin: $PWD/.conda-klayout/bin/klayout" >> tutorial.yml
echo "lvs.netgen.netgen_bin: $PWD/.conda-signoff/bin/netgen" >> tutorial.yml
echo "" >> tutorial.yml
echo "# speed up tutorial runs & declutter log output" >> tutorial.yml
echo "par.openroad.timing_driven: false" >> tutorial.yml
echo "par.openroad.write_reports: false" >> tutorial.yml
export tutorial=sky130-openroad
export EXTRA_CONFS=tutorial.yml
export VLSI_TOP=RocketTile
make buildfile
make syn
# NOTE: commenting out for now bc this times out - need to debug why
# openroad freezes during some write commands after detailed route
# so need to stop the flow & run last step separately
# make par HAMMER_EXTRA_ARGS="--stop_after_step extraction"
# make redo-par HAMMER_EXTRA_ARGS="--start_before_step extraction"
# make drc
# make lvs
- name: Run FireChip bridge tests
run: |
cd ${{ env.REMOTE_WORK_DIR }}
eval "$(conda shell.bash hook)"
source env.sh
pushd sims/firesim
source sourceme-manager.sh --skip-ssh-setup
popd
cd sims/firesim-staging
export TEST_DISABLE_VERILATOR=1
export TEST_DISABLE_VIVADO=1
make launch-sbt SBT_COMMAND=";project firechip_bridgestubs; testOnly firechip.bridgestubs.BridgeTests"
- name: Run FireChip FireSim target tests
run: |
cd ${{ env.REMOTE_WORK_DIR }}
eval "$(conda shell.bash hook)"
source env.sh
pushd sims/firesim
source sourceme-manager.sh --skip-ssh-setup
popd
cd sims/firesim-staging
export TEST_MINIMAL_BENCHMARKS=1 # seems like dhrystone is the longest so this doesn't affect runtime much
export TEST_DISABLE_VERILATOR=1
export TEST_DISABLE_VIVADO=1
make launch-sbt SBT_COMMAND=";project firechip; testOnly firechip.chip.CITests"
cleanup:
name: cleanup
needs: [full-flow]
runs-on: as4
if: ${{ always() }}
steps:
- name: Delete repo copy and conda env
run: |
rm -rf ${{ env.REMOTE_WORK_DIR }}
rm -rf ${{ env.JAVA_TMP_DIR }}