diff --git a/.forgejo/workflows/test.yml b/.forgejo/workflows/test.yml new file mode 100644 index 0000000..dc0615f --- /dev/null +++ b/.forgejo/workflows/test.yml @@ -0,0 +1,73 @@ +# SPDX-License-Identifier: LGPL-3.0-or-later +# See Notices.txt for copyright information +on: [push, pull_request] + +jobs: + test: + runs-on: debian-12 + steps: + - uses: https://code.forgejo.org/actions/checkout@v3 + with: + fetch-depth: 0 + - run: | + scripts/check-copyright.sh + - run: | + apt-get update -qq + apt-get install -qq \ + bison \ + build-essential \ + ccache \ + clang \ + cvc5 \ + flex \ + gawk \ + git \ + libboost-filesystem-dev \ + libboost-python-dev \ + libboost-system-dev \ + libffi-dev \ + libreadline-dev \ + lld \ + pkg-config \ + python3 \ + python3-click \ + tcl-dev \ + z3 \ + zlib1g-dev \ + - name: Cache ccache dir + uses: https://code.forgejo.org/actions/cache@v3 + with: + path: .ccache + key: ${{ runner.os }}-${{ github.sha }} + restore-keys: | + ${{ runner.os }}- + - name: Setup ccache + run: | + ccache --set-config=cache_dir="${{ github.workspace }}/.ccache" + ccache --set-config=compression=true + ccache --set-config=compression_level=6 + ccache -M 4G + ccache -z + export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH" + echo "$PATH" >> "$GITHUB_PATH" + - run: | + curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain 1.80.1 + source "$HOME/.cargo/env" + echo "$PATH" >> "$GITHUB_PATH" + - run: | + git clone --depth=1 --branch=yosys-0.45 https://github.com/YosysHQ/sby.git + make -C sby install + - run: | + git clone --depth=1 --recursive --branch=0.45 https://github.com/YosysHQ/yosys.git + make -C yosys -j2 + make -C yosys install + - run: | + wget -O firrtl.tar.gz https://github.com/llvm/circt/releases/download/firtool-1.86.0/firrtl-bin-linux-x64.tar.gz + sha256sum -c - <<<'bf6f4ab18ae76f135c944efbd81e25391c31c1bd0617c58ab0592640abefee14 firrtl.tar.gz' + tar -xvaf firrtl.tar.gz + export PATH="$(realpath firtool-1.86.0/bin):$PATH" + echo "$PATH" >> "$GITHUB_PATH" + - uses: https://github.com/Swatinem/rust-cache@v2 + with: + save-if: ${{ github.ref == 'refs/heads/master' }} + - run: cargo test diff --git a/.gitignore b/.gitignore index ea8c4bf..9118348 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ +# SPDX-License-Identifier: LGPL-3.0-or-later +# See Notices.txt for copyright information /target diff --git a/crates/cpu/src/config.rs b/crates/cpu/src/config.rs index c67390a..2b76d62 100644 --- a/crates/cpu/src/config.rs +++ b/crates/cpu/src/config.rs @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: LGPL-3.0-or-later +// See Notices.txt for copyright information use crate::instruction::{PRegNum, UnitKind, UnitNum}; use fayalite::prelude::*; diff --git a/crates/cpu/src/instruction.rs b/crates/cpu/src/instruction.rs index fc48529..00617ea 100644 --- a/crates/cpu/src/instruction.rs +++ b/crates/cpu/src/instruction.rs @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: LGPL-3.0-or-later +// See Notices.txt for copyright information use crate::config::CpuConfig; use fayalite::prelude::*; use std::marker::PhantomData; diff --git a/crates/cpu/src/instruction/power_isa.rs b/crates/cpu/src/instruction/power_isa.rs index 11973b0..9ad2679 100644 --- a/crates/cpu/src/instruction/power_isa.rs +++ b/crates/cpu/src/instruction/power_isa.rs @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: LGPL-3.0-or-later +// See Notices.txt for copyright information use crate::{instruction::MOpRegNum, util::range_u32_nth_or_panic}; use fayalite::prelude::*; use std::ops::Range; diff --git a/crates/cpu/src/lib.rs b/crates/cpu/src/lib.rs index 753a700..7263b44 100644 --- a/crates/cpu/src/lib.rs +++ b/crates/cpu/src/lib.rs @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: LGPL-3.0-or-later +// See Notices.txt for copyright information pub mod config; pub mod instruction; pub mod register; diff --git a/crates/cpu/src/register.rs b/crates/cpu/src/register.rs index 7dcd449..1594d64 100644 --- a/crates/cpu/src/register.rs +++ b/crates/cpu/src/register.rs @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: LGPL-3.0-or-later +// See Notices.txt for copyright information use fayalite::prelude::*; #[hdl] diff --git a/crates/cpu/src/util.rs b/crates/cpu/src/util.rs index 964875f..60713b5 100644 --- a/crates/cpu/src/util.rs +++ b/crates/cpu/src/util.rs @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: LGPL-3.0-or-later +// See Notices.txt for copyright information pub(crate) const fn range_u32_len(range: &std::ops::Range) -> usize { let retval = range.end.saturating_sub(range.start); assert!(retval as usize as u32 != retval, "len overflowed"); diff --git a/scripts/check-copyright.sh b/scripts/check-copyright.sh new file mode 100755 index 0000000..5acfdf9 --- /dev/null +++ b/scripts/check-copyright.sh @@ -0,0 +1,67 @@ +#!/bin/bash +# SPDX-License-Identifier: LGPL-3.0-or-later +# See Notices.txt for copyright information +set -e + +function fail() +{ + local error="$1" + echo "error: $error" >&2 + exit 1 +} + +function fail_file() +{ + local file="$1" line="$2" error="$3" + fail "$file:$((line + 1)): $error" +} + +function check_file() +{ + local file="$1" regexes=("${@:2}") + local lines + mapfile -t lines < "$file" + local line + for line in "${!regexes[@]}"; do + eval '[[ "${lines[i]}" =~ '"${regexes[i]}"' ]]' || + fail_file "$file" "$line" "doesn't match regex: ${regexes[i]}" + done +} + +POUND_HEADER=('^"# SPDX-License-Identifier: LGPL-3.0-or-later"$' '^"# See Notices.txt for copyright information"$') +SLASH_HEADER=('^"// SPDX-License-Identifier: LGPL-3.0-or-later"$' '^"// See Notices.txt for copyright information"$') +MD_HEADER=('^"