Git Product home page Git Product logo

volare's Introduction

⛰️ Volare

License: Apache 2.0 CI Status Invite to the Skywater PDK Slack Code Style: Black

Volare is a version manager (and builder) for builds of Google open-source PDKs using open_pdks.

Requirements

  • Python 3.6+ with PIP
  • macOS or GNU/Linux

macOS

Get Homebrew then:

brew install python3

Debian and Ubuntu

Debian 10+ or Ubuntu 18.04+ is required.

sudo apt-get update
sudo apt-get install python3 python3-pip xz-utils

RHEL and Derivatives

RHEL 7+ or compatible operating system required.

sudo yum install -y python3 python3-pip

Installation and Upgrades

# To install (or upgrade)
python3 -m pip install --upgrade --no-cache-dir volare

# To verify it works
volare --version

Troubleshooting

With a typical Python 3.6 or higher installation with PIP, installing volare is as simple as a pip install. Despite that, there are some peculiarities with PIP itself: For example, you may see a warning among these lines:

  WARNING: The script volare is installed in '/home/test/.local/bin' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.

The solution is as simple as adding something like this to your shell's profile:

export PATH="/home/test/.local/bin:$PATH"

Do note that the path (/home/test/.local/bin in this example) varies depending on your operating system and version of Python you install, and whether you use sudo (absolutely not recommended) or not, so ensure that you actually read the warning and add the correct path.

About the builds

In its current inception, volare supports builds of sky130 and gf180mcu PDKs using Open_PDKs, including the following libraries:

sky130 gf180mcu
sky130_fd_io gf180mcu_fd_io
sky130_fd_pr gf180mcu_fd_pr
sky130_fd_sc_hd gf180mcu_fd_sc_mcu7t5v0
sky130_fd_sc_hvl gf180mcu_fd_sc_mcu9t5v0
sky130 sram modules gf180mcu_fd_ip_sram

All builds are identified by their open_pdks commit hash.

Usage

Volare requires a so-called PDK Root. This PDK root can be anywhere on your computer, but by default it's the folder ~/.volare in your home directory. If you have the variable PDK_ROOT set, volare will use that instead. You can also manually override both values by supplying the --pdk-root commandline argument.

Listing All Available PDKs

To list all available pre-built PDKs hosted in this repository, you can just invoke volare ls-remote --pdk <PDK>. If you omit the --pdk argument, sky130 will be used as a default.

$ volare ls-remote --pdk sky130
Pre-built sky130 PDK versions
├── 44a43c23c81b45b8e774ae7a84899a5a778b6b0b (2022.08.16) (enabled)
├── e8294524e5f67c533c5d0c3afa0bcc5b2a5fa066 (2022.07.29) (installed)
├── 41c0908b47130d5675ff8484255b43f66463a7d6 (2022.04.14) (installed)
├── 660c6bdc8715dc7b3db95a1ce85392bbf2a2b195 (2022.04.08)
├── 5890e791e37699239abedfd2a67e55162e25cd94 (2022.04.06)
├── 8fe7f760ece2bb49b1c310e60243f0558977dae5 (2022.04.06)
└── 7519dfb04400f224f140749cda44ee7de6f5e095 (2022.02.10)

$ volare ls-remote --pdk gf180mcu
Pre-built gf180mcu PDK versions
└── 120b0bd69c745825a0b8b76f364043a1cd08bb6a (2022.09.22)

It includes a commit hash, which is the open_pdks version used to build this particular PDK, the date that this commit was created, and whether you already installed this PDK and/or if it is the currently enabled PDK.

Listing Installed PDKs

Typing volare ls --pdk <pdk> in the terminal shows you your PDK Root and the PDKs you currently have installed. Again, if you omit the --pdk argument, sky130 will be used as a default.

$ volare ls --pdk sky130
/home/test/volare/sky130/versions
├── 44a43c23c81b45b8e774ae7a84899a5a778b6b0b (2022.08.16) (enabled)
├── e8294524e5f67c533c5d0c3afa0bcc5b2a5fa066 (2022.07.29)
└── 41c0908b47130d5675ff8484255b43f66463a7d6 (2022.04.14)

