Contribute to ALIGN

ALIGN is an open source tool for analog layout generation. We appreciate any contribution to ALIGN. Layout generation requires multiple components for the flow to produce a good layout. There are multiple ways you can contribute.

Some example contributions

Install ALIGN setup as a developer

If you are a developer, you may wish to install align with some additional flags.

For python developers:

pip install -e .[test]

Note

The -e or –editable flag generates links to the align package within your current directory. This allows you to modify python files and test them out immediately. You will still need to re-run this command to build your C++ collateral (when you are changing branches for example). More on that below.

For ALIGN (C++) Extension developers:

pip install setuptools wheel pybind11 scikit-build cmake ninja
pip install -v -e .[test] --no-build-isolation

Note

The second command doesn’t just install ALIGN inplace, it also caches generated object files etc. under an _skbuild subdirectory. Re-running pip install -v -e .[test] –no-build-isolation will reuse this cache to perform an incremental build. We add the -v or –verbose flag to be able to see build flags in the terminal.

If you want the build-type to be Release (-O3), you can issue the following three lines:

pip install setuptools wheel pybind11 scikit-build cmake ninja
pip install -v -e .[test] --no-build-isolation
pip install -v --no-build-isolation -e . --no-deps --install-option='--build-type=Release'

or

pip install setuptools wheel pybind11 scikit-build cmake ninja
pip install -v -e .[test] --no-build-isolation
pip install -v --no-build-isolation -e . --no-deps --install-option='--build-type=RelWithDebInfo'

Use the Release mode if you are mostly developing in Python and don’t need the C++ debugging symbols. Use the RelWithDebInfo if you need both debug symbols and optimized code.

To debug runtime issues, run:

python -m cProfile -o stats $ALIGN_HOME/bin/schematic2layout.py $ALIGN_HOME/examples/sc_dc_dc_converter

Then in a python shell:

import pstats
from pstats import SortKey
p = pstats.Stats('stats')
p.sort_stats(SortKey.TIME).print_stats(20)