3
0
Fork 0
mirror of https://github.com/YosysHQ/yosys synced 2026-06-04 08:07:58 +00:00

Update CI scripts for CMake

Co-authored-by: Catherine <whitequark@whitequark.org>
This commit is contained in:
Miodrag Milanovic 2026-05-22 12:31:30 +02:00 committed by Catherine
parent 0d54b0b439
commit e2766ed61c
34 changed files with 382 additions and 343 deletions

View file

@ -29,7 +29,13 @@ jobs:
queries: security-extended,security-and-quality queries: security-extended,security-and-quality
- name: Build - name: Build
run: make yosys -j6 run: |
rm -rf build Configuration.cmake
echo 'set(CMAKE_C_COMPILER clang CACHE STRING "")' >> Configuration.cmake
echo 'set(CMAKE_CXX_COMPILER clang++ CACHE STRING "")' >> Configuration.cmake
cmake -C Configuration.cmake -B build .
cmake --build build -j6
- name: Perform CodeQL Analysis - name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v4 uses: github/codeql-action/analyze@v4

View file

@ -31,9 +31,9 @@ jobs:
echo "should_skip=${{ steps.skip_check.outputs.should_skip }}" >> $GITHUB_OUTPUT echo "should_skip=${{ steps.skip_check.outputs.should_skip }}" >> $GITHUB_OUTPUT
fi fi
vs-prep: vs-build:
name: Prepare Visual Studio build name: Visual Studio build
runs-on: ubuntu-latest runs-on: windows-latest
needs: [pre_job] needs: [pre_job]
if: (github.event_name == 'merge_group' || github.event_name == 'workflow_dispatch') && needs.pre_job.outputs.should_skip != 'true' if: (github.event_name == 'merge_group' || github.event_name == 'workflow_dispatch') && needs.pre_job.outputs.should_skip != 'true'
steps: steps:
@ -41,31 +41,31 @@ jobs:
with: with:
submodules: true submodules: true
persist-credentials: false persist-credentials: false
- run: sudo apt-get install libfl-dev
- name: Build
run: make vcxsrc YOSYS_COMPILER="Visual Studio" VCX_DIR_NAME=yosys-win32-vcxsrc-latest
- uses: actions/upload-artifact@v7
with:
name: vcxsrc
path: yosys-win32-vcxsrc-latest.zip
vs-build: - name: Setup MSVC
name: Visual Studio build uses: ilammy/msvc-dev-cmd@v1
runs-on: windows-latest
needs: [vs-prep, pre_job] - name: Install flex/bison
if: (github.event_name == 'merge_group' || github.event_name == 'workflow_dispatch') && needs.pre_job.outputs.should_skip != 'true' shell: pwsh
steps: run: |
- uses: actions/download-artifact@v8 choco install winflexbison3 --no-progress
with:
name: vcxsrc # Make tools visible to CMake
path: . echo "C:\Program Files (x86)\GnuWin32\bin" | Out-File -Append -FilePath $env:GITHUB_PATH
- name: unzip echo "C:\ProgramData\chocolatey\lib\winflexbison3\tools" | Out-File -Append -FilePath $env:GITHUB_PATH
run: unzip yosys-win32-vcxsrc-latest.zip
- name: setup-msbuild - name: Configure CMake
uses: microsoft/setup-msbuild@v2 run: >
- name: MSBuild cmake -S . -B build
working-directory: yosys-win32-vcxsrc-latest -A x64
run: msbuild YosysVS.sln /p:PlatformToolset=v142 /p:Configuration=Release /p:WindowsTargetPlatformVersion=10.0.26100.0 -DCMAKE_BUILD_TYPE=Release
-DYOSYS_WITHOUT_ABC=ON
- name: Build
run: >
cmake --build build
--config Release
--parallel
wasi-build: wasi-build:
name: WASI build name: WASI build
@ -79,10 +79,11 @@ jobs:
persist-credentials: false persist-credentials: false
- name: Build - name: Build
run: | run: |
WASI_SDK=wasi-sdk-33.0-x86_64-linux WASI_VER=33
WASI_SDK_URL=https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-33/wasi-sdk-33.0-x86_64-linux.tar.gz WASI_SDK=wasi-sdk-${WASI_VER}.0-x86_64-linux
WASI_SDK_URL=https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-${WASI_VER}/${WASI_SDK}.tar.gz
if ! [ -d ${WASI_SDK} ]; then curl -L ${WASI_SDK_URL} | tar xzf -; fi if ! [ -d ${WASI_SDK} ]; then curl -L ${WASI_SDK_URL} | tar xzf -; fi
WASI_SDK_PATH=$(pwd)/${WASI_SDK}
FLEX_VER=2.6.4 FLEX_VER=2.6.4
FLEX=flex-${FLEX_VER} FLEX=flex-${FLEX_VER}
FLEX_URL=https://github.com/westes/flex/releases/download/v${FLEX_VER}/${FLEX}.tar.gz FLEX_URL=https://github.com/westes/flex/releases/download/v${FLEX_VER}/${FLEX}.tar.gz
@ -94,24 +95,9 @@ jobs:
make && make &&
make install) make install)
mkdir -p build export PATH=${WASI_SDK_PATH}/bin:$(pwd)/flex-prefix/bin:${PATH}
cat > build/Makefile.conf <<END cmake -B build -DCMAKE_TOOLCHAIN_FILE=${WASI_SDK_PATH}/share/cmake/wasi-sdk-p1.cmake -DCMAKE_BUILD_TYPE=Release .
export PATH := $(pwd)/${WASI_SDK}/bin:$(pwd)/flex-prefix/bin:${PATH} cmake --build build -j$(nproc)
WASI_SYSROOT := $(pwd)/${WASI_SDK}/share/wasi-sysroot
CONFIG := wasi
PREFIX := /
ENABLE_TCL := 0
ENABLE_READLINE := 0
ENABLE_PLUGINS := 0
ENABLE_ZLIB := 0
CXXFLAGS += -I$(pwd)/flex-prefix/include
LINKFLAGS += -Wl,-z,stack-size=8388608 -Wl,--stack-first -Wl,--strip-all
END
make -C build -f ../Makefile CXX=clang -j$(nproc)
nix-build: nix-build:
name: "Build nix flake" name: "Build nix flake"

View file

@ -57,19 +57,20 @@ jobs:
- name: Build Yosys - name: Build Yosys
run: | run: |
make config-clang rm -rf build Configuration.cmake
echo "ENABLE_VERIFIC := 1" >> Makefile.conf echo 'set(CMAKE_C_COMPILER clang CACHE STRING "")' >> Configuration.cmake
echo "ENABLE_VERIFIC_EDIF := 1" >> Makefile.conf echo 'set(CMAKE_CXX_COMPILER clang++ CACHE STRING "")' >> Configuration.cmake
echo "ENABLE_VERIFIC_LIBERTY := 1" >> Makefile.conf echo 'set(YOSYS_COMPILER_LAUNCHER ccache CACHE STRING "")' >> Configuration.cmake
echo "ENABLE_VERIFIC_YOSYSHQ_EXTENSIONS := 1" >> Makefile.conf echo 'set(YOSYS_VERIFIC_DIR "/usr/local/src/verific_lib" CACHE STRING "")' >> Configuration.cmake
echo "ENABLE_CCACHE := 1" >> Makefile.conf echo 'set(YOSYS_ENABLE_HELP_SOURCE ON CACHE BOOL "")' >> Configuration.cmake
echo "ENABLE_HELP_SOURCE := 1" >> Makefile.conf
make -j$procs cmake -C Configuration.cmake -B build .
cmake --build build -j$procs
- name: Prepare docs - name: Prepare docs
shell: bash shell: bash
run: run:
make docs/prep -j$procs TARGETS= EXTRA_TARGETS= cmake --build build --target docs-prepare -j$procs
- name: Upload artifact - name: Upload artifact
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v4
@ -83,12 +84,12 @@ jobs:
- name: Install doc prereqs - name: Install doc prereqs
shell: bash shell: bash
run: | run: |
make docs/reqs make -C docs reqs
- name: Test build docs - name: Test build docs
shell: bash shell: bash
run: | run: |
make -C docs html -j$procs TARGETS= EXTRA_TARGETS= cmake --build build --target docs-html -j$procs
- name: Trigger RTDs build - name: Trigger RTDs build
if: ${{ needs.check_docs_rebuild.outputs.docs_export == 'true' && github.repository == 'YosysHQ/yosys' }} if: ${{ needs.check_docs_rebuild.outputs.docs_export == 'true' && github.repository == 'YosysHQ/yosys' }}

View file

