diff --git a/.github/workflows/test-compile.yml b/.github/workflows/test-compile.yml index 3093e8dfd..b950aa1c0 100644 --- a/.github/workflows/test-compile.yml +++ b/.github/workflows/test-compile.yml @@ -43,7 +43,7 @@ jobs: - ubuntu-latest compiler: # oldest supported - - 'clang-14' + - 'clang-16' - 'gcc-11' # newest, make sure to update maximum standard step to match - 'clang-22' @@ -73,7 +73,6 @@ jobs: uses: aminya/setup-cpp@v1 with: compiler: ${{ matrix.compiler }} - gcc: ${{ (matrix.os == 'ubuntu-latest' && matrix.compiler == 'clang-14') && '12' || '' }} - name: Tool versions shell: bash @@ -81,11 +80,6 @@ jobs: $CC --version $CXX --version - - name: Fix clang-14 toolchain - if: matrix.os == 'ubuntu-latest' && matrix.compiler == 'clang-14' - run: | - echo 'CXXFLAGS=--gcc-toolchain=/usr -isystem /usr/include/c++/12 -isystem /usr/include/x86_64-linux-gnu/c++/12' >> $GITHUB_ENV - # minimum standard - name: Build C++20 shell: bash diff --git a/.gitmodules b/.gitmodules index 9f18be11e..e8f7ee3c2 100644 --- a/.gitmodules +++ b/.gitmodules @@ -5,3 +5,12 @@ [submodule "cxxopts"] path = libs/cxxopts url = https://github.com/jarro2783/cxxopts +[submodule "slang"] + path = libs/slang + url = https://github.com/MikePopoloski/slang +[submodule "fmt"] + path = libs/fmt + url = https://github.com/fmtlib/fmt +[submodule "yosys-slang"] + path = frontends/slang/lib + url = https://github.com/povik/yosys-slang diff --git a/CMakeLists.txt b/CMakeLists.txt index a37b52ebe..dad7277f7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -53,6 +53,7 @@ option(YOSYS_WITHOUT_ZLIB "Disable zlib integration" OFF) option(YOSYS_WITHOUT_LIBFFI "Disable libffi integration" OFF) option(YOSYS_WITHOUT_READLINE "Disable readline integration" OFF) option(YOSYS_WITHOUT_EDITLINE "Disable editline integration" OFF) +option(YOSYS_WITHOUT_SLANG "Disable Slang integration" OFF) option(YOSYS_WITHOUT_TCL "Disable Tcl integration" OFF) option(YOSYS_WITH_PYTHON "Enable Python integration" OFF) @@ -308,6 +309,7 @@ condition(YOSYS_ENABLE_EDITLINE editline_FOUND AND NOT YOSYS_WITHOUT_EDITLINE AN condition(YOSYS_ENABLE_TCL tcl_FOUND AND libtommath_FOUND AND NOT YOSYS_WITHOUT_TCL) condition(YOSYS_ENABLE_PYTHON Python3Devel_FOUND AND PyosysEnv_FOUND AND YOSYS_WITH_PYTHON) condition(YOSYS_ENABLE_VERIFIC YOSYS_VERIFIC_DIR AND zlib_FOUND) +condition(YOSYS_ENABLE_SLANG NOT YOSYS_WITHOUT_SLANG) # Describe dependencies and features # CMake 4.0 would let us use proper conditions, but that's too new for now. diff --git a/frontends/CMakeLists.txt b/frontends/CMakeLists.txt index cc4c02d88..6e6eda488 100644 --- a/frontends/CMakeLists.txt +++ b/frontends/CMakeLists.txt @@ -6,5 +6,6 @@ add_subdirectory(json) add_subdirectory(liberty) add_subdirectory(rpc) add_subdirectory(rtlil) +add_subdirectory(slang) add_subdirectory(verific) add_subdirectory(verilog) diff --git a/frontends/slang/CMakeLists.txt b/frontends/slang/CMakeLists.txt new file mode 100644 index 000000000..850b8d26f --- /dev/null +++ b/frontends/slang/CMakeLists.txt @@ -0,0 +1,39 @@ +include(lib/cmake/GitRevision.cmake) +git_rev_parse(YOSYS_SLANG_REVISION ${CMAKE_CURRENT_SOURCE_DIR}/lib) +git_rev_parse(SLANG_REVISION ${PROJECT_SOURCE_DIR}/libs/slang) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/lib/src/version.h.in ${CMAKE_CURRENT_BINARY_DIR}/version.h) + +yosys_frontend(slang + lib/src/abort_helpers.cc + lib/src/addressing.cc + lib/src/async_pattern.cc + lib/src/async_pattern.h + lib/src/blackboxes.cc + lib/src/builder.cc + lib/src/cases.cc + lib/src/cases.h + lib/src/diag.cc + lib/src/diag.h + lib/src/initialization.cc + lib/src/lvalue.cc + lib/src/memory.h + lib/src/naming.cc + lib/src/procedural.cc + lib/src/slang_frontend.cc + lib/src/slang_frontend.h + lib/src/statements.h + lib/src/sva.cc + lib/src/variables.cc + lib/src/variables.h + ${CMAKE_CURRENT_BINARY_DIR}/version.h + ENABLE_IF + YOSYS_ENABLE_SLANG + INCLUDE_DIRS + ${CMAKE_CURRENT_BINARY_DIR} + LIBRARIES + $<${YOSYS_ENABLE_SLANG}:slang::slang> + fmt::fmt +) + +# TODO: remove next line when warnings/errors are fixed +set_target_properties(yosys_read_slang PROPERTIES YOSYS_IS_ABC ON) diff --git a/frontends/slang/lib b/frontends/slang/lib new file mode 160000 index 000000000..325153096 --- /dev/null +++ b/frontends/slang/lib @@ -0,0 +1 @@ +Subproject commit 3251530961e0e8a8054098c9bb8376474958944a diff --git a/libs/CMakeLists.txt b/libs/CMakeLists.txt index ae13387c0..8a9bb22ed 100644 --- a/libs/CMakeLists.txt +++ b/libs/CMakeLists.txt @@ -7,3 +7,18 @@ add_subdirectory(json11) add_subdirectory(minisat) add_subdirectory(sha1) add_subdirectory(subcircuit) +block() + set(BUILD_SHARED_LIBS OFF) + include(FetchContent) + option(FMT_INSTALL OFF) + FetchContent_Declare( + fmt + EXCLUDE_FROM_ALL + SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/fmt + ) + FetchContent_MakeAvailable(fmt) + if (NOT YOSYS_WITHOUT_SLANG) + set(SLANG_USE_MIMALLOC OFF) + add_subdirectory(slang) + endif() +endblock() diff --git a/libs/fmt b/libs/fmt new file mode 160000 index 000000000..553ec11ec --- /dev/null +++ b/libs/fmt @@ -0,0 +1 @@ +Subproject commit 553ec11ec06fbe0beebfbb45f9dc3c9eabd83d28 diff --git a/libs/slang b/libs/slang new file mode 160000 index 000000000..f04e81565 --- /dev/null +++ b/libs/slang @@ -0,0 +1 @@ +Subproject commit f04e81565793c768b747a8fd058f3e7aeceee1b5