yosys/docs/source/getting_started/installation.rst

332 lines
11 KiB
ReStructuredText
Raw Normal View History

Installation
------------
This document will guide you through the process of installing Yosys.
CAD suite(s)
~~~~~~~~~~~~
Yosys is part of the `Tabby CAD Suite
<https://www.yosyshq.com/tabby-cad-datasheet>`_ and the `OSS CAD Suite
<https://github.com/YosysHQ/oss-cad-suite-build>`_! The easiest way to use yosys
is to install the binary software suite, which contains all required
dependencies and related tools.
* `Contact YosysHQ <https://www.yosyshq.com/contact>`_ for a `Tabby CAD Suite
<https://www.yosyshq.com/tabby-cad-datasheet>`_ Evaluation License and
download link
* OR go to https://github.com/YosysHQ/oss-cad-suite-build/releases to download
the free OSS CAD Suite
* Follow the `Install Instructions on GitHub
<https://github.com/YosysHQ/oss-cad-suite-build#installation>`_
Make sure to get a Tabby CAD Suite Evaluation License if you need features such
as industry-grade SystemVerilog and VHDL parsers!
For more information about the difference between Tabby CAD Suite and the OSS
CAD Suite, please visit https://www.yosyshq.com/tabby-cad-datasheet
Many Linux distributions also provide Yosys binaries, some more up to date than
others. Check with your package manager!
Targeted architectures
^^^^^^^^^^^^^^^^^^^^^^
The `OSS CAD Suite`_ releases `nightly builds`_ for the following architectures:
- **linux-x64** - Most personal Linux based computers
- **darwin-x64** - macOS 12 or later with Intel CPU
- **darwin-arm64** - macOS 12 or later with M1/M2 CPU
- **windows-x64** - Targeted for Windows 10 and 11
- **linux-arm64** - Devices such as Raspberry Pi with 64bit OS
For more information about the targeted architectures, and the current build
status, check the `OSS CAD Suite`_ git repository.
.. _OSS CAD Suite: https://github.com/YosysHQ/oss-cad-suite-build
.. _nightly builds: https://github.com/YosysHQ/oss-cad-suite-build/releases/latest
Building from source
~~~~~~~~~~~~~~~~~~~~
The Yosys source files can be obtained from the `YosysHQ/Yosys git repository`_.
`ABC`_ and some of the other libraries used are included as git submodules. To
clone these submodules at the same time, use e.g.:
.. code:: console
git clone --recurse-submodules https://github.com/YosysHQ/yosys.git # ..or..
git clone https://github.com/YosysHQ/yosys.git
cd yosys
git submodule update --init --recursive
.. _YosysHQ/Yosys git repository: https://github.com/yosyshq/yosys/
.. _ABC: https://github.com/berkeley-abc/abc
2024-12-04 21:21:13 +01:00
.. note::
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``.
Supported platforms
^^^^^^^^^^^^^^^^^^^
The following platforms are supported and regularly tested:
- Linux
- macOS
Other platforms which may work, but instructions may not be up to date and are
not regularly tested:
- FreeBSD
- WSL
- Windows with (e.g.) Cygwin
Build prerequisites
^^^^^^^^^^^^^^^^^^^
A C++ compiler with C++20 support is required as well as some standard tools
2026-06-02 05:45:00 +02:00
such as GNU Flex, GNU Bison (>=3.8), CMake (>=3.27), Make (or other CMake
generator such as Ninja), and Python (>=3.11). Some additional tools: readline,
libffi, Tcl and zlib; will be used if available but are optional. Graphviz and
Xdot are used by the `show` command to display schematics.
Installing all prerequisites:
.. tab:: Ubuntu 22.04
.. code:: console
2025-11-04 08:35:07 +01:00
sudo apt-get install gawk git make python3 lld bison clang flex \
2025-11-01 08:11:36 +01:00
libffi-dev libfl-dev libreadline-dev pkg-config tcl-dev zlib1g-dev \
graphviz xdot
2026-06-02 05:45:00 +02:00
sudo snap install cmake --classic
.. tab:: Ubuntu 24.04
.. code:: console
sudo apt-get install gawk git cmake make python3 lld bison clang flex \
libffi-dev libfl-dev libreadline-dev pkg-config tcl-dev zlib1g-dev \
graphviz xdot
.. tab:: macOS 13 (with Homebrew)
.. code:: console
brew tap Homebrew/bundle && brew bundle
.. tab:: MacPorts
.. code:: console
sudo port install bison flex readline gawk libffi graphviz \
2025-11-04 08:35:07 +01:00
pkgconfig python311 zlib tcl
.. tab:: FreeBSD
.. code:: console
pkg install bison flex readline gawk libffi graphviz \
2025-11-04 08:35:07 +01:00
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``
2026-06-02 05:45:00 +02:00
.. 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
additional packages:
.. code:: console
2026-06-02 05:45:00 +02:00
setup-x86_64.exe -q --packages=bison,flex,gcc-core,gcc-g++,git,libffi-devel,libreadline-devel,cmake,make,pkg-config,python3,tcl-devel,zlib-devel
.. warning::
As of this writing, Cygwin only supports up to Python 3.9.16 while the
minimum required version of Python is 3.11. This means that Cygwin is not
compatible with many of the Python-based frontends. While this does not
currently prevent Yosys itself from working, no guarantees are made for
2026-06-02 05:45:00 +02:00
continued support. You may also need to specify ``CXXSTD=gnu++20`` to
resolve missing ``strdup`` function when using gcc. It is instead
recommended to use Windows Subsystem for Linux (WSL) and follow the
instructions for Ubuntu.
..
tab:: MSYS2 (MINGW64)
.. code:: console
2025-11-04 08:35:07 +01:00
pacman -S bison flex mingw-w64-x86_64-gcc git libffi-devel libreadline-devel make pkg-config python3 tcl-devel zlib-devel
Not that I can get this to work; it's failing during ld with what looks like
math library issues: ``multiple definition of `tanh'`` and
``undefined reference to `__imp_acosh'``, as well as issues in `aiger2` with
``seekg`` et al not being available.
.. note::
The ``config-msys2-64`` target uses the ``mingw-w64-x86_64-`` prefixed
compiler in order to allow compiled exe files to be run without an MSYS2
shell.
Build configuration
^^^^^^^^^^^^^^^^^^^
2026-06-02 05:45:00 +02:00
The Yosys build is configured via CMake, and uses a number of variables
which influence the build process.
set one-off options with
.. code:: console
2026-06-02 05:45:00 +02:00
cmake -B build . --fresh \
-DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++
2026-06-02 05:45:00 +02:00
set persistent options with
.. code:: console
2026-06-02 05:45:00 +02:00
vi Configuration.cmake # ..then..
cmake -C Configuration.cmake -B build . --fresh
2026-06-02 05:45:00 +02:00
e.g.
2026-06-02 05:45:00 +02:00
.. code:: cmake
2026-06-02 05:45:00 +02:00
set(CMAKE_C_COMPILER clang CACHE STRING "")
set(CMAKE_CXX_COMPILER clang++ CACHE STRING "")
set(YOSYS_WITHOUT_ZLIB ON CACHE STRING "")
2026-06-02 05:45:00 +02:00
Once generated, build variables can be inspected and modified with:
.. code:: console
2026-06-02 05:45:00 +02:00
ccmake build #..or..
vi build/CMakeCache.txt
If you have clang, and (a compatible version of) ``ld.lld`` available in PATH,
it's recommended to speed up incremental builds with lld by enabling LTO with
2026-06-02 05:45:00 +02:00
``CMAKE_INTERPROCEDURAL_OPTIMIZATION=ON``. On macOS, LTO requires using clang
from homebrew rather than clang from xcode. For example:
.. code:: console
2026-06-02 05:45:00 +02:00
cmake -B build . -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON \
-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`_,
using :program:`yosys-abc` as the executable name. To use an existing ABC
2026-06-02 05:45:00 +02:00
executable instead, set the :makevar:`YOSYS_ABC_EXECUTABLE` make variable to point to
the desired executable.
Running the build system
^^^^^^^^^^^^^^^^^^^^^^^^
From the root ``yosys`` directory, call the following commands:
.. code:: console
2026-06-02 05:45:00 +02:00
cmake -B build . -DCMAKE_BUILD_TYPE=Release
cmake --build build --config Release --parallel $(nproc)
sudo cmake --install build --strip
2026-06-02 05:45:00 +02:00
Note that Yosys does not support in-tree builds, and if calling ``cmake`` from
the root ``yosys`` directory the ``-B`` option must be provided.
.. seealso::
Refer to :doc:`/yosys_internals/extending_yosys/test_suites` for details on
testing Yosys once compiled.
Source tree and build system
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The Yosys source tree is organized into the following top-level
directories:
2024-01-18 01:52:32 +01:00
``backends/``
This directory contains a subdirectory for each of the backend modules.
2026-06-02 05:45:00 +02:00
``cmake/``
Additional ``.cmake`` files used by CMake during build generation.
2024-01-18 01:52:32 +01:00
``docs/``
Contains the source for this documentation, including images and sample code.
``examples/``
Contains example code for using Yosys with some other tools including a demo
of the Yosys Python api, and synthesizing for various toolchains such as
Intel and Anlogic.
``frontends/``
This directory contains a subdirectory for each of the frontend modules.
``kernel/``
This directory contains all the core functionality of Yosys. This includes
the functions and definitions for working with the RTLIL data structures
(:file:`rtlil.{h|cc}`), the ``main()`` function (:file:`driver.cc`), the
internal framework for generating log messages (:file:`log.{h|cc}`), the
internal framework for registering and calling passes
(:file:`register.{h|cc}`), some core commands that are not really passes
(:file:`select.cc`, :file:`show.cc`, …) and a couple of other small utility
libraries.
2024-01-18 01:52:32 +01:00
``libs/``
Libraries packaged with Yosys builds are contained in this folder. See
:doc:`/appendix/auxlibs`.
``misc/``
Other miscellany which doesn't fit anywhere else.
``passes/``
This directory contains a subdirectory for each pass or group of passes. For
2024-05-03 03:38:01 +02:00
example as of this writing the directory :file:`passes/hierarchy/` contains
the code for three passes: `hierarchy`, `submod`, and `uniquify`.
2024-01-18 01:52:32 +01:00
2026-06-02 05:45:00 +02:00
``pyosys/``
Contains the scripts and wrappers necessary for building :doc:`Pyosys
</using_yosys/pyosys>`.
2024-01-18 01:52:32 +01:00
``techlibs/``
This directory contains simulation models and standard implementations for
the cells from the internal cell library.
``tests/``
This directory contains the suite of unit tests and regression tests used by
Yosys. See :doc:`/yosys_internals/extending_yosys/test_suites`.
2026-06-02 05:45:00 +02:00
.. TODO:: CMAKE_TODO
- ``yosys_<pass|test_pass|frontend|backend>(<name>)`` for each pass
- see :file:`cmake/YosysComponent.cmake`
- if using a sub folder, add it to the parent's ``CMakeLists.txt`` with
``add_subdirectory(<name>)``
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
with Yosys. So it is not needed to add additional commands to a central list of
commands.
Good starting points for reading example source code to learn how to write
passes are :file:`passes/opt/opt_dff.cc` and :file:`passes/opt/opt_merge.cc`.
Users of the Qt Creator IDE can generate a QT Creator project file using make
qtcreator. Users of the Eclipse IDE can use the "Makefile Project with Existing
Code" project type in the Eclipse "New Project" dialog (only available after the
CDT plugin has been installed) to create an Eclipse project in order to
programming extensions to Yosys or just browse the Yosys code base.