@ -82,21 +82,20 @@ jobs:
- name: Build - name: Build
shell: bash shell: bash
run: | run: |
mkdir build rm -rf build
cd build cmake -B build . -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_BUILD_TYPE=Release
make -f ../Makefile config-$CC cmake --build build -j$procs
make -f ../Makefile -j$procs ctest --test-dir build/tests/unit
make -f ../Makefile unit-test -j$procs
- name: Log yosys-config output - name: Log yosys-config output
run: | run: |
./yosys-config || true ./build/yosys-config || true
- name: Compress build - name: Compress build
shell: bash shell: bash
run: | run: |
cd build cd build
tar -cvf ../build.tar share/ yosys yosys-* libyosys.so tar -cvf ../build.tar share/ yosys yosys-*
- name: Store build artifact - name: Store build artifact
uses: actions/upload-artifact@v7 uses: actions/upload-artifact@v7
@ -136,17 +135,18 @@ jobs:
- name: Uncompress build - name: Uncompress build
shell: bash shell: bash
run: run: |
tar -xvf build.tar mkdir -p build
tar -xvf build.tar -C build
- name: Log yosys-config output - name: Log yosys-config output
run: | run: |
./yosys-config || true ./build/yosys-config || true
- name: Run tests - name: Run tests
shell: bash shell: bash
run: | run: |
make -j$procs vanilla-test TARGETS= EXTRA_TARGETS= CONFIG=$CC make -C tests -j$procs vanilla-test
- name: Report errors - name: Report errors
if: ${{ failure() }} if: ${{ failure() }}
@ -198,8 +198,6 @@ jobs:
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
needs: [build-yosys, pre_docs_job] needs: [build-yosys, pre_docs_job]
if: needs.pre_docs_job.outputs.should_skip != 'true' if: needs.pre_docs_job.outputs.should_skip != 'true'
env:
CC: clang
strategy: strategy:
matrix: matrix:
os: [ubuntu-latest] os: [ubuntu-latest]
@ -224,12 +222,13 @@ jobs:
- name: Uncompress build - name: Uncompress build
shell: bash shell: bash
run: run: |
tar -xvf build.tar mkdir -p build
tar -xvf build.tar -C build
- name: Log yosys-config output - name: Log yosys-config output
run: | run: |
./yosys-config || true ./build/yosys-config || true
- name: Run tests - name: Run tests
shell: bash shell: bash
@ -258,20 +257,24 @@ jobs:
- name: Build Yosys - name: Build Yosys
run: | run: |
make config-clang rm -rf build Configuration.cmake
echo "ENABLE_CCACHE := 1" >> Makefile.conf echo 'set(CMAKE_C_COMPILER clang CACHE STRING "")' >> Configuration.cmake
echo "ENABLE_HELP_SOURCE := 1" >> Makefile.conf echo 'set(CMAKE_CXX_COMPILER clang++ CACHE STRING "")' >> Configuration.cmake
make -j$procs echo 'set(YOSYS_COMPILER_LAUNCHER ccache CACHE STRING "")' >> Configuration.cmake
echo 'set(YOSYS_ENABLE_HELP_SOURCE ON CACHE BOOL "")' >> Configuration.cmake
cmake -C Configuration.cmake -B build .
cmake --build build -j$procs
- name: Install doc prereqs - name: Install doc prereqs
shell: bash shell: bash
run: | run: |
make docs/reqs make -C docs reqs
- name: Build docs - name: Build docs
shell: bash shell: bash
run: | run: |
make docs DOC_TARGET=${{ matrix.docs-target }} -j$procs cmake --build build --target docs-${{ matrix.docs-target }} -j$procs
- name: Store docs build artifact - name: Store docs build artifact
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v4

View file

@ -37,7 +37,6 @@ jobs:
if: (github.event_name == 'merge_group' || github.event_name == 'workflow_dispatch') && needs.pre_job.outputs.should_skip != 'true' if: (github.event_name == 'merge_group' || github.event_name == 'workflow_dispatch') && needs.pre_job.outputs.should_skip != 'true'
env: env:
CXXFLAGS: ${{ startsWith(matrix.compiler, 'gcc') && '-Wp,-D_GLIBCXX_ASSERTIONS' || ''}} CXXFLAGS: ${{ startsWith(matrix.compiler, 'gcc') && '-Wp,-D_GLIBCXX_ASSERTIONS' || ''}}
CC_SHORT: ${{ startsWith(matrix.compiler, 'gcc') && 'gcc' || 'clang' }}
strategy: strategy:
matrix: matrix:
os: os:
@ -91,16 +90,18 @@ jobs:
- name: Build C++20 - name: Build C++20
shell: bash shell: bash
run: | run: |
make config-$CC_SHORT rm -rf build
make -j$procs CXXSTD=c++20 compile-only cmake -B build -DCMAKE_CXX_STANDARD=20 . --fresh
cmake --build build --target yosys -j$procs
# maximum standard, only on newest compilers # maximum standard, only on newest compilers
- name: Build C++26 - name: Build C++26
if: ${{ matrix.compiler == 'clang-22' || matrix.compiler == 'gcc-15' }} if: ${{ matrix.compiler == 'clang-22' || matrix.compiler == 'gcc-15' }}
shell: bash shell: bash
run: | run: |
make config-$CC_SHORT rm -rf build
make -j$procs CXXSTD=c++26 compile-only cmake -B build -DCMAKE_CXX_STANDARD=26 . --fresh
cmake --build build --target yosys -j$procs
test-compile-result: test-compile-result:
runs-on: ubuntu-latest runs-on: ubuntu-latest

View file

@ -38,7 +38,7 @@ jobs:
if: (github.event_name == 'merge_group' || github.event_name == 'workflow_dispatch') && needs.pre_job.outputs.should_skip != 'true' if: (github.event_name == 'merge_group' || github.event_name == 'workflow_dispatch') && needs.pre_job.outputs.should_skip != 'true'
env: env:
CC: clang CC: clang
ASAN_OPTIONS: halt_on_error=1 ASAN_OPTIONS: halt_on_error=1 detect_container_overflow=0
UBSAN_OPTIONS: halt_on_error=1 UBSAN_OPTIONS: halt_on_error=1
strategy: strategy:
matrix: matrix:
@ -63,18 +63,20 @@ jobs:
- name: Build - name: Build
shell: bash shell: bash
run: | run: |
make config-$CC rm -rf build
echo 'SANITIZER = ${{ matrix.sanitizer }}' >> Makefile.conf cmake -B build . \
make -j$procs -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ \
-DCMAKE_BUILD_TYPE=Sanitize -DSANITIZE=${{ matrix.sanitizer }}
cmake --build build -j$procs
- name: Log yosys-config output - name: Log yosys-config output
run: | run: |
./yosys-config || true ./build/yosys-config || true
- name: Run tests - name: Run tests
shell: bash shell: bash
run: | run: |
make -j$procs vanilla-test TARGETS= EXTRA_TARGETS= make -C tests -j$procs vanilla-test
- name: Report errors - name: Report errors
if: ${{ failure() }} if: ${{ failure() }}

View file