(If you're not connected to the Internet, the release date of the commit will not be included.)

Downloading and Enabling PDKs

You can enable a particular sky130 PDK by invoking volare enable --pdk <pdk> <open_pdks commit hash>. This will automatically download that particular version of the PDK, if found, and set it as your currently used PDK.

For example, to activate a build of sky130 using open_pdks 7519dfb04400f224f140749cda44ee7de6f5e095, you invoke volare enable --pdk sky130 7519dfb04400f224f140749cda44ee7de6f5e095, as shown below:

$ volare enable --pdk sky130 7519dfb04400f224f140749cda44ee7de6f5e095
Downloading pre-built tarball for 7519dfb04400f224f140749cda44ee7de6f5e095… ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
Unpacking…                                                                  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
PDK version 7519dfb04400f224f140749cda44ee7de6f5e095 enabled.

What's more is: if you're using a repository with a tool_metadata.yml file, such as OpenLane or DFFRAM, you can just invoke volare enable --pdk sky130 without the commit hash and Volare will automatically extract the version required by the utility. Once again, if you omit the --pdk argument, sky130 will be used as a default.

Building PDKs

For special cases, you may have to build the PDK yourself, which Volare does support.

You'll need Magic installed and in PATH. You can either do that manually or, if you have Nix, invoke nix shell github:efabless/openlane2#magic before building.

You can invoke volare build --help for more options. Be aware, the built PDK won't automatically be enabled and you'll have to volare enable the appropriate version.

License

The Apache License, version 2.0. See 'License'.

volare's People

Contributors

donn avatar jeffdi avatar kareefardi avatar patarimi avatar proppy avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

volare's Issues

Will Asap7 be supported by openlane

Now asap7 is supported by openroad, but now openlane has a process starting from integration. How can I use openlane to support asap7 by using this tool?

volare `pdkpath` feature

Description

The function is printing the fully-qualified-filesystem-path to the PDK (from inside the volare manage storage)

Feel free to pick a better name than pdkpath

The purpose of this is to push back into the tool the implementation details of how to resolve a full-qualified-PDK-path by anything built on top of it.

Proposal

The command represents what the output may look like when this feature is in use

#  This is printing the current active selected PDK
$ volare pdkpath
/home/user/.volare/sky130/versions/cd1748bb197f9b7af62a54507de6624e30363943

This is a feature request to have the volare tool resolve the current active PDK fully qualified directory.
This is so 3rd party tool and scripts do not need to know the implementation detail of how to resolve the active PDK or how the PDK is catalogued on the filesystem, that can be volare's function to manage.

It should confirm the directory exists, before returning it on STDOUT (allowing scripts to capture the value).

Nice to have features built on top, with additional arguments supplied

$ volare pdkpath 2024.02.11; echo $?
/home/user/.volare/sky130/versions/6d4d11780c40b20ee63cc98e645307a9bf2b2ab8
0

$ volare pdkpath bdc9412b3e468c102d01b7cf6337be06ec6e9c9a ; echo $?
/home/user/.volare/sky130/versions/bdc9412b3e468c102d01b7cf6337be06ec6e9c9a
0

$ volare pdkpath 001122334455667788aabbccddeeff00112233 ; echo $?
ERROR MESSAGE: PDK_VERSION not found, to STDERR only, no output to STDOUT
1

$ echo PDK=$PDK; volare pdkpath --with=PDK 2024.01.08; echo $?
PDK=sky130A
/home/user/.volare/sky130/versions/d7979feb24bf08083dcf5c013be51adec8c0bcef/sky130A
0

$ unset PDK; echo PDK=$PDK; volare pdkpath --with=PDK 2024.01.08; echo $?
PDK=
ERROR MESSAGE: PDK version not found, to STDERR only, no output to STDOUT
1

Feel free to pick a better name than pdkpath

The purpose of this is to push back into the tool the implementation details of how to resolve a full-qualified-PDK-path by anything built on top of it.

Instructions are incomplete?

I followed the instructions and did python3 -m pip install --upgrade --no-cache-dir volare, but I do not get any executable or script called "volare" that can be run from the command line.

Pcell error for klayout in sky130A pdk

Hi @donn

Several of the klayout pcells for sky130 pdk sourced from $PDK_ROOT/$PDK/libs.tech/klayout/pymacros/cells gives error in klayout during instantiation. This is shown in attached screenshot. Can you please see if these klayout pcells can be updated so that complex layouts with sky130 pdk can be done using KLAYOUT.

image (2)
image (1)

gf180mcu IO liberty for typical process and 5V is missing

  • gf180mcu pdk version: a519523b0d9bc913a6f87a5eed083597ed9e2e93
  • volare version: 0.4.2

The liberty gf180mcu_fd_io__tt_025C_5v00.lib could be found here and it's available in the open_pdks installation.
Using volare, the available IO liberties for the typical process are

gf180mcuA/libs.ref/gf180mcu_fd_io/liberty/gf180mcu_fd_io__tt_025C_2v50.lib
gf180mcuA/libs.ref/gf180mcu_fd_io/liberty/gf180mcu_fd_io__tt_025C_3v30.lib
gf180mcuB/libs.ref/gf180mcu_fd_io/liberty/gf180mcu_fd_io__tt_025C_2v50.lib
gf180mcuB/libs.ref/gf180mcu_fd_io/liberty/gf180mcu_fd_io__tt_025C_3v30.lib
gf180mcuC/libs.ref/gf180mcu_fd_io/liberty/gf180mcu_fd_io__tt_025C_2v50.lib
gf180mcuC/libs.ref/gf180mcu_fd_io/liberty/gf180mcu_fd_io__tt_025C_3v30.lib

volare enable fails with an error

starting with the last release (0.9.0), running the volare enable fails with an error:

$ volare enable --pdk sky130 12df12e2e74145e31c5a13de02f9a1e176b56e67
enable() got an unexpected keyword argument 'console

Enable use of PDKs other than sky130

Currently, it exists in an undocumented capacity. This is blocked on an open_pdks issue, but should be surfaced as soon as humanly possible.

UPDATE: 2022-09-21: There is no longer a blocker in open_pdks. What is left is for the OpenLane CI to be updated to have the exact same behavior as sky130 for GF180MCU.

Additionally, volare's documentation has to be updated.

volare cannot find gf180

volare ls-remote --pdk gf180mcu
gives
Pre-built gf180mcu PDK versions
and then no further output.
One guess I have is that the request to GitHub to retrieve the list only gets the first few entries?
I have installed volare 0.4.3 from pip:
Requirement already satisfied: volare in ./.local/lib/python3.10/site-packages (0.4.3)
Perhaps that version is too old? In that case, please update the pip package.

Something looks for `python` instead of `python3` when trying to run a build and causes the build process to fail out

Attempted the following command

volare build --pdk-root /home/rfriesen/pdks/ --pdk sky130 --build-magic -j 6 -l all 0059588eebfc704681dc2368bd1d33d96281d10f

Build failed and the last section of the log shows something failing to not find python. I created a symlink where /usr/bin/python points to /usr/bin/python3 and the second time I executed the above command it was successful.

installation finished.
touch "/home/rfriesen/pdks/volare/sky130/build/0059588eebfc704681dc2368bd1d33d96281d10f/open_pdks/sources/sky130-pdk/env/conda/bin/python"
source /home/rfriesen/pdks/volare/sky130/build/0059588eebfc704681dc2368bd1d33d96281d10f/open_pdks/sources/sky130-pdk/env/conda/bin/activate && conda config --system --add pkgs_dirs /home/rfriesen/pdks/volare/sky130/build/0059588eebfc704681dc2368bd1d33d96281d10f/open_pdks/sources/sky130-pdk/env/downloads/conda-pkgs
source /home/rfriesen/pdks/volare/sky130/build/0059588eebfc704681dc2368bd1d33d96281d10f/open_pdks/sources/sky130-pdk/env/conda/bin/activate && conda config --system --add envs_dirs /home/rfriesen/pdks/volare/sky130/build/0059588eebfc704681dc2368bd1d33d96281d10f/open_pdks/sources/sky130-pdk/env/conda/envs
echo "include-system-site-packages=false" >> /home/rfriesen/pdks/volare/sky130/build/0059588eebfc704681dc2368bd1d33d96281d10f/open_pdks/sources/sky130-pdk/env/conda/pyvenv.cfg
/usr/bin/env: ‘python’: No such file or directory
/usr/bin/env: ‘python’: No such file or directory
make[2]: *** [/home/rfriesen/pdks/volare/sky130/build/0059588eebfc704681dc2368bd1d33d96281d10f/open_pdks/sources/sky130-pdk/third_party/make-env/conda.mk:117: /home/rfriesen/pdks/volare/sky130/build/0059588eebfc704681dc2368bd1d33d96281d10f/open_pdks/sources/sky130-pdk/env/downloads/conda-pkgs/urls.txt] Error 127
make[2]: *** Waiting for unfinished jobs....
make[2]: *** [/home/rfriesen/pdks/volare/sky130/build/0059588eebfc704681dc2368bd1d33d96281d10f/open_pdks/sources/sky130-pdk/third_party/make-env/conda.mk:141: /home/rfriesen/pdks/volare/sky130/build/0059588eebfc704681dc2368bd1d33d96281d10f/open_pdks/sources/sky130-pdk/env/conda/envs] Error 127
make[2]: Leaving directory '/home/rfriesen/pdks/volare/sky130/build/0059588eebfc704681dc2368bd1d33d96281d10f/open_pdks/sources/sky130-pdk'
make[1]: *** [Makefile:606: pdk-repo] Error 2
make[1]: Leaving directory '/home/rfriesen/pdks/volare/sky130/build/0059588eebfc704681dc2368bd1d33d96281d10f/open_pdks/sky130'
make: *** [Makefile:130: tech-sky130] Error 2

Volare does not show pre-built gf180mcu PDK

Volare does not show any pre-built gf180mcu PDKs, is this correct?

> volare ls-remote --pdk gf180mcu
Pre-built gf180mcu PDK versions

SKY130 is available:

> volare ls-remote --pdk sky130
Pre-built sky130 PDK versions
├── 0059588eebfc704681dc2368bd1d33d96281d10f (2022.10.22) (enabled)
├── a56526bfe45971322526978132b059d43ddd3a02 (2022.10.19)
├── de752ec0ba4da0ecb1fbcd309eeec4993d88f5bc (2022.10.09)
├── d7c3a52fba997de2bfc15c375a052215528216ac (2022.10.01)
├── f6e269f48d542b306e08e8f5a3577ec244aa44aa (2022.09.29)
├── 41e2da101560ea1b890dd9f34f6b5adec5016eea (2022.09.23)
├── 120b0bd69c745825a0b8b76f364043a1cd08bb6a (2022.09.22)
├── 8f6aff1881e5feae49acb6d5be53c4acc91bb235 (2022.09.21)
├── 82d61e2c9c265c0f0e994233cd2d024c90adb45f (2022.09.16)
├── fa87f8f4bbcc7255b6f0c0fb506960f531ae2392 (2022.09.06)
├── 6d1673c46e5c420f08c0af3c8f9f759d2ab8bb40 (2022.09.06)
├── 44a43c23c81b45b8e774ae7a84899a5a778b6b0b (2022.08.16)
├── e8294524e5f67c533c5d0c3afa0bcc5b2a5fa066 (2022.07.29)
├── 41c0908b47130d5675ff8484255b43f66463a7d6 (2022.04.14)
├── 660c6bdc8715dc7b3db95a1ce85392bbf2a2b195 (2022.04.08)
├── 5890e791e37699239abedfd2a67e55162e25cd94 (2022.04.06)
├── 8fe7f760ece2bb49b1c310e60243f0558977dae5 (2022.04.06)
└── 7519dfb04400f224f140749cda44ee7de6f5e095 (2022.02.10)

Rate limit exceeded with no more information

Description

Currently trying to install tools and getting the following error;

./venv/bin/volare enable --pdk sky130
Version cd1748bb197f9b7af62a54507de6624e30363943 not found locally, attempting to download…
Failed to obtain cd1748bb197f9b7af62a54507de6624e30363943 remotely: <Response [403 rate limit exceeded]>.

Expected Behavior

Tell me how to work around the rate limit.

Relevant command

./venv/bin/volare enable --pdk sky130

Relevant log output

./venv/bin/volare enable --pdk sky130
Version cd1748bb197f9b7af62a54507de6624e30363943 not found locally, attempting to download…
Failed to obtain cd1748bb197f9b7af62a54507de6624e30363943 remotely: <Response [403 rate limit exceeded]>.

volare enable remotedisconnected

I was running make of OpenLane in WSL 2 with all prerequisites satisfied including Docker. When it ran ./venv/bin/volare enable after creating a venv and upgrading volare in the venv, it seemed to wait for a few seconds and showed:

[10:09:34] Found version de752ec0ba4da0ecb1fbcd309eeec4993d88f5bc in ./dependencies/tool_metadata.yml. common.py:226
Traceback (most recent call last):
File "/mnt/d/Resources/OpenLane/venv/lib/python3.10/site-packages/urllib3/connectionpool.py", line 703, in urlopen
httplib_response = self._make_request(
File "/mnt/d/Resources/OpenLane/venv/lib/python3.10/site-packages/urllib3/connectionpool.py", line 449, in _make_request
six.raise_from(e, None)
File "", line 3, in raise_from
File "/mnt/d/Resources/OpenLane/venv/lib/python3.10/site-packages/urllib3/connectionpool.py", line 444, in _make_request
httplib_response = conn.getresponse()
File "/usr/lib/python3.10/http/client.py", line 1374, in getresponse
response.begin()
File "/usr/lib/python3.10/http/client.py", line 318, in begin
version, status, reason = self._read_status()
File "/usr/lib/python3.10/http/client.py", line 287, in _read_status
raise RemoteDisconnected("Remote end closed connection without"
http.client.RemoteDisconnected: Remote end closed connection without response

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/mnt/d/Resources/OpenLane/venv/lib/python3.10/site-packages/requests/adapters.py", line 489, in send
resp = conn.urlopen(
File "/mnt/d/Resources/OpenLane/venv/lib/python3.10/site-packages/urllib3/connectionpool.py", line 787, in urlopen
retries = retries.increment(
File "/mnt/d/Resources/OpenLane/venv/lib/python3.10/site-packages/urllib3/util/retry.py", line 550, in increment
raise six.reraise(type(error), error, _stacktrace)
File "/mnt/d/Resources/OpenLane/venv/lib/python3.10/site-packages/urllib3/packages/six.py", line 769, in reraise
raise value.with_traceback(tb)
File "/mnt/d/Resources/OpenLane/venv/lib/python3.10/site-packages/urllib3/connectionpool.py", line 703, in urlopen
httplib_response = self._make_request(
File "/mnt/d/Resources/OpenLane/venv/lib/python3.10/site-packages/urllib3/connectionpool.py", line 449, in _make_request
six.raise_from(e, None)
File "", line 3, in raise_from
File "/mnt/d/Resources/OpenLane/venv/lib/python3.10/site-packages/urllib3/connectionpool.py", line 444, in _make_request
httplib_response = conn.getresponse()
File "/usr/lib/python3.10/http/client.py", line 1374, in getresponse
response.begin()
File "/usr/lib/python3.10/http/client.py", line 318, in begin
version, status, reason = self._read_status()
File "/usr/lib/python3.10/http/client.py", line 287, in _read_status
raise RemoteDisconnected("Remote end closed connection without"
urllib3.exceptions.ProtocolError: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/mnt/d/Resources/OpenLane/./venv/bin/volare", line 8, in
sys.exit(cli())
File "/mnt/d/Resources/OpenLane/venv/lib/python3.10/site-packages/click/core.py", line 1130, in call
return self.main(*args, **kwargs)
File "/mnt/d/Resources/OpenLane/venv/lib/python3.10/site-packages/click/core.py", line 1055, in main
rv = self.invoke(ctx)
File "/mnt/d/Resources/OpenLane/venv/lib/python3.10/site-packages/click/core.py", line 1657, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/mnt/d/Resources/OpenLane/venv/lib/python3.10/site-packages/click/core.py", line 1404, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/mnt/d/Resources/OpenLane/venv/lib/python3.10/site-packages/click/core.py", line 760, in invoke
return __callback(*args, **kwargs)
File "/mnt/d/Resources/OpenLane/venv/lib/python3.10/site-packages/volare/manage.py", line 320, in enable_cmd
enable(pdk_root=pdk_root, pdk=pdk, version=version)
File "/mnt/d/Resources/OpenLane/venv/lib/python3.10/site-packages/volare/manage.py", line 240, in enable
with requests.get(link, stream=True) as r:
File "/mnt/d/Resources/OpenLane/venv/lib/python3.10/site-packages/requests/api.py", line 73, in get
return request("get", url, params=params, **kwargs)
File "/mnt/d/Resources/OpenLane/venv/lib/python3.10/site-packages/requests/api.py", line 59, in request
return session.request(method=method, url=url, **kwargs)
File "/mnt/d/Resources/OpenLane/venv/lib/python3.10/site-packages/requests/sessions.py", line 587, in request
resp = self.send(prep, **send_kwargs)
File "/mnt/d/Resources/OpenLane/venv/lib/python3.10/site-packages/requests/sessions.py", line 701, in send
r = adapter.send(request, **kwargs)
File "/mnt/d/Resources/OpenLane/venv/lib/python3.10/site-packages/requests/adapters.py", line 547, in send
raise ConnectionError(err, request=request)
requests.exceptions.ConnectionError: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))

I tried to run the command in bash but it gives the same error. The connection to GitHub is proved to be of no problem. Are there any ways to know what happened and what caused this?

Error when attempting to install volare module using pip

Processing /home/karim/work/volare
  Preparing metadata (setup.py) ... error
  error: subprocess-exited-with-error

  × python setup.py egg_info did not run successfully.
  │ exit code: 1
  ╰─> [10 lines of output]
      Traceback (most recent call last):
        File "<string>", line 2, in <module>
        File "<pip-setuptools-caller>", line 34, in <module>
        File "/home/karim/work/volare/setup.py", line 4, in <module>
          from volare import __version__
        File "/home/karim/work/volare/volare/__init__.py", line 14, in <module>
          from .manage import VersionNotFound, enable
        File "/home/karim/work/volare/volare/manage.py", line 18, in <module>
          import requests
      ModuleNotFoundError: No module named 'requests'
      [end of output]

  note: This error originates from a subprocess, and is likely not a problem with pip.
error: metadata-generation-failed

× Encountered error while generating package metadata.
╰─> See above for output.

note: This is an issue with the package mentioned above, not pip.
hint: See above for details.

Steps to reproduce:

rm -rf venv
python3 -m venv ./venv 
./venv/bin/pip3 install . 

share release infra for open_pdks/sky130A

Looking at

return f"{repo}/releases/download/sky130-{version}/{version}.tar.xz"
it seems that the PDK tarballs are fetched from https://github.com/efabless/volare/releases, but I couldn't find the corresponding workflow that publish thoose tarball in https://github.com/efabless/volare/blob/main/.github/workflows/ci.yml

As @donn pointed out in #3 (comment), there are conda packages for open_pdks.sky130a with nightly builds: https://anaconda.org/LiteX-Hub/open_pdks.sky130a/files, and the resulting tarball can be consumed without conda using something like:

curl -L --silent https://anaconda.org/LiteX-Hub/open_pdks.sky130a/1.0.304_0_g1491dd7/download/noarch/open_pdks.sky130a-1.0.304_0_g1491dd7-20220330_123635.tar.bz2 | tar --strip-components=2 -C $PDK_ROOT -xvjf  - share/pdk/

Curious if you think there would be advantes to share a common release infra for open_pdks/sky130A?

volare `ls-remote` requires GITHUB_TOKEN

Description

It would be nicer if enumeration of the HASH and TAG association was published at the PDK publication point that does not have access control and strict rate limit controls around it, instead of using a github service API to inspect active tags on a live repository.

Proposal

One way to provide this would be in the publish action of the appropriate project containing the PDK contents, download the JSON format once in the action, validate the current and expected tag is present in the file (maybe using jq) and then publish it as a GH deployment.

This way it is not a GH managed API that introspects in real-time the current status of a git repo, therefore has stricter access-
control and rate-limit controls with it (due to potential server side CPU time to answer API request).

It becomes a static content index item that is available alongside the PDK archive (which are also static content) that is a much less strict rate-limit control. It also comes highly cachable/easier for GH to manage API queries, that only needs to change when the PDK catalog is updated.

Maybe a wget or curl of the API data in the action during a PDK publish get it most of the way there.

  1. Publish catalog.json and refresh file everytime PDK content is published.
  2. Modify volare to try to download catalog.json file first, but it can silently fail.
  3. Consider, if this succeeds and $GITHUB_TOKEN is not empty, inform user with soft-error message, this operation no longer requires GITHUB_TOKEN (maybe this item is deferred until some months of successful operation after introduction)
  4. Fallback to current method requiring GITHUB_TOKEN, if this mechanism is left in long term then maybe it should provide a helpful soft-warning the ENV is not setup or blank and a link to documentation section on what to do

Please add a way to specify the verify= argument to httpx.Client

Description

If a non-standard certificate is needed, eg on a corporate network, volare will not work. Reports not connected to the internet with ls-remote. Httpx does not seem to care about the system SSL certs in the usual search dirs but I could be mistaken. Other software which would be affected, conda and pip, do not have any issue connecting as I have installed the required cert. I was able to workaround by rebuilding with the verify= argument in the Client constructor.

Expected Behavior

Should perform an ls-remote

Relevant command

volare ls-remote

Relevant log output

You don't appear to be connected to the Internet. ls-remote cannot be used.

Volare nix package

Description

I have some issues with importing volare to a nix derivation. I am able to import the volare package but I am not able to execute the volare command. The problem is, that the path since there is no default location in nix is very hard to find (I can't find it right now). So I thought a good idea could be creating a nix package containing volare, since there is no at the moment (atleast i can't find it on the nix packages website)

Proposal

Could you maybe create a nix package containing volare?

Unable to Add Missing Library

Description

Tried to add sky130_fd_sc_hs library but failed with errors.

Expected Behavior

Should add the missing library to the pdk.

Relevant command

volare build -l sky130_fd_sc_hs 12df12e2e74145e31c5a13de02f9a1e176b56e67

Relevant log output

==> config.log <==

                    set -e
                    export PATH="/home/user/local/bin:$PATH"
                    ./configure --enable-sky130-pdk --enable-sc-hs-sky130 --disable-sram-sky130 --disable-sc-lp-sky130 --disable-sc-hd-sky130 --disable-sc-hvl-sky130 --disable-io-sky130 --disable-primitive-sky130 --disable-alpha-sky130 --disable-sc-ls-sky130 --disable-sc-ms-sky130 --disable-sc-hdll-sky130 --with-reference
                
---
configure: WARNING: unrecognized options: --enable-sc-hs-sky130, --disable-sc-lp-sky130, --disable-sc-hd-sky130, --disable-sc-hvl-sky130, --disable-io-sky130, --disable-primitive-sky130, --disable-sc-ls-sky130, --disable-sc-ms-sky130, --disable-sc-hdll-sky130
checking for a Python interpreter with version >= 3.4... python3
checking for python3... /usr/bin/python3
checking for python3 version... 3.7
checking for python3 platform... linux
checking for python3 script directory... ${prefix}/lib/python3.7/site-packages
checking for python3 extension module directory... ${exec_prefix}/lib/python3.7/site-packages
checking python3 module: distutils... yes
checking for a sed that does not truncate output... /usr/bin/sed
configure: Found technology directories: gf180mcu sky130
Checking technology gf180mcu...
Checking technology sky130...
configure: PDK 'sky130' will be downloaded automatically during make.
configure: Link targets set to none
configure: Enabled variants set to all
configure: Found tools: klayout magic netgen irsim openlane qflow xschem xcircuit
checking for magic... /home/user/local/bin/magic
checking for patch... /usr/bin/patch
configure: Disabling package 'sky130_ml_xx_hd'
Traceback (most recent call last):
  File "<string>", line 1, in <module>
IndexError: list index out of range
configure: Package 'xschem_sky130' will be installed automatically during make.
configure: Package 'klayout_sky130' will be installed automatically during make.
configure: Package 'precheck_sky130' will be installed automatically during make.
configure: Disabling package 'sky130_sram_macros'
Traceback (most recent call last):
  File "<string>", line 1, in <module>
IndexError: list index out of range
configure: Package 'sky130_fd_bd_sram' will not be installed.
configure: Package 'sky130_osu_t12' will not be installed.
configure: Package 'sky130_osu_t15' will not be installed.
configure: Package 'sky130_osu_t18' will not be installed.
configure: Package 'gf180mcu_fd_pr' will be installed automatically during make.
configure: Package 'gf180mcu_fd_pv' will be installed automatically during make.
configure: Package 'gf180mcu_fd_io' will be installed automatically during make.
configure: Package 'gf180mcu_fd_sc_mcu7t5v0' will be installed automatically during make.
configure: Package 'gf180mcu_fd_sc_mcu9t5v0' will be installed automatically during make.
configure: Package 'gf180mcu_fd_ip_sram' will be installed automatically during make.
configure: Package 'gf180mcu_osu_sc' will be installed automatically during make.
configure: Tools enabled for PDK setup installation: klayout magic netgen irsim openlane qflow xschem xcircuit
configure: creating ./config.status
config.status: creating ../gf180mcu/Makefile
config.status: creating ../Makefile
config.status: creating ../sky130/Makefile
configure: WARNING: unrecognized options: --enable-sc-hs-sky130, --disable-sc-lp-sky130, --disable-sc-hd-sky130, --disable-sc-hvl-sky130, --disable-io-sky130, --disable-primitive-sky130, --disable-sc-ls-sky130, --disable-sc-ms-sky130, --disable-sc-hdll-sky130
Build configured successfully



==> install.log <==

                    set -e
                    export LC_ALL=en_US.UTF-8
                    export PATH="/home/user/local/bin:$PATH"
                    make -j1
                    make 'SHARED_PDKS_PATH=/home/user/sky130/mpw-9/dependencies/pdks/volare/sky130/build/12df12e2e74145e31c5a13de02f9a1e176b56e67' install
                
---
(cd sky130 && make -j all)
make[1]: Entering directory '/home/user/sky130/mpw-9/dependencies/pdks/volare/sky130/build/12df12e2e74145e31c5a13de02f9a1e176b56e67/open_pdks/sky130'
/bin/bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
/bin/bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
if test "xsky130.json" != "x"; then \
        SKYWATER_COMMIT = `cat sky130.json | grep skywater_pdk | grep -v COMMIT | cut -d'"' -f4` ; \
fi
if test "xsky130.json" != "x"; then \
        ALPHA_COMMIT = `cat sky130.json | grep sky130_ml_xx_hd | grep -v COMMIT | cut -d'"' -f4` ; \
fi
if test "xsky130.json" != "x"; then \
        XSCHEM_COMMIT = `cat sky130.json | grep xschem_sky130 | grep -v COMMIT | cut -d'"' -f4` ; \
fi
if test "xsky130.json" != "x"; then \
        KLAYOUT_COMMIT = `cat sky130.json | grep klayout_sky130 | grep -v COMMIT | cut -d'"' -f4` ; \
fi
if test "xsky130.json" != "x"; then \
        PRECHECK_COMMIT = `cat sky130.json | grep precheck_sky130 | grep -v COMMIT | cut -d'"' -f4` ; \
fi
if test "xsky130.json" != "x"; then \
        SRAM_COMMIT = `cat sky130.json | grep sky130_sram_macros | grep -v COMMIT | cut -d'"' -f4` ; \
fi
if test "xsky130.json" != "x"; then \
        SRAM_SPACE_COMMIT = `cat sky130.json | grep sky130_fd_bd_sram | grep -v COMMIT | cut -d'"' -f4` ; \
fi
/bin/bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
if test "xsky130.json" != "x"; then \
        OSU_T12_COMMIT = `cat sky130.json | grep sky130_osu_sc_t12 | grep -v COMMIT | cut -d'"' -f4` ; \
fi
if test "xsky130.json" != "x"; then \
        OSU_T15_COMMIT = `cat sky130.json | grep sky130_osu_sc_t15 | grep -v COMMIT | cut -d'"' -f4` ; \
fi
/bin/bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
if test "xsky130.json" != "x"; then \
        OSU_T18_COMMIT = `cat sky130.json | grep sky130_osu_sc_t18 | grep -v COMMIT | cut -d'"' -f4` ; \
fi
/bin/bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
/bin/bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
/bin/bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
/bin/bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
/bin/bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
/bin/bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
/bin/bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
/bin/bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
/bin/bash: line 1: KLAYOUT_COMMIT: command not found
/bin/bash: line 1: SKYWATER_COMMIT: command not found
/bin/bash: line 1: XSCHEM_COMMIT: command not found
/bin/bash: line 1: ALPHA_COMMIT: command not found
make[1]: *** [Makefile:631: pdk-repo] Error 127
make[1]: *** Waiting for unfinished jobs....
make[1]: *** [Makefile:696: klayout-repo] Error 127
/bin/bash: line 1: SRAM_SPACE_COMMIT: command not found
make[1]: *** [Makefile:683: xschem-repo] Error 127
/bin/bash: line 1: OSU_T12_COMMIT: command not found
/bin/bash: line 1: SRAM_COMMIT: command not found
make[1]: *** [Makefile:644: alpha-repo] Error 127
/bin/bash: line 1: OSU_T15_COMMIT: command not found
make[1]: *** [Makefile:670: sram-space-repo] Error 127
make[1]: *** [Makefile:722: osu-t12-repo] Error 127
make[1]: *** [Makefile:657: sram-repo] Error 127
make[1]: *** [Makefile:735: osu-t15-repo] Error 127
/bin/bash: line 1: OSU_T18_COMMIT: command not found
make[1]: *** [Makefile:748: osu-t18-repo] Error 127
/bin/bash: line 1: PRECHECK_COMMIT: command not found
make[1]: *** [Makefile:709: precheck-repo] Error 127
make[1]: Leaving directory '/home/user/sky130/mpw-9/dependencies/pdks/volare/sky130/build/12df12e2e74145e31c5a13de02f9a1e176b56e67/open_pdks/sky130'
make: *** [Makefile:132: tech-sky130] Error 2

path option not working

Description

volare path throws an error.

volare, version 0.13.0

Expected Behavior

Print the installed path.

Relevant command

volare path

Relevant log output

$ volare ls
In /home/mpw-9/pdks/volare/sky130/versions:
├── 1341f54f5ce0c4955326297f235e4ace1eb6d419 (2023.08.27)
├── 78b7bc32ddb4b6f14f76883c2e2dc5b5de9d1cbc (2023.07.10) (enabled)
└── e6f9c8876da77220403014b116761b0b2d79aab4 (2023.02.10)

$ volare path
Traceback (most recent call last):
  File "/home/.local/bin/volare", line 8, in <module>
    sys.exit(cli())
  File "/home/.local/lib/python3.7/site-packages/click/core.py", line 1157, in __call__
    return self.main(*args, **kwargs)
  File "/home/.local/lib/python3.7/site-packages/click/core.py", line 1078, in main
    rv = self.invoke(ctx)
  File "/home/.local/lib/python3.7/site-packages/click/core.py", line 1688, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/home/.local/lib/python3.7/site-packages/click/core.py", line 1434, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/home/.local/lib/python3.7/site-packages/click/core.py", line 783, in invoke
    return __callback(*args, **kwargs)
  File "/home/.local/lib/python3.7/site-packages/volare/__main__.py", line 176, in path_cmd
    print(version.get_dir(pdk_root), end="")
  File "/home/.local/lib/python3.7/site-packages/volare/common.py", line 95, in get_dir
    return os.path.join(get_versions_dir(pdk_root, self.pdk), self.name)
  File "/usr/lib/python3.7/posixpath.py", line 94, in join
    genericpath._check_arg_types('join', a, *p)
  File "/usr/lib/python3.7/genericpath.py", line 149, in _check_arg_types
    (funcname, s.__class__.__name__)) from None
TypeError: join() argument must be str or bytes, not 'NoneType'

Add permission checks

Some users attempt to use volare with folders with bad permissions, where the error messages become opaque.

volare fail on specific `gf180mcu` PDK

Description

volare 0.12.7 fails when doing this:

volare enable 1341f54f5ce0c4955326297f235e4ace1eb6d419 --pdk gf180mcu

throwing this error:

/foss/pdks > volare enable 1341f54f5ce0c4955326297f235e4ace1eb6d419 --pdk gf180mcu
Version 1341f54f5ce0c4955326297f235e4ace1eb6d419 not found locally, attempting to download…
Downloading common.tar.zst… ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
Downloading gf180mcu_fd_io.tar.zst… ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
Downloading gf180mcu_fd_ip_sram.tar.zst… ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
Downloading gf180mcu_fd_pr.tar.zst… ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
Downloading gf180mcu_fd_sc_mcu7t5v0.tar.zst… ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
Downloading gf180mcu_fd_sc_mcu9t5v0.tar.zst… ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
[Errno 2] No such file or directory: '/foss/pdks/volare/gf180mcu/versions/1341f54f5ce0c4955326297f235e4ace1eb6d419/gf180mcuD/SOURCES'

Expected Behavior

No fail.

Relevant command

See above.

Relevant log output

See above.

Unable to install Volare on WSL2 based Ubuntu 24.04

Hi,

I am trying to install Volare on my WSL2 based Ubuntu 24.04 install. I am following the instructions on the Volare Git page. My purpose is to install open_pdks (I am targeting Sky130). However, I am getting error while doing so. This is what I tried:

Installed python through these commands:

sudo apt-get update
sudo apt-get install python3 python3-pip xz-utils

It worked OK

Next, tried to install volare through this command:

python3 -m pip install --upgrade --no-cache-dir volare

I got the error:

error: externally-managed-environment

Pls see the screenshot below.

Screenshot_volare

How do I overcome the issue pls? Am i doing something wrong?

I look forward to your response.

Thanks,
Emma Good.

You appear to be reinventing Conda / PyPi / FuseSoC / etc - consider just being a wrapper for existing ecosystems?

Reading the description of volare, it sounds like you are quickly starting to reinvent existing tooling like Conda / Pip / FuseSoC / etc. Your tool_metadata.yml file sounds a lot like Conda's environment.yml and Pip's requirements.txt. These existing systems have quite a large amount of tooling already written for them.

Have you considered making volare just a thin wrapper around these existing solutions (if it isn't already)?

I know that @olofk and @proppy where looking at this problem too. @umarcor, @kgugala and @carlosedp have been working on similar problems in the FPGA space.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.