{"id":13646311,"url":"https://github.com/limerainne/Dockerize-EDA","last_synced_at":"2025-04-21T17:32:35.138Z","repository":{"id":178082761,"uuid":"112752638","full_name":"limerainne/Dockerize-EDA","owner":"limerainne","description":"[WIP] Dockerize Synopsys/Cadence EDA tools","archived":false,"fork":false,"pushed_at":"2019-03-29T01:51:25.000Z","size":26,"stargazers_count":81,"open_issues_count":5,"forks_count":24,"subscribers_count":7,"default_branch":"master","last_synced_at":"2024-11-09T19:41:37.532Z","etag":null,"topics":["cadence","dockerfile","eda","synopsys"],"latest_commit_sha":null,"homepage":null,"language":"Dockerfile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/limerainne.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2017-12-01T15:03:09.000Z","updated_at":"2024-10-09T17:27:44.000Z","dependencies_parsed_at":"2024-01-14T10:20:06.982Z","dependency_job_id":null,"html_url":"https://github.com/limerainne/Dockerize-EDA","commit_stats":null,"previous_names":["limerainne/dockerize-eda"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/limerainne%2FDockerize-EDA","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/limerainne%2FDockerize-EDA/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/limerainne%2FDockerize-EDA/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/limerainne%2FDockerize-EDA/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/limerainne","download_url":"https://codeload.github.com/limerainne/Dockerize-EDA/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250100736,"owners_count":21374994,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cadence","dockerfile","eda","synopsys"],"created_at":"2024-08-02T01:02:52.656Z","updated_at":"2025-04-21T17:32:34.785Z","avatar_url":"https://github.com/limerainne.png","language":"Dockerfile","funding_links":[],"categories":["Dockerfile"],"sub_categories":[],"readme":"# [WIP] Dockerize scripts for commercial EDA tools\n\nHere is the `Dockerfile`s to dockerize popular [EDA (Electronic Design Automation)](https://en.wikipedia.org/wiki/Electronic_design_automation) tools!\n\nWith docker images made from these `Dockerfiles`, we could do:\n * Build/test your design on the cloud server (but here comes a license issue :) )\n * Maintain tools with as many different version as you want without difficulties\n * Provide tools for you or your peer's desktop computer regardless of which OS you are using\n * [Continuous Integration (CI)](https://en.wikipedia.org/wiki/Continuous_integration) for your design\n * and much more!\n\n\u003e Of course, most things listed above could be done without Docker and meaningless job made by me :)    \n\u003e I don't know dockering tools is useful or not...\n\n## Packages tried to dockerize\n - Synosys\n   - Design Compiler (DC)\n   - IC Compiler (ICC)\n   - VCS (RTL Simulator) (N-2017; w/ Ubuntu 16.04)\n   - HSPICE (N-2017; for J-2014 `netbase` package is also required ([#6][i6]))\n - Cadence\n   - Incisive (NCSim)\n   - Virtuoso (IC)\n\n## CAVEAT\n  - You should NOT upload an image containing commercial tool to PUBLIC docker registry! ;-)\n\n  - Intermediate images are not removed automatically, you have to remove by yourself for now. (see below)\n\n  - X11 forwarding with host was not prepared. In other words, with this image you cannot open GUI windows out-of-the-box. (See [#3][i3])\n\n  - How can we run docker container with unpriviledged permission? In other words, can this image be used similar to desktop applications?\n    - Currently, I did not prepare to drop root priviledge in `Dockerfile`s\n    - [Singularity](https://www.sylabs.io) could be a solution [#5][i5]\n\n## Prerequisites\n  - Docker 17.05+ (this script uses multi-stage build feature)\n  - Installer and installation package of the tool you want to dockerize\n     - This repository consists of just `Dockerfile`s, not of actual images or installer packages\n\n## Generating an image\n  \n  - Clone this repository to your workstation.\n  - Copy (or bind mount) installer and installation package to the subdirectory\n     - Refer to shell scripts for bind-mounting installation files from other path. Bind mount was used only for avoiding copy installation package to working path\n  - modify dockerfile to match with your tool version, your requirements, etc.\n  - Execute below command to create an image.  \n```bash\n$ sudo docker build -t \u003cimage_name\u003e:\u003cversion\u003e -f \u003cDockerfile\u003e .\ne.g. $ sudo docker build -t synopsys_dc:X-2020.4 -f Dockerfile_Synopsys_DC .\n```\n  - You can manually remove intermediate images created during building an image.\n```bash\n$ sudo docker images    # find a tag of the intermediate image\n$ sudo docker rmi \u003cimage_tag_you_want_to_remove\u003e\n\nor\n\n$ docker rmi $(docker images --filter \"dangling=true\" -q --no-trunc)\n```\n\n## Launch a container\n  - Example command to run a container\n    - You should pass `LM_LICENSE_FILE` environment variable regarding your license server\n    - Consider bind mount your user directory\n```bash\n$ sudo docker run --rm -it -e LM_LICENSE_FILE=\"\u003cport\u003e@\u003clicense_server\u003e\" \\\n                   \u003cimage_name\u003e [\u003ccommand\u003e]\n```\n  - To run a container with GUI (X11) enabled, see [#3][i3].\n\n## Vendor specific requirements\n\n### Synopsys\n\n - Requires following jobs to be run within Ubuntu (14.04) environment\n```bash\n$ sudo apt install csh libxss1 libsm6 libice6 libxft2 libjpeg62 libtiff5 libmng2 libpng12-0\n# WORKAROUND link old library filenames with newer version\n$ sudo ln -s /usr/lib/x86_64-linux-gnu/libtiff.so.5 /usr/lib/x86_64-linux-gnu/libtiff.so.3\n$ sudo ln -s /usr/lib/x86_64-linux-gnu/libmng.so.2 /usr/lib/x86_64-linux-gnu/libmng.so.1\n```\n\n - Change default shell from `dash` to `bash` for avoiding shell script compatibility issues\n ```bash\n $ sudo update-alternatives --install /bin/sh sh /bin/bash 20\n ```\n\n - Ubuntu 18.04 requires additional treatments, because `libpng12-0` package was removed from that version\n   - Manually download and install `libpng12-0` package, or add source of older releases and install package from that source like below:\n```bash\n$ sudo 'echo \"deb http://security.ubuntu.com/ubuntu xenial-security main\" \u003e\u003e /etc/apt/sources.list'\n$ sudo apt update\n$ sudo apt install -y -t xenial libpng12-0\n```\n\n#### HSPICE\n - Requires `libxml2` also\n \n##### J-2014\n - Requires `netbase` package, which has `/etc/protocols` file\n\n#### VCS\n - Additionally required packages:\n   - `dc`\n   - gcc/g++ compiler\n     - In Debian/Ubuntu, you can do that by simply installing `build-essential` package (with unnecessary more packages ;-( )\n\n - Define below environment variables\n```bash\n$ export VCS_HOME=\u003cpath_to_vcs\u003e\n$ export VCS_TARGET_ARCH=\"amd64\"\n```\n\n - Set alias for `vcs` command. Below example is for Bash shell:    \n`$ alias vcs=\"vcs -full64\"`\n   - Unfortunately, `VCS_TARGET_ARCH` was not fully effective\n   - This was not implemented in VCS `Dockerfile` for now    \n\n### Cadence\n\n - Requires following packages\n```bash\n$ sudo apt install openjdk-6-jre  # for installer\n$ sudo dpkg --add-architecture i386\n$ sudo apt libxtst6:i386 libxext6:i386 libxi6:i386 ksh csh \\\n```\n\n - Define below environment variable to execute 64-bit binary  \n`$ export CDS_AUTO_64BIT=ALL`\n\n - (Virtuoso) Define below environment variable regarding inside `\u003cpath/to/virtuoso\u003e/share/oa/lib/`  \n`$ export OA_UNSUPPORTED_PLAT \"linux_rhel50_gcc48x\"`\n\n### Mentor\n\n - Have to mimic OS vendor and version as Redhat 7.0\n   - Refer to the [Patch file](https://github.com/limerainne/Dockerize-EDA/blob/master/patches/mentor_calibre_os_as_rh7.patch)\n\n[i3]: https://github.com/limerainne/Dockerize-EDA/issues/3\n[i5]: https://github.com/limerainne/Dockerize-EDA/issues/5\n[i6]: https://github.com/limerainne/Dockerize-EDA/issues/6\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flimerainne%2FDockerize-EDA","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flimerainne%2FDockerize-EDA","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flimerainne%2FDockerize-EDA/lists"}