@ -19,91 +19,77 @@ jobs:
- name: verific [SV] - name: verific [SV]
run: | run: |
make config-clang rm -rf build Configuration.cmake
echo "ENABLE_VERIFIC := 1" >> Makefile.conf echo 'set(CMAKE_C_COMPILER clang CACHE STRING "")' >> Configuration.cmake
echo "ENABLE_VERIFIC_SYSTEMVERILOG := 1" >> Makefile.conf echo 'set(CMAKE_CXX_COMPILER clang++ CACHE STRING "")' >> Configuration.cmake
echo "ENABLE_VERIFIC_VHDL := 0" >> Makefile.conf echo 'set(YOSYS_COMPILER_LAUNCHER ccache CACHE STRING "")' >> Configuration.cmake
echo "ENABLE_VERIFIC_HIER_TREE := 0" >> Makefile.conf echo 'set(YOSYS_VERIFIC_DIR "/usr/local/src/verific_lib" CACHE STRING "")' >> Configuration.cmake
echo "ENABLE_VERIFIC_EDIF := 0" >> Makefile.conf echo 'set(YOSYS_VERIFIC_FEATURES "systemverilog" CACHE STRING "")' >> Configuration.cmake
echo "ENABLE_VERIFIC_LIBERTY := 0" >> Makefile.conf cmake -C Configuration.cmake -B build .
echo "ENABLE_VERIFIC_YOSYSHQ_EXTENSIONS := 0" >> Makefile.conf cmake --build build -j$procs
echo "ENABLE_CCACHE := 1" >> Makefile.conf
make -j$procs
- name: verific [VHDL] - name: verific [VHDL]
run: | run: |
make config-clang rm -rf build Configuration.cmake
echo "ENABLE_VERIFIC := 1" >> Makefile.conf echo 'set(CMAKE_C_COMPILER clang CACHE STRING "")' >> Configuration.cmake
echo "ENABLE_VERIFIC_SYSTEMVERILOG := 0" >> Makefile.conf echo 'set(CMAKE_CXX_COMPILER clang++ CACHE STRING "")' >> Configuration.cmake
echo "ENABLE_VERIFIC_VHDL := 1" >> Makefile.conf echo 'set(YOSYS_COMPILER_LAUNCHER ccache CACHE STRING "")' >> Configuration.cmake
echo "ENABLE_VERIFIC_HIER_TREE := 0" >> Makefile.conf echo 'set(YOSYS_VERIFIC_DIR "/usr/local/src/verific_lib" CACHE STRING "")' >> Configuration.cmake
echo "ENABLE_VERIFIC_EDIF := 0" >> Makefile.conf echo 'set(YOSYS_VERIFIC_FEATURES "vhdl" CACHE STRING "")' >> Configuration.cmake
echo "ENABLE_VERIFIC_LIBERTY := 0" >> Makefile.conf cmake -C Configuration.cmake -B build .
echo "ENABLE_VERIFIC_YOSYSHQ_EXTENSIONS := 0" >> Makefile.conf cmake --build build -j$procs
echo "ENABLE_CCACHE := 1" >> Makefile.conf
make -j$procs
- name: verific [SV + VHDL] - name: verific [SV + VHDL]
run: | run: |
make config-clang rm -rf build Configuration.cmake
echo "ENABLE_VERIFIC := 1" >> Makefile.conf echo 'set(CMAKE_C_COMPILER clang CACHE STRING "")' >> Configuration.cmake
echo "ENABLE_VERIFIC_SYSTEMVERILOG := 1" >> Makefile.conf echo 'set(CMAKE_CXX_COMPILER clang++ CACHE STRING "")' >> Configuration.cmake
echo "ENABLE_VERIFIC_VHDL := 1" >> Makefile.conf echo 'set(YOSYS_COMPILER_LAUNCHER ccache CACHE STRING "")' >> Configuration.cmake
echo "ENABLE_VERIFIC_HIER_TREE := 0" >> Makefile.conf echo 'set(YOSYS_VERIFIC_DIR "/usr/local/src/verific_lib" CACHE STRING "")' >> Configuration.cmake
echo "ENABLE_VERIFIC_EDIF := 0" >> Makefile.conf echo 'set(YOSYS_VERIFIC_FEATURES "vhdl;systemverilog" CACHE STRING "")' >> Configuration.cmake
echo "ENABLE_VERIFIC_LIBERTY := 0" >> Makefile.conf cmake -C Configuration.cmake -B build .
echo "ENABLE_VERIFIC_YOSYSHQ_EXTENSIONS := 0" >> Makefile.conf cmake --build build -j$procs
echo "ENABLE_CCACHE := 1" >> Makefile.conf
make -j$procs
- name: verific [SV + HIER] - name: verific [SV + HIER]
run: | run: |
make config-clang rm -rf build Configuration.cmake
echo "ENABLE_VERIFIC := 1" >> Makefile.conf echo 'set(CMAKE_C_COMPILER clang CACHE STRING "")' >> Configuration.cmake
echo "ENABLE_VERIFIC_SYSTEMVERILOG := 1" >> Makefile.conf echo 'set(CMAKE_CXX_COMPILER clang++ CACHE STRING "")' >> Configuration.cmake
echo "ENABLE_VERIFIC_VHDL := 0" >> Makefile.conf echo 'set(YOSYS_COMPILER_LAUNCHER ccache CACHE STRING "")' >> Configuration.cmake
echo "ENABLE_VERIFIC_HIER_TREE := 1" >> Makefile.conf echo 'set(YOSYS_VERIFIC_DIR "/usr/local/src/verific_lib" CACHE STRING "")' >> Configuration.cmake
echo "ENABLE_VERIFIC_EDIF := 0" >> Makefile.conf echo 'set(YOSYS_VERIFIC_FEATURES "systemverilog;hier_tree" CACHE STRING "")' >> Configuration.cmake
echo "ENABLE_VERIFIC_LIBERTY := 0" >> Makefile.conf cmake -C Configuration.cmake -B build .
echo "ENABLE_VERIFIC_YOSYSHQ_EXTENSIONS := 0" >> Makefile.conf cmake --build build -j$procs
echo "ENABLE_CCACHE := 1" >> Makefile.conf
make -j$procs
- name: verific [VHDL + HIER] - name: verific [VHDL + HIER]
run: | run: |
make config-clang rm -rf build Configuration.cmake
echo "ENABLE_VERIFIC := 1" >> Makefile.conf echo 'set(CMAKE_C_COMPILER clang CACHE STRING "")' >> Configuration.cmake
echo "ENABLE_VERIFIC_SYSTEMVERILOG := 0" >> Makefile.conf echo 'set(CMAKE_CXX_COMPILER clang++ CACHE STRING "")' >> Configuration.cmake
echo "ENABLE_VERIFIC_VHDL := 1" >> Makefile.conf echo 'set(YOSYS_COMPILER_LAUNCHER ccache CACHE STRING "")' >> Configuration.cmake
echo "ENABLE_VERIFIC_HIER_TREE := 1" >> Makefile.conf echo 'set(YOSYS_VERIFIC_DIR "/usr/local/src/verific_lib" CACHE STRING "")' >> Configuration.cmake
echo "ENABLE_VERIFIC_EDIF := 0" >> Makefile.conf echo 'set(YOSYS_VERIFIC_FEATURES "vhdl;hier_tree" CACHE STRING "")' >> Configuration.cmake
echo "ENABLE_VERIFIC_LIBERTY := 0" >> Makefile.conf cmake -C Configuration.cmake -B build .
echo "ENABLE_VERIFIC_YOSYSHQ_EXTENSIONS := 0" >> Makefile.conf cmake --build build -j$procs
echo "ENABLE_CCACHE := 1" >> Makefile.conf
make -j$procs
- name: verific [SV + VHDL + HIER] - name: verific [SV + VHDL + HIER]
run: | run: |
make config-clang rm -rf build Configuration.cmake
echo "ENABLE_VERIFIC := 1" >> Makefile.conf echo 'set(CMAKE_C_COMPILER clang CACHE STRING "")' >> Configuration.cmake
echo "ENABLE_VERIFIC_SYSTEMVERILOG := 1" >> Makefile.conf echo 'set(CMAKE_CXX_COMPILER clang++ CACHE STRING "")' >> Configuration.cmake
echo "ENABLE_VERIFIC_VHDL := 1" >> Makefile.conf echo 'set(YOSYS_COMPILER_LAUNCHER ccache CACHE STRING "")' >> Configuration.cmake
echo "ENABLE_VERIFIC_HIER_TREE := 1" >> Makefile.conf echo 'set(YOSYS_VERIFIC_DIR "/usr/local/src/verific_lib" CACHE STRING "")' >> Configuration.cmake
echo "ENABLE_VERIFIC_EDIF := 0" >> Makefile.conf echo 'set(YOSYS_VERIFIC_FEATURES "systemverilog;vhdl;hier_tree" CACHE STRING "")' >> Configuration.cmake
echo "ENABLE_VERIFIC_LIBERTY := 0" >> Makefile.conf cmake -C Configuration.cmake -B build .
echo "ENABLE_VERIFIC_YOSYSHQ_EXTENSIONS := 0" >> Makefile.conf cmake --build build -j$procs
echo "ENABLE_CCACHE := 1" >> Makefile.conf
make -j$procs
- name: verific [SV + VHDL + HIER + EDIF + LIBERTY] - name: verific [SV + VHDL + HIER + EDIF + LIBERTY]
run: | run: |
make config-clang rm -rf build Configuration.cmake
echo "ENABLE_VERIFIC := 1" >> Makefile.conf echo 'set(CMAKE_C_COMPILER clang CACHE STRING "")' >> Configuration.cmake
echo "ENABLE_VERIFIC_SYSTEMVERILOG := 1" >> Makefile.conf echo 'set(CMAKE_CXX_COMPILER clang++ CACHE STRING "")' >> Configuration.cmake
echo "ENABLE_VERIFIC_VHDL := 1" >> Makefile.conf echo 'set(YOSYS_COMPILER_LAUNCHER ccache CACHE STRING "")' >> Configuration.cmake
echo "ENABLE_VERIFIC_HIER_TREE := 1" >> Makefile.conf echo 'set(YOSYS_VERIFIC_DIR "/usr/local/src/verific_lib" CACHE STRING "")' >> Configuration.cmake
echo "ENABLE_VERIFIC_EDIF := 1" >> Makefile.conf echo 'set(YOSYS_VERIFIC_FEATURES "systemverilog;vhdl;hier_tree;edif;liberty" CACHE STRING "")' >> Configuration.cmake
echo "ENABLE_VERIFIC_LIBERTY := 1" >> Makefile.conf cmake -C Configuration.cmake -B build .
echo "ENABLE_VERIFIC_YOSYSHQ_EXTENSIONS := 0" >> Makefile.conf cmake --build build -j$procs
echo "ENABLE_CCACHE := 1" >> Makefile.conf
make -j$procs

View file

