diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 708f6e4ac..2c4d36a83 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -34,7 +34,7 @@ jobs: 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 -C Configuration.cmake -B build . -DYOSYS_WITHOUT_ABC=ON -DYOSYS_WITHOUT_SLANG=ON cmake --build build -j6 - name: Perform CodeQL Analysis diff --git a/.github/workflows/test-build.yml b/.github/workflows/test-build.yml index 33205aa83..566aad3c7 100644 --- a/.github/workflows/test-build.yml +++ b/.github/workflows/test-build.yml @@ -93,7 +93,7 @@ jobs: shell: bash run: | rm -rf build - cmake -B build . -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_BUILD_TYPE=Release -DYOSYS_COMPILER_LAUNCHER=ccache + cmake -B build . -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_BUILD_TYPE=Release -DYOSYS_COMPILER_LAUNCHER=ccache -DYOSYS_USE_BUNDLED_LIBS=ON cmake --build build -j$procs ctest --test-dir build/tests/unit diff --git a/CMakeLists.txt b/CMakeLists.txt index bb3766fd7..3745ea0fe 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -57,6 +57,8 @@ option(YOSYS_WITHOUT_SLANG "Disable Slang integration" OFF) option(YOSYS_WITHOUT_TCL "Disable Tcl integration" OFF) option(YOSYS_WITH_PYTHON "Enable Python integration" OFF) +option(YOSYS_USE_BUNDLED_LIBS "Use bundled third-party libraries" OFF) + set(YOSYS_VERIFIC_DIR "" CACHE FILEPATH "Path to the Verific source code (empty to disable)") set(YOSYS_VERIFIC_COMPONENTS "" CACHE STRING "List of Verific components to link (empty for autodetect)") diff --git a/frontends/CMakeLists.txt b/frontends/CMakeLists.txt index 6e6eda488..983fa2fd9 100644 --- a/frontends/CMakeLists.txt +++ b/frontends/CMakeLists.txt @@ -6,6 +6,8 @@ add_subdirectory(json) add_subdirectory(liberty) add_subdirectory(rpc) add_subdirectory(rtlil) -add_subdirectory(slang) +if (NOT YOSYS_WITHOUT_SLANG) + add_subdirectory(slang) +endif() add_subdirectory(verific) add_subdirectory(verilog) diff --git a/frontends/slang/CMakeLists.txt b/frontends/slang/CMakeLists.txt index dae714de9..83bf98573 100644 --- a/frontends/slang/CMakeLists.txt +++ b/frontends/slang/CMakeLists.txt @@ -35,5 +35,4 @@ yosys_frontend(slang ${CMAKE_CURRENT_BINARY_DIR} LIBRARIES $<${YOSYS_ENABLE_SLANG}:slang::slang> - fmt::fmt ) diff --git a/frontends/slang/lib b/frontends/slang/lib index 2caaaefa8..3dddccd47 160000 --- a/frontends/slang/lib +++ b/frontends/slang/lib @@ -1 +1 @@ -Subproject commit 2caaaefa831a1d548a681268ccf3eea925ca1312 +Subproject commit 3dddccd478618d68f8a5e160fb4b5783c4da35d4 diff --git a/kernel/version.cc.in b/kernel/version.cc.in index b6d1139d6..399f67cec 100644 --- a/kernel/version.cc.in +++ b/kernel/version.cc.in @@ -1,4 +1,5 @@ namespace Yosys { const char *yosys_version_str = "@YOSYS_BUILD_INFO@"; const char *yosys_git_hash_str = "@YOSYS_CHECKOUT_INFO@"; + const char *yosys_build_datetime_str = __DATE__ " " __TIME__; } diff --git a/kernel/yosys.h b/kernel/yosys.h index 9f5a16a9c..fd33a4767 100644 --- a/kernel/yosys.h +++ b/kernel/yosys.h @@ -82,6 +82,7 @@ extern std::set yosys_input_files, yosys_output_files; // from kernel/version_*.o (cc source generated from Makefile) extern const char *yosys_version_str; extern const char *yosys_git_hash_str; +extern const char *yosys_build_datetime_str; const char* yosys_maybe_version(); // from passes/cmds/design.cc diff --git a/libs/CMakeLists.txt b/libs/CMakeLists.txt index 5ea08ef9d..cb81b3af2 100644 --- a/libs/CMakeLists.txt +++ b/libs/CMakeLists.txt @@ -12,28 +12,49 @@ block() include(FetchContent) set(FETCHCONTENT_FULLY_DISCONNECTED ON) - option(FMT_INSTALL OFF) - FetchContent_Declare( - fmt - EXCLUDE_FROM_ALL - SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/fmt - ) - FetchContent_MakeAvailable(fmt) + if(NOT YOSYS_USE_BUNDLED_LIBS) + find_package(fmt 12.2 QUIET) + endif() + if(fmt_FOUND) + set(SLANG_USE_SYSTEM_FMT ON) + else() + option(FMT_INSTALL OFF) + FetchContent_Declare( + fmt + EXCLUDE_FROM_ALL + SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/fmt + ) + FetchContent_MakeAvailable(fmt) + endif() - FetchContent_Declare( - tomlplusplus - EXCLUDE_FROM_ALL - SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/tomlplusplus - ) - FetchContent_MakeAvailable(tomlplusplus) + if(NOT YOSYS_USE_BUNDLED_LIBS) + find_package(tomlplusplus 3.4 QUIET) + endif() + if(tomlplusplus_FOUND) + set(SLANG_USE_SYSTEM_TOMLPLUSPLUS ON) + else() + FetchContent_Declare( + tomlplusplus + EXCLUDE_FROM_ALL + SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/tomlplusplus + ) + FetchContent_MakeAvailable(tomlplusplus) + endif() - FetchContent_Declare( - boost_regex - EXCLUDE_FROM_ALL - SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/boost_regex - SOURCE_SUBDIR _no_build_ - ) - FetchContent_MakeAvailable(boost_regex) + if(NOT YOSYS_USE_BUNDLED_LIBS) + find_package(Boost 1.87.0 CONFIG QUIET) + endif() + if(Boost_FOUND) + set(SLANG_USE_SYSTEM_BOOST ON) + else() + FetchContent_Declare( + boost_regex + EXCLUDE_FROM_ALL + SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/boost_regex + SOURCE_SUBDIR _no_build_ + ) + FetchContent_MakeAvailable(boost_regex) + endif() if (NOT YOSYS_WITHOUT_SLANG) set(SLANG_USE_MIMALLOC OFF) diff --git a/libs/slang b/libs/slang index 617575096..8acc660a2 160000 --- a/libs/slang +++ b/libs/slang @@ -1 +1 @@ -Subproject commit 6175750969f17289695f94be5105f6006c82eb61 +Subproject commit 8acc660a20b70de48ecec1c7471863e6f4b3ae6f diff --git a/passes/techmap/dfflibmap.cc b/passes/techmap/dfflibmap.cc index e8fc6fc12..b2caae460 100644 --- a/passes/techmap/dfflibmap.cc +++ b/passes/techmap/dfflibmap.cc @@ -272,17 +272,18 @@ static void find_cell(std::vector cells, IdString cell_type, if (!parse_next_state(cell, ff->find("next_state"), cell_next_pin, cell_next_pol, cell_enable_pin, cell_enable_pol) || (has_enable && (cell_enable_pin.empty() || cell_enable_pol != enapol))) continue; + bool cell_rstval = rstval; if (has_reset && !cell_next_pol) { // next_state is negated // we later propagate this inversion to the output, // which requires the negation of the reset value - rstval = !rstval; + cell_rstval = !rstval; } - if (has_reset && rstval == false) { + if (has_reset && cell_rstval == false) { if (!parse_pin(cell, ff->find("clear"), cell_rst_pin, cell_rst_pol) || cell_rst_pol != rstpol) continue; } - if (has_reset && rstval == true) { + if (has_reset && cell_rstval == true) { if (!parse_pin(cell, ff->find("preset"), cell_rst_pin, cell_rst_pol) || cell_rst_pol != rstpol) continue; } diff --git a/passes/techmap/liberty_cache.h b/passes/techmap/liberty_cache.h index 01a7bf395..baab8f8be 100644 --- a/passes/techmap/liberty_cache.h +++ b/passes/techmap/liberty_cache.h @@ -49,6 +49,8 @@ inline std::string convert_liberty_files_to_merged_scl(const std::vector