diff --git a/CMakeLists.txt b/CMakeLists.txt index 2ed16dc7d8f..fe6e81a5701 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,7 @@ cmake_minimum_required(VERSION 3.13) project(yosys LANGUAGES CXX C) set(YOSYS_VER "0.50+1") +set(CMAKE_POSITION_INDEPENDENT_CODE ON) # features (the more the better) @@ -53,16 +54,28 @@ if (ENABLE_ABC) add_subdirectory(abc EXCLUDE_FROM_ALL) add_custom_command( - OUTPUT ${CMAKE_BINARY_DIR}/yosys-abc + OUTPUT ${yosys_BINARY_DIR}/yosys-abc DEPENDS abc # Depend on the target, not the generator expression - COMMAND ${CMAKE_COMMAND} -E copy $ ${CMAKE_BINARY_DIR}/yosys-abc + COMMAND ${CMAKE_COMMAND} -E copy $ ${yosys_BINARY_DIR}/yosys-abc ) - add_custom_target(yosys-abc-copy ALL DEPENDS ${CMAKE_BINARY_DIR}/yosys-abc) + add_custom_target(yosys-abc-copy ALL DEPENDS ${yosys_BINARY_DIR}/yosys-abc) +endif() + +get_property(cxx_features GLOBAL PROPERTY CMAKE_CXX_KNOWN_FEATURES) +if(NOT CMAKE_CXX_STANDARD) + set(CMAKE_CXX_STANDARD 23) + message(STATUS "C++23 support enabled") +else() + set(CMAKE_CXX_STANDARD_REQUIRED ON) + message(STATUS "C++ standard set to ${CMAKE_CXX_STANDARD}") +endif() + +# Ensure C++17 support is available +if(NOT "cxx_std_17" IN_LIST cxx_features) + message(FATAL_ERROR "C++17 support is required but not available") endif() -set(CMAKE_CXX_STANDARD ${CXXSTD}) -set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) set(CMAKE_C_STANDARD 99) @@ -73,13 +86,15 @@ find_package(FLEX 2.6 REQUIRED) find_package(BISON 3.0 REQUIRED) find_package(Python3 3.5 REQUIRED COMPONENTS Interpreter) -add_executable(yosys) -#target_include_directories(yosys PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) -#target_include_directories(yosys PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) -#target_compile_definitions(yosys PRIVATE _YOSYS_) +add_library(yosys_obj OBJECT) include_directories(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}) +target_include_directories(yosys_obj PUBLIC + ${CMAKE_CURRENT_BINARY_DIR} + ${CMAKE_CURRENT_SOURCE_DIR} +) add_compile_definitions(_YOSYS_) +target_compile_definitions(yosys_obj PUBLIC _YOSYS_) if (ENABLE_READLINE AND ENABLE_EDITLINE) message(FATAL_ERROR "Not possible to enable both ENABLE_READLINE and ENABLE_EDITLINE") @@ -88,26 +103,26 @@ endif() if (ENABLE_READLINE) find_package(Readline REQUIRED) add_compile_definitions(YOSYS_ENABLE_READLINE) - target_link_libraries(yosys PRIVATE ${READLINE_LIBRARY}) + target_link_libraries(yosys_obj PUBLIC ${READLINE_LIBRARY}) endif() if (ENABLE_EDITLINE) find_package(Editline REQUIRED) add_compile_definitions(YOSYS_ENABLE_EDITLINE) - target_link_libraries(yosys PRIVATE ${EDITLINE_LIBRARY}) + target_link_libraries(yosys_obj PUBLIC ${EDITLINE_LIBRARY}) endif() if (ENABLE_TCL) find_package(TCL 8.6 REQUIRED) add_compile_definitions(YOSYS_ENABLE_TCL) - target_include_directories(yosys PRIVATE ${TCL_INCLUDE_PATH}) - target_link_libraries(yosys PRIVATE ${TCL_LIBRARY}) + target_include_directories(yosys_obj PUBLIC ${TCL_INCLUDE_PATH}) + target_link_libraries(yosys_obj PUBLIC ${TCL_LIBRARY}) endif() if (ENABLE_ZLIB) find_package(ZLIB REQUIRED) add_compile_definitions(YOSYS_ENABLE_ZLIB) - target_link_libraries(yosys PRIVATE ZLIB::ZLIB) + target_link_libraries(yosys_obj PUBLIC ZLIB::ZLIB) endif() if (ENABLE_COVER) @@ -140,8 +155,8 @@ if (ENABLE_ABC) add_compile_definitions(YOSYS_ENABLE_ABC) if (LINK_ABC) add_compile_definitions(YOSYS_LINK_ABC) - target_link_libraries(yosys PRIVATE $) - add_dependencies(yosys libabc) + target_link_libraries(yosys_obj PUBLIC $) + add_dependencies(yosys_obj libabc) endif() endif() @@ -149,7 +164,7 @@ if (ENABLE_PLUGINS) find_package(LibFFI REQUIRED) add_compile_definitions(YOSYS_ENABLE_PLUGINS) include_directories(${LIBFFI_INCLUDE_DIR}) - target_link_libraries(yosys PRIVATE ${LIBFFI_LIBRARY}) + target_link_libraries(yosys_obj PUBLIC ${LIBFFI_LIBRARY}) endif() if (DISABLE_SPAWN) @@ -283,3 +298,81 @@ if (ENABLE_ZLIB) endif() set_property(SOURCE kernel/log.cc APPEND PROPERTY COMPILE_DEFINITIONS YOSYS_SRC="${PROJECT_SOURCE_DIR}") + +if (ENABLE_LIBYOSYS) + add_library(yosys_shared SHARED + $ + ) + target_link_libraries(yosys_shared PUBLIC yosys_obj) + # set_target_properties(yosys_shared PROPERTIES OUTPUT_NAME yosys) + install(TARGETS yosys_shared + LIBRARY DESTINATION lib) +endif() + +add_executable(yosys_exe + kernel/driver.cc + $ +) +target_link_libraries(yosys_exe PUBLIC yosys_obj) +set_target_properties(yosys_exe PROPERTIES OUTPUT_NAME yosys) +install(TARGETS yosys_exe + RUNTIME DESTINATION bin) + +#### yosys-config setup #### +include(cmake/YosysConfig.cmake) + +#### INSTALL #### +if (ENABLE_ABC) + install(PROGRAMS $ + DESTINATION bin + RENAME yosys-abc) +endif() + +install(PROGRAMS ${yosys_BINARY_DIR}/yosys-config DESTINATION bin) + +#### TESTING #### +include(cmake/TestFiles.cmake) +enable_testing() + +set(_YOSYS_TEST_ENV + "PATH=${PROJECT_SOURCE_DIR}:$ENV{PATH};") + +foreach(dir IN LISTS SH_TEST_DIRS) + string(REPLACE "/" "_" name "${dir}") + add_test( + NAME seed-tests.${name} + COMMAND bash -c + "cd \"${PROJECT_SOURCE_DIR}/${dir}\" && bash run-test.sh ${SEEDOPT}" + ) + set_tests_properties(seed-tests.${name} PROPERTIES + ENVIRONMENT "${_YOSYS_TEST_ENV}" + DEPENDS yosys_exe) +endforeach() + +foreach(dir IN LISTS SH_ABC_TEST_DIRS) + string(REPLACE "/" "_" name "${dir}") + add_test( + NAME abcopt-tests.${name} + COMMAND bash -c + "cd \"${PROJECT_SOURCE_DIR}/${dir}\" && bash run-test.sh ${ABCOPT} ${SEEDOPT}" + ) + set_tests_properties(abcopt-tests.${name} PROPERTIES + ENVIRONMENT "${_YOSYS_TEST_ENV}" + DEPENDS yosys_exe) +endforeach() + +foreach(dir IN LISTS MK_TEST_DIRS) + string(REPLACE "/" "_" name "${dir}") + add_test( + NAME makefile-tests.${name} + COMMAND bash -c + " + cd \"${PROJECT_SOURCE_DIR}/${dir}\" && + bash run-test.sh && + ${CMAKE_MAKE_PROGRAM} -f run-test.mk + " + ) + set_tests_properties(makefile-tests.${name} PROPERTIES + ENVIRONMENT "${_YOSYS_TEST_ENV}" + DEPENDS yosys_exe) +endforeach() diff --git a/backends/aiger/CMakeLists.txt b/backends/aiger/CMakeLists.txt index 98ba99e0f5f..946cce7b2c4 100644 --- a/backends/aiger/CMakeLists.txt +++ b/backends/aiger/CMakeLists.txt @@ -1,8 +1,9 @@ -add_library(yosys_backends_aiger INTERFACE) -target_sources(yosys_backends_aiger INTERFACE + +add_library(yosys_backends_aiger OBJECT aiger.cc xaiger.cc ) -target_link_libraries(yosys PRIVATE yosys_backends_aiger) +target_link_libraries(yosys_obj PUBLIC yosys_backends_aiger) +target_sources(yosys_obj PUBLIC $) \ No newline at end of file diff --git a/backends/aiger2/CMakeLists.txt b/backends/aiger2/CMakeLists.txt index b207278d27d..3edc2943c20 100644 --- a/backends/aiger2/CMakeLists.txt +++ b/backends/aiger2/CMakeLists.txt @@ -1,7 +1,8 @@ -add_library(yosys_backends_aiger2 INTERFACE) -target_sources(yosys_backends_aiger2 INTERFACE + +add_library(yosys_backends_aiger2 OBJECT aiger.cc ) -target_link_libraries(yosys PRIVATE yosys_backends_aiger2) +target_link_libraries(yosys_obj PUBLIC yosys_backends_aiger2) +target_sources(yosys_obj PUBLIC $) diff --git a/backends/blif/CMakeLists.txt b/backends/blif/CMakeLists.txt index e662b3ba3f0..3614aafc88a 100644 --- a/backends/blif/CMakeLists.txt +++ b/backends/blif/CMakeLists.txt @@ -1,7 +1,8 @@ -add_library(yosys_backends_blif INTERFACE) -target_sources(yosys_backends_blif INTERFACE + +add_library(yosys_backends_blif OBJECT blif.cc ) -target_link_libraries(yosys PRIVATE yosys_backends_blif) +target_link_libraries(yosys_obj PUBLIC yosys_backends_blif) +target_sources(yosys_obj PUBLIC $) diff --git a/backends/btor/CMakeLists.txt b/backends/btor/CMakeLists.txt index 269db2a8909..87f29d1d316 100644 --- a/backends/btor/CMakeLists.txt +++ b/backends/btor/CMakeLists.txt @@ -1,7 +1,8 @@ -add_library(yosys_backends_btor INTERFACE) -target_sources(yosys_backends_btor INTERFACE + +add_library(yosys_backends_btor OBJECT btor.cc ) -target_link_libraries(yosys PRIVATE yosys_backends_btor) +target_link_libraries(yosys_obj PUBLIC yosys_backends_btor) +target_sources(yosys_obj PUBLIC $) diff --git a/backends/cxxrtl/CMakeLists.txt b/backends/cxxrtl/CMakeLists.txt index 1ad64817049..c782bfe206a 100644 --- a/backends/cxxrtl/CMakeLists.txt +++ b/backends/cxxrtl/CMakeLists.txt @@ -1,10 +1,11 @@ -add_library(yosys_backends_cxxrtl INTERFACE) -target_sources(yosys_backends_cxxrtl INTERFACE + +add_library(yosys_backends_cxxrtl OBJECT cxxrtl_backend.cc ) -target_link_libraries(yosys PRIVATE yosys_backends_cxxrtl) +target_link_libraries(yosys_obj PUBLIC yosys_backends_cxxrtl) +target_sources(yosys_obj PUBLIC $) add_include_file("backends/cxxrtl/runtime/cxxrtl" "runtime/cxxrtl/cxxrtl.h") add_include_file("backends/cxxrtl/runtime/cxxrtl" "runtime/cxxrtl/cxxrtl_vcd.h") diff --git a/backends/edif/CMakeLists.txt b/backends/edif/CMakeLists.txt index 1a45ad0607c..7bf91d3bd40 100644 --- a/backends/edif/CMakeLists.txt +++ b/backends/edif/CMakeLists.txt @@ -1,7 +1,8 @@ -add_library(yosys_backends_edif INTERFACE) -target_sources(yosys_backends_edif INTERFACE + +add_library(yosys_backends_edif OBJECT edif.cc ) -target_link_libraries(yosys PRIVATE yosys_backends_edif) +target_link_libraries(yosys_obj PUBLIC yosys_backends_edif) +target_sources(yosys_obj PUBLIC $) diff --git a/backends/firrtl/CMakeLists.txt b/backends/firrtl/CMakeLists.txt index 50d3bdfa233..8a6225f065b 100644 --- a/backends/firrtl/CMakeLists.txt +++ b/backends/firrtl/CMakeLists.txt @@ -1,7 +1,8 @@ -add_library(yosys_backends_firrtl INTERFACE) -target_sources(yosys_backends_firrtl INTERFACE + +add_library(yosys_backends_firrtl OBJECT firrtl.cc ) -target_link_libraries(yosys PRIVATE yosys_backends_firrtl) +target_link_libraries(yosys_obj PUBLIC yosys_backends_firrtl) +target_sources(yosys_obj PUBLIC $) diff --git a/backends/functional/CMakeLists.txt b/backends/functional/CMakeLists.txt index cee0974eb64..bc3c4f91784 100644 --- a/backends/functional/CMakeLists.txt +++ b/backends/functional/CMakeLists.txt @@ -1,10 +1,11 @@ -add_library(yosys_backends_functional INTERFACE) -target_sources(yosys_backends_functional INTERFACE + +add_library(yosys_backends_functional OBJECT cxx.cc smtlib.cc smtlib_rosette.cc test_generic.cc ) -target_link_libraries(yosys PRIVATE yosys_backends_functional) +target_link_libraries(yosys_obj PUBLIC yosys_backends_functional) +target_sources(yosys_obj PUBLIC $) diff --git a/backends/intersynth/CMakeLists.txt b/backends/intersynth/CMakeLists.txt index 0ea63a68ae8..7bee470ed5d 100644 --- a/backends/intersynth/CMakeLists.txt +++ b/backends/intersynth/CMakeLists.txt @@ -1,7 +1,8 @@ -add_library(yosys_backends_intersynth INTERFACE) -target_sources(yosys_backends_intersynth INTERFACE + +add_library(yosys_backends_intersynth OBJECT intersynth.cc ) -target_link_libraries(yosys PRIVATE yosys_backends_intersynth) +target_link_libraries(yosys_obj PUBLIC yosys_backends_intersynth) +target_sources(yosys_obj PUBLIC $) diff --git a/backends/jny/CMakeLists.txt b/backends/jny/CMakeLists.txt index 2dda235884e..2072f7af7f2 100644 --- a/backends/jny/CMakeLists.txt +++ b/backends/jny/CMakeLists.txt @@ -1,7 +1,8 @@ -add_library(yosys_backends_jny INTERFACE) -target_sources(yosys_backends_jny INTERFACE + +add_library(yosys_backends_jny OBJECT jny.cc ) -target_link_libraries(yosys PRIVATE yosys_backends_jny) +target_link_libraries(yosys_obj PUBLIC yosys_backends_jny) +target_sources(yosys_obj PUBLIC $) diff --git a/backends/json/CMakeLists.txt b/backends/json/CMakeLists.txt index c0d7f1f5fb0..0b524e739f8 100644 --- a/backends/json/CMakeLists.txt +++ b/backends/json/CMakeLists.txt @@ -1,7 +1,8 @@ -add_library(yosys_backends_json INTERFACE) -target_sources(yosys_backends_json INTERFACE + +add_library(yosys_backends_json OBJECT json.cc ) -target_link_libraries(yosys PRIVATE yosys_backends_json) +target_link_libraries(yosys_obj PUBLIC yosys_backends_json) +target_sources(yosys_obj PUBLIC $) diff --git a/backends/rtlil/CMakeLists.txt b/backends/rtlil/CMakeLists.txt index 8f352e0f42f..456ea6a798c 100644 --- a/backends/rtlil/CMakeLists.txt +++ b/backends/rtlil/CMakeLists.txt @@ -1,8 +1,9 @@ -add_library(yosys_backends_rtlil INTERFACE) -target_sources(yosys_backends_rtlil INTERFACE + +add_library(yosys_backends_rtlil OBJECT rtlil_backend.cc rtlil_backend.h ) -target_link_libraries(yosys PRIVATE yosys_backends_rtlil) +target_link_libraries(yosys_obj PUBLIC yosys_backends_rtlil) +target_sources(yosys_obj PUBLIC $) diff --git a/backends/simplec/CMakeLists.txt b/backends/simplec/CMakeLists.txt index 212fd08bb99..15df9e84f1e 100644 --- a/backends/simplec/CMakeLists.txt +++ b/backends/simplec/CMakeLists.txt @@ -1,7 +1,8 @@ -add_library(yosys_backends_simplec INTERFACE) -target_sources(yosys_backends_simplec INTERFACE + +add_library(yosys_backends_simplec OBJECT simplec.cc ) -target_link_libraries(yosys PRIVATE yosys_backends_simplec) +target_link_libraries(yosys_obj PUBLIC yosys_backends_simplec) +target_sources(yosys_obj PUBLIC $) diff --git a/backends/smt2/CMakeLists.txt b/backends/smt2/CMakeLists.txt index 061479290b4..65820256ed6 100644 --- a/backends/smt2/CMakeLists.txt +++ b/backends/smt2/CMakeLists.txt @@ -1,10 +1,11 @@ -add_library(yosys_backends_smt2 INTERFACE) -target_sources(yosys_backends_smt2 INTERFACE + +add_library(yosys_backends_smt2 OBJECT smt2.cc ) -target_link_libraries(yosys PRIVATE yosys_backends_smt2) +target_link_libraries(yosys_obj PUBLIC yosys_backends_smt2) +target_sources(yosys_obj PUBLIC $) add_share_file("share/python3" "smtio.py") add_share_file("share/python3" "ywio.py") diff --git a/backends/smv/CMakeLists.txt b/backends/smv/CMakeLists.txt index 8521e9a50d9..ab2f464e9db 100644 --- a/backends/smv/CMakeLists.txt +++ b/backends/smv/CMakeLists.txt @@ -1,7 +1,8 @@ -add_library(yosys_backends_smv INTERFACE) -target_sources(yosys_backends_smv INTERFACE + +add_library(yosys_backends_smv OBJECT smv.cc ) -target_link_libraries(yosys PRIVATE yosys_backends_smv) +target_link_libraries(yosys_obj PUBLIC yosys_backends_smv) +target_sources(yosys_obj PUBLIC $) diff --git a/backends/spice/CMakeLists.txt b/backends/spice/CMakeLists.txt index 524a75689eb..d2d113378d4 100644 --- a/backends/spice/CMakeLists.txt +++ b/backends/spice/CMakeLists.txt @@ -1,7 +1,8 @@ -add_library(yosys_backends_spice INTERFACE) -target_sources(yosys_backends_spice INTERFACE + +add_library(yosys_backends_spice OBJECT spice.cc ) -target_link_libraries(yosys PRIVATE yosys_backends_spice) +target_link_libraries(yosys_obj PUBLIC yosys_backends_spice) +target_sources(yosys_obj PUBLIC $) diff --git a/backends/table/CMakeLists.txt b/backends/table/CMakeLists.txt index 5603dee0b19..4fb50bfee41 100644 --- a/backends/table/CMakeLists.txt +++ b/backends/table/CMakeLists.txt @@ -1,7 +1,8 @@ -add_library(yosys_backends_table INTERFACE) -target_sources(yosys_backends_table INTERFACE + +add_library(yosys_backends_table OBJECT table.cc ) -target_link_libraries(yosys PRIVATE yosys_backends_table) +target_link_libraries(yosys_obj PUBLIC yosys_backends_table) +target_sources(yosys_obj PUBLIC $) diff --git a/backends/verilog/CMakeLists.txt b/backends/verilog/CMakeLists.txt index 4701fbed8ba..c47837edad4 100644 --- a/backends/verilog/CMakeLists.txt +++ b/backends/verilog/CMakeLists.txt @@ -1,7 +1,8 @@ -add_library(yosys_backends_verilog INTERFACE) -target_sources(yosys_backends_verilog INTERFACE + +add_library(yosys_backends_verilog OBJECT verilog_backend.cc ) -target_link_libraries(yosys PRIVATE yosys_backends_verilog) +target_link_libraries(yosys_obj PUBLIC yosys_backends_verilog) +target_sources(yosys_obj PUBLIC $) diff --git a/cmake/TestFiles.cmake b/cmake/TestFiles.cmake new file mode 100644 index 00000000000..476d937408b --- /dev/null +++ b/cmake/TestFiles.cmake @@ -0,0 +1,61 @@ +set(MK_TEST_DIRS + tests/arch/anlogic + tests/arch/ecp5 + tests/arch/efinix + tests/arch/gatemate + tests/arch/gowin + tests/arch/ice40 + tests/arch/intel_alm + tests/arch/machxo2 + tests/arch/microchip + tests/arch/nanoxplore + tests/arch/nexus + tests/arch/quicklogic/pp3 + tests/arch/quicklogic/qlf_k6n10f + tests/arch/xilinx + tests/opt + tests/sat + tests/sim + tests/svtypes + tests/techmap + tests/various +) +if(ENABLE_VERIFIC AND NOT YOSYS_NOVERIFIC) + list(APPEND MK_TEST_DIRS tests/verific) +endif() +list(APPEND MK_TEST_DIRS tests/verilog) + + +set(SH_TEST_DIRS + tests/simple + tests/simple_abc9 + tests/hana + tests/asicworld + tests/share + tests/opt_share + tests/fsm + tests/memlib + tests/bram + tests/svinterfaces + tests/xprop + tests/select + tests/peepopt + tests/proc + tests/blif + tests/arch + tests/rpc + tests/memfile + tests/fmt + tests/cxxrtl + tests/liberty +) +if(ENABLE_FUNCTIONAL_TESTS) + list(APPEND SH_TEST_DIRS tests/functional) +endif() + + +set(SH_ABC_TEST_DIRS + tests/memories + tests/aiger + tests/alumacc +) \ No newline at end of file diff --git a/cmake/YosysConfig.cmake b/cmake/YosysConfig.cmake new file mode 100644 index 00000000000..9367483644b --- /dev/null +++ b/cmake/YosysConfig.cmake @@ -0,0 +1,95 @@ +#### yosys-config setup #### +# compiler +get_filename_component(_CXX_BASENAME "${CMAKE_CXX_COMPILER}" NAME) +set(YOSYS_CFG_CXX "${_CXX_BASENAME}" + CACHE STRING "C++ compiler that appears in yosys-config") + +# compile flags +set(_CFG_CXXFLAGS + -Wall -Wextra -ggdb + "-I\"${CMAKE_INSTALL_PREFIX}/share/yosys/include\"" + -MD -MP -D_YOSYS_ -fPIC + -DYOSYS_VERSION="${YOSYS_VER}" + -std=c++${CXXSTD} -O3) + +if (ENABLE_READLINE) + list(APPEND _CFG_CXXFLAGS -DYOSYS_ENABLE_READLINE) +endif() +if (ENABLE_PLUGINS) + list(APPEND _CFG_CXXFLAGS -DYOSYS_ENABLE_PLUGINS) +endif() +if (ENABLE_GLOB) + list(APPEND _CFG_CXXFLAGS -DYOSYS_ENABLE_GLOB) +endif() +if (ENABLE_ZLIB) + list(APPEND _CFG_CXXFLAGS -DYOSYS_ENABLE_ZLIB) +endif() +if (ENABLE_TCL) + list(APPEND _CFG_CXXFLAGS -I${TCL_INCLUDE_PATH} -DYOSYS_ENABLE_TCL) +endif() +if (ENABLE_ABC) + list(APPEND _CFG_CXXFLAGS -DYOSYS_ENABLE_ABC) +endif() +if (ENABLE_COVER) + list(APPEND _CFG_CXXFLAGS -DYOSYS_ENABLE_COVER) +endif() + +string (REPLACE ";" " " YOSYS_CFG_CXXFLAGS "${_CFG_CXXFLAGS}") + +# link flags +set(YOSYS_CFG_LINKFLAGS "-rdynamic" CACHE STRING "link flags for yosys-config") + +# libraries +set(_CFG_LIBS -lstdc++ -lm) +if (NOT (${CMAKE_SYSTEM_NAME} STREQUAL "OpenBSD")) + list(APPEND _CFG_LIBS -lrt) +endif() +if (ENABLE_READLINE) + list(APPEND _CFG_LIBS -lreadline) +endif() +if (ENABLE_PLUGINS) + list(APPEND _CFG_LIBS -lffi) + if (NOT APPLE) + list(APPEND _CFG_LIBS -ldl) + endif() +endif() +if (ENABLE_ZLIB) + list(APPEND _CFG_LIBS -lz) +endif() +if (ENABLE_TCL) + get_filename_component(_TCL "${TCL_LIBRARY}" NAME_WE) + string(REGEX REPLACE "^lib" "" _TCL "${_TCL}") + list(APPEND _CFG_LIBS "-l${_TCL}") +endif() +string (REPLACE ";" " " YOSYS_CFG_LIBS "${_CFG_LIBS}") + +# bindir / datadir (installation paths) +set(YOSYS_CFG_PREFIX "/usr/local" + CACHE STRING "prefix that yosys-config reports") + +set(YOSYS_CFG_BINDIR "${YOSYS_CFG_PREFIX}/bin") +set(YOSYS_CFG_DATDIR "${YOSYS_CFG_PREFIX}/share/yosys") + +# abort if something is missing +foreach(var YOSYS_CFG_CXX YOSYS_CFG_CXXFLAGS YOSYS_CFG_LINKFLAGS + YOSYS_CFG_LIBS YOSYS_CFG_BINDIR YOSYS_CFG_DATDIR) + if("${${var}}" STREQUAL "") + message(FATAL_ERROR "${var} is empty – cannot create yosys-config") + endif() +endforeach() + +set(CXX "${YOSYS_CFG_CXX}") +set(CXXFLAGS "${YOSYS_CFG_CXXFLAGS}") +set(LINKFLAGS "${YOSYS_CFG_LINKFLAGS}") +set(LIBS "${YOSYS_CFG_LIBS}") +set(BINDIR "${YOSYS_CFG_BINDIR}") +set(DATDIR "${YOSYS_CFG_DATDIR}") + +configure_file(misc/yosys-config.in ${yosys_BINARY_DIR}/yosys-config @ONLY) +file(CHMOD ${yosys_BINARY_DIR}/yosys-config + PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE + GROUP_READ GROUP_EXECUTE + WORLD_READ WORLD_EXECUTE) + +add_custom_target(yosys-config-copy ALL + DEPENDS ${yosys_BINARY_DIR}/yosys-config) \ No newline at end of file diff --git a/flake.nix b/flake.nix index 19ba59f17c4..0d938b8a595 100644 --- a/flake.nix +++ b/flake.nix @@ -18,7 +18,7 @@ yosys = pkgs.clangStdenv.mkDerivation { name = "yosys"; src = ./. ; - buildInputs = with pkgs; [ clang bison flex libffi tcl readline python3 zlib git pkg-configUpstream llvmPackages.bintools ]; + buildInputs = with pkgs; [ clang bison flex libffi tcl tk readline python3 zlib git pkg-configUpstream llvmPackages.bintools ]; checkInputs = with pkgs; [ gtest ]; propagatedBuildInputs = [ abc-verifier ]; preConfigure = "make config-clang"; @@ -41,7 +41,7 @@ packages.default = yosys; defaultPackage = yosys; devShell = pkgs.mkShell { - buildInputs = with pkgs; [ clang llvmPackages.bintools gcc bison flex libffi tcl readline python3 zlib git gtest abc-verifier verilog boost python3Packages.boost ]; + buildInputs = with pkgs; [ gtkwave cmake clang ccache llvmPackages.bintools ninja gcc bison flex libffi tcl tk readline python3 zlib git gtest abc-verifier verilog boost python3Packages.boost ]; }; } ); diff --git a/frontends/aiger/CMakeLists.txt b/frontends/aiger/CMakeLists.txt index 1198dac9126..006a86a9ef1 100644 --- a/frontends/aiger/CMakeLists.txt +++ b/frontends/aiger/CMakeLists.txt @@ -1,8 +1,9 @@ -add_library(yosys_frontends_aiger INTERFACE) -target_sources(yosys_frontends_aiger INTERFACE + +add_library(yosys_frontends_aiger OBJECT aigerparse.cc aigerparse.h ) -target_link_libraries(yosys PRIVATE yosys_frontends_aiger) +target_link_libraries(yosys_obj PUBLIC yosys_frontends_aiger) +target_sources(yosys_obj PUBLIC $) diff --git a/frontends/aiger2/CMakeLists.txt b/frontends/aiger2/CMakeLists.txt index ddc09a0c28d..4fb9ae0e766 100644 --- a/frontends/aiger2/CMakeLists.txt +++ b/frontends/aiger2/CMakeLists.txt @@ -1,7 +1,8 @@ -add_library(yosys_frontends_aiger2 INTERFACE) -target_sources(yosys_frontends_aiger2 INTERFACE + +add_library(yosys_frontends_aiger2 OBJECT xaiger.cc ) -target_link_libraries(yosys PRIVATE yosys_frontends_aiger2) +target_link_libraries(yosys_obj PUBLIC yosys_frontends_aiger2) +target_sources(yosys_obj PUBLIC $) diff --git a/frontends/ast/CMakeLists.txt b/frontends/ast/CMakeLists.txt index 4d5993bd005..6cee6416688 100644 --- a/frontends/ast/CMakeLists.txt +++ b/frontends/ast/CMakeLists.txt @@ -1,6 +1,6 @@ -add_library(yosys_frontends_ast INTERFACE) -target_sources(yosys_frontends_ast INTERFACE + +add_library(yosys_frontends_ast OBJECT ast_binding.cc ast_binding.h ast.cc @@ -10,4 +10,5 @@ target_sources(yosys_frontends_ast INTERFACE simplify.cc ) -target_link_libraries(yosys PRIVATE yosys_frontends_ast) +target_link_libraries(yosys_obj PUBLIC yosys_frontends_ast) +target_sources(yosys_obj PUBLIC $) diff --git a/frontends/blif/CMakeLists.txt b/frontends/blif/CMakeLists.txt index 2af85e3401b..615af8d76c0 100644 --- a/frontends/blif/CMakeLists.txt +++ b/frontends/blif/CMakeLists.txt @@ -1,8 +1,9 @@ -add_library(yosys_frontends_blif INTERFACE) -target_sources(yosys_frontends_blif INTERFACE + +add_library(yosys_frontends_blif OBJECT blifparse.cc blifparse.h ) -target_link_libraries(yosys PRIVATE yosys_frontends_blif) +target_link_libraries(yosys_obj PUBLIC yosys_frontends_blif) +target_sources(yosys_obj PUBLIC $) diff --git a/frontends/json/CMakeLists.txt b/frontends/json/CMakeLists.txt index c74bc56118c..f688d4299b0 100644 --- a/frontends/json/CMakeLists.txt +++ b/frontends/json/CMakeLists.txt @@ -1,7 +1,8 @@ -add_library(yosys_frontends_json INTERFACE) -target_sources(yosys_frontends_json INTERFACE + +add_library(yosys_frontends_json OBJECT jsonparse.cc ) -target_link_libraries(yosys PRIVATE yosys_frontends_json) +target_link_libraries(yosys_obj PUBLIC yosys_frontends_json) +target_sources(yosys_obj PUBLIC $) diff --git a/frontends/liberty/CMakeLists.txt b/frontends/liberty/CMakeLists.txt index 15bbf617967..069dbb1e917 100644 --- a/frontends/liberty/CMakeLists.txt +++ b/frontends/liberty/CMakeLists.txt @@ -1,7 +1,8 @@ -add_library(yosys_frontends_liberty INTERFACE) -target_sources(yosys_frontends_liberty INTERFACE + +add_library(yosys_frontends_liberty OBJECT liberty.cc ) -target_link_libraries(yosys PRIVATE yosys_frontends_liberty) +target_link_libraries(yosys_obj PUBLIC yosys_frontends_liberty) +target_sources(yosys_obj PUBLIC $) diff --git a/frontends/rpc/CMakeLists.txt b/frontends/rpc/CMakeLists.txt index c0a352a0bab..812f89c5ec9 100644 --- a/frontends/rpc/CMakeLists.txt +++ b/frontends/rpc/CMakeLists.txt @@ -1,9 +1,10 @@ if (NOT DISABLE_SPAWN) - add_library(yosys_frontends_rpc INTERFACE) + - target_sources(yosys_frontends_rpc INTERFACE + add_library(yosys_frontends_rpc OBJECT rpc_frontend.cc ) - target_link_libraries(yosys PRIVATE yosys_frontends_rpc) + target_link_libraries(yosys_obj PUBLIC yosys_frontends_rpc) + target_sources(yosys_obj PUBLIC $) endif() diff --git a/frontends/rtlil/CMakeLists.txt b/frontends/rtlil/CMakeLists.txt index 612a56ccd9d..6dd3ec8ac06 100644 --- a/frontends/rtlil/CMakeLists.txt +++ b/frontends/rtlil/CMakeLists.txt @@ -1,8 +1,8 @@ flex_target(RTLIL_LEXER "rtlil_lexer.l" "${CMAKE_CURRENT_BINARY_DIR}/rtlil_lexer.cc") bison_target(RTLIL_PARSER "rtlil_parser.y" "${CMAKE_CURRENT_BINARY_DIR}/rtlil_parser.tab.cc" DEFINES_FILE "${CMAKE_CURRENT_BINARY_DIR}/rtlil_parser.tab.hh" COMPILE_FLAGS "-d -r all") -add_library(yosys_frontends_rtlil INTERFACE) -target_sources(yosys_frontends_rtlil INTERFACE + +add_library(yosys_frontends_rtlil OBJECT rtlil_frontend.cc ) @@ -13,4 +13,6 @@ add_library(yosys_frontends_rtlil_gen OBJECT ${FLEX_RTLIL_LEXER_OUTPUTS} ${BISON_RTLIL_PARSER_OUTPUTS} ) -target_link_libraries(yosys PRIVATE yosys_frontends_rtlil yosys_frontends_rtlil_gen) +target_link_libraries(yosys_obj PUBLIC yosys_frontends_rtlil yosys_frontends_rtlil_gen) +target_sources(yosys_obj PUBLIC $) +target_sources(yosys_obj PUBLIC $) diff --git a/frontends/verific/CMakeLists.txt b/frontends/verific/CMakeLists.txt index 2a71702fdc5..3daddf6dbc9 100644 --- a/frontends/verific/CMakeLists.txt +++ b/frontends/verific/CMakeLists.txt @@ -1,8 +1,9 @@ -add_library(yosys_frontends_verific INTERFACE) -target_sources(yosys_frontends_verific INTERFACE + +add_library(yosys_frontends_verific OBJECT verific.cc #verificsva.cc ) -target_link_libraries(yosys PRIVATE yosys_frontends_verific) +target_link_libraries(yosys_obj PUBLIC yosys_frontends_verific) +target_sources(yosys_obj PUBLIC $) diff --git a/frontends/verilog/CMakeLists.txt b/frontends/verilog/CMakeLists.txt index b4126c51a26..fee8bb2e4b2 100644 --- a/frontends/verilog/CMakeLists.txt +++ b/frontends/verilog/CMakeLists.txt @@ -27,8 +27,8 @@ flex_target(VERILOG_LEXER "verilog_lexer.l" "${CMAKE_CURRENT_BINARY_DIR}/verilog_lexer.cc") bison_target(VERILOG_PARSER "verilog_parser.y" "${CMAKE_CURRENT_BINARY_DIR}/verilog_parser.tab.cc" DEFINES_FILE "${CMAKE_CURRENT_BINARY_DIR}/verilog_parser.tab.hh" COMPILE_FLAGS "-Wall -Werror -d -r all") -add_library(yosys_frontends_verilog INTERFACE) -target_sources(yosys_frontends_verilog INTERFACE + +add_library(yosys_frontends_verilog OBJECT const2ast.cc preproc.cc preproc.h @@ -43,4 +43,6 @@ add_library(yosys_frontends_verilog_gen OBJECT #${CMAKE_CURRENT_BINARY_DIR}/verilog_parser.tab.cc #${CMAKE_CURRENT_BINARY_DIR}/verilog_parser.tab.hh ) -target_link_libraries(yosys PRIVATE yosys_frontends_verilog yosys_frontends_verilog_gen) +target_link_libraries(yosys_obj PUBLIC yosys_frontends_verilog yosys_frontends_verilog_gen) +target_sources(yosys_obj PUBLIC $) +target_sources(yosys_obj PUBLIC $) diff --git a/kernel/CMakeLists.txt b/kernel/CMakeLists.txt index df08b0b2386..5eecd20016b 100644 --- a/kernel/CMakeLists.txt +++ b/kernel/CMakeLists.txt @@ -1,4 +1,4 @@ -add_library(yosys_kernel INTERFACE) + #if(CMAKE_PROJECT_VERSION_PATCH GREATER 0) # set(YOSYS_VERSION "${CMAKE_PROJECT_VERSION_MAJOR}.${CMAKE_PROJECT_VERSION_MINOR}+${CMAKE_PROJECT_VERSION_PATCH}") @@ -10,7 +10,7 @@ find_package(Git) if(Git_FOUND) execute_process( COMMAND ${GIT_EXECUTABLE} rev-parse --short=9 HEAD - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + WORKING_DIRECTORY ${yosys_SOURCE_DIR} OUTPUT_VARIABLE CURRENT_GIT_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE ) @@ -18,8 +18,9 @@ if(Git_FOUND) endif() configure_file(${CMAKE_CURRENT_SOURCE_DIR}/version.cc.in ${CMAKE_CURRENT_BINARY_DIR}/version.cc) +set_property(SOURCE log.cc APPEND PROPERTY COMPILE_DEFINITIONS YOSYS_SRC="${PROJECT_SOURCE_DIR}") -target_sources(yosys_kernel INTERFACE +add_library(yosys_kernel OBJECT binding.cc binding.h bitpattern.h @@ -34,7 +35,7 @@ target_sources(yosys_kernel INTERFACE constids.inc cost.cc cost.h - driver.cc + # driver.cc drivertools.cc drivertools.h ff.cc @@ -46,7 +47,10 @@ target_sources(yosys_kernel INTERFACE fmt.h functional.cc functional.h + gzip.cc + gzip.h hashlib.h + io.cc json.cc json.h log.cc @@ -81,10 +85,13 @@ target_sources(yosys_kernel INTERFACE ) if (ENABLE_ZLIB) -target_sources(yosys_kernel INTERFACE +target_sources(yosys_kernel PRIVATE fstdata.cc fstdata.h ) endif() -target_link_libraries(yosys PRIVATE yosys_kernel) +add_dependencies(yosys_kernel yosys_techlib_common) + +target_link_libraries(yosys_obj PUBLIC yosys_kernel) +target_sources(yosys_obj PUBLIC $) diff --git a/libs/CMakeLists.txt b/libs/CMakeLists.txt index 7a073939294..aa3e46e9bc3 100644 --- a/libs/CMakeLists.txt +++ b/libs/CMakeLists.txt @@ -1,6 +1,6 @@ -add_library(yosys_libs INTERFACE) -target_sources(yosys_libs INTERFACE + +add_library(yosys_libs OBJECT bigint/BigInteger.cc bigint/BigInteger.hh bigint/BigIntegerAlgorithms.cc @@ -55,7 +55,7 @@ target_sources(yosys_libs INTERFACE ) if (ENABLE_ZLIB) -target_sources(yosys_libs INTERFACE +target_sources(yosys_libs PRIVATE fst/config.h fst/fastlz.cc fst/fastlz.h @@ -67,4 +67,5 @@ target_sources(yosys_libs INTERFACE ) endif() -target_link_libraries(yosys PRIVATE yosys_libs) +target_link_libraries(yosys_obj PUBLIC yosys_libs) +target_sources(yosys_obj PUBLIC $) diff --git a/passes/cmds/CMakeLists.txt b/passes/cmds/CMakeLists.txt index 11db66d4b09..4093e45f078 100644 --- a/passes/cmds/CMakeLists.txt +++ b/passes/cmds/CMakeLists.txt @@ -1,6 +1,6 @@ -add_library(yosys_passes_cmds INTERFACE) -target_sources(yosys_passes_cmds INTERFACE + +add_library(yosys_passes_cmds OBJECT add.cc delete.cc design.cc @@ -49,13 +49,16 @@ target_sources(yosys_passes_cmds INTERFACE portarcs.cc wrapcell.cc setenv.cc + test_select.cc + abstract.cc ) if (NOT DISABLE_SPAWN) -target_sources(yosys_passes_cmds INTERFACE +target_sources(yosys_passes_cmds PRIVATE exec.cc bugpoint.cc ) endif() -target_link_libraries(yosys PRIVATE yosys_passes_cmds) +target_link_libraries(yosys_obj PUBLIC yosys_passes_cmds) +target_sources(yosys_obj PUBLIC $) diff --git a/passes/equiv/CMakeLists.txt b/passes/equiv/CMakeLists.txt index 016306c7308..498b5f60136 100644 --- a/passes/equiv/CMakeLists.txt +++ b/passes/equiv/CMakeLists.txt @@ -1,6 +1,6 @@ -add_library(yosys_passes_equiv INTERFACE) -target_sources(yosys_passes_equiv INTERFACE + +add_library(yosys_passes_equiv OBJECT equiv_make.cc equiv_miter.cc equiv_simple.cc @@ -14,4 +14,5 @@ target_sources(yosys_passes_equiv INTERFACE equiv_opt.cc ) -target_link_libraries(yosys PRIVATE yosys_passes_equiv) +target_link_libraries(yosys_obj PUBLIC yosys_passes_equiv) +target_sources(yosys_obj PUBLIC $) diff --git a/passes/fsm/CMakeLists.txt b/passes/fsm/CMakeLists.txt index b57718560ec..12d8c6d5b99 100644 --- a/passes/fsm/CMakeLists.txt +++ b/passes/fsm/CMakeLists.txt @@ -1,6 +1,6 @@ -add_library(yosys_passes_fsm INTERFACE) -target_sources(yosys_passes_fsm INTERFACE + +add_library(yosys_passes_fsm OBJECT fsm.cc fsm_detect.cc fsm_extract.cc @@ -13,4 +13,5 @@ target_sources(yosys_passes_fsm INTERFACE fsmdata.h ) -target_link_libraries(yosys PRIVATE yosys_passes_fsm) +target_link_libraries(yosys_obj PUBLIC yosys_passes_fsm) +target_sources(yosys_obj PUBLIC $) diff --git a/passes/hierarchy/CMakeLists.txt b/passes/hierarchy/CMakeLists.txt index d8125bd35fa..4ece3828040 100644 --- a/passes/hierarchy/CMakeLists.txt +++ b/passes/hierarchy/CMakeLists.txt @@ -1,10 +1,11 @@ -add_library(yosys_passes_hierarchy INTERFACE) -target_sources(yosys_passes_hierarchy INTERFACE + +add_library(yosys_passes_hierarchy OBJECT hierarchy.cc uniquify.cc submod.cc keep_hierarchy.cc ) -target_link_libraries(yosys PRIVATE yosys_passes_hierarchy) +target_link_libraries(yosys_obj PUBLIC yosys_passes_hierarchy) +target_sources(yosys_obj PUBLIC $) diff --git a/passes/memory/CMakeLists.txt b/passes/memory/CMakeLists.txt index d292b700c50..95b08b09c2d 100644 --- a/passes/memory/CMakeLists.txt +++ b/passes/memory/CMakeLists.txt @@ -1,6 +1,6 @@ -add_library(yosys_passes_memory INTERFACE) -target_sources(yosys_passes_memory INTERFACE + +add_library(yosys_passes_memory OBJECT memory.cc memory_dff.cc memory_share.cc @@ -17,4 +17,5 @@ target_sources(yosys_passes_memory INTERFACE memlib.h ) -target_link_libraries(yosys PRIVATE yosys_passes_memory) +target_link_libraries(yosys_obj PUBLIC yosys_passes_memory) +target_sources(yosys_obj PUBLIC $) diff --git a/passes/opt/CMakeLists.txt b/passes/opt/CMakeLists.txt index af97a0e883c..901c0962607 100644 --- a/passes/opt/CMakeLists.txt +++ b/passes/opt/CMakeLists.txt @@ -1,6 +1,6 @@ -add_library(yosys_passes_opt INTERFACE) -target_sources(yosys_passes_opt INTERFACE + +add_library(yosys_passes_opt OBJECT opt.cc opt_merge.cc opt_mem.cc @@ -24,4 +24,5 @@ target_sources(yosys_passes_opt INTERFACE muxpack.cc ) -target_link_libraries(yosys PRIVATE yosys_passes_opt) +target_link_libraries(yosys_obj PUBLIC yosys_passes_opt) +target_sources(yosys_obj PUBLIC $) diff --git a/passes/pmgen/CMakeLists.txt b/passes/pmgen/CMakeLists.txt index 71251d017dd..1ca23398513 100644 --- a/passes/pmgen/CMakeLists.txt +++ b/passes/pmgen/CMakeLists.txt @@ -1,69 +1,78 @@ -add_library(yosys_passes_pmgen INTERFACE) +add_library(yosys_passes_pmgen OBJECT + test_pmgen.cc + ${yosys_SOURCE_DIR}/techlibs/ice40/ice40_dsp.cc + ${yosys_SOURCE_DIR}/techlibs/ice40/ice40_wrapcarry.cc + ${yosys_SOURCE_DIR}/techlibs/xilinx/xilinx_dsp.cc + ${yosys_SOURCE_DIR}/techlibs/microchip/microchip_dsp.cc + ${yosys_SOURCE_DIR}/passes/opt/peepopt.cc + ${yosys_SOURCE_DIR}/techlibs/xilinx/xilinx_srl.cc +) -function(pmgen_command _name) +function(pmgen_command _name _path) + set(CUSTOM_TARGET_NAME ${_name}_pm_gen) + set(GENERATED_HEADER ${yosys_BINARY_DIR}/${_path}/${_name}_pm.h) add_custom_command( - OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_name}_pm.h - COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/pmgen.py -o ${CMAKE_CURRENT_BINARY_DIR}/${_name}_pm.h -p ${_name} ${CMAKE_CURRENT_SOURCE_DIR}/${_name}.pmg - DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/pmgen.py ${CMAKE_CURRENT_SOURCE_DIR}/${_name}.pmg - COMMENT "Generating passes/pmgen/${_name}_pm.h..." + OUTPUT ${GENERATED_HEADER} + COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/pmgen.py -o ${GENERATED_HEADER} -p ${_name} ${yosys_SOURCE_DIR}/${_path}/${_name}.pmg + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/pmgen.py ${yosys_SOURCE_DIR}/${_path}/${_name}.pmg + COMMENT "Generating ${_path}/${_name}_pm.h..." ) + add_custom_target(${CUSTOM_TARGET_NAME} DEPENDS ${GENERATED_HEADER}) + add_dependencies(yosys_passes_pmgen ${CUSTOM_TARGET_NAME}) endfunction() -pmgen_command(test_pmgen) -pmgen_command(ice40_dsp) -pmgen_command(ice40_wrapcarry) -pmgen_command(xilinx_dsp) -pmgen_command(xilinx_dsp48a) -pmgen_command(xilinx_dsp_CREG) -pmgen_command(xilinx_dsp_cascade) -pmgen_command(microchip_dsp) -pmgen_command(microchip_dsp_CREG) -pmgen_command(microchip_dsp_cascade) -pmgen_command(xilinx_srl) +pmgen_command(test_pmgen passes/pmgen) +pmgen_command(ice40_dsp techlibs/ice40) +pmgen_command(ice40_wrapcarry techlibs/ice40) +pmgen_command(xilinx_dsp techlibs/xilinx) +pmgen_command(xilinx_dsp48a techlibs/xilinx) +pmgen_command(xilinx_dsp_CREG techlibs/xilinx) +pmgen_command(xilinx_dsp_cascade techlibs/xilinx) +pmgen_command(microchip_dsp techlibs/microchip) +pmgen_command(microchip_dsp_CREG techlibs/microchip) +pmgen_command(microchip_dsp_cascade techlibs/microchip) +pmgen_command(xilinx_srl techlibs/xilinx) add_custom_command( - OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/peepopt_pm.h - COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/pmgen.py -o ${CMAKE_CURRENT_BINARY_DIR}/peepopt_pm.h -p peepopt - ${CMAKE_CURRENT_SOURCE_DIR}/peepopt_shiftmul_right.pmg - ${CMAKE_CURRENT_SOURCE_DIR}/peepopt_shiftmul_left.pmg - ${CMAKE_CURRENT_SOURCE_DIR}/peepopt_shiftadd.pmg - ${CMAKE_CURRENT_SOURCE_DIR}/peepopt_muldiv.pmg - ${CMAKE_CURRENT_SOURCE_DIR}/peepopt_formal_clockgateff.pmg + OUTPUT ${yosys_BINARY_DIR}/passes/opt/peepopt_pm.h + COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/pmgen.py -o ${yosys_BINARY_DIR}/passes/opt/peepopt_pm.h -p peepopt + ${yosys_SOURCE_DIR}/passes/opt/peepopt_shiftmul_right.pmg + ${yosys_SOURCE_DIR}/passes/opt/peepopt_shiftmul_left.pmg + ${yosys_SOURCE_DIR}/passes/opt/peepopt_shiftadd.pmg + ${yosys_SOURCE_DIR}/passes/opt/peepopt_muldiv.pmg + ${yosys_SOURCE_DIR}/passes/opt/peepopt_muldiv_c.pmg + ${yosys_SOURCE_DIR}/passes/opt/peepopt_formal_clockgateff.pmg DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/pmgen.py - ${CMAKE_CURRENT_SOURCE_DIR}/peepopt_shiftmul_right.pmg - ${CMAKE_CURRENT_SOURCE_DIR}/peepopt_shiftmul_left.pmg - ${CMAKE_CURRENT_SOURCE_DIR}/peepopt_shiftadd.pmg - ${CMAKE_CURRENT_SOURCE_DIR}/peepopt_muldiv.pmg - ${CMAKE_CURRENT_SOURCE_DIR}/peepopt_formal_clockgateff.pmg + ${yosys_SOURCE_DIR}/passes/opt/peepopt_shiftmul_right.pmg + ${yosys_SOURCE_DIR}/passes/opt/peepopt_shiftmul_left.pmg + ${yosys_SOURCE_DIR}/passes/opt/peepopt_shiftadd.pmg + ${yosys_SOURCE_DIR}/passes/opt/peepopt_muldiv.pmg + ${yosys_SOURCE_DIR}/passes/opt/peepopt_muldiv_c.pmg + ${yosys_SOURCE_DIR}/passes/opt/peepopt_formal_clockgateff.pmg COMMENT "Generating passes/pmgen/peepopt_pm.h..." ) +add_custom_target(peepopt_pm DEPENDS ${yosys_BINARY_DIR}/passes/opt/peepopt_pm.h) +add_dependencies(yosys_passes_pmgen peepopt_pm) + -target_sources(yosys_passes_pmgen INTERFACE - test_pmgen.cc - ice40_dsp.cc - ice40_wrapcarry.cc - xilinx_dsp.cc - microchip_dsp.cc - peepopt.cc - xilinx_srl.cc -) -target_sources(yosys_passes_pmgen PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/test_pmgen_pm.h) +# target_sources(yosys_passes_pmgen PUBLIC ${yosys_BINARY_DIR}/passes/pmgen/test_pmgen_pm.h) -target_sources(yosys_passes_pmgen PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/ice40_dsp_pm.h) -target_sources(yosys_passes_pmgen PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/ice40_wrapcarry_pm.h) +# target_sources(yosys_passes_pmgen PUBLIC ${yosys_BINARY_DIR}/techlibs/ice40/ice40_dsp_pm.h) +# target_sources(yosys_passes_pmgen PUBLIC ${yosys_BINARY_DIR}/techlibs/ice40/ice40_wrapcarry_pm.h) -target_sources(yosys_passes_pmgen PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/xilinx_dsp_pm.h) -target_sources(yosys_passes_pmgen PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/xilinx_dsp48a_pm.h) -target_sources(yosys_passes_pmgen PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/xilinx_dsp_CREG_pm.h) -target_sources(yosys_passes_pmgen PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/xilinx_dsp_cascade_pm.h) +# target_sources(yosys_passes_pmgen PUBLIC ${yosys_BINARY_DIR}/techlibs/xilinx/xilinx_dsp_pm.h) +# target_sources(yosys_passes_pmgen PUBLIC ${yosys_BINARY_DIR}/techlibs/xilinx/xilinx_dsp48a_pm.h) +# target_sources(yosys_passes_pmgen PUBLIC ${yosys_BINARY_DIR}/techlibs/xilinx/xilinx_dsp_CREG_pm.h) +# target_sources(yosys_passes_pmgen PUBLIC ${yosys_BINARY_DIR}/techlibs/xilinx/xilinx_dsp_cascade_pm.h) -target_sources(yosys_passes_pmgen PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/microchip_dsp_pm.h) -target_sources(yosys_passes_pmgen PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/microchip_dsp_CREG_pm.h) -target_sources(yosys_passes_pmgen PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/microchip_dsp_cascade_pm.h) +# target_sources(yosys_passes_pmgen PUBLIC ${yosys_BINARY_DIR}/techlibs/microchip/microchip_dsp_pm.h) +# target_sources(yosys_passes_pmgen PUBLIC ${yosys_BINARY_DIR}/techlibs/microchip/microchip_dsp_CREG_pm.h) +# target_sources(yosys_passes_pmgen PUBLIC ${yosys_BINARY_DIR}/techlibs/microchip/microchip_dsp_cascade_pm.h) -target_sources(yosys_passes_pmgen PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/peepopt_pm.h) +# target_sources(yosys_passes_pmgen PUBLIC ${yosys_BINARY_DIR}/passes/opt/peepopt_pm.h) -target_sources(yosys_passes_pmgen PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/xilinx_srl_pm.h) +# target_sources(yosys_passes_pmgen PUBLIC ${yosys_BINARY_DIR}/techlibs/xilinx/xilinx_srl_pm.h) -target_link_libraries(yosys PRIVATE yosys_passes_pmgen) +target_link_libraries(yosys_obj PUBLIC yosys_passes_pmgen) +target_sources(yosys_obj PUBLIC $) diff --git a/passes/proc/CMakeLists.txt b/passes/proc/CMakeLists.txt index a60d62b9988..ad0c702ed9d 100644 --- a/passes/proc/CMakeLists.txt +++ b/passes/proc/CMakeLists.txt @@ -1,6 +1,6 @@ -add_library(yosys_passes_proc INTERFACE) -target_sources(yosys_passes_proc INTERFACE + +add_library(yosys_passes_proc OBJECT proc.cc proc_prune.cc proc_clean.cc @@ -14,4 +14,5 @@ target_sources(yosys_passes_proc INTERFACE proc_memwr.cc ) -target_link_libraries(yosys PRIVATE yosys_passes_proc) +target_link_libraries(yosys_obj PUBLIC yosys_passes_proc) +target_sources(yosys_obj PUBLIC $) diff --git a/passes/sat/CMakeLists.txt b/passes/sat/CMakeLists.txt index fff9fe045ed..efc5ab869b7 100644 --- a/passes/sat/CMakeLists.txt +++ b/passes/sat/CMakeLists.txt @@ -1,6 +1,6 @@ -add_library(yosys_passes_sat INTERFACE) -target_sources(yosys_passes_sat INTERFACE + +add_library(yosys_passes_sat OBJECT sat.cc freduce.cc eval.cc @@ -21,15 +21,16 @@ target_sources(yosys_passes_sat INTERFACE ) if (ENABLE_ZLIB) -target_sources(yosys_passes_sat INTERFACE +target_sources(yosys_passes_sat PRIVATE sim.cc ) endif() if (NOT DISABLE_SPAWN) -target_sources(yosys_passes_sat INTERFACE +target_sources(yosys_passes_sat PRIVATE qbfsat.cc ) endif() -target_link_libraries(yosys PRIVATE yosys_passes_sat) +target_link_libraries(yosys_obj PUBLIC yosys_passes_sat) +target_sources(yosys_obj PUBLIC $) diff --git a/passes/techmap/CMakeLists.txt b/passes/techmap/CMakeLists.txt index 810f96cdc71..4ba9a4b4557 100644 --- a/passes/techmap/CMakeLists.txt +++ b/passes/techmap/CMakeLists.txt @@ -1,12 +1,13 @@ -add_library(yosys_passes_techmap INTERFACE) -target_sources(yosys_passes_techmap INTERFACE + +add_library(yosys_passes_techmap OBJECT flatten.cc techmap.cc simplemap.cc dfflibmap.cc maccmap.cc booth.cc + libcache.cc libparse.cc iopadmap.cc clkbufmap.cc @@ -39,10 +40,11 @@ target_sources(yosys_passes_techmap INTERFACE extractinv.cc cellmatch.cc clockgate.cc + constmap.cc ) if (ENABLE_ABC) - target_sources(yosys_passes_techmap INTERFACE + target_sources(yosys_passes_techmap PRIVATE abc.cc abc9.cc abc9_exe.cc @@ -51,9 +53,12 @@ if (ENABLE_ABC) ) endif() -target_link_libraries(yosys PRIVATE yosys_passes_techmap) +target_link_libraries(yosys_obj PUBLIC yosys_passes_techmap) +target_sources(yosys_obj PUBLIC $) if (NOT DISABLE_SPAWN) set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}) add_executable(yosys-filterlib filterlib.cc) + install(TARGETS yosys-filterlib + RUNTIME DESTINATION .) endif() diff --git a/passes/tests/CMakeLists.txt b/passes/tests/CMakeLists.txt index b74ca2039cb..8079307025f 100644 --- a/passes/tests/CMakeLists.txt +++ b/passes/tests/CMakeLists.txt @@ -1,9 +1,10 @@ -add_library(yosys_passes_tests INTERFACE) -target_sources(yosys_passes_tests INTERFACE + +add_library(yosys_passes_tests OBJECT test_autotb.cc test_cell.cc test_abcloop.cc ) -target_link_libraries(yosys PRIVATE yosys_passes_tests) +target_link_libraries(yosys_obj PUBLIC yosys_passes_tests) +target_sources(yosys_obj PUBLIC $) diff --git a/scripts/debug_build.sh b/scripts/debug_build.sh new file mode 100644 index 00000000000..e23eb1a757d --- /dev/null +++ b/scripts/debug_build.sh @@ -0,0 +1,20 @@ +#!/bin/sh + +# This script builds the project using CMake in a way that is compatible with +# the existing Makefile build system. + +# 1. Initialize the submodules +git submodule update --init --recursive + +# 2. Build the project +mkdir -p build +cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Debug -D ENABLE_CCACHE:BOOL=ON -D CMAKE_INSTALL_PREFIX:PATH=/usr/local +cmake --build build --parallel $(nproc) + +# 3. Install the project into test install dir +# cmake --install build --prefix . + +# 4. Test the project +# ctest -j$(nproc) --test-dir build --output-on-failure +# Or Rerun Failed Tests +# ctest -j$(nproc) --test-dir build --rerun-failed --output-on-failure diff --git a/techlibs/achronix/CMakeLists.txt b/techlibs/achronix/CMakeLists.txt index 6229b93bacd..82364e4d293 100644 --- a/techlibs/achronix/CMakeLists.txt +++ b/techlibs/achronix/CMakeLists.txt @@ -1,10 +1,11 @@ -add_library(yosys_techlibs_achronix INTERFACE) -target_sources(yosys_techlibs_achronix INTERFACE + +add_library(yosys_techlibs_achronix OBJECT synth_achronix.cc ) -target_link_libraries(yosys PRIVATE yosys_techlibs_achronix) +target_link_libraries(yosys_obj PUBLIC yosys_techlibs_achronix) +target_sources(yosys_obj PUBLIC $) add_share_file("share/achronix/speedster22i" "speedster22i/cells_sim.v") add_share_file("share/achronix/speedster22i" "speedster22i/cells_map.v") diff --git a/techlibs/anlogic/CMakeLists.txt b/techlibs/anlogic/CMakeLists.txt index 7b934acc232..8a66f4f5964 100644 --- a/techlibs/anlogic/CMakeLists.txt +++ b/techlibs/anlogic/CMakeLists.txt @@ -1,12 +1,13 @@ -add_library(yosys_techlibs_anlogic INTERFACE) -target_sources(yosys_techlibs_anlogic INTERFACE + +add_library(yosys_techlibs_anlogic OBJECT synth_anlogic.cc anlogic_eqn.cc anlogic_fixcarry.cc ) -target_link_libraries(yosys PRIVATE yosys_techlibs_anlogic) +target_link_libraries(yosys_obj PUBLIC yosys_techlibs_anlogic) +target_sources(yosys_obj PUBLIC $) add_share_file("share/anlogic" "cells_map.v") add_share_file("share/anlogic" "arith_map.v") diff --git a/techlibs/common/CMakeLists.txt b/techlibs/common/CMakeLists.txt index 718f20fac4b..32a13d04317 100644 --- a/techlibs/common/CMakeLists.txt +++ b/techlibs/common/CMakeLists.txt @@ -1,4 +1,4 @@ -add_library(yosys_techlib_common INTERFACE) + add_custom_command( COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/techlibs/common @@ -20,14 +20,15 @@ add_custom_target(yosys_techlib_common_gen DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/simcells_help.inc ) -target_sources(yosys_techlib_common INTERFACE +add_library(yosys_techlib_common OBJECT synth.cc prep.cc ) add_dependencies(yosys_techlib_common yosys_techlib_common_gen) -target_link_libraries(yosys PRIVATE yosys_techlib_common) +target_link_libraries(yosys_obj PUBLIC yosys_techlib_common) +target_sources(yosys_obj PUBLIC $) add_share_file("share" "simlib.v") add_share_file("share" "simcells.v") diff --git a/techlibs/coolrunner2/CMakeLists.txt b/techlibs/coolrunner2/CMakeLists.txt index 179416577dd..09a2cdb0afb 100644 --- a/techlibs/coolrunner2/CMakeLists.txt +++ b/techlibs/coolrunner2/CMakeLists.txt @@ -1,12 +1,13 @@ -add_library(yosys_techlibs_coolrunner2 INTERFACE) -target_sources(yosys_techlibs_coolrunner2 INTERFACE + +add_library(yosys_techlibs_coolrunner2 OBJECT synth_coolrunner2.cc coolrunner2_sop.cc coolrunner2_fixup.cc ) -target_link_libraries(yosys PRIVATE yosys_techlibs_coolrunner2) +target_link_libraries(yosys_obj PUBLIC yosys_techlibs_coolrunner2) +target_sources(yosys_obj PUBLIC $) add_share_file("share/coolrunner2" "cells_latch.v") add_share_file("share/coolrunner2" "cells_sim.v") diff --git a/techlibs/easic/CMakeLists.txt b/techlibs/easic/CMakeLists.txt index 646d65de3d8..5d9a37926bd 100644 --- a/techlibs/easic/CMakeLists.txt +++ b/techlibs/easic/CMakeLists.txt @@ -1,7 +1,8 @@ -add_library(yosys_techlibs_easic INTERFACE) -target_sources(yosys_techlibs_easic INTERFACE + +add_library(yosys_techlibs_easic OBJECT synth_easic.cc ) -target_link_libraries(yosys PRIVATE yosys_techlibs_easic) +target_link_libraries(yosys_obj PUBLIC yosys_techlibs_easic) +target_sources(yosys_obj PUBLIC $) diff --git a/techlibs/ecp5/CMakeLists.txt b/techlibs/ecp5/CMakeLists.txt index e6b617be245..3e6033185fc 100644 --- a/techlibs/ecp5/CMakeLists.txt +++ b/techlibs/ecp5/CMakeLists.txt @@ -1,10 +1,11 @@ -add_library(yosys_techlibs_ecp5 INTERFACE) -target_sources(yosys_techlibs_ecp5 INTERFACE + +add_library(yosys_techlibs_ecp5 OBJECT synth_ecp5.cc ) -target_link_libraries(yosys PRIVATE yosys_techlibs_ecp5) +target_link_libraries(yosys_obj PUBLIC yosys_techlibs_ecp5) +target_sources(yosys_obj PUBLIC $) add_share_file("share/ecp5" "cells_ff.vh") add_share_file("share/ecp5" "cells_io.vh") diff --git a/techlibs/efinix/CMakeLists.txt b/techlibs/efinix/CMakeLists.txt index e32ffe33871..e3f8c4cc02f 100644 --- a/techlibs/efinix/CMakeLists.txt +++ b/techlibs/efinix/CMakeLists.txt @@ -1,11 +1,12 @@ -add_library(yosys_techlibs_efinix INTERFACE) -target_sources(yosys_techlibs_efinix INTERFACE + +add_library(yosys_techlibs_efinix OBJECT synth_efinix.cc efinix_fixcarry.cc ) -target_link_libraries(yosys PRIVATE yosys_techlibs_efinix) +target_link_libraries(yosys_obj PUBLIC yosys_techlibs_efinix) +target_sources(yosys_obj PUBLIC $) add_share_file("share/efinix" "cells_map.v") add_share_file("share/efinix" "arith_map.v") diff --git a/techlibs/fabulous/CMakeLists.txt b/techlibs/fabulous/CMakeLists.txt index 6b28617865e..9d20f5d20f9 100644 --- a/techlibs/fabulous/CMakeLists.txt +++ b/techlibs/fabulous/CMakeLists.txt @@ -1,10 +1,11 @@ -add_library(yosys_techlibs_fabulous INTERFACE) -target_sources(yosys_techlibs_fabulous INTERFACE + +add_library(yosys_techlibs_fabulous OBJECT synth_fabulous.cc ) -target_link_libraries(yosys PRIVATE yosys_techlibs_fabulous) +target_link_libraries(yosys_obj PUBLIC yosys_techlibs_fabulous) +target_sources(yosys_obj PUBLIC $) add_share_file("share/fabulous" "cells_map.v") add_share_file("share/fabulous" "prims.v") diff --git a/techlibs/gatemate/CMakeLists.txt b/techlibs/gatemate/CMakeLists.txt index 627dd13c207..f4acaed9f54 100644 --- a/techlibs/gatemate/CMakeLists.txt +++ b/techlibs/gatemate/CMakeLists.txt @@ -1,6 +1,6 @@ -add_library(yosys_techlibs_gatemate INTERFACE) -target_sources(yosys_techlibs_gatemate INTERFACE + +add_library(yosys_techlibs_gatemate OBJECT synth_gatemate.cc gatemate_foldinv.cc ) @@ -10,7 +10,7 @@ add_custom_command( DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/make_lut_tree_lib.py OUTPUT lut_tree_cells.genlib lut_tree_map.v COMMENT "Generating techlibs/gatemate/lut_tree_map.v..." - WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + WORKING_DIRECTORY ${yosys_BINARY_DIR} ) target_sources(yosys_techlibs_gatemate PRIVATE @@ -18,7 +18,8 @@ target_sources(yosys_techlibs_gatemate PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/lut_tree_map.v ) -target_link_libraries(yosys PRIVATE yosys_techlibs_gatemate) +target_link_libraries(yosys_obj PUBLIC yosys_techlibs_gatemate) +target_sources(yosys_obj PUBLIC $) add_share_file("share/gatemate" "reg_map.v") add_share_file("share/gatemate" "mux_map.v") diff --git a/techlibs/gowin/CMakeLists.txt b/techlibs/gowin/CMakeLists.txt index ecb03d6cc56..33d477740ff 100644 --- a/techlibs/gowin/CMakeLists.txt +++ b/techlibs/gowin/CMakeLists.txt @@ -1,10 +1,11 @@ -add_library(yosys_techlibs_gowin INTERFACE) -target_sources(yosys_techlibs_gowin INTERFACE + +add_library(yosys_techlibs_gowin OBJECT synth_gowin.cc ) -target_link_libraries(yosys PRIVATE yosys_techlibs_gowin) +target_link_libraries(yosys_obj PUBLIC yosys_techlibs_gowin) +target_sources(yosys_obj PUBLIC $) add_share_file("share/gowin" "cells_map.v") add_share_file("share/gowin" "cells_sim.v") diff --git a/techlibs/greenpak4/CMakeLists.txt b/techlibs/greenpak4/CMakeLists.txt index 415171f4c6f..0777e3ec1ea 100644 --- a/techlibs/greenpak4/CMakeLists.txt +++ b/techlibs/greenpak4/CMakeLists.txt @@ -1,11 +1,12 @@ -add_library(yosys_techlibs_greenpak4 INTERFACE) -target_sources(yosys_techlibs_greenpak4 INTERFACE + +add_library(yosys_techlibs_greenpak4 OBJECT synth_greenpak4.cc greenpak4_dffinv.cc ) -target_link_libraries(yosys PRIVATE yosys_techlibs_greenpak4) +target_link_libraries(yosys_obj PUBLIC yosys_techlibs_greenpak4) +target_sources(yosys_obj PUBLIC $) add_share_file("share/greenpak4" "cells_blackbox.v") add_share_file("share/greenpak4" "cells_latch.v") diff --git a/techlibs/ice40/CMakeLists.txt b/techlibs/ice40/CMakeLists.txt index 0e33514bed7..a8142dc9871 100644 --- a/techlibs/ice40/CMakeLists.txt +++ b/techlibs/ice40/CMakeLists.txt @@ -1,12 +1,13 @@ -add_library(yosys_techlibs_ice40 INTERFACE) -target_sources(yosys_techlibs_ice40 INTERFACE + +add_library(yosys_techlibs_ice40 OBJECT synth_ice40.cc ice40_braminit.cc ice40_opt.cc ) -target_link_libraries(yosys PRIVATE yosys_techlibs_ice40) +target_link_libraries(yosys_obj PUBLIC yosys_techlibs_ice40) +target_sources(yosys_obj PUBLIC $) add_share_file("share/ice40" "arith_map.v") add_share_file("share/ice40" "cells_map.v") diff --git a/techlibs/intel/CMakeLists.txt b/techlibs/intel/CMakeLists.txt index f79c2345ed6..486513c4498 100644 --- a/techlibs/intel/CMakeLists.txt +++ b/techlibs/intel/CMakeLists.txt @@ -1,10 +1,11 @@ -add_library(yosys_techlibs_intel INTERFACE) -target_sources(yosys_techlibs_intel INTERFACE + +add_library(yosys_techlibs_intel OBJECT synth_intel.cc ) -target_link_libraries(yosys PRIVATE yosys_techlibs_intel) +target_link_libraries(yosys_obj PUBLIC yosys_techlibs_intel) +target_sources(yosys_obj PUBLIC $) add_share_file("share/intel/common" "common/m9k_bb.v") add_share_file("share/intel/common" "common/altpll_bb.v") diff --git a/techlibs/intel_alm/CMakeLists.txt b/techlibs/intel_alm/CMakeLists.txt index e1179f1b1d5..541f9f67cbe 100644 --- a/techlibs/intel_alm/CMakeLists.txt +++ b/techlibs/intel_alm/CMakeLists.txt @@ -1,10 +1,11 @@ -add_library(yosys_techlibs_intel_alm INTERFACE) -target_sources(yosys_techlibs_intel_alm INTERFACE + +add_library(yosys_techlibs_intel_alm OBJECT synth_intel_alm.cc ) -target_link_libraries(yosys PRIVATE yosys_techlibs_intel_alm) +target_link_libraries(yosys_obj PUBLIC yosys_techlibs_intel_alm) +target_sources(yosys_obj PUBLIC $) # Techmap add_share_file("share/intel_alm/common" "common/abc9_map.v") diff --git a/techlibs/lattice/CMakeLists.txt b/techlibs/lattice/CMakeLists.txt index e9955cff624..947ce3814aa 100644 --- a/techlibs/lattice/CMakeLists.txt +++ b/techlibs/lattice/CMakeLists.txt @@ -1,11 +1,12 @@ -add_library(yosys_techlibs_lattice INTERFACE) -target_sources(yosys_techlibs_lattice INTERFACE + +add_library(yosys_techlibs_lattice OBJECT synth_lattice.cc lattice_gsr.cc ) -target_link_libraries(yosys PRIVATE yosys_techlibs_lattice) +target_link_libraries(yosys_obj PUBLIC yosys_techlibs_lattice) +target_sources(yosys_obj PUBLIC $) add_share_file("share/lattice" "cells_ff.vh") add_share_file("share/lattice" "cells_io.vh") diff --git a/techlibs/microchip/CMakeLists.txt b/techlibs/microchip/CMakeLists.txt index 889858537de..795edd4bac6 100644 --- a/techlibs/microchip/CMakeLists.txt +++ b/techlibs/microchip/CMakeLists.txt @@ -1,11 +1,12 @@ -add_library(yosys_techlibs_microchip INTERFACE) -target_sources(yosys_techlibs_microchip INTERFACE + +add_library(yosys_techlibs_microchip OBJECT synth_microchip.cc microchip_dffopt.cc ) -target_link_libraries(yosys PRIVATE yosys_techlibs_microchip) +target_link_libraries(yosys_obj PUBLIC yosys_techlibs_microchip) +target_sources(yosys_obj PUBLIC $) add_share_file("share/microchip" "arith_map.v") add_share_file("share/microchip" "cells_map.v") diff --git a/techlibs/nanoxplore/CMakeLists.txt b/techlibs/nanoxplore/CMakeLists.txt index cfbc31982d7..7e7ae4bdc83 100644 --- a/techlibs/nanoxplore/CMakeLists.txt +++ b/techlibs/nanoxplore/CMakeLists.txt @@ -1,11 +1,12 @@ -add_library(yosys_techlibs_nanoxplore INTERFACE) -target_sources(yosys_techlibs_nanoxplore INTERFACE + +add_library(yosys_techlibs_nanoxplore OBJECT synth_nanoxplore.cc nx_carry.cc ) -target_link_libraries(yosys PRIVATE yosys_techlibs_nanoxplore) +target_link_libraries(yosys_obj PUBLIC yosys_techlibs_nanoxplore) +target_sources(yosys_obj PUBLIC $) # Techmap add_share_file("share/nanoxplore" "arith_map.v") diff --git a/techlibs/nexus/CMakeLists.txt b/techlibs/nexus/CMakeLists.txt index a285e3407b9..1f47fd1c9f5 100644 --- a/techlibs/nexus/CMakeLists.txt +++ b/techlibs/nexus/CMakeLists.txt @@ -1,10 +1,11 @@ -add_library(yosys_techlibs_nexus INTERFACE) -target_sources(yosys_techlibs_nexus INTERFACE + +add_library(yosys_techlibs_nexus OBJECT synth_nexus.cc ) -target_link_libraries(yosys PRIVATE yosys_techlibs_nexus) +target_link_libraries(yosys_obj PUBLIC yosys_techlibs_nexus) +target_sources(yosys_obj PUBLIC $) add_share_file("share/nexus" "cells_map.v") add_share_file("share/nexus" "cells_sim.v") diff --git a/techlibs/quicklogic/CMakeLists.txt b/techlibs/quicklogic/CMakeLists.txt index 971a335062c..81e0d9d5845 100644 --- a/techlibs/quicklogic/CMakeLists.txt +++ b/techlibs/quicklogic/CMakeLists.txt @@ -1,24 +1,29 @@ -add_library(yosys_techlibs_quicklogic INTERFACE) +add_library(yosys_techlibs_quicklogic OBJECT + synth_quicklogic.cc + ql_bram_merge.cc + ql_bram_types.cc + ql_dsp_simd.cc + ql_dsp_io_regs.cc + ql_dsp_macc.cc + ql_ioff.cc +) function(pmgen_command _name) + set(CUSTOM_TARGET_NAME ${_name}_pm_gen) + set(GENERATED_HEADER ${CMAKE_CURRENT_BINARY_DIR}/${_name}_pm.h) add_custom_command( - OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_name}_pm.h - COMMAND ${Python3_EXECUTABLE} ${CMAKE_SOURCE_DIR}/passes/pmgen/pmgen.py -o ${CMAKE_CURRENT_BINARY_DIR}/${_name}_pm.h -p ${_name} ${CMAKE_CURRENT_SOURCE_DIR}/${_name}.pmg - DEPENDS ${CMAKE_SOURCE_DIR}/passes/pmgen/pmgen.py ${CMAKE_CURRENT_SOURCE_DIR}/${_name}.pmg + OUTPUT ${GENERATED_HEADER} + COMMAND ${Python3_EXECUTABLE} ${yosys_SOURCE_DIR}/passes/pmgen/pmgen.py -o ${GENERATED_HEADER} -p ${_name} ${CMAKE_CURRENT_SOURCE_DIR}/${_name}.pmg + DEPENDS ${yosys_SOURCE_DIR}/passes/pmgen/pmgen.py ${CMAKE_CURRENT_SOURCE_DIR}/${_name}.pmg COMMENT "Generating passes/pmgen/${_name}_pm.h..." ) + add_custom_target(${CUSTOM_TARGET_NAME} DEPENDS ${GENERATED_HEADER}) + add_dependencies(yosys_techlibs_quicklogic ${CUSTOM_TARGET_NAME}) endfunction() pmgen_command(ql_dsp_macc) -target_sources(yosys_techlibs_quicklogic INTERFACE - synth_quicklogic.cc - ql_bram_merge.cc - ql_bram_types.cc - ql_dsp_simd.cc - ql_dsp_io_regs.cc - ql_dsp_macc.cc -) + add_custom_command( COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/qlf_k6n10f @@ -28,12 +33,22 @@ add_custom_command( COMMENT "Generating techlibs/quicklogic/qlf_k6n10f/bram_types_sim.v..." ) -target_sources(yosys_techlibs_quicklogic PRIVATE - ${CMAKE_CURRENT_BINARY_DIR}/ql_dsp_macc_pm.h - ${CMAKE_CURRENT_BINARY_DIR}/qlf_k6n10f/bram_types_sim.v +target_sources(yosys_techlibs_quicklogic PUBLIC + # ${CMAKE_CURRENT_BINARY_DIR}/ql_dsp_macc_pm.h + # ${CMAKE_CURRENT_BINARY_DIR}/qlf_k6n10f/bram_types_sim.v +) + +## Custom target to generate the ql_dsp_macc_pm.h file +add_custom_target(yosys_techlibs_quicklogic_gen + DEPENDS + ${CMAKE_CURRENT_BINARY_DIR}/ql_dsp_macc_pm.h + ${CMAKE_CURRENT_BINARY_DIR}/qlf_k6n10f/bram_types_sim.v ) -target_link_libraries(yosys PRIVATE yosys_techlibs_quicklogic) +add_dependencies(yosys_obj yosys_techlibs_quicklogic_gen) + +target_link_libraries(yosys_obj PUBLIC yosys_techlibs_quicklogic) +target_sources(yosys_obj PUBLIC $) add_share_file("share/quicklogic/common" "common/cells_sim.v") add_share_file("share/quicklogic/pp3" "pp3/ffs_map.v") diff --git a/techlibs/sf2/CMakeLists.txt b/techlibs/sf2/CMakeLists.txt index 76c7ae5b9d6..2dd7029d468 100644 --- a/techlibs/sf2/CMakeLists.txt +++ b/techlibs/sf2/CMakeLists.txt @@ -1,10 +1,11 @@ -add_library(yosys_techlibs_sf2 INTERFACE) -target_sources(yosys_techlibs_sf2 INTERFACE + +add_library(yosys_techlibs_sf2 OBJECT synth_sf2.cc ) -target_link_libraries(yosys PRIVATE yosys_techlibs_sf2) +target_link_libraries(yosys_obj PUBLIC yosys_techlibs_sf2) +target_sources(yosys_obj PUBLIC $) add_share_file("share/sf2" "arith_map.v") add_share_file("share/sf2" "cells_map.v") diff --git a/techlibs/xilinx/CMakeLists.txt b/techlibs/xilinx/CMakeLists.txt index 147303f37c3..cb2e3afebc6 100644 --- a/techlibs/xilinx/CMakeLists.txt +++ b/techlibs/xilinx/CMakeLists.txt @@ -1,11 +1,12 @@ -add_library(yosys_techlibs_xilinx INTERFACE) -target_sources(yosys_techlibs_xilinx INTERFACE + +add_library(yosys_techlibs_xilinx OBJECT synth_xilinx.cc xilinx_dffopt.cc ) -target_link_libraries(yosys PRIVATE yosys_techlibs_xilinx) +target_link_libraries(yosys_obj PUBLIC yosys_techlibs_xilinx) +target_sources(yosys_obj PUBLIC $) add_share_file("share/xilinx" "cells_map.v") add_share_file("share/xilinx" "cells_sim.v")