@ -55,18 +55,19 @@ jobs:
- name: Build Yosys - name: Build Yosys
run: | run: |
make config-gcov rm -rf build Configuration.cmake
echo "ENABLE_VERIFIC := 1" >> Makefile.conf echo 'set(CMAKE_C_COMPILER clang CACHE STRING "")' >> Configuration.cmake
echo "ENABLE_VERIFIC_EDIF := 1" >> Makefile.conf echo 'set(CMAKE_CXX_COMPILER clang++ CACHE STRING "")' >> Configuration.cmake
echo "ENABLE_VERIFIC_LIBERTY := 1" >> Makefile.conf echo 'set(YOSYS_COMPILER_LAUNCHER ccache CACHE STRING "")' >> Configuration.cmake
echo "ENABLE_VERIFIC_YOSYSHQ_EXTENSIONS := 1" >> Makefile.conf echo 'set(YOSYS_ENABLE_COVERAGE ON CACHE BOOL "")' >> Configuration.cmake
echo "ENABLE_CCACHE := 1" >> Makefile.conf echo 'set(YOSYS_VERIFIC_DIR "/usr/local/src/verific_lib" CACHE STRING "")' >> Configuration.cmake
echo "ENABLE_FUNCTIONAL_TESTS := 1" >> Makefile.conf
make -j$procs ENABLE_LTO=1 cmake -C Configuration.cmake -B build . -DCMAKE_INSTALL_PREFIX=${GITHUB_WORKSPACE}/.local -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON -DCMAKE_BUILD_TYPE=Debug
cmake --build build -j$procs
- name: Install Yosys - name: Install Yosys
run: | run: |
make install DESTDIR=${GITHUB_WORKSPACE}/.local PREFIX= cmake --build build --target install
- name: Checkout SBY - name: Checkout SBY
uses: actions/checkout@v4 uses: actions/checkout@v4
@ -81,7 +82,7 @@ jobs:
- name: Run Yosys tests - name: Run Yosys tests
run: | run: |
make -j$procs vanilla-test make -C tests -j$procs vanilla-test
- name: Run Verific specific Yosys tests - name: Run Verific specific Yosys tests
run: | run: |
@ -96,8 +97,8 @@ jobs:
- name: Run coverage - name: Run coverage
if: ${{ github.event_name == 'merge_group' || github.event_name == 'workflow_dispatch' }} if: ${{ github.event_name == 'merge_group' || github.event_name == 'workflow_dispatch' }}
run: | run: |
make coverage make -C tests coverage
make clean_coverage make -C tests clean_coverage
- name: Push coverage - name: Push coverage
if: ${{ github.event_name == 'merge_group' || github.event_name == 'workflow_dispatch' }} if: ${{ github.event_name == 'merge_group' || github.event_name == 'workflow_dispatch' }}
@ -138,19 +139,20 @@ jobs:
- name: Build pyosys - name: Build pyosys
run: | run: |
make config-clang echo 'set(CMAKE_C_COMPILER clang CACHE STRING "")' >> Configuration.cmake
echo "ENABLE_VERIFIC := 1" >> Makefile.conf echo 'set(CMAKE_CXX_COMPILER clang++ CACHE STRING "")' >> Configuration.cmake
echo "ENABLE_VERIFIC_EDIF := 1" >> Makefile.conf echo 'set(YOSYS_COMPILER_LAUNCHER ccache CACHE STRING "")' >> Configuration.cmake
echo "ENABLE_VERIFIC_LIBERTY := 1" >> Makefile.conf echo 'set(YOSYS_VERIFIC_DIR "/usr/local/src/verific_lib" CACHE STRING "")' >> Configuration.cmake
echo "ENABLE_VERIFIC_YOSYSHQ_EXTENSIONS := 1" >> Makefile.conf echo 'set(YOSYS_WITH_PYTHON ON CACHE BOOL "")' >> Configuration.cmake
echo "ENABLE_CCACHE := 1" >> Makefile.conf echo 'set(YOSYS_INSTALL_PYTHON ON CACHE BOOL "")' >> Configuration.cmake
echo "ENABLE_PYOSYS := 1" >> Makefile.conf cmake -C Configuration.cmake -B build . \
echo "PYTHON_DESTDIR := /usr/lib/python3/site-packages" >> Makefile.conf -DCMAKE_INSTALL_PREFIX=${GITHUB_WORKSPACE}/.local \
make -j$procs -DYOSYS_INSTALL_PYTHON_SITEDIR=$GITHUB_WORKSPACE/.local/usr/lib/python3/site-packages
cmake --build build -j$procs
- name: Install pyosys - name: Install pyosys
run: | run: |
make install DESTDIR=${GITHUB_WORKSPACE}/.local PREFIX= cmake --build build --target install
- name: Run pyosys tests - name: Run pyosys tests
run: | run: |

View file

@ -66,7 +66,6 @@ jobs:
run: | run: |
mkdir -p bison mkdir -p bison
curl -L https://ftpmirror.gnu.org/gnu/bison/bison-3.8.2.tar.gz | tar --strip-components=1 -xzC bison curl -L https://ftpmirror.gnu.org/gnu/bison/bison-3.8.2.tar.gz | tar --strip-components=1 -xzC bison
sed -i 's/-Werror=unused//g' Makefile
## Software installed by default in GitHub Action Runner VMs: ## Software installed by default in GitHub Action Runner VMs:
## https://github.com/actions/runner-images ## https://github.com/actions/runner-images
- if: ${{ matrix.os.family == 'macos' }} - if: ${{ matrix.os.family == 'macos' }}

View file

@ -12,3 +12,4 @@ brew "bash"
brew "llvm" brew "llvm"
brew "lld" brew "lld"
brew "googletest" brew "googletest"
brew "tcl-tk"

View file

@ -97,7 +97,7 @@ elseif (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "/O2 /DEBUG") set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "/O2 /DEBUG")
set(CMAKE_CXX_FLAGS_MINSIZEREL "/Os") set(CMAKE_CXX_FLAGS_MINSIZEREL "/Os")
add_compile_options(/Zc:__cplusplus) add_compile_options(/Zc:__cplusplus)
add_definitions( add_compile_definitions(
_CRT_NONSTDC_NO_DEPRECATE _CRT_NONSTDC_NO_DEPRECATE
_CRT_SECURE_NO_WARNINGS _CRT_SECURE_NO_WARNINGS
) )
@ -480,20 +480,55 @@ if (YOSYS_INSTALL_DRIVER OR YOSYS_INSTALL_LIBRARY)
yosys_config_script(INSTALL) yosys_config_script(INSTALL)
endif() endif()
# Configuration for Makefile-based steps.
# (The use of `${makefile_vars}` in `add_custom_{target,command}()` adds dependencies for
# all of the targets specified via `$<TARGET_FILE:tgt>`.)
set(makefile_vars
BUILD_DIR=${CMAKE_BINARY_DIR}
PROGRAM_PREFIX=${YOSYS_PROGRAM_PREFIX}
ABC=$<IF:$<TARGET_EXISTS:yosys-abc>,$<TARGET_FILE:yosys-abc>,${YOSYS_ABC_EXECUTABLE}>
YOSYS=$<TARGET_FILE:yosys>
YOSYS_CONFIG=${CMAKE_BINARY_DIR}/yosys-config
YOSYS_FILTERLIB=$<$<TARGET_EXISTS:yosys-filterlib>:$<TARGET_FILE:yosys-filterlib>>
YOSYS_SMTBMC=${CMAKE_BINARY_DIR}/yosys-smtbmc
YOSYS_WITNESS=${CMAKE_BINARY_DIR}/yosys-witness
)
set(makefile_depends
# abc is implied via $<TARGET_FILE>
# yosys is implied via $<TARGET_FILE>
# yosys-filterlib is implied via $<TARGET_FILE>
$<$<TARGET_EXISTS:yosys-smtbmc>:yosys-smtbmc>
$<$<TARGET_EXISTS:yosys-witness>:yosys-witness>
)
# Tests. # Tests.
add_subdirectory(tests/unit) add_subdirectory(tests/unit)
# TODO(cmake): other tests
add_custom_target(test-unit
COMMAND ${CMAKE_CTEST_COMMAND} --test-dir tests/unit --output-on-failure
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
)
add_custom_target(test-vanilla
COMMAND make vanilla-test ${makefile_vars}
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/tests
DEPENDS ${makefile_depends}
)
add_custom_target(test
DEPENDS test-unit test-vanilla
)
# Docs. # Docs.
add_custom_target(docs-prepare add_custom_target(docs-prepare
COMMAND make -C ${CMAKE_SOURCE_DIR}/docs gen COMMAND make gen ${makefile_vars}
BUILD_DIR=${CMAKE_BINARY_DIR} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/docs
PROGRAM_PREFIX=${YOSYS_PROGRAM_PREFIX} DEPENDS ${makefile_depends}
YOSYS=$<TARGET_FILE:yosys>
) )
foreach (format html latexpdf) foreach (format html latexpdf)
add_custom_target(docs-${format} add_custom_target(docs-${format}
COMMAND make -C ${CMAKE_SOURCE_DIR}/docs ${format} COMMAND make ${format}
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/docs
DEPENDS docs-prepare DEPENDS docs-prepare
) )
endforeach() endforeach()

