diff --git a/README.md b/README.md index 9a3e45388..f8b3dfa4f 100644 --- a/README.md +++ b/README.md @@ -102,26 +102,28 @@ Once generated, available build variables can be inspected and modified with $ ccmake build #..or.. $ vi build/CMakeCache.txt -When setting one-off variables, CMake provides the `-D =` command line -option. For example, disabling zlib support: +When setting one-off variables, CMake provides the `-D =` command +line option. For example, disabling zlib support: $ cmake -B build . -DYOSYS_WITHOUT_ZLIB=ON For a more persistent configuration, we recommend creating and using a -`CMakeUserPresets.json` file. Below is an example file which sets the default -compiler to clang when calling `cmake --preset clang`: +`CMakeUserPresets.json` file in the root `yosys` directory. Below is an example +file which enables ccache and sets the default compiler to clang when calling +`cmake --preset clang`: ```json { "version": 1, "configurePresets": [ { - "name": "clang", + "name": "default", "binaryDir": "build", "generator": "Unix Makefiles", "cacheVariables": { "CMAKE_C_COMPILER": "clang", - "CMAKE_CXX_COMPILER": "clang++" + "CMAKE_CXX_COMPILER": "clang++", + "YOSYS_COMPILER_LAUNCHER": "ccache" } } ] diff --git a/cmake/YosysAbcSubmodule.cmake b/cmake/YosysAbcSubmodule.cmake index 742580513..ee0dcb4c3 100644 --- a/cmake/YosysAbcSubmodule.cmake +++ b/cmake/YosysAbcSubmodule.cmake @@ -56,7 +56,7 @@ function(yosys_check_abc_submodule) else() # message(FATAL_ERROR "${CMAKE_SOURCE_DIR} is not configured as a git repository, and 'abc' folder is missing.\n" - "If you already have ABC, set 'YOSYS_ABC_EXECUTABLE' make variable to point to ABC executable.\n" + "If you already have ABC, set 'YOSYS_ABC_EXECUTABLE' CMake variable to point to ABC executable.\n" "Otherwise, download release archive 'yosys.tar.gz' from https://github.com/YosysHQ/yosys/releases.\n" " ('Source code' archive does not contain submodules.)\n" ) diff --git a/docs/source/getting_started/installation.rst b/docs/source/getting_started/installation.rst index 60dcd09ea..691731fbf 100644 --- a/docs/source/getting_started/installation.rst +++ b/docs/source/getting_started/installation.rst @@ -67,7 +67,7 @@ clone these submodules at the same time, use e.g.: As of Yosys v0.47, releases include a ``yosys.tar.gz`` file which includes all source code and all sub-modules in a single archive. This can be used as - an alternative which does not rely on ``git``. + an alternative which does not rely on :program:`git`. Supported platforms ^^^^^^^^^^^^^^^^^^^ @@ -122,23 +122,16 @@ Installing all prerequisites: .. code:: console - sudo port install bison flex readline gawk libffi graphviz \ + sudo port install bison cmake flex readline gawk libffi graphviz \ pkgconfig python311 zlib tcl .. tab:: FreeBSD .. code:: console - pkg install bison flex readline gawk libffi graphviz \ + pkg install bison cmake-core flex readline gawk libffi graphviz \ pkgconf python311 tcl-wrapper - .. note:: On FreeBSD system use gmake instead of make. To run tests use: - ``MAKE=gmake CXX=cxx CC=cc gmake test`` - - .. TODO:: CMAKE_TODO - - Is this still required, and (how) does it work with CMake - .. tab:: Cygwin Use the following command to install all prerequisites, or select these @@ -190,32 +183,35 @@ influence the build process. When setting one-off variables, CMake provides the .. warning:: - Yosys does not support in-tree builds. If calling ``cmake`` from the root - ``yosys`` directory the ``-B`` option must be provided. + Yosys does not support in-tree builds. If calling :program:`cmake` from the + root ``yosys`` directory the ``-B`` option must be provided. For a more persistent configuration, we recommend creating and using a -``CMakeUserPresets.json`` file. Below is an example file which sets the default -compiler to clang when calling ``cmake --preset clang``: +``CMakeUserPresets.json`` file in the root ``yosys`` directory. Below is an +example file which enables ccache and sets the default compiler to clang when +calling ``cmake --preset default``: -.. code:: json +.. code-block:: json + :caption: CMakeUserPresets.json { "version": 1, "configurePresets": [ { - "name": "clang", + "name": "default", "binaryDir": "build", "generator": "Unix Makefiles", "cacheVariables": { "CMAKE_C_COMPILER": "clang", - "CMAKE_CXX_COMPILER": "clang++" + "CMAKE_CXX_COMPILER": "clang++", + "YOSYS_COMPILER_LAUNCHER": "ccache" } } ] } Once generated, available build variables can be inspected and modified with -``ccmake`` or opening the generated ``build/CMakeCache.txt`` file: +:program:`ccmake` or opening the generated ``build/CMakeCache.txt`` file: .. code:: console @@ -233,7 +229,7 @@ from homebrew rather than clang from xcode. For example: -DCMAKE_C_COMPILER=$(brew --prefix)/opt/llvm/bin/clang \ -DCMAKE_CXX_COMPILER=$(brew --prefix)/opt/llvm/bin/clang++ -By default, building (and installing) yosys will build (and install) `ABC`_, +By default, building (and installing) Yosys will build (and install) `ABC`_, using :program:`yosys-abc` as the executable name. To use an existing ABC executable instead, set the :makevar:`YOSYS_ABC_EXECUTABLE` CMake variable to point to the desired executable. @@ -329,11 +325,9 @@ directories: - if using a sub folder, add it to the parent's ``CMakeLists.txt`` with ``add_subdirectory()`` - The top-level Makefile includes :file:`frontends/{*}/Makefile.inc`, - :file:`passes/{*}/Makefile.inc` and :file:`backends/{*}/Makefile.inc`. So when - extending Yosys it is enough to create a new directory in :file:`frontends/`, - :file:`passes/` or :file:`backends/` with your sources and a - :file:`Makefile.inc`. The Yosys kernel automatically detects all commands linked + - previous: + + The Yosys kernel automatically detects all commands linked with Yosys. So it is not needed to add additional commands to a central list of commands. diff --git a/docs/source/using_yosys/pyosys.rst b/docs/source/using_yosys/pyosys.rst index a0ea0a993..b059516e1 100644 --- a/docs/source/using_yosys/pyosys.rst +++ b/docs/source/using_yosys/pyosys.rst @@ -18,7 +18,7 @@ custom passes written in C++. .. note:: - It is recommended to install ``uv`` for managing python environments: + It is recommended to install :program:`uv` for managing python environments: .. code:: console @@ -30,10 +30,6 @@ Getting Pyosys Pyosys supports CPython 3.8 or higher. You can access Pyosys using one of two methods: -.. TODO:: CMAKE_TODO - - may still be pending further changes - 1. Compiling Yosys with the CMake flag ``-DYOSYS_WITH_PYTHON=ON`` This adds the flag ``-y`` to the Yosys binary, which allows you to execute @@ -42,9 +38,9 @@ methods: ``yosys -y ./my_pyosys_script.py`` Do note this requires some build-time dependencies to be available to Python, - namely, ``pybind11`` and ``cxxheaderparser``. If available, ``uv`` will be - used to create an ephemeral environment with the correct versions of the - tools installed. + namely, ``pybind11`` and ``cxxheaderparser``. :program:`uv` may be used to + create an ephemeral environment with the correct versions of the tools + installed if the current python environment doesn't provide them. 2. Installing the Pyosys wheels diff --git a/docs/source/yosys_internals/extending_yosys/build_verific.rst b/docs/source/yosys_internals/extending_yosys/build_verific.rst index 5ea491e1b..b9ecd352e 100644 --- a/docs/source/yosys_internals/extending_yosys/build_verific.rst +++ b/docs/source/yosys_internals/extending_yosys/build_verific.rst @@ -64,12 +64,6 @@ edif edif EDIF support liberty synlib Liberty file support ============== =========== =================================== -.. TODO:: CMAKE_TODO - - ``yosys-config --cxxflags`` no longer includes the verific features, and the - CMakeCache.txt doesn't report auto detected :makevar:`YOSYS_VERIFIC_FEATURES` - - can we export these somehow? - .. note:: The YosysHQ specific extensions are only available with the TabbyCAD suite. diff --git a/docs/source/yosys_internals/extending_yosys/test_suites.rst b/docs/source/yosys_internals/extending_yosys/test_suites.rst index e33dc4836..2342c505d 100644 --- a/docs/source/yosys_internals/extending_yosys/test_suites.rst +++ b/docs/source/yosys_internals/extending_yosys/test_suites.rst @@ -16,32 +16,20 @@ tests. cmake -B build . cmake --build build --target test --parallel $(nproc) -.. TODO:: CMAKE_TODO - - Using ``make -C `` does work, but only if using default - :makevar:`BUILD_DIR` (``build``) and :makevar:`PROGRAM_PREFIX` (none). - Vanilla tests ~~~~~~~~~~~~~ .. TODO:: update for test infra changes These make up the majority of our testing coverage. They can be run with the -``test-vanilla`` CMake target, or by calling ``make vanilla-test`` from the -``tests`` directory, and are based on calls to make subcommands (``make -makefile-tests``) and shell scripts (``make seed-tests`` and ``make -abcopt-tests``). Both use ``run-test.sh`` files, but make-based tests only call -``tests/gen-tests-makefile.sh`` to generate a makefile appropriate for the given -directory, so only afterwards when make is invoked do the tests actually run. - -Usually their structure looks something like this: -you write a .ys file that gets automatically run, -which runs a frontend like ``read_verilog`` or ``read_rtlil`` with -a relative path or a heredoc, then runs some commands including the command -under test, and then uses :doc:`/using_yosys/more_scripting/selections` -with ``-assert-count``. Usually it's unnecessary to "register" the test anywhere -as if it's being added to an existing directory, depending -on how the ``run-test.sh`` in that directory works. +``test-vanilla`` CMake target. Usually their structure looks something like +this: you write a .ys file that gets automatically run, which runs a frontend +like ``read_verilog`` or ``read_rtlil`` with a relative path or a heredoc, then +runs some commands including the command under test, and then uses +:doc:`/using_yosys/more_scripting/selections` with ``-assert-count``. Usually +it's unnecessary to "register" the test anywhere as if it's being added to an +existing directory, depending on how the ``run-test.sh`` in that directory +works. Unit tests ~~~~~~~~~~ @@ -90,23 +78,21 @@ instructions `_. .. TODO:: CMAKE_TODO - How does this work under CMake? Is it only via ``make -C tests ENABLE_FUNCTIONAL_TESTS=1`` + How does this work under CMake? Is it only via ``make -C tests + ENABLE_FUNCTIONAL_TESTS=1`` and then manually setting ``BUILD_DIR`` and + ``PROGRAM_PREFIX``? And possibly also setting ``YOSYS`` et al if there is a + ``.exe``. Previous instructions: -Then, set the :makevar:`ENABLE_FUNCTIONAL_TESTS` make variable when calling -``make test`` and the functional tests will be run as well. + Then, set the :makevar:`ENABLE_FUNCTIONAL_TESTS` make variable when calling + ``make test`` and the functional tests will be run as well. Docs tests ~~~~~~~~~~ -.. TODO:: CMAKE_TODO - - Is this available via CMake? - There are some additional tests for checking examples included in the -documentation, which can be run by calling ``make test`` from the -:file:`yosys/docs` sub-directory (or ``make -C docs test`` from the root). This -also includes checking some macro commands to ensure that descriptions of them -are kept up to date, and is mostly intended for CI. +documentation, which can be run with the ``test-docs`` CMake target. This also +includes checking some macro commands to ensure that descriptions of them are +kept up to date, and is mostly intended for CI. Automatic testing diff --git a/kernel/register.cc b/kernel/register.cc index bfb442dae..004650ff2 100644 --- a/kernel/register.cc +++ b/kernel/register.cc @@ -28,11 +28,7 @@ #include #include #include - -#if !defined(__wasm) #include -namespace fs = std::filesystem; -#endif YOSYS_NAMESPACE_BEGIN @@ -777,10 +773,9 @@ struct HelpPass : public Pass { bool raise_error = false; std::map> groups; -#if !defined(__wasm) - auto this_path = fs::path(source_location::current().file_name()); + // get root path + auto this_path = std::filesystem::path(source_location::current().file_name()); auto source_root = this_path.parent_path().parent_path(); -#endif json.name("cmds"); json.begin_object(); // iterate over commands @@ -922,19 +917,18 @@ struct HelpPass : public Pass { } } + // fix path string source_file = pass->location.file_name(); bool has_source = source_file.compare("unknown") != 0; -#if !defined(__wasm) - // fix path - fs::path source_path; + std::filesystem::path source_path; auto no_source_group = false; if (has_source) { - source_path = fs::path(pass->location.file_name()); + source_path = std::filesystem::path(pass->location.file_name()); if (source_path.is_absolute()) { // using proximate instead of relative means that we // still get the source path if they aren't relative - auto proximate_path = fs::proximate(source_path, source_root); - if (proximate_path == fs::weakly_canonical(proximate_path)) + auto proximate_path = std::filesystem::proximate(source_path, source_root); + if (proximate_path == std::filesystem::weakly_canonical(proximate_path)) // we're only interested if it's a subpath of our root dir source_path = proximate_path; else @@ -943,7 +937,6 @@ struct HelpPass : public Pass { } source_file = source_path.string(); } -#endif // attempt auto group if (!cmd_help.has_group()) { @@ -954,16 +947,8 @@ struct HelpPass : public Pass { else if (source_file.find("frontends/") == 0 || (!has_source && name.find("write_") == 0)) cmd_help.group = "frontends"; else if (has_source) { -#if !defined(__wasm) if (source_path.has_parent_path() && !no_source_group) cmd_help.group = source_path.parent_path(); -#else - auto last_slash = source_file.find_last_of('/'); - if (last_slash != string::npos) { - auto parent_path = source_file.substr(0, last_slash); - cmd_help.group = parent_path; - } -#endif } // implicit !has_source else if (name.find("equiv") == 0)