<p align="center">
<a title="edaa-org.github.io/pyEDAA.CLITool" href="https://edaa-org.github.io/pyEDAA.CLITool"><img height="80px" src="doc/_static/logo.svg"/></a>
</p>
[](https://GitHub.com/edaa-org/pyEDAA.CLITool)
[](LICENSE.md)
[](https://edaa-org.github.io/pyEDAA.CLITool/)
[](LICENSE.md)
[](https://gitter.im/hdl/community)
[](https://pypi.org/project/pyEDAA.CLITool/)


[](https://GitHub.com/edaa-org/pyEDAA.CLITool/actions/workflows/Pipeline.yml)
[](https://libraries.io/github/edaa-org/pyEDAA.CLITool)
[](https://www.codacy.com/gh/edaa-org/pyEDAA.CLITool)
[](https://www.codacy.com/gh/edaa-org/pyEDAA.CLITool)
[](https://codecov.io/gh/edaa-org/pyEDAA.CLITool)
<!--
[](https://github.com/edaa-org/pyEDAA.CLITool/network/dependents)
[](https://requires.io/github/edaa-org/pyEDAA.CLITool/requirements/?branch=main)
[](https://libraries.io/github/edaa-org/pyEDAA.CLITool/sourcerank)
-->
Provide unified interfaces to execute EDA tools via CLI from Python, agnostic to any specific configuration format/object.
# Main Goals
* Provide a pythonic solution to construct command line calls for EDA tools based on [pyTooling.CLIAbstraction](https://github.com/pyTooling/pyTooling.CLIAbstraction)
* Launch CLI tools and connect to STDIn, STDOUT, STDERR for realtime output post-processing.
# Features
* Support multiple native platforms: Linux, macOS, Windows.
* Support nested platforms like MSYS2 with MinGW32, MinGW64, URCT64, Clang64, ...
* Find CLI programs either in `PATH` or specify an exact installation location.
* Generate CLI options in correct order.
* Generate correctly escaped CLI options.
# Supported Tools
* Aldec
* 🚧 Active-HDL
* 🚧 Riviera-PRO
* Altera
* 🚧 Quartus
* 🚫 ModelSim Altera (Student) Edition
* Cadence
* 🙋 need a list of tools
* IntelFPGA
* 🚧 Quartus
* 🚫 ModelSim Altera (Student) Edition
* Lattice
* 🚧 Diamond
* 🚫 Active-HDL Lattice Edition
* 🚫 ModelSim Lattice Edition
* MentorGraphics
* ✅ ModelSim DE/SE/PE
* 🚫 QuestaSim
* SiemensEDA
* 🚫 ModelSim DE/SE/PE
* 🚫 QuestaSim
* Synopsys
* 🙋 need a list of tools
* Xilinx
* 🚧 ISE
* 🚧 Vivado
* 🚫 Vivado-SDK
* 🚫 Vitis
* System Tools
* ✅ Git
* Open Source
* ✅ GHDL
* ✅ GTKWave
* Yosys
* 🙋 need a list of tools
**Legend:**
✅ → implemented and tested
🚧 → under test
🚫 → planned but not yet implemented ⇒ accepting PRs
🙋 → need help
# Examples
```python
from pyEDAA.CLITool.GHDL import GHDL
tool = GHDL()
tool[tool.CommandAnalyze] = True
tool[tool.FlagVHDLStandard] = "08"
tool[tool.FlagSynopsys] = True
tool[tool.FlagRelaxed] = True
tool[tool.FlagExplicit] = True
tool[tool.FlagMultiByteComments] = True
tool[tool.FlagLibrary] = "lib_Test"
print(f"Calling GHDL: {tool}")
# Calling GHDL: "ghdl" "analyze" "--std=08" "-fsynopsys" "-frelaxed" "-fexplicit" "--work=lib_Test" "--mb-comments"
```
# Consumers
This layer is used by:
* 🚧 [pyEDAA.Workflow](https://github.com/edaa-org/pyEDAA.Workflow)
* 🚧 [pyEDAA.Launcher](https://github.com/edaa-org/pyEDAA.Launcher)
* 🚧 [Open Source Verification Bundle (OSVB)](https://umarcor.github.io/osvb)
# References
* [docs.siliconcompiler.com: Tools directory](https://docs.siliconcompiler.com/en/latest/reference_manual/tools.html)
* GHDL:
* [Paebbels/pyIPCMI: pyIPCMI/Simulator/GHDLSimulator.py](https://github.com/Paebbels/pyIPCMI/blob/0f91e26f989ca025c9380ff808d1e532614b9593/pyIPCMI/Simulator/GHDLSimulator.py#L49)
* [VUnit/vunit: vunit/sim_if/ghdl.py](https://github.com/VUnit/vunit/blob/f344c8b5642d7aa13db2e16f6fc7151585ca96d0/vunit/sim_if/ghdl.py#L29)
* [olofk/edalize: edalize/ghdl.py](https://github.com/olofk/edalize/blob/322773113716fa29fddd800c2e0992bb5dd2ed79/edalize/ghdl.py#L13)
* [im-tomu/fomu-workshop: hdl/mixed/blink/Makefile](https://github.com/im-tomu/fomu-workshop/blob/6e6318d820271750a99c8e419ee1b9abd9aa6b81/hdl/mixed/blink/Makefile#L45-L51)
* [PyFPGA/pyfpga: fpga/tool/openflow.py](https://github.com/PyFPGA/pyfpga/blob/507631b780a4ab658304bfcdcec133a0e9b8a769/fpga/tool/openflow.py#L28)
* [XedaHQ/xeda: xeda/flows/ghdl/__init__.py](https://github.com/XedaHQ/xeda/blob/e5bea8663a9001d0e98f6b7a91575e13fba06493/xeda/flows/ghdl/__init__.py#L8)
* [cocotb/cocotb: cocotb/runner.py](https://github.com/cocotb/cocotb/blob/fa7a826cc855d783b7fbc81444d4e6b9edc487b9/cocotb/runner.py#L444) ([cocotb/cocotb#2634](https://github.com/cocotb/cocotb/pull/2634))
* [stnolting/neorv32: tasks/examples.py](https://github.com/stnolting/neorv32/blob/6dd30e78101cd08310fe02b8818050745dd3a6ad/tasks/examples.py#L13) ([stnolting/neorv32#110](https://github.com/stnolting/neorv32/pull/110))
* [ghdl/ghdl: scripts/vendors/shared.sh](https://github.com/ghdl/ghdl/blob/7e41be2dabf79b21f3d0be210e3d01d541a7e82c/scripts/vendors/shared.sh#L132)
* [ghdl/ghdl: scripts/vendors/shared.psm1](https://github.com/ghdl/ghdl/blob/7e41be2dabf79b21f3d0be210e3d01d541a7e82c/scripts/vendors/shared.psm1#L261)
* [OSVVM/OSVVM-Scripts: VendorScripts_GHDL.tcl](https://github.com/OSVVM/OSVVM-Scripts/blob/3f52f725603166b4bfd6c862629f1dad363fd2f7/VendorScripts_GHDL.tcl#L143)
# Contributors
* [Patrick Lehmann](https://github.com/Paebbels) (Maintainer)
* [Unai Martinez-Corral](https://github.com/umarcor)
* [and more...](https://github.com/edaa-org/pyEDAA.CLITool/graphs/contributors)
# License
This Python package (source code) is licensed under [Apache License 2.0](LICENSE.md).
The accompanying documentation is licensed under [Creative Commons - Attribution 4.0 (CC-BY 4.0)](doc/Doc-License.rst).
---
SPDX-License-Identifier: Apache-2.0
Raw data
{
"_id": null,
"home_page": "https://GitHub.com/edaa-org/pyEDAA.CLITool",
"name": "pyEDAA.CLITool",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.9",
"maintainer_email": null,
"keywords": "cli, abstraction layer, eda",
"author": "Patrick Lehmann",
"author_email": "Paebbels@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/00/3c/b3ff57b125960e795e4f74d6eb6d1e99f1319c333e8b430e9afcd70440f7/pyedaa_clitool-0.3.1.tar.gz",
"platform": null,
"description": "<p align=\"center\">\n <a title=\"edaa-org.github.io/pyEDAA.CLITool\" href=\"https://edaa-org.github.io/pyEDAA.CLITool\"><img height=\"80px\" src=\"doc/_static/logo.svg\"/></a>\n</p>\n\n[](https://GitHub.com/edaa-org/pyEDAA.CLITool)\n[](LICENSE.md)\n[](https://edaa-org.github.io/pyEDAA.CLITool/)\n[](LICENSE.md)\n[](https://gitter.im/hdl/community) \n[](https://pypi.org/project/pyEDAA.CLITool/)\n\n \n[](https://GitHub.com/edaa-org/pyEDAA.CLITool/actions/workflows/Pipeline.yml)\n[](https://libraries.io/github/edaa-org/pyEDAA.CLITool)\n[](https://www.codacy.com/gh/edaa-org/pyEDAA.CLITool)\n[](https://www.codacy.com/gh/edaa-org/pyEDAA.CLITool)\n[](https://codecov.io/gh/edaa-org/pyEDAA.CLITool)\n\n<!--\n[](https://github.com/edaa-org/pyEDAA.CLITool/network/dependents)\n[](https://requires.io/github/edaa-org/pyEDAA.CLITool/requirements/?branch=main)\n[](https://libraries.io/github/edaa-org/pyEDAA.CLITool/sourcerank) \n-->\n\n\nProvide unified interfaces to execute EDA tools via CLI from Python, agnostic to any specific configuration format/object.\n\n\n# Main Goals\n\n* Provide a pythonic solution to construct command line calls for EDA tools based on [pyTooling.CLIAbstraction](https://github.com/pyTooling/pyTooling.CLIAbstraction)\n* Launch CLI tools and connect to STDIn, STDOUT, STDERR for realtime output post-processing.\n\n\n# Features\n\n* Support multiple native platforms: Linux, macOS, Windows.\n* Support nested platforms like MSYS2 with MinGW32, MinGW64, URCT64, Clang64, ...\n* Find CLI programs either in `PATH` or specify an exact installation location.\n* Generate CLI options in correct order.\n* Generate correctly escaped CLI options.\n\n\n# Supported Tools\n\n* Aldec\n * \ud83d\udea7 Active-HDL\n * \ud83d\udea7 Riviera-PRO\n* Altera\n * \ud83d\udea7 Quartus\n * \ud83d\udeab ModelSim Altera (Student) Edition\n* Cadence\n * \ud83d\ude4b need a list of tools\n* IntelFPGA\n * \ud83d\udea7 Quartus\n * \ud83d\udeab ModelSim Altera (Student) Edition\n* Lattice\n * \ud83d\udea7 Diamond\n * \ud83d\udeab Active-HDL Lattice Edition\n * \ud83d\udeab ModelSim Lattice Edition\n* MentorGraphics\n * \u2705 ModelSim DE/SE/PE\n * \ud83d\udeab QuestaSim\n* SiemensEDA\n * \ud83d\udeab ModelSim DE/SE/PE\n * \ud83d\udeab QuestaSim\n* Synopsys\n * \ud83d\ude4b need a list of tools\n* Xilinx\n * \ud83d\udea7 ISE\n * \ud83d\udea7 Vivado\n * \ud83d\udeab Vivado-SDK\n * \ud83d\udeab Vitis\n* System Tools\n * \u2705 Git\n* Open Source\n * \u2705 GHDL\n * \u2705 GTKWave\n* Yosys\n * \ud83d\ude4b need a list of tools\n\n**Legend:** \n\u2705 → implemented and tested \n\ud83d\udea7 → under test \n\ud83d\udeab → planned but not yet implemented ⇒ accepting PRs \n\ud83d\ude4b → need help\n\n# Examples\n\n```python\nfrom pyEDAA.CLITool.GHDL import GHDL\n\ntool = GHDL()\ntool[tool.CommandAnalyze] = True\ntool[tool.FlagVHDLStandard] = \"08\"\ntool[tool.FlagSynopsys] = True\ntool[tool.FlagRelaxed] = True\ntool[tool.FlagExplicit] = True\ntool[tool.FlagMultiByteComments] = True\ntool[tool.FlagLibrary] = \"lib_Test\"\n\nprint(f\"Calling GHDL: {tool}\")\n# Calling GHDL: \"ghdl\" \"analyze\" \"--std=08\" \"-fsynopsys\" \"-frelaxed\" \"-fexplicit\" \"--work=lib_Test\" \"--mb-comments\"\n```\n\n# Consumers\n\nThis layer is used by:\n\n* \ud83d\udea7 [pyEDAA.Workflow](https://github.com/edaa-org/pyEDAA.Workflow)\n* \ud83d\udea7 [pyEDAA.Launcher](https://github.com/edaa-org/pyEDAA.Launcher)\n* \ud83d\udea7 [Open Source Verification Bundle (OSVB)](https://umarcor.github.io/osvb)\n\n\n# References\n\n* [docs.siliconcompiler.com: Tools directory](https://docs.siliconcompiler.com/en/latest/reference_manual/tools.html)\n* GHDL:\n * [Paebbels/pyIPCMI: pyIPCMI/Simulator/GHDLSimulator.py](https://github.com/Paebbels/pyIPCMI/blob/0f91e26f989ca025c9380ff808d1e532614b9593/pyIPCMI/Simulator/GHDLSimulator.py#L49)\n * [VUnit/vunit: vunit/sim_if/ghdl.py](https://github.com/VUnit/vunit/blob/f344c8b5642d7aa13db2e16f6fc7151585ca96d0/vunit/sim_if/ghdl.py#L29)\n * [olofk/edalize: edalize/ghdl.py](https://github.com/olofk/edalize/blob/322773113716fa29fddd800c2e0992bb5dd2ed79/edalize/ghdl.py#L13)\n * [im-tomu/fomu-workshop: hdl/mixed/blink/Makefile](https://github.com/im-tomu/fomu-workshop/blob/6e6318d820271750a99c8e419ee1b9abd9aa6b81/hdl/mixed/blink/Makefile#L45-L51)\n * [PyFPGA/pyfpga: fpga/tool/openflow.py](https://github.com/PyFPGA/pyfpga/blob/507631b780a4ab658304bfcdcec133a0e9b8a769/fpga/tool/openflow.py#L28)\n * [XedaHQ/xeda: xeda/flows/ghdl/__init__.py](https://github.com/XedaHQ/xeda/blob/e5bea8663a9001d0e98f6b7a91575e13fba06493/xeda/flows/ghdl/__init__.py#L8)\n * [cocotb/cocotb: cocotb/runner.py](https://github.com/cocotb/cocotb/blob/fa7a826cc855d783b7fbc81444d4e6b9edc487b9/cocotb/runner.py#L444) ([cocotb/cocotb#2634](https://github.com/cocotb/cocotb/pull/2634))\n * [stnolting/neorv32: tasks/examples.py](https://github.com/stnolting/neorv32/blob/6dd30e78101cd08310fe02b8818050745dd3a6ad/tasks/examples.py#L13) ([stnolting/neorv32#110](https://github.com/stnolting/neorv32/pull/110))\n * [ghdl/ghdl: scripts/vendors/shared.sh](https://github.com/ghdl/ghdl/blob/7e41be2dabf79b21f3d0be210e3d01d541a7e82c/scripts/vendors/shared.sh#L132)\n * [ghdl/ghdl: scripts/vendors/shared.psm1](https://github.com/ghdl/ghdl/blob/7e41be2dabf79b21f3d0be210e3d01d541a7e82c/scripts/vendors/shared.psm1#L261)\n * [OSVVM/OSVVM-Scripts: VendorScripts_GHDL.tcl](https://github.com/OSVVM/OSVVM-Scripts/blob/3f52f725603166b4bfd6c862629f1dad363fd2f7/VendorScripts_GHDL.tcl#L143)\n\n# Contributors\n\n* [Patrick Lehmann](https://github.com/Paebbels) (Maintainer)\n* [Unai Martinez-Corral](https://github.com/umarcor)\n* [and more...](https://github.com/edaa-org/pyEDAA.CLITool/graphs/contributors)\n\n\n# License\n\nThis Python package (source code) is licensed under [Apache License 2.0](LICENSE.md). \nThe accompanying documentation is licensed under [Creative Commons - Attribution 4.0 (CC-BY 4.0)](doc/Doc-License.rst).\n\n---\nSPDX-License-Identifier: Apache-2.0\n",
"bugtrack_url": null,
"license": "Apache-2.0",
"summary": "An abstraction layer of EDA CLI tools.",
"version": "0.3.1",
"project_urls": {
"Documentation": "https://edaa-org.GitHub.io/pyEDAA.CLITool",
"Homepage": "https://GitHub.com/edaa-org/pyEDAA.CLITool",
"Issue Tracker": "https://GitHub.com/edaa-org/pyEDAA.CLITool/issues",
"Source Code": "https://GitHub.com/edaa-org/pyEDAA.CLITool"
},
"split_keywords": [
"cli",
" abstraction layer",
" eda"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "e5994f7d1ff025c56381a49d50c17782d292b7cba673db48525d5fab5a331f07",
"md5": "7c2926f868b25d7c72261cb4cec45e3e",
"sha256": "7e949005ec94c7381d5bd0cc7623602aa45f2cc723caf0378d03b4a8caf59ef6"
},
"downloads": -1,
"filename": "pyEDAA.CLITool-0.3.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "7c2926f868b25d7c72261cb4cec45e3e",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.9",
"size": 33331,
"upload_time": "2025-02-05T23:12:19",
"upload_time_iso_8601": "2025-02-05T23:12:19.431555Z",
"url": "https://files.pythonhosted.org/packages/e5/99/4f7d1ff025c56381a49d50c17782d292b7cba673db48525d5fab5a331f07/pyEDAA.CLITool-0.3.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "003cb3ff57b125960e795e4f74d6eb6d1e99f1319c333e8b430e9afcd70440f7",
"md5": "f4a349704665b6cddd44ec5625fefa74",
"sha256": "446768bdc31578760c45b8fd829560978041636e5d41ae47014cbedcc58867b0"
},
"downloads": -1,
"filename": "pyedaa_clitool-0.3.1.tar.gz",
"has_sig": false,
"md5_digest": "f4a349704665b6cddd44ec5625fefa74",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9",
"size": 23272,
"upload_time": "2025-02-05T23:12:17",
"upload_time_iso_8601": "2025-02-05T23:12:17.407840Z",
"url": "https://files.pythonhosted.org/packages/00/3c/b3ff57b125960e795e4f74d6eb6d1e99f1319c333e8b430e9afcd70440f7/pyedaa_clitool-0.3.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-02-05 23:12:17",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "pyedaa.clitool"
}