View file

@ -1,3 +1,5 @@
include common.mk
# Makefile for Sphinx documentation # Makefile for Sphinx documentation
# #
@ -46,10 +48,10 @@ help:
.PHONY: clean .PHONY: clean
clean: clean-examples clean: clean-examples
rm -rf $(BUILDDIR)/* @rm -rf $(BUILDDIR)/*
rm -rf util/__pycache__ @rm -rf util/__pycache__
rm -rf source/generated @rm -rf source/generated
$(MAKE) -C source/_images clean @$(MAKE) -C source/_images clean
.PHONY: html .PHONY: html
html: html:
@ -235,7 +237,7 @@ test: test-examples test-macros
FORCE: FORCE:
Makefile-%: FORCE Makefile-%: FORCE
$(MAKE) -C $(@D) $(*F) @$(MAKE) -C $(@D) $(*F)
CODE_EXAMPLES := $(wildcard source/code_examples/*/Makefile) CODE_EXAMPLES := $(wildcard source/code_examples/*/Makefile)
TEST_EXAMPLES := $(addsuffix -examples,$(CODE_EXAMPLES)) TEST_EXAMPLES := $(addsuffix -examples,$(CODE_EXAMPLES))
@ -245,45 +247,40 @@ clean-examples: $(CLEAN_EXAMPLES)
examples: $(TEST_EXAMPLES) examples: $(TEST_EXAMPLES)
test-macros: test-macros:
$(PYTHON) tests/macro_commands.py @$(PYTHON) tests/macro_commands.py
.PHONY: images .PHONY: images
images: images:
$(MAKE) -C source/_images @$(MAKE) -C source/_images
$(MAKE) -C source/_images convert @$(MAKE) -C source/_images convert
BUILD_DIR ?= ..
BUILD_CMD := $(BUILD_DIR)/$(PROGRAM_PREFIX)
.PHONY: extract .PHONY: extract
extract: extract:
mkdir -p source/generated @mkdir -p source/generated
$(BUILD_CMD)yosys -q -p 'help -dump-cmds-json source/generated/cmds.json' @$(YOSYS) -q -p 'help -dump-cmds-json source/generated/cmds.json'
$(BUILD_CMD)yosys -q -p 'help -dump-cells-json source/generated/cells.json' @$(YOSYS) -q -p 'help -dump-cells-json source/generated/cells.json'
cp ../passes/cmds/chformal.cc source/generated/ @cp ../passes/cmds/chformal.cc source/generated/
$(BUILD_CMD)yosys -qQT -h 'chformal' -l source/generated/chformal.log @$(YOSYS) -qQT -h 'chformal' -l source/generated/chformal.log
mkdir -p source/generated/functional @mkdir -p source/generated/functional
cp ../backends/functional/smtlib.cc source/generated/functional/ @cp ../backends/functional/smtlib.cc source/generated/functional/
-cd .. && diff -U 20 backends/functional/smtlib.cc backends/functional/smtlib_rosette.cc \ -@cd .. && diff -U 20 backends/functional/smtlib.cc backends/functional/smtlib_rosette.cc \
> docs/source/generated/functional/rosette.diff > docs/source/generated/functional/rosette.diff || true
$(BUILD_CMD)yosys --help >source/generated/yosys @$(YOSYS) --help >source/generated/yosys
$(BUILD_CMD)yosys-smtbmc --help >source/generated/yosys-smtbmc @$(YOSYS_SMTBMC) --help >source/generated/yosys-smtbmc
$(BUILD_CMD)yosys-witness --help >source/generated/yosys-witness @$(YOSYS_WITNESS) --help >source/generated/yosys-witness
$(BUILD_CMD)yosys-config --help >source/generated/yosys-config @$(YOSYS_CONFIG) --help >source/generated/yosys-config
-$(BUILD_CMD)yosys-filterlib --help 2>source/generated/yosys-filterlib @$(YOSYS_FILTERLIB) --help 2>source/generated/yosys-filterlib || true
ifeq ($(ABCEXTERNAL),) @$(ABC) --help 2>source/generated/yosys-abc > /dev/null || true
-$(BUILD_CMD)yosys-abc --help 2>source/generated/yosys-abc
endif
.PHONY: gen .PHONY: gen
gen: gen:
$(MAKE) examples @$(MAKE) examples
$(MAKE) images @$(MAKE) images
$(MAKE) extract @$(MAKE) extract
.PHONY: reqs .PHONY: reqs
reqs: reqs:
$(PYTHON) -m pip install -r source/requirements.txt @$(PYTHON) -m pip install -r source/requirements.txt

19
docs/common.mk Normal file
View file

@ -0,0 +1,19 @@
ROOT_DIR := $(abspath $(dir $(lastword $(MAKEFILE_LIST))))
BUILD_DIR ?= $(ROOT_DIR)/../build
BUILD_CMD := $(BUILD_DIR)/$(PROGRAM_PREFIX)
ABC ?= $(BUILD_CMD)yosys-abc
YOSYS ?= $(BUILD_CMD)yosys
YOSYS_CONFIG ?= $(BUILD_CMD)yosys-config
YOSYS_FILTERLIB ?= $(BUILD_CMD)yosys-filterlib
YOSYS_SMTBMC ?= $(BUILD_CMD)yosys-smtbmc
YOSYS_WITNESS ?= @$(BUILD_CMD)yosys-witness
export BUILD_DIR
export SBY
export ABC
export YOSYS
export YOSYS_CONFIG
export YOSYS_FILTERLIB
export YOSYS_SMTBMC
export YOSYS_WITNESS

View file

@ -34,18 +34,18 @@ all_tex: $(TEX_FILES:.tex=.pdf) $(TEX_FILES:.tex=.svg)
# limit output size to US letter (same as latexpdf output) to avoid oversize error # limit output size to US letter (same as latexpdf output) to avoid oversize error
%.pdf: %.dot %.pdf: %.dot
$(FAKETIME) dot -Tpdf -Gsize="8.5,11" -o $@ $< @$(FAKETIME) dot -Tpdf -Gsize="8.5,11" -o $@ $< >/dev/null 2>&1
%.pdf: %.tex %.pdf: %.tex
cd $(@D) && $(FAKETIME) pdflatex $(<F) --interaction=nonstopmode @cd $(@D) && $(FAKETIME) pdflatex $(<F) --interaction=nonstopmode >/dev/null 2>&1
%.svg: %.pdf %.svg: %.pdf
pdf2svg $< $@ @pdf2svg $< $@ >/dev/null 2>&1
.PHONY: clean tidy .PHONY: clean tidy
tidy: tidy:
rm -f **/*.log **/*.aux @rm -f **/*.log **/*.aux
clean: tidy clean: tidy
rm -rf code_examples @rm -rf code_examples
rm -f **/*.pdf **/*.svg @rm -f **/*.pdf **/*.svg

View file

@ -1,6 +1,4 @@
PROGRAM_PREFIX := include ../../../common.mk
YOSYS ?= ../../../../$(PROGRAM_PREFIX)yosys
.PHONY: all dots examples .PHONY: all dots examples
all: dots examples all: dots examples
@ -8,23 +6,23 @@ dots: test1.dot my_cmd.so
examples: test0.log test1.log test2.log my_cmd.so examples: test0.log test1.log test2.log my_cmd.so
my_cmd.so: my_cmd.cc my_cmd.so: my_cmd.cc
$(YOSYS)-config --exec --cxx --cxxflags --ldflags -o my_cmd.so -shared my_cmd.cc --ldlibs @$(YOSYS_CONFIG) --exec --cxx --cxxflags --ldflags -o my_cmd.so -shared my_cmd.cc --ldlibs
test0.log: my_cmd.so test0.log: my_cmd.so
$(YOSYS) -QTl test0.log_new -m ./my_cmd.so -p 'my_cmd foo bar' -f verilog absval_ref.v @$(YOSYS) -QTl test0.log_new -m ./my_cmd.so -p 'my_cmd foo bar' -f verilog absval_ref.v >/dev/null 2>&1
mv test0.log_new test0.log @mv test0.log_new test0.log
test1.log: my_cmd.so test1.log: my_cmd.so
$(YOSYS) -QTl test1.log_new -m ./my_cmd.so -p 'clean; test1; dump' -f verilog absval_ref.v @$(YOSYS) -QTl test1.log_new -m ./my_cmd.so -p 'clean; test1; dump' -f verilog absval_ref.v >/dev/null 2>&1
mv test1.log_new test1.log @mv test1.log_new test1.log
test1.dot: my_cmd.so test1.dot: my_cmd.so
$(YOSYS) -m ./my_cmd.so -p 'test1; show -format dot -prefix test1' @$(YOSYS) -m ./my_cmd.so -p 'test1; show -format dot -prefix test1' >/dev/null 2>&1
test2.log: my_cmd.so test2.log: my_cmd.so
$(YOSYS) -QTl test2.log_new -m ./my_cmd.so -p 'hierarchy -top test; test2' -f verilog sigmap_test.v @$(YOSYS) -QTl test2.log_new -m ./my_cmd.so -p 'hierarchy -top test; test2' -f verilog sigmap_test.v >/dev/null 2>&1
mv test2.log_new test2.log @mv test2.log_new test2.log
.PHONY: clean .PHONY: clean
clean: clean:
rm -f *.d *.so *.dot @rm -f *.d *.so *.dot

View file

@ -1,6 +1,4 @@
PROGRAM_PREFIX := include ../../../common.mk
YOSYS ?= ../../../../$(PROGRAM_PREFIX)yosys
DOT_NAMES = addr_gen_hier addr_gen_proc addr_gen_clean DOT_NAMES = addr_gen_hier addr_gen_proc addr_gen_clean
DOT_NAMES += rdata_proc rdata_flat rdata_adffe rdata_memrdv2 rdata_alumacc rdata_coarse DOT_NAMES += rdata_proc rdata_flat rdata_adffe rdata_memrdv2 rdata_alumacc rdata_coarse
@ -16,12 +14,12 @@ dots: $(DOTS) $(MAPDOTS)
examples: fifo.out fifo.stat examples: fifo.out fifo.stat
$(DOTS) fifo.out: fifo.v fifo.ys $(DOTS) fifo.out: fifo.v fifo.ys
$(YOSYS) fifo.ys -l fifo.out -Q -T @$(YOSYS) fifo.ys -l fifo.out -Q -T >/dev/null 2>&1
$(MAPDOTS) fifo.stat: fifo.v fifo_map.ys $(MAPDOTS) fifo.stat: fifo.v fifo_map.ys
$(YOSYS) fifo_map.ys @$(YOSYS) fifo_map.ys >/dev/null 2>&1
.PHONY: clean .PHONY: clean
clean: clean:
rm -f *.dot @rm -f *.dot
rm -f fifo.out fifo.stat @rm -f fifo.out fifo.stat

View file

@ -1,6 +1,4 @@
PROGRAM_PREFIX := include ../../../common.mk
YOSYS ?= ../../../../$(PROGRAM_PREFIX)yosys
DOTS = counter_00.dot counter_01.dot counter_02.dot counter_03.dot DOTS = counter_00.dot counter_01.dot counter_02.dot counter_03.dot
@ -10,8 +8,8 @@ dots: $(DOTS)
examples: examples:
$(DOTS): counter.v counter.ys mycells.lib $(DOTS): counter.v counter.ys mycells.lib
$(YOSYS) counter.ys @$(YOSYS) counter.ys >/dev/null 2>&1
.PHONY: clean .PHONY: clean
clean: clean:
rm -f *.dot @rm -f *.dot

View file

@ -1,6 +1,4 @@
PROGRAM_PREFIX := include ../../../common.mk
YOSYS ?= ../../../../$(PROGRAM_PREFIX)yosys
DOTS = macc_simple_xmap.dot macc_xilinx_xmap.dot DOTS = macc_simple_xmap.dot macc_xilinx_xmap.dot
@ -10,12 +8,12 @@ dots: $(DOTS)
examples: examples:
macc_simple_xmap.dot: macc_simple_*.v macc_simple_test.ys macc_simple_xmap.dot: macc_simple_*.v macc_simple_test.ys
$(YOSYS) macc_simple_test.ys @$(YOSYS) macc_simple_test.ys >/dev/null 2>&1
macc_xilinx_xmap.dot: macc_xilinx_*.v macc_xilinx_test.ys macc_xilinx_xmap.dot: macc_xilinx_*.v macc_xilinx_test.ys
$(YOSYS) macc_xilinx_test.ys @$(YOSYS) macc_xilinx_test.ys >/dev/null 2>&1
.PHONY: clean .PHONY: clean
clean: clean:
rm -f *.dot @rm -f *.dot

View file

@ -1,6 +1,4 @@
PROGRAM_PREFIX := include ../../../common.mk
YOSYS ?= ../../../../$(PROGRAM_PREFIX)yosys
DOT_NAMES = opt_share opt_muxtree opt_merge opt_expr DOT_NAMES = opt_share opt_muxtree opt_merge opt_expr
@ -12,9 +10,9 @@ dots: $(DOTS)
examples: examples:
%.dot: %.ys %.dot: %.ys
$(YOSYS) $< @$(YOSYS) $< >/dev/null 2>&1
gvpack -u -o $@ $*_full.dot @gvpack -u -o $@ $*_full.dot >/dev/null 2>&1
.PHONY: clean .PHONY: clean
clean: clean:
rm -f *.dot @rm -f *.dot

View file

@ -1,6 +1,4 @@
PROGRAM_PREFIX := include ../../../common.mk
YOSYS ?= ../../../../$(PROGRAM_PREFIX)yosys
.PHONY: all dots examples .PHONY: all dots examples
all: dots examples all: dots examples
@ -8,8 +6,8 @@ dots: scrambler_p01.dot scrambler_p02.dot
examples: examples:
scrambler_p01.dot scrambler_p02.dot: scrambler.ys scrambler.v scrambler_p01.dot scrambler_p02.dot: scrambler.ys scrambler.v
$(YOSYS) scrambler.ys @$(YOSYS) scrambler.ys >/dev/null 2>&1
.PHONY: clean .PHONY: clean
clean: clean:
rm -f *.dot @rm -f *.dot

View file

@ -1,6 +1,4 @@
PROGRAM_PREFIX := include ../../../common.mk
YOSYS ?= ../../../../$(PROGRAM_PREFIX)yosys
SUMPROD = sumprod_00 sumprod_01 sumprod_02 sumprod_03 sumprod_04 sumprod_05 SUMPROD = sumprod_00 sumprod_01 sumprod_02 sumprod_03 sumprod_04 sumprod_05
SUMPROD_DOTS := $(addsuffix .dot,$(SUMPROD)) SUMPROD_DOTS := $(addsuffix .dot,$(SUMPROD))
@ -17,18 +15,18 @@ dots: select.dot $(SUMPROD_DOTS) $(MEMDEMO_DOTS) $(SUBMOD_DOTS)
examples: sumprod.out examples: sumprod.out
select.dot: select.v select.ys select.dot: select.v select.ys
$(YOSYS) select.ys @$(YOSYS) select.ys >/dev/null 2>&1
$(SUMPROD_DOTS) sumprod.out: sumprod.v sumprod.ys $(SUMPROD_DOTS) sumprod.out: sumprod.v sumprod.ys
$(YOSYS) sumprod.ys @$(YOSYS) sumprod.ys >/dev/null 2>&1
$(MEMDEMO_DOTS): memdemo.v memdemo.ys $(MEMDEMO_DOTS): memdemo.v memdemo.ys
$(YOSYS) memdemo.ys @$(YOSYS) memdemo.ys >/dev/null 2>&1
$(SUBMOD_DOTS): memdemo.v submod.ys $(SUBMOD_DOTS): memdemo.v submod.ys
$(YOSYS) submod.ys @$(YOSYS) submod.ys >/dev/null 2>&1
.PHONY: clean .PHONY: clean
clean: clean:
rm -rf *.dot @rm -rf *.dot
rm -f sumprod.out @rm -f sumprod.out

View file

@ -1,6 +1,4 @@
PROGRAM_PREFIX := include ../../../common.mk
YOSYS ?= ../../../../$(PROGRAM_PREFIX)yosys
EXAMPLE = example_first example_second example_third EXAMPLE = example_first example_second example_third
EXAMPLE_DOTS := $(addsuffix .dot,$(EXAMPLE)) EXAMPLE_DOTS := $(addsuffix .dot,$(EXAMPLE))
@ -14,18 +12,18 @@ dots: splice.dot $(EXAMPLE_DOTS) $(CMOS_DOTS)
examples: example.out examples: example.out
splice.dot: splice.v splice.dot: splice.v
$(YOSYS) -p 'prep -top splice_demo; show -format dot -prefix splice' splice.v @$(YOSYS) -p 'prep -top splice_demo; show -format dot -prefix splice' splice.v >/dev/null 2>&1
$(EXAMPLE_DOTS): example.v example.ys $(EXAMPLE_DOTS): example.v example.ys
$(YOSYS) example.ys @$(YOSYS) example.ys >/dev/null 2>&1
example.out: example_lscd.ys example.v example.out: example_lscd.ys example.v
$(YOSYS) $< -l $@ -Q -T @$(YOSYS) $< -l $@ -Q -T >/dev/null 2>&1
$(CMOS_DOTS): cmos.v cmos.ys $(CMOS_DOTS): cmos.v cmos.ys
$(YOSYS) cmos.ys @$(YOSYS) cmos.ys >/dev/null 2>&1
.PHONY: clean .PHONY: clean
clean: clean:
rm -rf *.dot @rm -rf *.dot
rm -f example.out @rm -f example.out

View file

@ -1,6 +1,4 @@
PROGRAM_PREFIX := include ../../../common.mk
YOSYS ?= ../../../../$(PROGRAM_PREFIX)yosys
.PHONY: all dots examples .PHONY: all dots examples
all: dots examples all: dots examples
@ -9,15 +7,15 @@ examples:
.PHONY: test .PHONY: test
test: stubnets.so test: stubnets.so
$(YOSYS) -ql test1.log -m ./stubnets.so test.v -p "stubnets" @$(YOSYS) -ql test1.log -m ./stubnets.so test.v -p "stubnets" >/dev/null 2>&1
$(YOSYS) -ql test2.log -m ./stubnets.so test.v -p "opt; stubnets" @$(YOSYS) -ql test2.log -m ./stubnets.so test.v -p "opt; stubnets" >/dev/null 2>&1
$(YOSYS) -ql test3.log -m ./stubnets.so test.v -p "techmap; opt; stubnets -report_bits" @$(YOSYS) -ql test3.log -m ./stubnets.so test.v -p "techmap; opt; stubnets -report_bits" >/dev/null 2>&1
tail test1.log test2.log test3.log @tail test1.log test2.log test3.log
stubnets.so: stubnets.cc stubnets.so: stubnets.cc
$(YOSYS)-config --exec --cxx --cxxflags --ldflags -o $@ -shared $^ --ldlibs @$(YOSYS_CONFIG) --exec --cxx --cxxflags --ldflags -o $@ -shared $^ --ldlibs >/dev/null 2>&1
.PHONY: clean .PHONY: clean
clean: clean:
rm -f test1.log test2.log test3.log @rm -f test1.log test2.log test3.log
rm -f stubnets.so stubnets.d @rm -f stubnets.so stubnets.d

View file

@ -1,12 +1,9 @@
include ../../../common.mk
DOT_TARGETS += proc_01 proc_02 proc_03 DOT_TARGETS += proc_01 proc_02 proc_03
DOT_TARGETS += memory_01 memory_02 DOT_TARGETS += memory_01 memory_02
DOT_TARGETS += techmap_01 DOT_TARGETS += techmap_01
PROGRAM_PREFIX :=
YOSYS ?= ../../../../$(PROGRAM_PREFIX)yosys
DOTS = $(addsuffix .dot,$(DOT_TARGETS)) DOTS = $(addsuffix .dot,$(DOT_TARGETS))
.PHONY: all dots examples .PHONY: all dots examples
@ -15,9 +12,9 @@ dots: $(DOTS)
examples: examples:
%.dot: %.v %.ys %.dot: %.v %.ys
$(YOSYS) -p 'script $*.ys; show -notitle -prefix $* -format dot' @$(YOSYS) -p 'script $*.ys; show -notitle -prefix $* -format dot' >/dev/null 2>&1
.PHONY: clean .PHONY: clean
clean: clean:
rm -f *.dot @rm -f *.dot

View file

@ -1,6 +1,4 @@
PROGRAM_PREFIX := include ../../../common.mk
YOSYS ?= ../../../../$(PROGRAM_PREFIX)yosys
.PHONY: all dots examples .PHONY: all dots examples
all: dots examples all: dots examples
@ -8,20 +6,20 @@ dots: red_or3x1.dot sym_mul.dot mymul.dot mulshift.dot addshift.dot
examples: examples:
red_or3x1.dot: red_or3x1_* red_or3x1.dot: red_or3x1_*
$(YOSYS) red_or3x1_test.ys @$(YOSYS) red_or3x1_test.ys >/dev/null 2>&1
sym_mul.dot: sym_mul_* sym_mul.dot: sym_mul_*
$(YOSYS) sym_mul_test.ys @$(YOSYS) sym_mul_test.ys >/dev/null 2>&1
mymul.dot: mymul_* mymul.dot: mymul_*
$(YOSYS) mymul_test.ys @$(YOSYS) mymul_test.ys >/dev/null 2>&1
mulshift.dot: mulshift_* mulshift.dot: mulshift_*
$(YOSYS) mulshift_test.ys @$(YOSYS) mulshift_test.ys >/dev/null 2>&1
addshift.dot: addshift_* addshift.dot: addshift_*
$(YOSYS) addshift_test.ys @$(YOSYS) addshift_test.ys >/dev/null 2>&1
.PHONY: clean .PHONY: clean
clean: clean:
rm -f *.dot @rm -f *.dot

View file

@ -5,6 +5,7 @@ from pathlib import Path
import re import re
import subprocess import subprocess
import sys import sys
import os
# basic logging setup # basic logging setup
logging.basicConfig(level=logging.INFO) logging.basicConfig(level=logging.INFO)
@ -17,7 +18,7 @@ THIS_FILE = (TESTS_DIR / "macro_commands.py").relative_to(ROOT_DIR)
MACRO_SOURCE = TESTS_DIR.parent / "source" / "code_examples" / "macro_commands" MACRO_SOURCE = TESTS_DIR.parent / "source" / "code_examples" / "macro_commands"
assert MACRO_SOURCE.exists(), f"can't find macro_commands in {MACRO_SOURCE}" assert MACRO_SOURCE.exists(), f"can't find macro_commands in {MACRO_SOURCE}"
YOSYS = ROOT_DIR / "yosys" YOSYS = Path(os.environ.get("YOSYS", ROOT_DIR / "yosys"))
assert YOSYS.exists(), f"can't find yosys executable in {YOSYS}" assert YOSYS.exists(), f"can't find yosys executable in {YOSYS}"
raise_error = False raise_error = False

View file

@ -1885,9 +1885,8 @@ void VerificImporter::import_netlist(RTLIL::Design *design, Netlist *nl, std::ma
pool<Instance*> sva_assumes; pool<Instance*> sva_assumes;
pool<Instance*> sva_covers; pool<Instance*> sva_covers;
pool<Instance*> sva_triggers; pool<Instance*> sva_triggers;
#endif
pool<RTLIL::Cell*> past_ffs; pool<RTLIL::Cell*> past_ffs;
#endif
FOREACH_INSTANCE_OF_NETLIST(nl, mi, inst) FOREACH_INSTANCE_OF_NETLIST(nl, mi, inst)
{ {
@ -2849,6 +2848,7 @@ std::set<std::string> import_tops(const char* work, std::map<std::string,Netlist
{ {
std::set<std::string> top_mod_names; std::set<std::string> top_mod_names;
Array *netlists = nullptr; Array *netlists = nullptr;
(void)top;
#ifdef VERIFIC_VHDL_SUPPORT #ifdef VERIFIC_VHDL_SUPPORT
VhdlLibrary *vhdl_lib = vhdl_file::GetLibrary(work, 1); VhdlLibrary *vhdl_lib = vhdl_file::GetLibrary(work, 1);

View file

@ -206,13 +206,16 @@ bool mp_int_to_const(mp_int *a, Const &b, bool is_signed)
return false; return false;
if (negative) { if (negative) {
mp_neg(a, a); if (mp_neg(a, a) != MP_OKAY)
mp_sub_d(a, 1, a); return false;
if (mp_sub_d(a, 1, a) != MP_OKAY)
return false;
} }
std::vector<unsigned char> buf; std::vector<unsigned char> buf;
buf.resize(mp_unsigned_bin_size(a)); buf.resize(mp_unsigned_bin_size(a));
mp_to_unsigned_bin(a, buf.data()); if (mp_to_unsigned_bin(a, buf.data()) != MP_OKAY)
return false;
Const::Builder b_bits(mp_count_bits(a) + is_signed); Const::Builder b_bits(mp_count_bits(a) + is_signed);
for (int i = 0; i < mp_count_bits(a);) { for (int i = 0; i < mp_count_bits(a);) {

View file

@ -1,7 +1,3 @@
ifneq ($(wildcard ../Makefile.conf),)
include ../Makefile.conf
endif
OVERRIDE_MAIN=1 OVERRIDE_MAIN=1
include ./common.mk include ./common.mk
@ -91,7 +87,7 @@ prep: $(MK_TEST_DIRS:%=%/Makefile)
.PHONY: force-create .PHONY: force-create
# this target actually emits Makefile files # this target actually emits Makefile files
%/Makefile: force-create %/Makefile: force-create
+@cd $* && python3 generate_mk.py +@cd $* && python3 generate_mk.py $(if $(SEED),-S$(SEED))
makefile-./%: %/Makefile makefile-./%: %/Makefile
@$(MAKE) -C $* @$(MAKE) -C $*
@ -125,3 +121,16 @@ clean:
@rm -f ./tools/cmp_tbdata @rm -f ./tools/cmp_tbdata
@rm -f $(addsuffix /Makefile,$(MK_TEST_DIRS)) @rm -f $(addsuffix /Makefile,$(MK_TEST_DIRS))
@find . -name '*.result' -type f -exec rm -f {} + @find . -name '*.result' -type f -exec rm -f {} +
.PHONY: coverage
coverage:
@echo "Creating coverage HTML"
@$(YOSYS) -qp 'help; help -all'
@rm -rf $(COVERAGE_HTML)
@llvm-profdata merge -sparse $(COVERAGE_DIR)/coverage_*.profraw -o $(COVERAGE_DIR)/yosys.profdata
@llvm-cov show $(YOSYS) -instr-profile=$(COVERAGE_DIR)/yosys.profdata -format=html -output-dir=$(COVERAGE_HTML) --compilation-dir=$(SRC_DIR) --ignore-filename-regex='(^|.*/)libs/.*|/usr/include/.*|$(subst /,\/,$(VERIFIC_DIR))/.*'
.PHONY: clean_coverage
clean_coverage:
@echo "Clean coverage"
@rm -rf $(COVERAGE_DIR)

