Go to file
Jean-Paul Chaput bcdda98806 Duplicated ".spi" targets in pnrcheck designflow. 2023-11-23 12:38:04 +01:00
.github/workflows Add github pages workflow 2023-11-18 17:31:17 +00:00
Seabreeze Rename tabs.css into custom_tabs.css to avoid doxygen overwrite. 2023-11-23 12:38:04 +01:00
_build_utils Initial test meson build 2023-10-06 16:50:35 +01:00
anabatic Don't connect with M2 on M3 RoutingPads. 2023-11-23 12:38:04 +01:00
bootstrap Makefile is only for LIP6. Update nightly build. 2023-10-18 16:58:12 +01:00
bora Fix the loading of initHook.py, use Python loading mechanism directly. 2023-11-23 12:38:04 +01:00
crlcore Rename tabs.css into custom_tabs.css to avoid doxygen overwrite. 2023-11-23 12:38:04 +01:00
cumulus Duplicated ".spi" targets in pnrcheck designflow. 2023-11-23 12:38:04 +01:00
documentation One less level in the left menu (was too wide). 2023-11-23 12:38:04 +01:00
equinox Add support for building with Meson 2023-10-06 16:50:35 +01:00
etesian Split callback in Etesian to allow for derived placer classes 2023-11-03 13:26:16 +01:00
flute Use py.install_source for data that should be accessable from an editable install 2023-10-18 11:55:43 +01:00
foehn Move Script, PyErrorWidget and PyCellViewer into isobar to match namespace and resolve dependency order 2023-10-06 16:50:35 +01:00
hurricane Rename tabs.css into custom_tabs.css to avoid doxygen overwrite. 2023-11-23 12:38:04 +01:00
ispd Add a flag througout all the build system to manage manylinux (PyPI). 2023-07-03 19:54:01 +02:00
karakaze Add support for building with Meson 2023-10-06 16:50:35 +01:00
katana Do not protect with TrackMarkers M2 RoutingPads. 2023-11-23 12:38:04 +01:00
lefdef Remove autogenerated def.tab.h file 2023-10-18 17:18:38 +02:00
nix Remove OpenMP flags in nix build 2023-06-08 17:11:48 +02:00
oroshi Install Oroshi doc in the right place. 2023-11-23 12:38:04 +01:00
solstice Add support for building with Meson 2023-10-06 16:50:35 +01:00
stratus1 Add a flag througout all the build system to manage manylinux (PyPI). 2023-07-03 19:54:01 +02:00
subprojects Update Coloquinte version to 0.4.1 (bug fixes + area update infrastructure) 2023-11-07 10:45:52 +01:00
tramontana Adding Tramontana to meson build. 2023-10-10 00:58:27 +01:00
tutorial Adding Tutorial to meson build. 2023-10-10 00:58:27 +01:00
unicorn Fix the loading of initHook.py, use Python loading mechanism directly. 2023-11-23 12:38:04 +01:00
unittests fix smoketests 2023-10-06 16:50:35 +01:00
.clang-format Simple clang format file 2023-11-03 13:26:16 +01:00
.gitignore Extend .gitignore 2023-11-03 13:26:16 +01:00
.gitlab-ci.yml Upload wheels in CI 2023-02-21 16:10:55 +01:00
.gitmodules Add meson build infrastructure for doxygen based content 2023-11-18 17:31:17 +00:00
COPYRIGHT.rst At last setup a COPYRIGHT.rst and LICENSE.rst files. 2021-10-29 15:03:03 +02:00
Dockerfile-manylinux Add support for building with Meson 2023-10-06 16:50:35 +01:00
LICENSE.rst At last setup a COPYRIGHT.rst and LICENSE.rst files. 2021-10-29 15:03:03 +02:00
Makefile.LIP6 New rule "install_docs" to build the documentation. 2023-11-23 12:38:04 +01:00
README.rst tweak readme 2023-11-18 17:31:17 +00:00
SUPPORT.rst Add SUPPORT.rst file 2021-12-09 22:32:02 +01:00
builder.py CMake build system fixes to build on Mac OSX 2023-09-29 21:42:45 +01:00
compat.nix nix: add compatibility files 2021-10-26 22:30:34 +00:00
default.nix nix: add compatibility files 2021-10-26 22:30:34 +00:00
flake.lock Update repo references in code to point to github 2023-07-16 19:24:53 +00:00
flake.nix Update repo references in code to point to github 2023-07-16 19:24:53 +00:00
meson.build Add meson build infrastructure for pelican webpage 2023-11-18 17:31:17 +00:00
meson.options Add meson build infrastructure for pelican webpage 2023-11-18 17:31:17 +00:00
pdm.lock Update requirements and add missing pdm.lock 2023-11-18 17:31:17 +00:00
poetry.lock Build doc pelican (#11) 2023-08-01 15:43:21 +02:00
pyproject.toml Update requirements and add missing pdm.lock 2023-11-18 17:31:17 +00:00
shell.nix nix: add compatibility files 2021-10-26 22:30:34 +00:00

README.rst

.. -*- Mode: rst -*-

|Python wheel builds|

.. |Python wheel builds| image:: https://github.com/lip6/coriolis/actions/workflows/wheels.yml/badge.svg
   :target: https://github.com/lip6/coriolis/actions/workflows/wheels.yml

.. image:: documentation/content/images/common/Coriolis-logo-blue-4.png
   :alt:   Coriolis Logo
   :align: center
   :width: 10%


======================
Coriolis Open EDA Tool
======================

Coriolis is a free database, placement and routing tool for VLSI design.

This project is hosted at: https://github.com/lip6/coriolis

Main documentation is available at: https://coriolis.lip6.fr/

Development discussion can be found `on our Matrix Channel <https://matrix.to/#/#coriolis:matrix.org>`_ and in our `GitHub Discussions <https://github.com/lip6/coriolis/discussions>`_.

Coriolis is part of a set of three repositories that are closely relateds.

* Alliance

  A venerable EDA toolchain, working only on symbolic layout. Some of it's
  checking tools (LVS, DRC) are used for the regression tests in Alliance Check Toolkit.

  https://github.com/lip6/alliance

* Alliance Check Toolkit

  A wide set of examples of designs and scripts to use by Coriolis.

  https://github.com/lip6/alliance-check-toolkit


Purpose
=======

Coriolis provides several tools to perform the layout of VLSI circuits.  Its
main components are the Hurricane database, the Etesian placer and the Katana
router, but other tools can use the Hurricane database and the parsers
provided.

Coriolus can be used via both the  ```cgt`` graphical tool <http://coriolis.lip6.fr/pages/users-guide.html#id24>`_ and via the `rich Python API <http://coriolis.lip6.fr/pages/python-tutorial.html>`_.

Installation
============

Python 3.7 or later is required to use Coliolis. It can then be installed from `Pypi <https://pypi.org/>`_.

.. code-block:: bash

   pip3 install coriolis-eda

Note for Windows, we currently only support running under WSL2.

=================
Building Coriolis
=================

Most folk will only need to install using pip, but if you want to develop or need to build from scratch, read on!

Ubuntu/Windows WSL2 Build Environment
=====================================

If you haven't already got them, install `build-essential` and `git`

.. code-block:: bash

   sudo apt install build-essential git ccache

Clone the repo:

.. code-block:: bash

   git clone --recurse-submodules https://github.com/lip6/coriolis
   cd coriolis

Install the build dependencies:

.. code-block:: bash

   sudo apt install python3 python3-pip python3-venv \
                    doxygen pelican texlive-latex-recommended \
                    bison flex \
                    qtbase5-dev libqt5svg5-dev libqwt-qt5-dev libbz2-dev \
                    rapidjson-dev libboost-all-dev libeigen3-dev libxml2-dev


Mac OSX Build Environment
=========================

To build on Mac, first install _Homebrew: https://brew.sh. Be sure to follow all the instructions it gives after install  so HOMEBREW_PREFIX gets set!

Clone the repo:

.. code-block:: bash

   git clone --recurse-submodules https://github.com/lip6/coriolis
   cd coriolis


To install the prereqisites:

.. code-block:: bash

   brew install ccache doxygen pelican qt@5 qwt-qt5 rapidjson boost eigen
   brew install --cask mactex 


We need to set some environment variables for finding the cask only components. We use dotenv to set these in the PDM venv (see below)

.. code-block:: bash

   pip install python-dotenv
   dotenv set CMAKE_FRAMEWORK_PATH "$HOMEBREW_PREFIX/opt/qt@5/lib/cmake/"
   dotenv set PKG_CONFIG_PATH "$HOMEBREW_PREFIX/opt/qt@5/lib/pkgconfig:$HOMEBREW_PREFIX/opt/qwt-qt5/lib/pkgconfig"



Building Coriolis
=================

To build Python wheels, you'll need the `build` package if you don't already have it installed:

.. code-block:: bash

   pip3 install build


.. code-block:: bash

   python3 -m build -w

The wheels can be found in dist and installed using pip:

.. code-block:: bash

   pip3 install dist/*.whl

Development environment
=======================

For day-to-day development, its currently best to use meson and ninja directly. Currently there are `issues with using a Python editable install`_.


We use PDM_ to manage our development environment, which uses Python's venv_ system.

.. code-block:: bash

   pip install pdm

Before starting, you'll likely want to install the `shell completion`_ and read about `using pdm with virtual environments`_.  The basics are very simple, you just use pdm to run the build commands in an environment it automatially handles.

First we set up our pdm virtual environment:

.. code-block:: bash

   pdm plugin update
   pdm sync -d --no-self
   
Below we are just using a local directory call builddir for our _meson build directory, but you can put it wherever you like.

.. code-block:: bash

   pdm run meson setup builddir
   pdm run ninja -C builddir install

You can then use `pdm run` to run any programs or scripts dependant on Coriolis, for example:

.. code-block:: bash

   pdm run unittests/python/test_hurricane.py


You can also install locally using:

.. code-block:: bash

   pdm run meson setup builddir -Dpython.install_env=system
   pdm run ninja -C builddir install


For more configuration and install options, see:

.. code-block:: bash

   pdm run meson configure


.. _issues with using a Python editable install: https://github.com/lip6/coriolis/issues/67
.. _venv: https://www.dataquest.io/blog/a-complete-guide-to-python-virtual-environments/#how-to-use-python-environments
.. _shell completion: https://pdm.fming.dev/latest/#shell-completion
.. _using pdm with virtual environments: https://pdm.fming.dev/latest/usage/venv/
.. _PDM: https://pdm-project.org/
.. _meson: https://mesonbuild.com/
   
Other operating systems
=======================

Coriolis is currently tested on CentOS 7 (via manylinux 2014), latest Ubuntu and on MacOSX.

We welcome patches for other operating systems, though please add appropriate CI!

You'll need the following prerequisites:

* A C++11 compliant compiler.
* Python 3.9 or later
* Pip
* ninja.
* bzip2
* boost
* bison & flex.
* Qt 5 & Qt 5 Svg.
* Qwt
* libxml2.
* RapidJSON, http://rapidjson.org/ .
* Eigen 3,  http://eigen.tuxfamily.org .
* doxygen
* pelican
* latex




Documentation
=============

The full documentation for Coriolis can be found at http://coriolis.lip6.fr/pages/documentation.html