diff --git a/.github/workflows/extra-builds.yml b/.github/workflows/extra-builds.yml index 7209b3645..cdf0c7fd5 100644 --- a/.github/workflows/extra-builds.yml +++ b/.github/workflows/extra-builds.yml @@ -31,9 +31,9 @@ jobs: echo "should_skip=${{ steps.skip_check.outputs.should_skip }}" >> $GITHUB_OUTPUT fi - vs-prep: - name: Prepare Visual Studio build - runs-on: ubuntu-latest + vs-build: + name: Visual Studio build + runs-on: windows-latest needs: [pre_job] if: (github.event_name == 'merge_group' || github.event_name == 'workflow_dispatch') && needs.pre_job.outputs.should_skip != 'true' steps: @@ -41,31 +41,31 @@ jobs: with: submodules: true 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: Visual Studio build - runs-on: windows-latest - needs: [vs-prep, pre_job] - if: (github.event_name == 'merge_group' || github.event_name == 'workflow_dispatch') && needs.pre_job.outputs.should_skip != 'true' - steps: - - uses: actions/download-artifact@v8 - with: - name: vcxsrc - path: . - - name: unzip - run: unzip yosys-win32-vcxsrc-latest.zip - - name: setup-msbuild - uses: microsoft/setup-msbuild@v2 - - name: MSBuild - working-directory: yosys-win32-vcxsrc-latest - run: msbuild YosysVS.sln /p:PlatformToolset=v142 /p:Configuration=Release /p:WindowsTargetPlatformVersion=10.0.26100.0 + - name: Setup MSVC + uses: ilammy/msvc-dev-cmd@v1 + + - name: Install flex/bison + shell: pwsh + run: | + choco install winflexbison3 --no-progress + + # Make tools visible to CMake + echo "C:\Program Files (x86)\GnuWin32\bin" | Out-File -Append -FilePath $env:GITHUB_PATH + echo "C:\ProgramData\chocolatey\lib\winflexbison3\tools" | Out-File -Append -FilePath $env:GITHUB_PATH + + - name: Configure CMake + run: > + cmake -S . -B build + -A x64 + -DCMAKE_BUILD_TYPE=Release + -DYOSYS_WITHOUT_ABC=ON + + - name: Build + run: > + cmake --build build + --config Release + --parallel wasi-build: name: WASI build @@ -79,10 +79,11 @@ jobs: persist-credentials: false - name: Build run: | - WASI_SDK=wasi-sdk-33.0-x86_64-linux - WASI_SDK_URL=https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-33/wasi-sdk-33.0-x86_64-linux.tar.gz + WASI_VER=33 + 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 - + WASI_SDK_PATH=$(pwd)/${WASI_SDK} FLEX_VER=2.6.4 FLEX=flex-${FLEX_VER} FLEX_URL=https://github.com/westes/flex/releases/download/v${FLEX_VER}/${FLEX}.tar.gz @@ -94,24 +95,9 @@ jobs: make && make install) - mkdir -p build - cat > build/Makefile.conf <> Makefile.conf - echo "ENABLE_VERIFIC_EDIF := 1" >> Makefile.conf - echo "ENABLE_VERIFIC_LIBERTY := 1" >> Makefile.conf - echo "ENABLE_VERIFIC_YOSYSHQ_EXTENSIONS := 1" >> Makefile.conf - echo "ENABLE_CCACHE := 1" >> Makefile.conf - echo "ENABLE_HELP_SOURCE := 1" >> Makefile.conf - make -j$procs + 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 + echo 'set(YOSYS_COMPILER_LAUNCHER ccache CACHE STRING "")' >> Configuration.cmake + echo 'set(YOSYS_VERIFIC_DIR "/usr/local/src/verific_lib" 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: Prepare docs shell: bash run: - make docs/prep -j$procs TARGETS= EXTRA_TARGETS= + cmake --build build --target docs-prepare -j$procs - name: Upload artifact uses: actions/upload-artifact@v4 @@ -83,12 +84,12 @@ jobs: - name: Install doc prereqs shell: bash run: | - make docs/reqs + make -C docs reqs - name: Test build docs shell: bash run: | - make -C docs html -j$procs TARGETS= EXTRA_TARGETS= + cmake --build build --target docs-html -j$procs - name: Trigger RTDs build if: ${{ needs.check_docs_rebuild.outputs.docs_export == 'true' && github.repository == 'YosysHQ/yosys' }} diff --git a/.github/workflows/test-build.yml b/.github/workflows/test-build.yml index 5e990d0a5..79af6cd7b 100644 --- a/.github/workflows/test-build.yml +++ b/.github/workflows/test-build.yml @@ -82,21 +82,20 @@ jobs: - name: Build shell: bash run: | - mkdir build - cd build - make -f ../Makefile config-$CC - make -f ../Makefile -j$procs - make -f ../Makefile unit-test -j$procs + rm -rf build + cmake -B build . -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_BUILD_TYPE=Release + cmake --build build -j$procs + ctest --test-dir build/tests/unit - name: Log yosys-config output run: | - ./yosys-config || true + ./build/yosys-config || true - name: Compress build shell: bash run: | cd build - tar -cvf ../build.tar share/ yosys yosys-* libyosys.so + tar -cvf ../build.tar share/ yosys yosys-* - name: Store build artifact uses: actions/upload-artifact@v7 @@ -136,17 +135,18 @@ jobs: - name: Uncompress build shell: bash - run: - tar -xvf build.tar + run: | + mkdir -p build + tar -xvf build.tar -C build - name: Log yosys-config output run: | - ./yosys-config || true + ./build/yosys-config || true - name: Run tests shell: bash run: | - make -j$procs vanilla-test TARGETS= EXTRA_TARGETS= CONFIG=$CC + make -C tests -j$procs vanilla-test - name: Report errors if: ${{ failure() }} @@ -198,8 +198,6 @@ jobs: runs-on: ${{ matrix.os }} needs: [build-yosys, pre_docs_job] if: needs.pre_docs_job.outputs.should_skip != 'true' - env: - CC: clang strategy: matrix: os: [ubuntu-latest] @@ -224,12 +222,13 @@ jobs: - name: Uncompress build shell: bash - run: - tar -xvf build.tar + run: | + mkdir -p build + tar -xvf build.tar -C build - name: Log yosys-config output run: | - ./yosys-config || true + ./build/yosys-config || true - name: Run tests shell: bash @@ -258,20 +257,24 @@ jobs: - name: Build Yosys run: | - make config-clang - echo "ENABLE_CCACHE := 1" >> Makefile.conf - echo "ENABLE_HELP_SOURCE := 1" >> Makefile.conf - make -j$procs + 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 + 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 shell: bash run: | - make docs/reqs + make -C docs reqs - name: Build docs shell: bash 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 uses: actions/upload-artifact@v4 diff --git a/.github/workflows/test-compile.yml b/.github/workflows/test-compile.yml index 99e4973a7..c1dae3fbb 100644 --- a/.github/workflows/test-compile.yml +++ b/.github/workflows/test-compile.yml @@ -37,7 +37,6 @@ jobs: if: (github.event_name == 'merge_group' || github.event_name == 'workflow_dispatch') && needs.pre_job.outputs.should_skip != 'true' env: CXXFLAGS: ${{ startsWith(matrix.compiler, 'gcc') && '-Wp,-D_GLIBCXX_ASSERTIONS' || ''}} - CC_SHORT: ${{ startsWith(matrix.compiler, 'gcc') && 'gcc' || 'clang' }} strategy: matrix: os: @@ -91,16 +90,18 @@ jobs: - name: Build C++20 shell: bash run: | - make config-$CC_SHORT - make -j$procs CXXSTD=c++20 compile-only + rm -rf build + cmake -B build -DCMAKE_CXX_STANDARD=20 . --fresh + cmake --build build --target yosys -j$procs # maximum standard, only on newest compilers - name: Build C++26 if: ${{ matrix.compiler == 'clang-22' || matrix.compiler == 'gcc-15' }} shell: bash run: | - make config-$CC_SHORT - make -j$procs CXXSTD=c++26 compile-only + rm -rf build + cmake -B build -DCMAKE_CXX_STANDARD=26 . --fresh + cmake --build build --target yosys -j$procs test-compile-result: runs-on: ubuntu-latest diff --git a/.github/workflows/test-sanitizers.yml b/.github/workflows/test-sanitizers.yml index 6f3c10903..a1229d164 100644 --- a/.github/workflows/test-sanitizers.yml +++ b/.github/workflows/test-sanitizers.yml @@ -38,7 +38,7 @@ jobs: if: (github.event_name == 'merge_group' || github.event_name == 'workflow_dispatch') && needs.pre_job.outputs.should_skip != 'true' env: CC: clang - ASAN_OPTIONS: halt_on_error=1 + ASAN_OPTIONS: halt_on_error=1 detect_container_overflow=0 UBSAN_OPTIONS: halt_on_error=1 strategy: matrix: @@ -63,18 +63,20 @@ jobs: - name: Build shell: bash run: | - make config-$CC - echo 'SANITIZER = ${{ matrix.sanitizer }}' >> Makefile.conf - make -j$procs + rm -rf build + cmake -B build . \ + -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 run: | - ./yosys-config || true + ./build/yosys-config || true - name: Run tests shell: bash run: | - make -j$procs vanilla-test TARGETS= EXTRA_TARGETS= + make -C tests -j$procs vanilla-test - name: Report errors if: ${{ failure() }} diff --git a/.github/workflows/test-verific-cfg.yml b/.github/workflows/test-verific-cfg.yml index 232ca6bd7..6721c0c9b 100644 --- a/.github/workflows/test-verific-cfg.yml +++ b/.github/workflows/test-verific-cfg.yml @@ -19,91 +19,77 @@ jobs: - name: verific [SV] run: | - make config-clang - echo "ENABLE_VERIFIC := 1" >> Makefile.conf - echo "ENABLE_VERIFIC_SYSTEMVERILOG := 1" >> Makefile.conf - echo "ENABLE_VERIFIC_VHDL := 0" >> Makefile.conf - echo "ENABLE_VERIFIC_HIER_TREE := 0" >> Makefile.conf - echo "ENABLE_VERIFIC_EDIF := 0" >> Makefile.conf - echo "ENABLE_VERIFIC_LIBERTY := 0" >> Makefile.conf - echo "ENABLE_VERIFIC_YOSYSHQ_EXTENSIONS := 0" >> Makefile.conf - echo "ENABLE_CCACHE := 1" >> Makefile.conf - make -j$procs + 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 + echo 'set(YOSYS_COMPILER_LAUNCHER ccache CACHE STRING "")' >> Configuration.cmake + echo 'set(YOSYS_VERIFIC_DIR "/usr/local/src/verific_lib" CACHE STRING "")' >> Configuration.cmake + echo 'set(YOSYS_VERIFIC_FEATURES "systemverilog" CACHE STRING "")' >> Configuration.cmake + cmake -C Configuration.cmake -B build . + cmake --build build -j$procs - name: verific [VHDL] run: | - make config-clang - echo "ENABLE_VERIFIC := 1" >> Makefile.conf - echo "ENABLE_VERIFIC_SYSTEMVERILOG := 0" >> Makefile.conf - echo "ENABLE_VERIFIC_VHDL := 1" >> Makefile.conf - echo "ENABLE_VERIFIC_HIER_TREE := 0" >> Makefile.conf - echo "ENABLE_VERIFIC_EDIF := 0" >> Makefile.conf - echo "ENABLE_VERIFIC_LIBERTY := 0" >> Makefile.conf - echo "ENABLE_VERIFIC_YOSYSHQ_EXTENSIONS := 0" >> Makefile.conf - echo "ENABLE_CCACHE := 1" >> Makefile.conf - make -j$procs + 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 + echo 'set(YOSYS_COMPILER_LAUNCHER ccache CACHE STRING "")' >> Configuration.cmake + echo 'set(YOSYS_VERIFIC_DIR "/usr/local/src/verific_lib" CACHE STRING "")' >> Configuration.cmake + echo 'set(YOSYS_VERIFIC_FEATURES "vhdl" CACHE STRING "")' >> Configuration.cmake + cmake -C Configuration.cmake -B build . + cmake --build build -j$procs - name: verific [SV + VHDL] run: | - make config-clang - echo "ENABLE_VERIFIC := 1" >> Makefile.conf - echo "ENABLE_VERIFIC_SYSTEMVERILOG := 1" >> Makefile.conf - echo "ENABLE_VERIFIC_VHDL := 1" >> Makefile.conf - echo "ENABLE_VERIFIC_HIER_TREE := 0" >> Makefile.conf - echo "ENABLE_VERIFIC_EDIF := 0" >> Makefile.conf - echo "ENABLE_VERIFIC_LIBERTY := 0" >> Makefile.conf - echo "ENABLE_VERIFIC_YOSYSHQ_EXTENSIONS := 0" >> Makefile.conf - echo "ENABLE_CCACHE := 1" >> Makefile.conf - make -j$procs + 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 + echo 'set(YOSYS_COMPILER_LAUNCHER ccache CACHE STRING "")' >> Configuration.cmake + echo 'set(YOSYS_VERIFIC_DIR "/usr/local/src/verific_lib" CACHE STRING "")' >> Configuration.cmake + echo 'set(YOSYS_VERIFIC_FEATURES "vhdl;systemverilog" CACHE STRING "")' >> Configuration.cmake + cmake -C Configuration.cmake -B build . + cmake --build build -j$procs - name: verific [SV + HIER] run: | - make config-clang - echo "ENABLE_VERIFIC := 1" >> Makefile.conf - echo "ENABLE_VERIFIC_SYSTEMVERILOG := 1" >> Makefile.conf - echo "ENABLE_VERIFIC_VHDL := 0" >> Makefile.conf - echo "ENABLE_VERIFIC_HIER_TREE := 1" >> Makefile.conf - echo "ENABLE_VERIFIC_EDIF := 0" >> Makefile.conf - echo "ENABLE_VERIFIC_LIBERTY := 0" >> Makefile.conf - echo "ENABLE_VERIFIC_YOSYSHQ_EXTENSIONS := 0" >> Makefile.conf - echo "ENABLE_CCACHE := 1" >> Makefile.conf - make -j$procs + 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 + echo 'set(YOSYS_COMPILER_LAUNCHER ccache CACHE STRING "")' >> Configuration.cmake + echo 'set(YOSYS_VERIFIC_DIR "/usr/local/src/verific_lib" CACHE STRING "")' >> Configuration.cmake + echo 'set(YOSYS_VERIFIC_FEATURES "systemverilog;hier_tree" CACHE STRING "")' >> Configuration.cmake + cmake -C Configuration.cmake -B build . + cmake --build build -j$procs - name: verific [VHDL + HIER] run: | - make config-clang - echo "ENABLE_VERIFIC := 1" >> Makefile.conf - echo "ENABLE_VERIFIC_SYSTEMVERILOG := 0" >> Makefile.conf - echo "ENABLE_VERIFIC_VHDL := 1" >> Makefile.conf - echo "ENABLE_VERIFIC_HIER_TREE := 1" >> Makefile.conf - echo "ENABLE_VERIFIC_EDIF := 0" >> Makefile.conf - echo "ENABLE_VERIFIC_LIBERTY := 0" >> Makefile.conf - echo "ENABLE_VERIFIC_YOSYSHQ_EXTENSIONS := 0" >> Makefile.conf - echo "ENABLE_CCACHE := 1" >> Makefile.conf - make -j$procs + 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 + echo 'set(YOSYS_COMPILER_LAUNCHER ccache CACHE STRING "")' >> Configuration.cmake + echo 'set(YOSYS_VERIFIC_DIR "/usr/local/src/verific_lib" CACHE STRING "")' >> Configuration.cmake + echo 'set(YOSYS_VERIFIC_FEATURES "vhdl;hier_tree" CACHE STRING "")' >> Configuration.cmake + cmake -C Configuration.cmake -B build . + cmake --build build -j$procs - name: verific [SV + VHDL + HIER] run: | - make config-clang - echo "ENABLE_VERIFIC := 1" >> Makefile.conf - echo "ENABLE_VERIFIC_SYSTEMVERILOG := 1" >> Makefile.conf - echo "ENABLE_VERIFIC_VHDL := 1" >> Makefile.conf - echo "ENABLE_VERIFIC_HIER_TREE := 1" >> Makefile.conf - echo "ENABLE_VERIFIC_EDIF := 0" >> Makefile.conf - echo "ENABLE_VERIFIC_LIBERTY := 0" >> Makefile.conf - echo "ENABLE_VERIFIC_YOSYSHQ_EXTENSIONS := 0" >> Makefile.conf - echo "ENABLE_CCACHE := 1" >> Makefile.conf - make -j$procs + 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 + echo 'set(YOSYS_COMPILER_LAUNCHER ccache CACHE STRING "")' >> Configuration.cmake + echo 'set(YOSYS_VERIFIC_DIR "/usr/local/src/verific_lib" CACHE STRING "")' >> Configuration.cmake + echo 'set(YOSYS_VERIFIC_FEATURES "systemverilog;vhdl;hier_tree" CACHE STRING "")' >> Configuration.cmake + cmake -C Configuration.cmake -B build . + cmake --build build -j$procs - name: verific [SV + VHDL + HIER + EDIF + LIBERTY] run: | - make config-clang - echo "ENABLE_VERIFIC := 1" >> Makefile.conf - echo "ENABLE_VERIFIC_SYSTEMVERILOG := 1" >> Makefile.conf - echo "ENABLE_VERIFIC_VHDL := 1" >> Makefile.conf - echo "ENABLE_VERIFIC_HIER_TREE := 1" >> Makefile.conf - echo "ENABLE_VERIFIC_EDIF := 1" >> Makefile.conf - echo "ENABLE_VERIFIC_LIBERTY := 1" >> Makefile.conf - echo "ENABLE_VERIFIC_YOSYSHQ_EXTENSIONS := 0" >> Makefile.conf - echo "ENABLE_CCACHE := 1" >> Makefile.conf - make -j$procs + 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 + echo 'set(YOSYS_COMPILER_LAUNCHER ccache CACHE STRING "")' >> Configuration.cmake + echo 'set(YOSYS_VERIFIC_DIR "/usr/local/src/verific_lib" CACHE STRING "")' >> Configuration.cmake + echo 'set(YOSYS_VERIFIC_FEATURES "systemverilog;vhdl;hier_tree;edif;liberty" CACHE STRING "")' >> Configuration.cmake + cmake -C Configuration.cmake -B build . + cmake --build build -j$procs diff --git a/.github/workflows/test-verific.yml b/.github/workflows/test-verific.yml index bdd35428a..9143c2f19 100644 --- a/.github/workflows/test-verific.yml +++ b/.github/workflows/test-verific.yml @@ -55,18 +55,19 @@ jobs: - name: Build Yosys run: | - make config-gcov - echo "ENABLE_VERIFIC := 1" >> Makefile.conf - echo "ENABLE_VERIFIC_EDIF := 1" >> Makefile.conf - echo "ENABLE_VERIFIC_LIBERTY := 1" >> Makefile.conf - echo "ENABLE_VERIFIC_YOSYSHQ_EXTENSIONS := 1" >> Makefile.conf - echo "ENABLE_CCACHE := 1" >> Makefile.conf - echo "ENABLE_FUNCTIONAL_TESTS := 1" >> Makefile.conf - make -j$procs ENABLE_LTO=1 + 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 + echo 'set(YOSYS_COMPILER_LAUNCHER ccache CACHE STRING "")' >> Configuration.cmake + echo 'set(YOSYS_ENABLE_COVERAGE ON CACHE BOOL "")' >> Configuration.cmake + echo 'set(YOSYS_VERIFIC_DIR "/usr/local/src/verific_lib" CACHE STRING "")' >> Configuration.cmake + + 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 run: | - make install DESTDIR=${GITHUB_WORKSPACE}/.local PREFIX= + cmake --build build --target install - name: Checkout SBY uses: actions/checkout@v4 @@ -81,7 +82,7 @@ jobs: - name: Run Yosys tests run: | - make -j$procs vanilla-test + make -C tests -j$procs vanilla-test - name: Run Verific specific Yosys tests run: | @@ -96,8 +97,8 @@ jobs: - name: Run coverage if: ${{ github.event_name == 'merge_group' || github.event_name == 'workflow_dispatch' }} run: | - make coverage - make clean_coverage + make -C tests coverage + make -C tests clean_coverage - name: Push coverage if: ${{ github.event_name == 'merge_group' || github.event_name == 'workflow_dispatch' }} @@ -138,19 +139,20 @@ jobs: - name: Build pyosys run: | - make config-clang - echo "ENABLE_VERIFIC := 1" >> Makefile.conf - echo "ENABLE_VERIFIC_EDIF := 1" >> Makefile.conf - echo "ENABLE_VERIFIC_LIBERTY := 1" >> Makefile.conf - echo "ENABLE_VERIFIC_YOSYSHQ_EXTENSIONS := 1" >> Makefile.conf - echo "ENABLE_CCACHE := 1" >> Makefile.conf - echo "ENABLE_PYOSYS := 1" >> Makefile.conf - echo "PYTHON_DESTDIR := /usr/lib/python3/site-packages" >> Makefile.conf - make -j$procs + echo 'set(CMAKE_C_COMPILER clang CACHE STRING "")' >> Configuration.cmake + echo 'set(CMAKE_CXX_COMPILER clang++ CACHE STRING "")' >> Configuration.cmake + echo 'set(YOSYS_COMPILER_LAUNCHER ccache CACHE STRING "")' >> Configuration.cmake + echo 'set(YOSYS_VERIFIC_DIR "/usr/local/src/verific_lib" CACHE STRING "")' >> Configuration.cmake + echo 'set(YOSYS_WITH_PYTHON ON CACHE BOOL "")' >> Configuration.cmake + echo 'set(YOSYS_INSTALL_PYTHON ON CACHE BOOL "")' >> Configuration.cmake + cmake -C Configuration.cmake -B build . \ + -DCMAKE_INSTALL_PREFIX=${GITHUB_WORKSPACE}/.local \ + -DYOSYS_INSTALL_PYTHON_SITEDIR=$GITHUB_WORKSPACE/.local/usr/lib/python3/site-packages + cmake --build build -j$procs - name: Install pyosys run: | - make install DESTDIR=${GITHUB_WORKSPACE}/.local PREFIX= + cmake --build build --target install - name: Run pyosys tests run: | diff --git a/Brewfile b/Brewfile index 2530b323c..838c13e5c 100644 --- a/Brewfile +++ b/Brewfile @@ -12,3 +12,4 @@ brew "bash" brew "llvm" brew "lld" brew "googletest" +brew "tcl-tk" diff --git a/CMakeLists.txt b/CMakeLists.txt index f6b5dfdd4..31875dde1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -100,7 +100,7 @@ elseif (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "/O2 /DEBUG") set(CMAKE_CXX_FLAGS_MINSIZEREL "/Os") add_compile_options(/Zc:__cplusplus) - add_definitions( + add_compile_definitions( _CRT_NONSTDC_NO_DEPRECATE _CRT_SECURE_NO_WARNINGS ) diff --git a/docs/Makefile b/docs/Makefile index 4462e4b9f..6f86fb8c4 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -1,3 +1,5 @@ +include common.mk + # Makefile for Sphinx documentation # @@ -46,10 +48,10 @@ help: .PHONY: clean clean: clean-examples - rm -rf $(BUILDDIR)/* - rm -rf util/__pycache__ - rm -rf source/generated - $(MAKE) -C source/_images clean + @rm -rf $(BUILDDIR)/* + @rm -rf util/__pycache__ + @rm -rf source/generated + @$(MAKE) -C source/_images clean .PHONY: html html: @@ -235,7 +237,7 @@ test: test-examples test-macros FORCE: Makefile-%: FORCE - $(MAKE) -C $(@D) $(*F) + @$(MAKE) -C $(@D) $(*F) CODE_EXAMPLES := $(wildcard source/code_examples/*/Makefile) TEST_EXAMPLES := $(addsuffix -examples,$(CODE_EXAMPLES)) @@ -245,45 +247,42 @@ clean-examples: $(CLEAN_EXAMPLES) examples: $(TEST_EXAMPLES) test-macros: - $(PYTHON) tests/macro_commands.py + @$(PYTHON) tests/macro_commands.py .PHONY: images images: - $(MAKE) -C source/_images - $(MAKE) -C source/_images convert - -BUILD_DIR ?= .. -BUILD_CMD := $(BUILD_DIR)/$(PROGRAM_PREFIX) + @$(MAKE) -C source/_images + @$(MAKE) -C source/_images convert .PHONY: extract extract: - mkdir -p source/generated - $(BUILD_CMD)yosys -q -p 'help -dump-cmds-json source/generated/cmds.json' - $(BUILD_CMD)yosys -q -p 'help -dump-cells-json source/generated/cells.json' + @mkdir -p source/generated + @$(BUILD_CMD)yosys -q -p 'help -dump-cmds-json source/generated/cmds.json' + @$(BUILD_CMD)yosys -q -p 'help -dump-cells-json source/generated/cells.json' - cp ../passes/cmds/chformal.cc source/generated/ - $(BUILD_CMD)yosys -qQT -h 'chformal' -l source/generated/chformal.log + @cp ../passes/cmds/chformal.cc source/generated/ + @$(BUILD_CMD)yosys -qQT -h 'chformal' -l source/generated/chformal.log - mkdir -p source/generated/functional - cp ../backends/functional/smtlib.cc source/generated/functional/ - -cd .. && diff -U 20 backends/functional/smtlib.cc backends/functional/smtlib_rosette.cc \ - > docs/source/generated/functional/rosette.diff + @mkdir -p source/generated/functional + @cp ../backends/functional/smtlib.cc source/generated/functional/ + -@cd .. && diff -U 20 backends/functional/smtlib.cc backends/functional/smtlib_rosette.cc \ + > docs/source/generated/functional/rosette.diff || true - $(BUILD_CMD)yosys --help >source/generated/yosys - $(BUILD_CMD)yosys-smtbmc --help >source/generated/yosys-smtbmc - $(BUILD_CMD)yosys-witness --help >source/generated/yosys-witness - $(BUILD_CMD)yosys-config --help >source/generated/yosys-config - -$(BUILD_CMD)yosys-filterlib --help 2>source/generated/yosys-filterlib + @$(BUILD_CMD)yosys --help >source/generated/yosys + @$(BUILD_CMD)yosys-smtbmc --help >source/generated/yosys-smtbmc + @$(BUILD_CMD)yosys-witness --help >source/generated/yosys-witness + @$(BUILD_CMD)yosys-config --help >source/generated/yosys-config + -@$(BUILD_CMD)yosys-filterlib --help 2>source/generated/yosys-filterlib || true ifeq ($(ABCEXTERNAL),) - -$(BUILD_CMD)yosys-abc --help 2>source/generated/yosys-abc + -@$(BUILD_CMD)yosys-abc --help 2>source/generated/yosys-abc > /dev/null || true endif .PHONY: gen gen: - $(MAKE) examples - $(MAKE) images - $(MAKE) extract + @$(MAKE) examples + @$(MAKE) images + @$(MAKE) extract .PHONY: reqs reqs: - $(PYTHON) -m pip install -r source/requirements.txt + @$(PYTHON) -m pip install -r source/requirements.txt diff --git a/docs/common.mk b/docs/common.mk new file mode 100644 index 000000000..fb0815cb6 --- /dev/null +++ b/docs/common.mk @@ -0,0 +1,9 @@ +ROOT_DIR := $(abspath $(dir $(lastword $(MAKEFILE_LIST)))) +BUILD_DIR ?= $(ROOT_DIR)/../build +BUILD_CMD := $(BUILD_DIR)/$(PROGRAM_PREFIX) + +YOSYS ?= $(BUILD_CMD)yosys +YOSYS_CONFIG ?= $(BUILD_CMD)yosys-config + +export YOSYS +export YOSYS_CONFIG diff --git a/docs/source/_images/Makefile b/docs/source/_images/Makefile index dc75c97c9..16558cc8d 100644 --- a/docs/source/_images/Makefile +++ b/docs/source/_images/Makefile @@ -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 %.pdf: %.dot - $(FAKETIME) dot -Tpdf -Gsize="8.5,11" -o $@ $< + @$(FAKETIME) dot -Tpdf -Gsize="8.5,11" -o $@ $< >/dev/null 2>&1 %.pdf: %.tex - cd $(@D) && $(FAKETIME) pdflatex $(/dev/null 2>&1 %.svg: %.pdf - pdf2svg $< $@ + @pdf2svg $< $@ >/dev/null 2>&1 .PHONY: clean tidy tidy: - rm -f **/*.log **/*.aux + @rm -f **/*.log **/*.aux clean: tidy - rm -rf code_examples - rm -f **/*.pdf **/*.svg + @rm -rf code_examples + @rm -f **/*.pdf **/*.svg diff --git a/docs/source/code_examples/extensions/Makefile b/docs/source/code_examples/extensions/Makefile index 415bfc58e..c2583d2bd 100644 --- a/docs/source/code_examples/extensions/Makefile +++ b/docs/source/code_examples/extensions/Makefile @@ -1,6 +1,4 @@ -PROGRAM_PREFIX := - -YOSYS ?= ../../../../$(PROGRAM_PREFIX)yosys +include ../../../common.mk .PHONY: 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 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 - $(YOSYS) -QTl test0.log_new -m ./my_cmd.so -p 'my_cmd foo bar' -f verilog absval_ref.v - mv test0.log_new test0.log + @$(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 test1.log: my_cmd.so - $(YOSYS) -QTl test1.log_new -m ./my_cmd.so -p 'clean; test1; dump' -f verilog absval_ref.v - mv test1.log_new test1.log + @$(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 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 - $(YOSYS) -QTl test2.log_new -m ./my_cmd.so -p 'hierarchy -top test; test2' -f verilog sigmap_test.v - mv test2.log_new test2.log + @$(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 .PHONY: clean clean: - rm -f *.d *.so *.dot + @rm -f *.d *.so *.dot diff --git a/docs/source/code_examples/fifo/Makefile b/docs/source/code_examples/fifo/Makefile index 4836dac06..eab8349da 100644 --- a/docs/source/code_examples/fifo/Makefile +++ b/docs/source/code_examples/fifo/Makefile @@ -1,6 +1,4 @@ -PROGRAM_PREFIX := - -YOSYS ?= ../../../../$(PROGRAM_PREFIX)yosys +include ../../../common.mk 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 @@ -16,12 +14,12 @@ dots: $(DOTS) $(MAPDOTS) examples: fifo.out fifo.stat $(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 - $(YOSYS) fifo_map.ys + @$(YOSYS) fifo_map.ys >/dev/null 2>&1 .PHONY: clean clean: - rm -f *.dot - rm -f fifo.out fifo.stat + @rm -f *.dot + @rm -f fifo.out fifo.stat diff --git a/docs/source/code_examples/intro/Makefile b/docs/source/code_examples/intro/Makefile index 31df6b623..314ae8a88 100644 --- a/docs/source/code_examples/intro/Makefile +++ b/docs/source/code_examples/intro/Makefile @@ -1,6 +1,4 @@ -PROGRAM_PREFIX := - -YOSYS ?= ../../../../$(PROGRAM_PREFIX)yosys +include ../../../common.mk DOTS = counter_00.dot counter_01.dot counter_02.dot counter_03.dot @@ -10,8 +8,8 @@ dots: $(DOTS) examples: $(DOTS): counter.v counter.ys mycells.lib - $(YOSYS) counter.ys + @$(YOSYS) counter.ys >/dev/null 2>&1 .PHONY: clean clean: - rm -f *.dot + @rm -f *.dot diff --git a/docs/source/code_examples/macc/Makefile b/docs/source/code_examples/macc/Makefile index f06c623a5..6bd7dd116 100644 --- a/docs/source/code_examples/macc/Makefile +++ b/docs/source/code_examples/macc/Makefile @@ -1,6 +1,4 @@ -PROGRAM_PREFIX := - -YOSYS ?= ../../../../$(PROGRAM_PREFIX)yosys +include ../../../common.mk DOTS = macc_simple_xmap.dot macc_xilinx_xmap.dot @@ -10,12 +8,12 @@ dots: $(DOTS) examples: 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 - $(YOSYS) macc_xilinx_test.ys + @$(YOSYS) macc_xilinx_test.ys >/dev/null 2>&1 .PHONY: clean clean: - rm -f *.dot + @rm -f *.dot diff --git a/docs/source/code_examples/opt/Makefile b/docs/source/code_examples/opt/Makefile index aa7962ca5..2a5908822 100644 --- a/docs/source/code_examples/opt/Makefile +++ b/docs/source/code_examples/opt/Makefile @@ -1,6 +1,4 @@ -PROGRAM_PREFIX := - -YOSYS ?= ../../../../$(PROGRAM_PREFIX)yosys +include ../../../common.mk DOT_NAMES = opt_share opt_muxtree opt_merge opt_expr @@ -12,9 +10,9 @@ dots: $(DOTS) examples: %.dot: %.ys - $(YOSYS) $< - gvpack -u -o $@ $*_full.dot + @$(YOSYS) $< >/dev/null 2>&1 + @gvpack -u -o $@ $*_full.dot >/dev/null 2>&1 .PHONY: clean clean: - rm -f *.dot + @rm -f *.dot diff --git a/docs/source/code_examples/scrambler/Makefile b/docs/source/code_examples/scrambler/Makefile index a9b56f8d3..9d7dc3096 100644 --- a/docs/source/code_examples/scrambler/Makefile +++ b/docs/source/code_examples/scrambler/Makefile @@ -1,6 +1,4 @@ -PROGRAM_PREFIX := - -YOSYS ?= ../../../../$(PROGRAM_PREFIX)yosys +include ../../../common.mk .PHONY: all dots examples all: dots examples @@ -8,8 +6,8 @@ dots: scrambler_p01.dot scrambler_p02.dot examples: scrambler_p01.dot scrambler_p02.dot: scrambler.ys scrambler.v - $(YOSYS) scrambler.ys + @$(YOSYS) scrambler.ys >/dev/null 2>&1 .PHONY: clean clean: - rm -f *.dot + @rm -f *.dot diff --git a/docs/source/code_examples/selections/Makefile b/docs/source/code_examples/selections/Makefile index 46a09060a..a171cbf71 100644 --- a/docs/source/code_examples/selections/Makefile +++ b/docs/source/code_examples/selections/Makefile @@ -1,6 +1,4 @@ -PROGRAM_PREFIX := - -YOSYS ?= ../../../../$(PROGRAM_PREFIX)yosys +include ../../../common.mk SUMPROD = sumprod_00 sumprod_01 sumprod_02 sumprod_03 sumprod_04 sumprod_05 SUMPROD_DOTS := $(addsuffix .dot,$(SUMPROD)) @@ -17,18 +15,18 @@ dots: select.dot $(SUMPROD_DOTS) $(MEMDEMO_DOTS) $(SUBMOD_DOTS) examples: sumprod.out select.dot: select.v select.ys - $(YOSYS) select.ys + @$(YOSYS) select.ys >/dev/null 2>&1 $(SUMPROD_DOTS) sumprod.out: sumprod.v sumprod.ys - $(YOSYS) sumprod.ys + @$(YOSYS) sumprod.ys >/dev/null 2>&1 $(MEMDEMO_DOTS): memdemo.v memdemo.ys - $(YOSYS) memdemo.ys + @$(YOSYS) memdemo.ys >/dev/null 2>&1 $(SUBMOD_DOTS): memdemo.v submod.ys - $(YOSYS) submod.ys + @$(YOSYS) submod.ys >/dev/null 2>&1 .PHONY: clean clean: - rm -rf *.dot - rm -f sumprod.out + @rm -rf *.dot + @rm -f sumprod.out diff --git a/docs/source/code_examples/show/Makefile b/docs/source/code_examples/show/Makefile index 649691299..5838cb3cd 100644 --- a/docs/source/code_examples/show/Makefile +++ b/docs/source/code_examples/show/Makefile @@ -1,6 +1,4 @@ -PROGRAM_PREFIX := - -YOSYS ?= ../../../../$(PROGRAM_PREFIX)yosys +include ../../../common.mk EXAMPLE = example_first example_second example_third EXAMPLE_DOTS := $(addsuffix .dot,$(EXAMPLE)) @@ -14,18 +12,18 @@ dots: splice.dot $(EXAMPLE_DOTS) $(CMOS_DOTS) examples: example.out 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 - $(YOSYS) example.ys + @$(YOSYS) example.ys >/dev/null 2>&1 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 - $(YOSYS) cmos.ys + @$(YOSYS) cmos.ys >/dev/null 2>&1 .PHONY: clean clean: - rm -rf *.dot - rm -f example.out + @rm -rf *.dot + @rm -f example.out diff --git a/docs/source/code_examples/stubnets/Makefile b/docs/source/code_examples/stubnets/Makefile index 17ab92bda..17ade23df 100644 --- a/docs/source/code_examples/stubnets/Makefile +++ b/docs/source/code_examples/stubnets/Makefile @@ -1,6 +1,4 @@ -PROGRAM_PREFIX := - -YOSYS ?= ../../../../$(PROGRAM_PREFIX)yosys +include ../../../common.mk .PHONY: all dots examples all: dots examples @@ -9,15 +7,15 @@ examples: .PHONY: test test: stubnets.so - $(YOSYS) -ql test1.log -m ./stubnets.so test.v -p "stubnets" - $(YOSYS) -ql test2.log -m ./stubnets.so test.v -p "opt; stubnets" - $(YOSYS) -ql test3.log -m ./stubnets.so test.v -p "techmap; opt; stubnets -report_bits" - tail test1.log test2.log test3.log + @$(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" >/dev/null 2>&1 + @$(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 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 clean: - rm -f test1.log test2.log test3.log - rm -f stubnets.so stubnets.d + @rm -f test1.log test2.log test3.log + @rm -f stubnets.so stubnets.d diff --git a/docs/source/code_examples/synth_flow/Makefile b/docs/source/code_examples/synth_flow/Makefile index 0dd37ed4d..583c6a421 100644 --- a/docs/source/code_examples/synth_flow/Makefile +++ b/docs/source/code_examples/synth_flow/Makefile @@ -1,12 +1,9 @@ +include ../../../common.mk DOT_TARGETS += proc_01 proc_02 proc_03 DOT_TARGETS += memory_01 memory_02 DOT_TARGETS += techmap_01 -PROGRAM_PREFIX := - -YOSYS ?= ../../../../$(PROGRAM_PREFIX)yosys - DOTS = $(addsuffix .dot,$(DOT_TARGETS)) .PHONY: all dots examples @@ -15,9 +12,9 @@ dots: $(DOTS) examples: %.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 clean: - rm -f *.dot + @rm -f *.dot diff --git a/docs/source/code_examples/techmap/Makefile b/docs/source/code_examples/techmap/Makefile index 6736b0f1d..4da0baf93 100644 --- a/docs/source/code_examples/techmap/Makefile +++ b/docs/source/code_examples/techmap/Makefile @@ -1,6 +1,4 @@ -PROGRAM_PREFIX := - -YOSYS ?= ../../../../$(PROGRAM_PREFIX)yosys +include ../../../common.mk .PHONY: all dots examples all: dots examples @@ -8,20 +6,20 @@ dots: red_or3x1.dot sym_mul.dot mymul.dot mulshift.dot addshift.dot examples: red_or3x1.dot: red_or3x1_* - $(YOSYS) red_or3x1_test.ys + @$(YOSYS) red_or3x1_test.ys >/dev/null 2>&1 sym_mul.dot: sym_mul_* - $(YOSYS) sym_mul_test.ys + @$(YOSYS) sym_mul_test.ys >/dev/null 2>&1 mymul.dot: mymul_* - $(YOSYS) mymul_test.ys + @$(YOSYS) mymul_test.ys >/dev/null 2>&1 mulshift.dot: mulshift_* - $(YOSYS) mulshift_test.ys + @$(YOSYS) mulshift_test.ys >/dev/null 2>&1 addshift.dot: addshift_* - $(YOSYS) addshift_test.ys + @$(YOSYS) addshift_test.ys >/dev/null 2>&1 .PHONY: clean clean: - rm -f *.dot + @rm -f *.dot diff --git a/docs/tests/macro_commands.py b/docs/tests/macro_commands.py index 7ceb092d8..acd02e674 100755 --- a/docs/tests/macro_commands.py +++ b/docs/tests/macro_commands.py @@ -5,6 +5,7 @@ from pathlib import Path import re import subprocess import sys +import os # basic logging setup 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" 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}" raise_error = False diff --git a/frontends/verific/verific.cc b/frontends/verific/verific.cc index 6b876c0f1..10feac3bc 100644 --- a/frontends/verific/verific.cc +++ b/frontends/verific/verific.cc @@ -1885,9 +1885,8 @@ void VerificImporter::import_netlist(RTLIL::Design *design, Netlist *nl, std::ma pool sva_assumes; pool sva_covers; pool sva_triggers; -#endif - pool past_ffs; +#endif FOREACH_INSTANCE_OF_NETLIST(nl, mi, inst) { @@ -2849,6 +2848,7 @@ std::set import_tops(const char* work, std::map top_mod_names; Array *netlists = nullptr; + (void)top; #ifdef VERIFIC_VHDL_SUPPORT VhdlLibrary *vhdl_lib = vhdl_file::GetLibrary(work, 1); diff --git a/kernel/tclapi.cc b/kernel/tclapi.cc index 9866f5c98..2479b7e3c 100644 --- a/kernel/tclapi.cc +++ b/kernel/tclapi.cc @@ -206,13 +206,16 @@ bool mp_int_to_const(mp_int *a, Const &b, bool is_signed) return false; if (negative) { - mp_neg(a, a); - mp_sub_d(a, 1, a); + if (mp_neg(a, a) != MP_OKAY) + return false; + if (mp_sub_d(a, 1, a) != MP_OKAY) + return false; } std::vector buf; 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); for (int i = 0; i < mp_count_bits(a);) { diff --git a/tests/Makefile b/tests/Makefile index 05e5410b7..719777ef6 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -1,7 +1,3 @@ -ifneq ($(wildcard ../Makefile.conf),) -include ../Makefile.conf -endif - OVERRIDE_MAIN=1 include ./common.mk @@ -125,3 +121,16 @@ clean: @rm -f ./tools/cmp_tbdata @rm -f $(addsuffix /Makefile,$(MK_TEST_DIRS)) @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) diff --git a/tests/common.mk b/tests/common.mk index ef6982514..2c7b575ca 100644 --- a/tests/common.mk +++ b/tests/common.mk @@ -1,5 +1,6 @@ ROOT_DIR := $(abspath $(dir $(lastword $(MAKEFILE_LIST)))) -BUILD_DIR ?= $(ROOT_DIR)/.. +BUILD_DIR ?= $(realpath $(ROOT_DIR)/../build) +SRC_DIR := $(realpath $(ROOT_DIR)/..) SBY ?= sby YOSYS ?= $(BUILD_DIR)/yosys @@ -8,13 +9,20 @@ YOSYS_FILTERLIB ?= $(BUILD_DIR)/yosys-filterlib YOSYS_CONFIG ?= $(BUILD_DIR)/yosys-config YOSYS_SMTBMC ?= $(BUILD_DIR)/yosys-smtbmc 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 YOSYS export YOSYS_CONFIG export YOSYS_SMTBMC export ABC export SBY export YOSYS_MAX_THREADS +export LLVM_PROFILE_FILE +export LLVM_PROFILE_FILE_BUFFER_SIZE=0 all: diff --git a/tests/various/ezcmdline_plugin.sh b/tests/various/ezcmdline_plugin.sh index 91579d7cb..102fba06b 100644 --- a/tests/various/ezcmdline_plugin.sh +++ b/tests/various/ezcmdline_plugin.sh @@ -7,6 +7,6 @@ chmod +x "$DIR/ezcmdline_dummy_solver" CXXFLAGS=$(${YOSYS_CONFIG} --cxxflags) DATDIR=$(${YOSYS_CONFIG} --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} -m "$DIR/ezcmdline_plugin.so" -p "ezcmdline_test -cmd $DIR/ezcmdline_dummy_solver" | grep -q "ezcmdline_test passed!" diff --git a/tests/various/plugin.sh b/tests/various/plugin.sh index 4e645ee17..d7ea5f501 100644 --- a/tests/various/plugin.sh +++ b/tests/various/plugin.sh @@ -4,7 +4,7 @@ rm -rf plugin_search CXXFLAGS=$(${YOSYS_CONFIG} --cxxflags) DATDIR=$(${YOSYS_CONFIG} --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} -m ./plugin.so -p "test" | grep -q "Plugin test passed!" mkdir -p plugin_search diff --git a/tests/xprop/test.py b/tests/xprop/test.py index 94c52aecc..6a6bf5c86 100644 --- a/tests/xprop/test.py +++ b/tests/xprop/test.py @@ -122,7 +122,7 @@ def vcdextract(signals, on_change, file, output, limit=None): 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")]