View file

@ -1,20 +1,32 @@
ROOT_DIR := $(abspath $(dir $(lastword $(MAKEFILE_LIST)))) ROOT_DIR := $(abspath $(dir $(lastword $(MAKEFILE_LIST))))
BUILD_DIR ?= $(ROOT_DIR)/.. BUILD_DIR ?= $(realpath $(ROOT_DIR)/../build)
BUILD_CMD := $(BUILD_DIR)/$(PROGRAM_PREFIX)
SRC_DIR := $(realpath $(ROOT_DIR)/..)
SBY ?= sby SBY ?= sby
YOSYS ?= $(BUILD_DIR)/yosys ABC ?= $(BUILD_CMD)yosys-abc
ABC ?= $(BUILD_DIR)/yosys-abc YOSYS ?= $(BUILD_CMD)yosys
YOSYS_FILTERLIB ?= $(BUILD_DIR)/yosys-filterlib YOSYS_CONFIG ?= $(BUILD_CMD)yosys-config
YOSYS_CONFIG ?= $(BUILD_DIR)/yosys-config YOSYS_FILTERLIB ?= $(BUILD_CMD)yosys-filterlib
YOSYS_SMTBMC ?= $(BUILD_DIR)/yosys-smtbmc YOSYS_SMTBMC ?= $(BUILD_CMD)yosys-smtbmc
YOSYS_WITNESS ?= @$(BUILD_CMD)yosys-witness
YOSYS_MAX_THREADS ?= 4 YOSYS_MAX_THREADS ?= 4
COVERAGE_DIR ?= $(realpath $(ROOT_DIR)/..)/coverage
COVERAGE_HTML ?= $(realpath $(ROOT_DIR)/..)/coverage_html
LLVM_PROFILE_FILE ?= $(COVERAGE_DIR)/coverage_%p.profraw
VERIFIC_DIR ?= /usr/local/src/verific_lib
export BUILD_DIR
export SBY
export ABC
export YOSYS export YOSYS
export YOSYS_CONFIG export YOSYS_CONFIG
export YOSYS_FILTERLIB
export YOSYS_SMTBMC export YOSYS_SMTBMC
export ABC export YOSYS_WITNESS
export SBY
export YOSYS_MAX_THREADS export YOSYS_MAX_THREADS
export LLVM_PROFILE_FILE
export LLVM_PROFILE_FILE_BUFFER_SIZE=0
all: all:

View file

@ -10,19 +10,19 @@ def create_tests():
gen_tests_makefile.generate_cmd_test("parent_content1", [ gen_tests_makefile.generate_cmd_test("parent_content1", [
f"{setup}", f"{setup}",
'cd .. && $(YOSYS_ABS) -qp "read_verilog -defer memfile/memory.v; ' 'cd .. && $(YOSYS) -qp "read_verilog -defer memfile/memory.v; '
'chparam -set MEMFILE \\"content1.dat\\" memory"' 'chparam -set MEMFILE \\"content1.dat\\" memory"'
]) ])
gen_tests_makefile.generate_cmd_test("parent_content2_temp", [ gen_tests_makefile.generate_cmd_test("parent_content2_temp", [
f"{setup}", f"{setup}",
'cd .. && $(YOSYS_ABS) -qp "read_verilog -defer memfile/memory.v; ' 'cd .. && $(YOSYS) -qp "read_verilog -defer memfile/memory.v; '
'chparam -set MEMFILE \\"temp/content2.dat\\" memory"' 'chparam -set MEMFILE \\"temp/content2.dat\\" memory"'
]) ])
gen_tests_makefile.generate_cmd_test("parent_content2_full", [ gen_tests_makefile.generate_cmd_test("parent_content2_full", [
f"{setup}", f"{setup}",
'cd .. && $(YOSYS_ABS) -qp "read_verilog -defer memfile/memory.v; ' 'cd .. && $(YOSYS) -qp "read_verilog -defer memfile/memory.v; '
'chparam -set MEMFILE \\"memfile/temp/content2.dat\\" memory"' 'chparam -set MEMFILE \\"memfile/temp/content2.dat\\" memory"'
]) ])
@ -64,5 +64,4 @@ def create_tests():
'chparam -set MEMFILE \\"content3.dat\\" memory"' 'chparam -set MEMFILE \\"content3.dat\\" memory"'
]) ])
extra = ["YOSYS_ABS := $(abspath $(YOSYS))"] gen_tests_makefile.generate_custom(create_tests)
gen_tests_makefile.generate_custom(create_tests, extra)

View file

@ -7,6 +7,6 @@ chmod +x "$DIR/ezcmdline_dummy_solver"
CXXFLAGS=$(${YOSYS_CONFIG} --cxxflags) CXXFLAGS=$(${YOSYS_CONFIG} --cxxflags)
DATDIR=$(${YOSYS_CONFIG} --datdir) DATDIR=$(${YOSYS_CONFIG} --datdir)
DATDIR=${DATDIR//\//\\\/} DATDIR=${DATDIR//\//\\\/}
CXXFLAGS=${CXXFLAGS//$DATDIR/..\/..\/share} CXXFLAGS=${CXXFLAGS//$DATDIR/$BUILD_DIR/share}
${YOSYS_CONFIG} --exec --cxx ${CXXFLAGS} -I"$BASEDIR" --ldflags -shared -o "$DIR/ezcmdline_plugin.so" "$DIR/ezcmdline_plugin.cc" ${YOSYS_CONFIG} --exec --cxx ${CXXFLAGS} -I"$BASEDIR" --ldflags -shared -o "$DIR/ezcmdline_plugin.so" "$DIR/ezcmdline_plugin.cc"
${YOSYS} -m "$DIR/ezcmdline_plugin.so" -p "ezcmdline_test -cmd $DIR/ezcmdline_dummy_solver" | grep -q "ezcmdline_test passed!" ${YOSYS} -m "$DIR/ezcmdline_plugin.so" -p "ezcmdline_test -cmd $DIR/ezcmdline_dummy_solver" | grep -q "ezcmdline_test passed!"

View file

@ -4,7 +4,7 @@ rm -rf plugin_search
CXXFLAGS=$(${YOSYS_CONFIG} --cxxflags) CXXFLAGS=$(${YOSYS_CONFIG} --cxxflags)
DATDIR=$(${YOSYS_CONFIG} --datdir) DATDIR=$(${YOSYS_CONFIG} --datdir)
DATDIR=${DATDIR//\//\\\/} DATDIR=${DATDIR//\//\\\/}
CXXFLAGS=${CXXFLAGS//$DATDIR/..\/..\/share} CXXFLAGS=${CXXFLAGS//$DATDIR/$BUILD_DIR/share}
${YOSYS_CONFIG} --exec --cxx ${CXXFLAGS} --ldflags -shared -o plugin.so plugin.cc ${YOSYS_CONFIG} --exec --cxx ${CXXFLAGS} --ldflags -shared -o plugin.so plugin.cc
${YOSYS} -m ./plugin.so -p "test" | grep -q "Plugin test passed!" ${YOSYS} -m ./plugin.so -p "test" | grep -q "Plugin test passed!"
mkdir -p plugin_search mkdir -p plugin_search

View file

@ -122,7 +122,7 @@ def vcdextract(signals, on_change, file, output, limit=None):
print(*values[:len(signals)], file=output) print(*values[:len(signals)], file=output)
share = Path(__file__).parent / ".." / ".." / "share" share = Path(os.environ.get("BUILD_DIR", "../..")) / "share"
simlibs = [str(share / "simlib.v"), str(share / "simcells.v")] simlibs = [str(share / "simlib.v"), str(share / "simcells.v")]