From 25f10a24392e35c9686200ce27d0b744be42f050 Mon Sep 17 00:00:00 2001 From: marwaneltoukhy Date: Mon, 27 Nov 2023 13:36:53 +0200 Subject: [PATCH 01/20] updated make setup --- Makefile | 69 +++++++++++++++++--------- scripts/get_tools.py | 113 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 158 insertions(+), 24 deletions(-) create mode 100644 scripts/get_tools.py diff --git a/Makefile b/Makefile index ab649a1e0..3ed771378 100644 --- a/Makefile +++ b/Makefile @@ -16,7 +16,7 @@ MAKEFLAGS+=--warn-undefined-variables export CARAVEL_ROOT?=$(PWD)/caravel -PRECHECK_ROOT?=${HOME}/mpw_precheck +export PRECHECK_ROOT?=${HOME}/mpw_precheck export MCW_ROOT?=$(PWD)/mgmt_core_wrapper SIM?=RTL @@ -41,11 +41,11 @@ export DISABLE_LVS?=0 export ROOTLESS -ifeq ($(PDK),sky130A) - SKYWATER_COMMIT=f70d8ca46961ff92719d8870a18a076370b85f6c - export OPEN_PDKS_COMMIT?=78b7bc32ddb4b6f14f76883c2e2dc5b5de9d1cbc - export OPENLANE_TAG?=2023.07.19-1 - MPW_TAG ?= mpw-9g +# ifeq ($(PDK),sky130A) +# SKYWATER_COMMIT=f70d8ca46961ff92719d8870a18a076370b85f6c +# export OPEN_PDKS_COMMIT?=78b7bc32ddb4b6f14f76883c2e2dc5b5de9d1cbc +# export OPENLANE_TAG?=2023.07.19-1 +# MPW_TAG ?= mpw-9g ifeq ($(CARAVEL_LITE),1) CARAVEL_NAME := caravel-lite @@ -57,25 +57,25 @@ else CARAVEL_TAG := $(MPW_TAG) endif -endif +# endif -ifeq ($(PDK),sky130B) - SKYWATER_COMMIT=f70d8ca46961ff92719d8870a18a076370b85f6c - export OPEN_PDKS_COMMIT?=78b7bc32ddb4b6f14f76883c2e2dc5b5de9d1cbc - export OPENLANE_TAG?=2023.07.19-1 - MPW_TAG ?= mpw-9g +# ifeq ($(PDK),sky130B) +# SKYWATER_COMMIT=f70d8ca46961ff92719d8870a18a076370b85f6c +# export OPEN_PDKS_COMMIT?=78b7bc32ddb4b6f14f76883c2e2dc5b5de9d1cbc +# export OPENLANE_TAG?=2023.07.19-1 +# MPW_TAG ?= mpw-9g -ifeq ($(CARAVEL_LITE),1) - CARAVEL_NAME := caravel-lite - CARAVEL_REPO := https://github.com/efabless/caravel-lite - CARAVEL_TAG := $(MPW_TAG) -else - CARAVEL_NAME := caravel - CARAVEL_REPO := https://github.com/efabless/caravel - CARAVEL_TAG := $(MPW_TAG) -endif +# ifeq ($(CARAVEL_LITE),1) +# CARAVEL_NAME := caravel-lite +# CARAVEL_REPO := https://github.com/efabless/caravel-lite +# CARAVEL_TAG := $(MPW_TAG) +# else +# CARAVEL_NAME := caravel +# CARAVEL_REPO := https://github.com/efabless/caravel +# CARAVEL_TAG := $(MPW_TAG) +# endif -endif +# endif ifeq ($(PDK),gf180mcuD) @@ -101,7 +101,9 @@ install: rm -rf $(CARAVEL_ROOT) && sleep 2;\ fi echo "Installing $(CARAVEL_NAME).." - git clone -b $(CARAVEL_TAG) $(CARAVEL_REPO) $(CARAVEL_ROOT) --depth=1 + @mkdir -p $(CARAVEL_ROOT) + cd $(CARAVEL_ROOT) && \ + curl -L $(CARAVEL_REPO)/tarball/$(CARAVEL_COMMIT) | tar -xvzC . --strip-components=1 # Install DV setup .PHONY: simenv @@ -114,7 +116,24 @@ simenv-cocotb: docker pull efabless/dv:cocotb .PHONY: setup -setup: check_dependencies install check-env install_mcw openlane pdk-with-volare setup-timing-scripts setup-cocotb precheck +# setup: check_dependencies install check-env install_mcw openlane pdk-with-volare setup-timing-scripts setup-cocotb precheck +setup: check-python check_dependencies setup-cocotb install-volare +# setup: + ./venv/bin/$(PYTHON_BIN) -m pip install --upgrade --no-cache-dir requests + ./venv/bin/$(PYTHON_BIN) -u scripts/get_tools.py --openlane_root $(OPENLANE_ROOT) --precheck_root $(PRECHECK_ROOT) --pdk_root $(PDK_ROOT) --caravel_root $(CARAVEL_ROOT) --mcw_root $(MCW_ROOT) --timing_root $(TIMING_ROOT) + + +.PHONY: install-volare +install-volare: + rm -rf ./venv + $(PYTHON_BIN) -m venv ./venv + ./venv/bin/$(PYTHON_BIN) -m pip install --upgrade --no-cache-dir pip + ./venv/bin/$(PYTHON_BIN) -m pip install --upgrade --no-cache-dir volare + +check-python: +ifeq ($(shell which python3),) +$(error Please install python 3.6+) +endif # Openlane blocks=$(shell cd openlane && find * -maxdepth 0 -type d) @@ -317,6 +336,8 @@ check_dependencies: mkdir $(PWD)/dependencies; \ fi +# export CARAVEL_COMMIT=$(shell python3 scripts/get_tools.py) + export CUP_ROOT=$(shell pwd) export TIMING_ROOT?=$(shell pwd)/dependencies/timing-scripts diff --git a/scripts/get_tools.py b/scripts/get_tools.py new file mode 100644 index 000000000..26d329f5f --- /dev/null +++ b/scripts/get_tools.py @@ -0,0 +1,113 @@ +import argparse +import json +import os +import shutil +import tarfile +import requests +import volare +from rich.progress import Progress + + +def parse_json_file(url): + """Parses a JSON file from the given URL. + + Args: + url: The URL of the JSON file. + + Returns: + A Python dictionary containing the parsed JSON data. + """ + + response = requests.get(url) + if response.status_code != 200: + raise ValueError(f'Failed to get JSON data from {url}: {response.status_code}') + + data = response.json() + json_data = json.dumps(data, indent=4) + # Write the JSON data to a file + with open('tool_versions.json', 'w') as file: + file.write(json_data) + return data + + +def download_tools(openlane_root, precheck_root, pdk_root, caravel_root, mcw_root, timing_root): + """Downloads the tools from the upstream GitHub repo. + """ + url = 'https://raw.githubusercontent.com/efabless/central_CI/main/tools.json' + data = parse_json_file(url) + with Progress() as progress: + task = progress.add_task("[cyan]Downloading Tools...", total=6) + for key, value in data.items(): + if key == "OpenLane": + progress.update(task, description="[cyan]Downloading OpenLane...") + download_tar("OpenLane", value['commit'], value['url'], openlane_root) + progress.update(task, completed=1) + elif key == "pdk": + progress.update(task, description="[cyan]Downloading pdk...") + volare.enable(pdk_root, "sky130", value['commit']) + progress.update(task, completed=1) + elif key == "precheck": + progress.update(task, description="[cyan]Downloading precheck...") + download_tar("precheck", value['commit'], value['url'], precheck_root) + progress.update(task, completed=1) + elif key == "caravel": + progress.update(task, description="[cyan]Downloading caravel...") + download_tar("caravel", value['commit'], value['url'], caravel_root) + progress.update(task, completed=1) + elif key == "mgmt_core_wrapper": + progress.update(task, description="[cyan]Downloading mgmt_core_wrapper...") + download_tar("mgmt_core_wrapper", value['commit'], value['url'], mcw_root) + progress.update(task, completed=1) + elif key == "timing_scripts": + progress.update(task, description="[cyan]Downloading timing_scripts...") + download_tar("timing_scripts", value['commit'], value['url'], timing_root) + progress.update(task, completed=1) + + +def download_tar(tool, version, url, tool_path): + if os.path.isdir(tool_path): + shutil.rmtree(tool_path) + os.makedirs(tool_path) + name = url.split("/")[-1] + owner = url.split("/")[-2] + # print(f"downloading {tool}") + response = requests.get(f'{url}/tarball/{version}') + if response.status_code != 200: + raise Exception(f"Failed to download {tool}") + with open(f'{os.path.dirname(tool_path)}/{version}.tar.gz', 'wb') as file: + file.write(response.content) + # print(f"extracting {os.path.dirname(tool_path)}/{version}.tar.gz") + + tar = tarfile.open(f'{os.path.dirname(tool_path)}/{version}.tar.gz', 'r:gz') + tar.extractall(path=os.path.dirname(tool_path)) + tar.close() + os.rename(f'{os.path.dirname(tool_path)}/{owner}-{name}-{version[0:7]}', f'{tool_path}') + os.remove(f'{os.path.dirname(tool_path)}/{version}.tar.gz') + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument('--openlane_root', required=True, + help='Path to the OpenLANE root directory') + parser.add_argument('--precheck_root', required=True, + help='Path to the Precheck root directory') + parser.add_argument('--pdk_root', required=True, + help='Path to the PDK root directory') + parser.add_argument('--caravel_root', required=True, + help='Path to the Caravel root directory') + parser.add_argument('--mcw_root', required=True, + help='Path to the Mgmt Core Wrapper root directory') + parser.add_argument('--timing_root', required=True, + help='Path to the Timing Scripts root directory') + + args = parser.parse_args() + download_tools(openlane_root=args.openlane_root, + precheck_root=args.precheck_root, + pdk_root=args.pdk_root, + caravel_root=args.caravel_root, + mcw_root=args.mcw_root, + timing_root=args.timing_root) + + +if __name__ == '__main__': + main() From 4c591d9b03ed5edf1ddab5bf5491715c79d46743 Mon Sep 17 00:00:00 2001 From: marwaneltoukhy Date: Mon, 27 Nov 2023 15:36:44 +0200 Subject: [PATCH 02/20] updated make setup and added comparing tools --- Makefile | 83 +++++++++++++------------------------ scripts/compare_versions.py | 25 +++++++++++ scripts/get_tools.py | 28 +++++++++---- 3 files changed, 73 insertions(+), 63 deletions(-) create mode 100644 scripts/compare_versions.py diff --git a/Makefile b/Makefile index 3ed771378..edc6471eb 100644 --- a/Makefile +++ b/Makefile @@ -41,12 +41,6 @@ export DISABLE_LVS?=0 export ROOTLESS -# ifeq ($(PDK),sky130A) -# SKYWATER_COMMIT=f70d8ca46961ff92719d8870a18a076370b85f6c -# export OPEN_PDKS_COMMIT?=78b7bc32ddb4b6f14f76883c2e2dc5b5de9d1cbc -# export OPENLANE_TAG?=2023.07.19-1 -# MPW_TAG ?= mpw-9g - ifeq ($(CARAVEL_LITE),1) CARAVEL_NAME := caravel-lite CARAVEL_REPO := https://github.com/efabless/caravel-lite @@ -57,25 +51,6 @@ else CARAVEL_TAG := $(MPW_TAG) endif -# endif - -# ifeq ($(PDK),sky130B) -# SKYWATER_COMMIT=f70d8ca46961ff92719d8870a18a076370b85f6c -# export OPEN_PDKS_COMMIT?=78b7bc32ddb4b6f14f76883c2e2dc5b5de9d1cbc -# export OPENLANE_TAG?=2023.07.19-1 -# MPW_TAG ?= mpw-9g - -# ifeq ($(CARAVEL_LITE),1) -# CARAVEL_NAME := caravel-lite -# CARAVEL_REPO := https://github.com/efabless/caravel-lite -# CARAVEL_TAG := $(MPW_TAG) -# else -# CARAVEL_NAME := caravel -# CARAVEL_REPO := https://github.com/efabless/caravel -# CARAVEL_TAG := $(MPW_TAG) -# endif - -# endif ifeq ($(PDK),gf180mcuD) @@ -90,20 +65,9 @@ ifeq ($(PDK),gf180mcuD) endif # Include Caravel Makefile Targets -.PHONY: % : check-caravel -%: - export CARAVEL_ROOT=$(CARAVEL_ROOT) && export MPW_TAG=$(MPW_TAG) && $(MAKE) -f $(CARAVEL_ROOT)/Makefile $@ - -.PHONY: install -install: - if [ -d "$(CARAVEL_ROOT)" ]; then\ - echo "Deleting exisiting $(CARAVEL_ROOT)" && \ - rm -rf $(CARAVEL_ROOT) && sleep 2;\ - fi - echo "Installing $(CARAVEL_NAME).." - @mkdir -p $(CARAVEL_ROOT) - cd $(CARAVEL_ROOT) && \ - curl -L $(CARAVEL_REPO)/tarball/$(CARAVEL_COMMIT) | tar -xvzC . --strip-components=1 +# .PHONY: % : check-caravel +# %: +# export CARAVEL_ROOT=$(CARAVEL_ROOT) && export MPW_TAG=$(MPW_TAG) && $(MAKE) -f $(CARAVEL_ROOT)/Makefile $@ # Install DV setup .PHONY: simenv @@ -116,19 +80,17 @@ simenv-cocotb: docker pull efabless/dv:cocotb .PHONY: setup -# setup: check_dependencies install check-env install_mcw openlane pdk-with-volare setup-timing-scripts setup-cocotb precheck -setup: check-python check_dependencies setup-cocotb install-volare -# setup: - ./venv/bin/$(PYTHON_BIN) -m pip install --upgrade --no-cache-dir requests - ./venv/bin/$(PYTHON_BIN) -u scripts/get_tools.py --openlane_root $(OPENLANE_ROOT) --precheck_root $(PRECHECK_ROOT) --pdk_root $(PDK_ROOT) --caravel_root $(CARAVEL_ROOT) --mcw_root $(MCW_ROOT) --timing_root $(TIMING_ROOT) - +setup: print_message clean_log check-python check_dependencies install-volare + @./venv/bin/$(PYTHON_BIN) -m pip install --upgrade --no-cache-dir requests >> setup.log + @./venv/bin/$(PYTHON_BIN) -u scripts/get_tools.py --openlane_root $(OPENLANE_ROOT) --precheck_root $(PRECHECK_ROOT) --pdk_root $(PDK_ROOT) --caravel_root $(CARAVEL_ROOT) --mcw_root $(MCW_ROOT) --timing_root $(TIMING_ROOT) + @$(MAKE) setup-cocotb >> setup.log .PHONY: install-volare install-volare: - rm -rf ./venv - $(PYTHON_BIN) -m venv ./venv - ./venv/bin/$(PYTHON_BIN) -m pip install --upgrade --no-cache-dir pip - ./venv/bin/$(PYTHON_BIN) -m pip install --upgrade --no-cache-dir volare + @rm -rf ./venv >> setup.log + @$(PYTHON_BIN) -m venv ./venv >> setup.log + @./venv/bin/$(PYTHON_BIN) -m pip install --upgrade --no-cache-dir pip >> setup.log + @./venv/bin/$(PYTHON_BIN) -m pip install --upgrade --no-cache-dir volare >> setup.log check-python: ifeq ($(shell which python3),) @@ -138,9 +100,18 @@ endif # Openlane blocks=$(shell cd openlane && find * -maxdepth 0 -type d) .PHONY: $(blocks) -$(blocks): % : +$(blocks): % : check_versions $(MAKE) -C openlane $* +.PHONY: clean_log +clean_log: + @rm -f setup.log + +.PHONY: print_message +print_message: + @echo "Setting up caravel_user_project environment..." + @echo "To check for errors, please see setup.log" + dv_patterns=$(shell cd verilog/dv && find * -maxdepth 0 -type d) cocotb-dv_patterns=$(shell cd verilog/dv/cocotb && find . -name "*.c" | sed -e 's|^.*/||' -e 's/.c//') dv-targets-rtl=$(dv_patterns:%=verify-%-rtl) @@ -249,7 +220,9 @@ update_caravel: check-caravel uninstall: rm -rf $(CARAVEL_ROOT) - +.PHONY: check_versions +check_versions: + ./venv/bin/$(PYTHON_BIN) -u scripts/compare_versions.py # Install Pre-check # Default installs to the user home directory, override by "export PRECHECK_ROOT=" .PHONY: precheck @@ -263,7 +236,7 @@ precheck: @docker pull efabless/mpw_precheck:latest .PHONY: run-precheck -run-precheck: check-pdk check-precheck +run-precheck: check_versions check-pdk check-precheck @if [ "$$DISABLE_LVS" = "1" ]; then\ $(eval INPUT_DIRECTORY := $(shell pwd)) \ cd $(PRECHECK_ROOT) && \ @@ -391,7 +364,7 @@ $(cocotb-dv-targets-gl): cocotb-verify-%-gl: exit 1 .PHONY: create-spef-mapping -create-spef-mapping: ./verilog/gl/user_project_wrapper.v +create-spef-mapping: check_versions ./verilog/gl/user_project_wrapper.v docker run \ --rm \ $(USER_ARGS) \ @@ -411,7 +384,7 @@ create-spef-mapping: ./verilog/gl/user_project_wrapper.v .PHONY: extract-parasitics -extract-parasitics: ./verilog/gl/user_project_wrapper.v +extract-parasitics: check_versions ./verilog/gl/user_project_wrapper.v docker run \ --rm \ $(USER_ARGS) \ @@ -435,7 +408,7 @@ extract-parasitics: ./verilog/gl/user_project_wrapper.v @rm ./tmp-macros-list .PHONY: caravel-sta -caravel-sta: ./env/spef-mapping.tcl +caravel-sta: check_versions ./env/spef-mapping.tcl @$(MAKE) -C $(TIMING_ROOT) -f $(TIMING_ROOT)/timing.mk caravel-timing-typ -j3 @$(MAKE) -C $(TIMING_ROOT) -f $(TIMING_ROOT)/timing.mk caravel-timing-fast -j3 @$(MAKE) -C $(TIMING_ROOT) -f $(TIMING_ROOT)/timing.mk caravel-timing-slow -j3 diff --git a/scripts/compare_versions.py b/scripts/compare_versions.py new file mode 100644 index 000000000..d1f378d0a --- /dev/null +++ b/scripts/compare_versions.py @@ -0,0 +1,25 @@ +import requests +import json + + +def compare_json(tool_versions_json_path): + # Get the upstream JSON from the URL + upstream_url = 'https://raw.githubusercontent.com/efabless/central_CI/main/tools.json' + response = requests.get(upstream_url) + if response.status_code != 200: + raise ValueError(f'Failed to get upstream JSON from {upstream_url}: {response.status_code}') + upstream_json = response.json() + + # Load the tool_versions.json + with open(tool_versions_json_path, 'r') as tool_versions_file: + tool_versions_json = json.load(tool_versions_file) + + # Compare the two JSON objects + if upstream_json == tool_versions_json: + print("The upstream JSON is the same as tool_versions.json") + else: + print("The upstream JSON is different from tool_versions.json, please update by running make setup") + exit(1) + + +compare_json("./tool_versions.json") \ No newline at end of file diff --git a/scripts/get_tools.py b/scripts/get_tools.py index 26d329f5f..637266df2 100644 --- a/scripts/get_tools.py +++ b/scripts/get_tools.py @@ -2,10 +2,17 @@ import json import os import shutil +import subprocess import tarfile import requests import volare -from rich.progress import Progress +from rich.progress import ( + Progress, + TextColumn, + BarColumn, + MofNCompleteColumn, + TimeElapsedColumn, +) def parse_json_file(url): @@ -35,33 +42,38 @@ def download_tools(openlane_root, precheck_root, pdk_root, caravel_root, mcw_roo """ url = 'https://raw.githubusercontent.com/efabless/central_CI/main/tools.json' data = parse_json_file(url) - with Progress() as progress: + f = open("setup.log", "a") + with Progress(TextColumn("[progress.description]{task.description}"), BarColumn(), MofNCompleteColumn(), TimeElapsedColumn()) as progress: task = progress.add_task("[cyan]Downloading Tools...", total=6) for key, value in data.items(): if key == "OpenLane": progress.update(task, description="[cyan]Downloading OpenLane...") download_tar("OpenLane", value['commit'], value['url'], openlane_root) - progress.update(task, completed=1) + progress.update(task, description="[cyan]Downloading OpenLane Docker...") + os.environ['OPENLANE_IMAGE_NAME'] = f"efabless/openlane:{value['commit']}" + os.environ['IMAGE_NAME'] = f"efabless/openlane:{value['commit']}" + subprocess.run(["make", "pull-openlane"], cwd=openlane_root, env=os.environ, stderr=subprocess.STDOUT, text=True, check=True, stdout=f) + progress.update(task, advance=1) elif key == "pdk": progress.update(task, description="[cyan]Downloading pdk...") volare.enable(pdk_root, "sky130", value['commit']) - progress.update(task, completed=1) + progress.update(task, advance=1) elif key == "precheck": progress.update(task, description="[cyan]Downloading precheck...") download_tar("precheck", value['commit'], value['url'], precheck_root) - progress.update(task, completed=1) + progress.update(task, advance=1) elif key == "caravel": progress.update(task, description="[cyan]Downloading caravel...") download_tar("caravel", value['commit'], value['url'], caravel_root) - progress.update(task, completed=1) + progress.update(task, advance=1) elif key == "mgmt_core_wrapper": progress.update(task, description="[cyan]Downloading mgmt_core_wrapper...") download_tar("mgmt_core_wrapper", value['commit'], value['url'], mcw_root) - progress.update(task, completed=1) + progress.update(task, advance=1) elif key == "timing_scripts": progress.update(task, description="[cyan]Downloading timing_scripts...") download_tar("timing_scripts", value['commit'], value['url'], timing_root) - progress.update(task, completed=1) + progress.update(task, advance=1) def download_tar(tool, version, url, tool_path): From b60fcaebc858131a4a25cb4fcd3ad9f980af7df6 Mon Sep 17 00:00:00 2001 From: marwaneltoukhy Date: Mon, 27 Nov 2023 16:18:10 +0200 Subject: [PATCH 03/20] testing CI --- .github/workflows/user_project_ci.yml | 184 +++++--------------------- 1 file changed, 31 insertions(+), 153 deletions(-) diff --git a/.github/workflows/user_project_ci.yml b/.github/workflows/user_project_ci.yml index 87f7d3ee0..81dbc02b5 100644 --- a/.github/workflows/user_project_ci.yml +++ b/.github/workflows/user_project_ci.yml @@ -8,7 +8,7 @@ on: workflow_dispatch: jobs: - download_caravel: + download_deps: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 @@ -33,95 +33,61 @@ jobs: run: | sudo mkdir -p ${{ env.PDK_ROOT }} sudo chown -R $USER:$USER ${{ env.PDK_ROOT }} - make install + make setup + cd ${{ env.MCW_ROOT }} + rm -rf gds maglef openlane spi LICENSE manifest docs litex lvs .git cd ${{ env.CARAVEL_ROOT }} rm -rf gds maglef openlane spi LICENSE manifest .git - name: Tarball Caravel run: | - tar -cf /tmp/caravel.tar -C $CARAVEL_ROOT . + tar -cf /tmp/caravel.tar -C ${{ env.CARAVEL_ROOT }} . - name: Upload Caravel Tarball uses: actions/upload-artifact@v2 with: name: caravel-tarball path: /tmp/caravel.tar - - download_deps: - runs-on: ubuntu-latest - strategy: - matrix: - targets: ["pdk-with-volare", "install_mcw", "openlane", "setup-timing-scripts", "precheck"] - needs: [download_caravel] - steps: - - uses: actions/checkout@v2 - - name: Set up QEMU - uses: docker/setup-qemu-action@v1 + - name: Tarball mgmt_core_wrapper + run: | + tar -cf /tmp/mgmt_core_wrapper.tar -C ${{ env.MCW_ROOT }} . - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v1 + - name: Upload mgmt_core_wrapper Tarball + uses: actions/upload-artifact@v2 + with: + name: mgmt_core_wrapper-tarball + path: /tmp/mgmt_core_wrapper.tar - - name: Setup Environment Variables + - name: Tarball openlane run: | - echo "PDK_ROOT=$GITHUB_WORKSPACE/pdk" >> $GITHUB_ENV - echo "OPENLANE_ROOT=$GITHUB_WORKSPACE/openlane_src" >> $GITHUB_ENV - echo "CARAVEL_ROOT=$GITHUB_WORKSPACE/caravel" >> $GITHUB_ENV - echo "MCW_ROOT=$GITHUB_WORKSPACE/mgmt_core_wrapper" >> $GITHUB_ENV - echo "TIMING_ROOT=$GITHUB_WORKSPACE/timing-scripts" >> $GITHUB_ENV - echo "PRECHECK_ROOT=$GITHUB_WORKSPACE/mpw_precheck" >> $GITHUB_ENV - echo "MPW_TAG=main" >> $GITHUB_ENV - - - name: Get dependencies name - run: | - if [[ "${{ matrix.targets }}" == "install_mcw" ]]; then - echo "dep_name=mgmt_core_wrapper" >> $GITHUB_ENV - echo "dep_root=${{ env.MCW_ROOT }}" >> $GITHUB_ENV - elif [[ "${{ matrix.targets }}" == "openlane" ]]; then - echo "dep_name=openlane" >> $GITHUB_ENV - echo "dep_root=${{ env.OPENLANE_ROOT }}" >> $GITHUB_ENV - elif [[ "${{ matrix.targets }}" == "pdk-with-volare" ]]; then - echo "dep_name=pdk" >> $GITHUB_ENV - echo "dep_root=${{ env.PDK_ROOT }}" >> $GITHUB_ENV - elif [[ "${{ matrix.targets }}" == "setup-timing-scripts" ]]; then - echo "dep_name=timing-scripts" >> $GITHUB_ENV - echo "dep_root=${{ env.TIMING_ROOT }}" >> $GITHUB_ENV - elif [[ "${{ matrix.targets }}" == "precheck" ]]; then - echo "dep_name=precheck" >> $GITHUB_ENV - echo "dep_root=${{ env.PRECHECK_ROOT }}" >> $GITHUB_ENV - fi + tar -cf /tmp/openlane.tar -C ${{ env.OPENLANE_ROOT }} . - - name: Download caravel Tarball - uses: actions/download-artifact@v2 + - name: Upload openlane Tarball + uses: actions/upload-artifact@v2 with: - name: caravel-tarball - path: /tmp + name: openlane-tarball + path: /tmp/openlane.tar - - name: Unpack caravel Tarball + - name: Tarball pdk run: | - sudo mkdir -p ${{ env.CARAVEL_ROOT }} - sudo chown -R $USER:$USER ${{ env.CARAVEL_ROOT }} - tar -xf /tmp/caravel.tar -C $CARAVEL_ROOT . + tar -cf /tmp/pdk.tar -C ${{ env.PDK_ROOT }} . - - name: Install dependencies - run: | - sudo mkdir -p ${{ env.PDK_ROOT }} - sudo chown -R $USER:$USER ${{ env.PDK_ROOT }} - make ${{ matrix.targets }} - if [[ "${{ env.dep_name }}" == "mgmt_core_wrapper" ]]; then - cd ${{ env.dep_root }} - rm -rf gds maglef openlane spi LICENSE manifest docs litex lvs .git - fi + - name: Upload pdk Tarball + uses: actions/upload-artifact@v2 + with: + name: pdk-tarball + path: /tmp/pdk.tar - - name: Tarball Dependencies + - name: Tarball timing_scripts run: | - tar -cf /tmp/${{ env.dep_name }}.tar -C ${{ env.dep_root }} . + tar -cf /tmp/timing_scripts.tar -C ${{ env.TIMING_ROOT }} . - - name: Upload Dependencies Tarball + - name: Upload timing_scripts Tarball uses: actions/upload-artifact@v2 with: - name: ${{ env.dep_name }}-tarball - path: /tmp/${{ env.dep_name }}.tar + name: timing_scripts-tarball + path: /tmp/timing_scripts.tar hardening: timeout-minutes: 720 @@ -469,91 +435,3 @@ jobs: echo "STA run passed" exit 0 fi - - # GL-verification: - # timeout-minutes: 720 - # runs-on: ubuntu-latest - # strategy: - # matrix: - # pdk: ["sky130A", "sky130B"] - # needs: [download_deps] - # steps: - # - uses: actions/checkout@v2 - - # - name: Set up QEMU - # uses: docker/setup-qemu-action@v1 - - # - name: Set up Docker Buildx - # uses: docker/setup-buildx-action@v1 - - # - name: Export ENVIRONMENT VARIABLES - # run: | - # echo "PDK=${{ matrix.pdk }}" >> $GITHUB_ENV - # echo "PDKPATH=$GITHUB_WORKSPACE/pdk/${{ matrix.pdk }}" >> $GITHUB_ENV - # echo "PDK_ROOT=$GITHUB_WORKSPACE/pdk" >> $GITHUB_ENV - # echo "OPENLANE_ROOT=$GITHUB_WORKSPACE/openlane_src" >> $GITHUB_ENV - # echo "CARAVEL_ROOT=$GITHUB_WORKSPACE/caravel" >> $GITHUB_ENV - # echo "MCW_ROOT=$GITHUB_WORKSPACE/mgmt_core_wrapper" >> $GITHUB_ENV - # echo "TIMING_ROOT=$GITHUB_WORKSPACE/timing-scripts" >> $GITHUB_ENV - # echo "PRECHECK_ROOT=$GITHUB_WORKSPACE/mpw_precheck" >> $GITHUB_ENV - # echo "MPW_TAG=main" >> $GITHUB_ENV - - # - name: Download PDK Tarball - # uses: actions/download-artifact@v2 - # with: - # name: pdk-tarball - # path: /tmp - - # - name: Unpack PDK Tarball - # run: | - # sudo mkdir -p ${{ env.PDK_ROOT }} - # sudo chown -R $USER:$USER ${{ env.PDK_ROOT }} - # tar -xf /tmp/pdk.tar -C $PDK_ROOT . - - # - name: Download caravel Tarball - # uses: actions/download-artifact@v2 - # with: - # name: caravel-tarball - # path: /tmp - - # - name: Unpack caravel Tarball - # run: | - # sudo mkdir -p ${{ env.CARAVEL_ROOT }} - # sudo chown -R $USER:$USER ${{ env.CARAVEL_ROOT }} - # tar -xf /tmp/caravel.tar -C $CARAVEL_ROOT . - - # - name: Download mgmt_core_wrapper Tarball - # uses: actions/download-artifact@v2 - # with: - # name: mgmt_core_wrapper-tarball - # path: /tmp - - # - name: Unpack mgmt_core_wrapper Tarball - # run: | - # sudo mkdir -p ${{ env.MCW_ROOT }} - # sudo chown -R $USER:$USER ${{ env.MCW_ROOT }} - # tar -xf /tmp/mgmt_core_wrapper.tar -C $MCW_ROOT . - - # # - name: Download Design Tarball - # # uses: actions/download-artifact@v2 - # # with: - # # name: design-tarball - # # path: /tmp - - # # - name: Unpack Design Tarball - # # run: | - # # sudo mkdir -p $GITHUB_WORKSPACE - # # sudo chown -R $USER:$USER $GITHUB_WORKSPACE - # # tar -xf /tmp/design.tar -C $GITHUB_WORKSPACE . - - # - name: install cocotb - # run: | - # make setup-cocotb - - # - name: run RTL verification - # run: | - # cd $GITHUB_WORKSPACE/verilog/dv/cocotb && $GITHUB_WORKSPACE/venv-cocotb/bin/caravel_cocotb -tl user_proj_tests/user_proj_tests_gl.yaml -verbosity debug --CI -tag gl_verification - # cnt=$(grep -c "failed" "$GITHUB_WORKSPACE/verilog/dv/cocotb/sim/gl_verification/runs.log") - # if ! [[ $cnt ]]; then cnt=0; fi - # if [[ $cnt -eq 1 ]]; then exit 0; fi - # exit 2 From 740a1e51a74e2866f5a02cea1ffb6c3944b1ec8b Mon Sep 17 00:00:00 2001 From: marwaneltoukhy Date: Tue, 28 Nov 2023 10:32:50 +0200 Subject: [PATCH 04/20] testing CI --- .github/workflows/user_project_ci.yml | 10 +++++----- Makefile | 13 +++++++++---- scripts/compare_versions.py | 10 +++++++--- 3 files changed, 21 insertions(+), 12 deletions(-) diff --git a/.github/workflows/user_project_ci.yml b/.github/workflows/user_project_ci.yml index 81dbc02b5..41b4e0f6a 100644 --- a/.github/workflows/user_project_ci.yml +++ b/.github/workflows/user_project_ci.yml @@ -146,7 +146,7 @@ jobs: python3 $GITHUB_WORKSPACE/.github/scripts/get_designs.py --design $GITHUB_WORKSPACE for word in $(cat harden_sequence.txt); do echo "CURRENT_DESIGN=${word}" >> $GITHUB_ENV - make $word + DISABLE_VERSION_CHECK=1 make $word done rm -rf openlane/user_proj_example/runs openlane/user_project_wrapper/runs pdk openlane_src caravel mgmt_core_wrapper timing-scripts mpw_precheck @@ -238,7 +238,7 @@ jobs: - name: install cocotb run: | - make setup-cocotb + DISABLE_VERSION_CHECK=1 make setup-cocotb - name: run RTL verification run: | @@ -418,9 +418,9 @@ jobs: export CUP_ROOT=$GITHUB_WORKSPACE export PROJECT_ROOT=$GITHUB_WORKSPACE cd $CUP_ROOT - make extract-parasitics - make create-spef-mapping - make caravel-sta + DISABLE_VERSION_CHECK=1 make extract-parasitics + DISABLE_VERSION_CHECK=1 make create-spef-mapping + DISABLE_VERSION_CHECK=1 make caravel-sta tar -cf /tmp/timing.tar $CUP_ROOT/signoff/caravel/openlane-signoff/timing find $CUP_ROOT/signoff/caravel/openlane-signoff/timing/*/ -name "summary.log" | head -n1 \ | xargs head -n5 | tail -n1 > $CUP_ROOT/signoff/caravel/openlane-signoff/timing/all-summary.rpt diff --git a/Makefile b/Makefile index edc6471eb..318cb9bc9 100644 --- a/Makefile +++ b/Makefile @@ -38,6 +38,7 @@ endif export OPENLANE_ROOT?=$(PWD)/dependencies/openlane_src export PDK_ROOT?=$(PWD)/dependencies/pdks export DISABLE_LVS?=0 +export DISABLE_VERSION_CHECK?=0 export ROOTLESS @@ -65,9 +66,9 @@ ifeq ($(PDK),gf180mcuD) endif # Include Caravel Makefile Targets -# .PHONY: % : check-caravel -# %: -# export CARAVEL_ROOT=$(CARAVEL_ROOT) && export MPW_TAG=$(MPW_TAG) && $(MAKE) -f $(CARAVEL_ROOT)/Makefile $@ +.PHONY: % : check-caravel +%: + export CARAVEL_ROOT=$(CARAVEL_ROOT) && export MPW_TAG=$(MPW_TAG) && $(MAKE) -f $(CARAVEL_ROOT)/Makefile $@ # Install DV setup .PHONY: simenv @@ -222,7 +223,11 @@ uninstall: .PHONY: check_versions check_versions: - ./venv/bin/$(PYTHON_BIN) -u scripts/compare_versions.py + @if [ "$$DISABLE_VERSION_CHECK" = "1" ]; then\ + echo "Skipping version check"; \ + else \ + ./venv/bin/$(PYTHON_BIN) -u scripts/compare_versions.py; \ + fi # Install Pre-check # Default installs to the user home directory, override by "export PRECHECK_ROOT=" .PHONY: precheck diff --git a/scripts/compare_versions.py b/scripts/compare_versions.py index d1f378d0a..7ea8c89f1 100644 --- a/scripts/compare_versions.py +++ b/scripts/compare_versions.py @@ -1,3 +1,4 @@ +import os import requests import json @@ -10,9 +11,12 @@ def compare_json(tool_versions_json_path): raise ValueError(f'Failed to get upstream JSON from {upstream_url}: {response.status_code}') upstream_json = response.json() - # Load the tool_versions.json - with open(tool_versions_json_path, 'r') as tool_versions_file: - tool_versions_json = json.load(tool_versions_file) + if os.path.isfile(tool_versions_json_path): + with open(tool_versions_json_path, 'r') as tool_versions_file: + tool_versions_json = json.load(tool_versions_file) + else: + print("Couldn't find tool_versions.json, please run make setup") + exit(1) # Compare the two JSON objects if upstream_json == tool_versions_json: From 9dba6d2cf9cbd37a3a50c2cfbbab22b8ceb721ef Mon Sep 17 00:00:00 2001 From: marwaneltoukhy Date: Tue, 28 Nov 2023 10:48:34 +0200 Subject: [PATCH 05/20] testing CI --- Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 318cb9bc9..1bc80fe2b 100644 --- a/Makefile +++ b/Makefile @@ -66,9 +66,9 @@ ifeq ($(PDK),gf180mcuD) endif # Include Caravel Makefile Targets -.PHONY: % : check-caravel -%: - export CARAVEL_ROOT=$(CARAVEL_ROOT) && export MPW_TAG=$(MPW_TAG) && $(MAKE) -f $(CARAVEL_ROOT)/Makefile $@ +# .PHONY: % : check-caravel +# %: +# export CARAVEL_ROOT=$(CARAVEL_ROOT) && export MPW_TAG=$(MPW_TAG) && $(MAKE) -f $(CARAVEL_ROOT)/Makefile $@ # Install DV setup .PHONY: simenv From 898ac90c3b08c739307933d8574585f35fc397d9 Mon Sep 17 00:00:00 2001 From: marwaneltoukhy Date: Tue, 28 Nov 2023 12:07:53 +0200 Subject: [PATCH 06/20] changed printing message --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 1bc80fe2b..589fa7104 100644 --- a/Makefile +++ b/Makefile @@ -111,7 +111,7 @@ clean_log: .PHONY: print_message print_message: @echo "Setting up caravel_user_project environment..." - @echo "To check for errors, please see setup.log" + @echo "To check for installation logs, please see setup.log" dv_patterns=$(shell cd verilog/dv && find * -maxdepth 0 -type d) cocotb-dv_patterns=$(shell cd verilog/dv/cocotb && find . -name "*.c" | sed -e 's|^.*/||' -e 's/.c//') From 99b7dffbc7bd41e35e8e5a8821e7b4e800b3bcab Mon Sep 17 00:00:00 2001 From: marwaneltoukhy Date: Tue, 28 Nov 2023 12:34:32 +0200 Subject: [PATCH 07/20] added verbosity --- Makefile | 2 ++ scripts/get_tools.py | 9 ++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 589fa7104..dd4ff1020 100644 --- a/Makefile +++ b/Makefile @@ -84,7 +84,9 @@ simenv-cocotb: setup: print_message clean_log check-python check_dependencies install-volare @./venv/bin/$(PYTHON_BIN) -m pip install --upgrade --no-cache-dir requests >> setup.log @./venv/bin/$(PYTHON_BIN) -u scripts/get_tools.py --openlane_root $(OPENLANE_ROOT) --precheck_root $(PRECHECK_ROOT) --pdk_root $(PDK_ROOT) --caravel_root $(CARAVEL_ROOT) --mcw_root $(MCW_ROOT) --timing_root $(TIMING_ROOT) + @echo "installing cocotb..." @$(MAKE) setup-cocotb >> setup.log + @echo "installation complete" .PHONY: install-volare install-volare: diff --git a/scripts/get_tools.py b/scripts/get_tools.py index 637266df2..c428398c2 100644 --- a/scripts/get_tools.py +++ b/scripts/get_tools.py @@ -53,26 +53,33 @@ def download_tools(openlane_root, precheck_root, pdk_root, caravel_root, mcw_roo os.environ['OPENLANE_IMAGE_NAME'] = f"efabless/openlane:{value['commit']}" os.environ['IMAGE_NAME'] = f"efabless/openlane:{value['commit']}" subprocess.run(["make", "pull-openlane"], cwd=openlane_root, env=os.environ, stderr=subprocess.STDOUT, text=True, check=True, stdout=f) + print("OpenLane downloaded successfully") progress.update(task, advance=1) elif key == "pdk": progress.update(task, description="[cyan]Downloading pdk...") + progress.stop() volare.enable(pdk_root, "sky130", value['commit']) + progress.start() progress.update(task, advance=1) elif key == "precheck": - progress.update(task, description="[cyan]Downloading precheck...") + progress.update(task, description="[cyan]Downloading mpw_precheck...") download_tar("precheck", value['commit'], value['url'], precheck_root) + print("mpw_precheck downloaded successfully") progress.update(task, advance=1) elif key == "caravel": progress.update(task, description="[cyan]Downloading caravel...") download_tar("caravel", value['commit'], value['url'], caravel_root) + print("caravel downloaded successfully") progress.update(task, advance=1) elif key == "mgmt_core_wrapper": progress.update(task, description="[cyan]Downloading mgmt_core_wrapper...") download_tar("mgmt_core_wrapper", value['commit'], value['url'], mcw_root) + print("mgmt_core_wrapper downloaded successfully") progress.update(task, advance=1) elif key == "timing_scripts": progress.update(task, description="[cyan]Downloading timing_scripts...") download_tar("timing_scripts", value['commit'], value['url'], timing_root) + print("timing_scripts downloaded successfully") progress.update(task, advance=1) From 463741b249568e279d2f8d26f2bf48225365adba Mon Sep 17 00:00:00 2001 From: marwaneltoukhy Date: Tue, 28 Nov 2023 14:50:43 +0200 Subject: [PATCH 08/20] fixed ci --- .github/workflows/user_project_ci.yml | 16 +++++++++++++--- scripts/compare_versions.py | 15 +++++++++++++++ scripts/get_tools.py | 15 +++++++++++++++ 3 files changed, 43 insertions(+), 3 deletions(-) diff --git a/.github/workflows/user_project_ci.yml b/.github/workflows/user_project_ci.yml index 41b4e0f6a..0844f7dfb 100644 --- a/.github/workflows/user_project_ci.yml +++ b/.github/workflows/user_project_ci.yml @@ -81,13 +81,23 @@ jobs: - name: Tarball timing_scripts run: | - tar -cf /tmp/timing_scripts.tar -C ${{ env.TIMING_ROOT }} . + tar -cf /tmp/timing-scripts.tar -C ${{ env.TIMING_ROOT }} . - name: Upload timing_scripts Tarball uses: actions/upload-artifact@v2 with: - name: timing_scripts-tarball - path: /tmp/timing_scripts.tar + name: timing-scripts-tarball + path: /tmp/timing-scripts.tar + + - name: Tarball precheck + run: | + tar -cf /tmp/precheck.tar -C ${{ env.PRECHECK_ROOT }} . + + - name: Upload precheck Tarball + uses: actions/upload-artifact@v2 + with: + name: precheck-tarball + path: /tmp/precheck.tar hardening: timeout-minutes: 720 diff --git a/scripts/compare_versions.py b/scripts/compare_versions.py index 7ea8c89f1..43ee7f28f 100644 --- a/scripts/compare_versions.py +++ b/scripts/compare_versions.py @@ -1,3 +1,18 @@ +# SPDX-FileCopyrightText: 2023 Efabless Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 import os import requests import json diff --git a/scripts/get_tools.py b/scripts/get_tools.py index c428398c2..b3c04820d 100644 --- a/scripts/get_tools.py +++ b/scripts/get_tools.py @@ -1,3 +1,18 @@ +# SPDX-FileCopyrightText: 2023 Efabless Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 import argparse import json import os From fb66c06abf80f09408789130ce50ceb6ddd52ab8 Mon Sep 17 00:00:00 2001 From: marwaneltoukhy Date: Wed, 29 Nov 2023 12:04:58 +0200 Subject: [PATCH 09/20] fixed sta --- Makefile | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index dd4ff1020..b501058a1 100644 --- a/Makefile +++ b/Makefile @@ -413,7 +413,20 @@ extract-parasitics: check_versions ./verilog/gl/user_project_wrapper.v @$(MAKE) -C $(TIMING_ROOT) -f $(TIMING_ROOT)/timing.mk rcx-user_project_wrapper @cat ./tmp-macros-list @rm ./tmp-macros-list - + + +ifeq ($(wildcard ./tool_versions.json),) + # File doesn't exist + EXPORT_VARIABLE := +else + # File exists + EXPORT_VARIABLE := $(shell jq -r '.OpenLane.commit' tool_versions.json) +endif + +export OPENLANE_TAG=$(EXPORT_VARIABLE) + + +# export OPENLANE_TAG=$(shell jq -r '.OpenLane.commit' tool_versions.json) .PHONY: caravel-sta caravel-sta: check_versions ./env/spef-mapping.tcl @$(MAKE) -C $(TIMING_ROOT) -f $(TIMING_ROOT)/timing.mk caravel-timing-typ -j3 From 7b43586bc4b10edd2aeb6bb53e16de7de8a7e2a0 Mon Sep 17 00:00:00 2001 From: marwaneltoukhy Date: Wed, 29 Nov 2023 13:28:16 +0200 Subject: [PATCH 10/20] fixed sta --- Makefile | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/Makefile b/Makefile index b501058a1..cecdd9565 100644 --- a/Makefile +++ b/Makefile @@ -416,17 +416,15 @@ extract-parasitics: check_versions ./verilog/gl/user_project_wrapper.v ifeq ($(wildcard ./tool_versions.json),) - # File doesn't exist - EXPORT_VARIABLE := +# File doesn't exist +export OPENLANE_TAG= +export OPEN_PDKS_COMMIT= else - # File exists - EXPORT_VARIABLE := $(shell jq -r '.OpenLane.commit' tool_versions.json) +# File exists +export OPENLANE_TAG=$(shell python3 ./scripts/export_env.py OpenLane) +export OPEN_PDKS_COMMIT=$(shell python3 ./scripts/export_env.py pdk) endif -export OPENLANE_TAG=$(EXPORT_VARIABLE) - - -# export OPENLANE_TAG=$(shell jq -r '.OpenLane.commit' tool_versions.json) .PHONY: caravel-sta caravel-sta: check_versions ./env/spef-mapping.tcl @$(MAKE) -C $(TIMING_ROOT) -f $(TIMING_ROOT)/timing.mk caravel-timing-typ -j3 From b6210ef2533542987831cd0df64c695d267530a8 Mon Sep 17 00:00:00 2001 From: marwaneltoukhy Date: Wed, 29 Nov 2023 14:03:16 +0200 Subject: [PATCH 11/20] fixes to the makefile --- .github/workflows/user_project_ci.yml | 2 + Makefile | 64 ++++++++++++++++++--------- scripts/export_env.py | 41 +++++++++++++++++ scripts/get_tools.py | 9 +++- 4 files changed, 92 insertions(+), 24 deletions(-) create mode 100644 scripts/export_env.py diff --git a/.github/workflows/user_project_ci.yml b/.github/workflows/user_project_ci.yml index 0844f7dfb..6da2f6329 100644 --- a/.github/workflows/user_project_ci.yml +++ b/.github/workflows/user_project_ci.yml @@ -153,6 +153,7 @@ jobs: - name: Harden using Openlane run: | + curl https://raw.githubusercontent.com/efabless/central_CI/main/tools.json > tool_versions.json python3 $GITHUB_WORKSPACE/.github/scripts/get_designs.py --design $GITHUB_WORKSPACE for word in $(cat harden_sequence.txt); do echo "CURRENT_DESIGN=${word}" >> $GITHUB_ENV @@ -425,6 +426,7 @@ jobs: - name: Run STA run: | + curl https://raw.githubusercontent.com/efabless/central_CI/main/tools.json > tool_versions.json export CUP_ROOT=$GITHUB_WORKSPACE export PROJECT_ROOT=$GITHUB_WORKSPACE cd $CUP_ROOT diff --git a/Makefile b/Makefile index cecdd9565..240678f96 100644 --- a/Makefile +++ b/Makefile @@ -66,9 +66,9 @@ ifeq ($(PDK),gf180mcuD) endif # Include Caravel Makefile Targets -# .PHONY: % : check-caravel -# %: -# export CARAVEL_ROOT=$(CARAVEL_ROOT) && export MPW_TAG=$(MPW_TAG) && $(MAKE) -f $(CARAVEL_ROOT)/Makefile $@ +.PHONY: % : check-caravel +%: + @export CARAVEL_ROOT=$(CARAVEL_ROOT) && $(MAKE) -f $(CARAVEL_ROOT)/Makefile $@ # Install DV setup .PHONY: simenv @@ -223,6 +223,45 @@ update_caravel: check-caravel uninstall: rm -rf $(CARAVEL_ROOT) +# Install Caravel +.PHONY: install +install: clean_log check-python check_dependencies install-volare + @./venv/bin/$(PYTHON_BIN) -m pip install --upgrade --no-cache-dir requests >> setup.log + @./venv/bin/$(PYTHON_BIN) -u scripts/get_tools.py --openlane_root $(OPENLANE_ROOT) --precheck_root $(PRECHECK_ROOT) --pdk_root $(PDK_ROOT) --caravel_root $(CARAVEL_ROOT) --mcw_root $(MCW_ROOT) --timing_root $(TIMING_ROOT) --tool caravel + +# Install mgmt_core_wrapper +.PHONY: install_mcw +install_mcw: clean_log check-python check_dependencies install-volare + @./venv/bin/$(PYTHON_BIN) -m pip install --upgrade --no-cache-dir requests >> setup.log + @./venv/bin/$(PYTHON_BIN) -u scripts/get_tools.py --openlane_root $(OPENLANE_ROOT) --precheck_root $(PRECHECK_ROOT) --pdk_root $(PDK_ROOT) --caravel_root $(CARAVEL_ROOT) --mcw_root $(MCW_ROOT) --timing_root $(TIMING_ROOT) --tool mgmt_core_wrapper + +# Install mgmt_core_wrapper +.PHONY: pdk-with-volare +pdk-with-volare: clean_log check-python check_dependencies install-volare + @./venv/bin/$(PYTHON_BIN) -m pip install --upgrade --no-cache-dir requests >> setup.log + @./venv/bin/$(PYTHON_BIN) -u scripts/get_tools.py --openlane_root $(OPENLANE_ROOT) --precheck_root $(PRECHECK_ROOT) --pdk_root $(PDK_ROOT) --caravel_root $(CARAVEL_ROOT) --mcw_root $(MCW_ROOT) --timing_root $(TIMING_ROOT) --tool pdk + +# Install mgmt_core_wrapper +.PHONY: openlane +openlane: clean_log check-python check_dependencies install-volare + @./venv/bin/$(PYTHON_BIN) -m pip install --upgrade --no-cache-dir requests >> setup.log + @./venv/bin/$(PYTHON_BIN) -u scripts/get_tools.py --openlane_root $(OPENLANE_ROOT) --precheck_root $(PRECHECK_ROOT) --pdk_root $(PDK_ROOT) --caravel_root $(CARAVEL_ROOT) --mcw_root $(MCW_ROOT) --timing_root $(TIMING_ROOT) --tool openlane + + +# Install mgmt_core_wrapper +.PHONY: setup-timing-scripts +setup-timing-scripts: clean_log check-python check_dependencies install-volare + @./venv/bin/$(PYTHON_BIN) -m pip install --upgrade --no-cache-dir requests >> setup.log + @./venv/bin/$(PYTHON_BIN) -u scripts/get_tools.py --openlane_root $(OPENLANE_ROOT) --precheck_root $(PRECHECK_ROOT) --pdk_root $(PDK_ROOT) --caravel_root $(CARAVEL_ROOT) --mcw_root $(MCW_ROOT) --timing_root $(TIMING_ROOT) --tool timing_scripts + + +# Install mgmt_core_wrapper +.PHONY: precheck +precheck: clean_log check-python check_dependencies install-volare + @./venv/bin/$(PYTHON_BIN) -m pip install --upgrade --no-cache-dir requests >> setup.log + @./venv/bin/$(PYTHON_BIN) -u scripts/get_tools.py --openlane_root $(OPENLANE_ROOT) --precheck_root $(PRECHECK_ROOT) --pdk_root $(PDK_ROOT) --caravel_root $(CARAVEL_ROOT) --mcw_root $(MCW_ROOT) --timing_root $(TIMING_ROOT) --tool precheck + + .PHONY: check_versions check_versions: @if [ "$$DISABLE_VERSION_CHECK" = "1" ]; then\ @@ -230,17 +269,6 @@ check_versions: else \ ./venv/bin/$(PYTHON_BIN) -u scripts/compare_versions.py; \ fi -# Install Pre-check -# Default installs to the user home directory, override by "export PRECHECK_ROOT=" -.PHONY: precheck -precheck: - if [ -d "$(PRECHECK_ROOT)" ]; then\ - echo "Deleting exisiting $(PRECHECK_ROOT)" && \ - rm -rf $(PRECHECK_ROOT) && sleep 2;\ - fi - @echo "Installing Precheck.." - @git clone --depth=1 --branch $(MPW_TAG) https://github.com/efabless/mpw_precheck.git $(PRECHECK_ROOT) - @docker pull efabless/mpw_precheck:latest .PHONY: run-precheck run-precheck: check_versions check-pdk check-precheck @@ -324,14 +352,6 @@ export TIMING_ROOT?=$(shell pwd)/dependencies/timing-scripts export PROJECT_ROOT=$(CUP_ROOT) timing-scripts-repo=https://github.com/efabless/timing-scripts.git -$(TIMING_ROOT): - @mkdir -p $(CUP_ROOT)/dependencies - @git clone $(timing-scripts-repo) $(TIMING_ROOT) - -.PHONY: setup-timing-scripts -setup-timing-scripts: $(TIMING_ROOT) - @( cd $(TIMING_ROOT) && git pull ) - @#( cd $(TIMING_ROOT) && git fetch && git checkout $(MPW_TAG); ) .PHONY: install-caravel-cocotb install-caravel-cocotb: diff --git a/scripts/export_env.py b/scripts/export_env.py new file mode 100644 index 000000000..a45fbdb90 --- /dev/null +++ b/scripts/export_env.py @@ -0,0 +1,41 @@ +# SPDX-FileCopyrightText: 2023 Efabless Corporation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 + +import argparse +import json + + +def print_commit(tool_name): + with open('tool_versions.json', 'r') as file: + tool_versions_json = json.load(file) + + if tool_name in tool_versions_json: + commit = tool_versions_json[tool_name]['commit'] + print(commit) + else: + print("Invalid tool name") + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument('tool_name', help='Name of the tool to print the commit for') + args = parser.parse_args() + + print_commit(args.tool_name) + + +if __name__ == '__main__': + main() diff --git a/scripts/get_tools.py b/scripts/get_tools.py index b3c04820d..d69620576 100644 --- a/scripts/get_tools.py +++ b/scripts/get_tools.py @@ -52,7 +52,7 @@ def parse_json_file(url): return data -def download_tools(openlane_root, precheck_root, pdk_root, caravel_root, mcw_root, timing_root): +def download_tools(openlane_root, precheck_root, pdk_root, caravel_root, mcw_root, timing_root, tool): """Downloads the tools from the upstream GitHub repo. """ url = 'https://raw.githubusercontent.com/efabless/central_CI/main/tools.json' @@ -61,6 +61,8 @@ def download_tools(openlane_root, precheck_root, pdk_root, caravel_root, mcw_roo with Progress(TextColumn("[progress.description]{task.description}"), BarColumn(), MofNCompleteColumn(), TimeElapsedColumn()) as progress: task = progress.add_task("[cyan]Downloading Tools...", total=6) for key, value in data.items(): + if tool and key != tool: + continue if key == "OpenLane": progress.update(task, description="[cyan]Downloading OpenLane...") download_tar("OpenLane", value['commit'], value['url'], openlane_root) @@ -133,6 +135,8 @@ def main(): help='Path to the Mgmt Core Wrapper root directory') parser.add_argument('--timing_root', required=True, help='Path to the Timing Scripts root directory') + parser.add_argument('--tool', required=False, + help='Name of the tool to download') args = parser.parse_args() download_tools(openlane_root=args.openlane_root, @@ -140,7 +144,8 @@ def main(): pdk_root=args.pdk_root, caravel_root=args.caravel_root, mcw_root=args.mcw_root, - timing_root=args.timing_root) + timing_root=args.timing_root, + tool=args.tool) if __name__ == '__main__': From 18ae1a4f6c8b593509949f5b149093f4c208fa7b Mon Sep 17 00:00:00 2001 From: marwaneltoukhy Date: Wed, 29 Nov 2023 14:30:05 +0200 Subject: [PATCH 12/20] fixes to the makefile --- Makefile | 22 +++++++--------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/Makefile b/Makefile index 240678f96..38baada64 100644 --- a/Makefile +++ b/Makefile @@ -68,7 +68,9 @@ endif # Include Caravel Makefile Targets .PHONY: % : check-caravel %: - @export CARAVEL_ROOT=$(CARAVEL_ROOT) && $(MAKE) -f $(CARAVEL_ROOT)/Makefile $@ + @if [ -d "$(CARAVEL_ROOT)" ]; then \ + @export CARAVEL_ROOT=$(CARAVEL_ROOT) && $(MAKE) -f $(CARAVEL_ROOT)/Makefile $@; \ + fi # Install DV setup .PHONY: simenv @@ -188,16 +190,6 @@ make_what=setup $(blocks) $(dv-targets-rtl) $(dv-targets-gl) $(dv-targets-gl-sdf what: # $(make_what) -# Install Openlane -.PHONY: openlane -openlane: - @if [ "$$(realpath $${OPENLANE_ROOT})" = "$$(realpath $$(pwd)/openlane)" ]; then\ - echo "OPENLANE_ROOT is set to '$$(pwd)/openlane' which contains openlane config files"; \ - echo "Please set it to a different directory"; \ - exit 1; \ - fi - cd openlane && $(MAKE) openlane - #### Not sure if the targets following are of any use # Create symbolic links to caravel's main files @@ -235,27 +227,27 @@ install_mcw: clean_log check-python check_dependencies install-volare @./venv/bin/$(PYTHON_BIN) -m pip install --upgrade --no-cache-dir requests >> setup.log @./venv/bin/$(PYTHON_BIN) -u scripts/get_tools.py --openlane_root $(OPENLANE_ROOT) --precheck_root $(PRECHECK_ROOT) --pdk_root $(PDK_ROOT) --caravel_root $(CARAVEL_ROOT) --mcw_root $(MCW_ROOT) --timing_root $(TIMING_ROOT) --tool mgmt_core_wrapper -# Install mgmt_core_wrapper +# Install pdk-with-volare .PHONY: pdk-with-volare pdk-with-volare: clean_log check-python check_dependencies install-volare @./venv/bin/$(PYTHON_BIN) -m pip install --upgrade --no-cache-dir requests >> setup.log @./venv/bin/$(PYTHON_BIN) -u scripts/get_tools.py --openlane_root $(OPENLANE_ROOT) --precheck_root $(PRECHECK_ROOT) --pdk_root $(PDK_ROOT) --caravel_root $(CARAVEL_ROOT) --mcw_root $(MCW_ROOT) --timing_root $(TIMING_ROOT) --tool pdk -# Install mgmt_core_wrapper +# Install openlane .PHONY: openlane openlane: clean_log check-python check_dependencies install-volare @./venv/bin/$(PYTHON_BIN) -m pip install --upgrade --no-cache-dir requests >> setup.log @./venv/bin/$(PYTHON_BIN) -u scripts/get_tools.py --openlane_root $(OPENLANE_ROOT) --precheck_root $(PRECHECK_ROOT) --pdk_root $(PDK_ROOT) --caravel_root $(CARAVEL_ROOT) --mcw_root $(MCW_ROOT) --timing_root $(TIMING_ROOT) --tool openlane -# Install mgmt_core_wrapper +# Install timing-scripts .PHONY: setup-timing-scripts setup-timing-scripts: clean_log check-python check_dependencies install-volare @./venv/bin/$(PYTHON_BIN) -m pip install --upgrade --no-cache-dir requests >> setup.log @./venv/bin/$(PYTHON_BIN) -u scripts/get_tools.py --openlane_root $(OPENLANE_ROOT) --precheck_root $(PRECHECK_ROOT) --pdk_root $(PDK_ROOT) --caravel_root $(CARAVEL_ROOT) --mcw_root $(MCW_ROOT) --timing_root $(TIMING_ROOT) --tool timing_scripts -# Install mgmt_core_wrapper +# Install precheck .PHONY: precheck precheck: clean_log check-python check_dependencies install-volare @./venv/bin/$(PYTHON_BIN) -m pip install --upgrade --no-cache-dir requests >> setup.log From 5b3323131f741f8c3d37b5fe3b66b5ebd691f4e6 Mon Sep 17 00:00:00 2001 From: marwaneltoukhy Date: Mon, 4 Dec 2023 12:42:39 +0200 Subject: [PATCH 13/20] changed precheck to private and seperated precheck with lvs and without lvs --- Makefile | 51 ++++++++++++++++++++++++++------------------------- 1 file changed, 26 insertions(+), 25 deletions(-) diff --git a/Makefile b/Makefile index 38baada64..5bdb340ee 100644 --- a/Makefile +++ b/Makefile @@ -264,31 +264,32 @@ check_versions: .PHONY: run-precheck run-precheck: check_versions check-pdk check-precheck - @if [ "$$DISABLE_LVS" = "1" ]; then\ - $(eval INPUT_DIRECTORY := $(shell pwd)) \ - cd $(PRECHECK_ROOT) && \ - docker run -it -v $(PRECHECK_ROOT):$(PRECHECK_ROOT) \ - -v $(INPUT_DIRECTORY):$(INPUT_DIRECTORY) \ - -v $(PDK_ROOT):$(PDK_ROOT) \ - -e INPUT_DIRECTORY=$(INPUT_DIRECTORY) \ - -e PDK_PATH=$(PDK_ROOT)/$(PDK) \ - -e PDK_ROOT=$(PDK_ROOT) \ - -e PDKPATH=$(PDKPATH) \ - -u $(shell id -u $(USER)):$(shell id -g $(USER)) \ - efabless/mpw_precheck:latest bash -c "cd $(PRECHECK_ROOT) ; python3 mpw_precheck.py --input_directory $(INPUT_DIRECTORY) --pdk_path $(PDK_ROOT)/$(PDK) license makefile default documentation consistency gpio_defines xor magic_drc klayout_feol klayout_beol klayout_offgrid klayout_met_min_ca_density klayout_pin_label_purposes_overlapping_drawing klayout_zeroarea"; \ - else \ - $(eval INPUT_DIRECTORY := $(shell pwd)) \ - cd $(PRECHECK_ROOT) && \ - docker run -it -v $(PRECHECK_ROOT):$(PRECHECK_ROOT) \ - -v $(INPUT_DIRECTORY):$(INPUT_DIRECTORY) \ - -v $(PDK_ROOT):$(PDK_ROOT) \ - -e INPUT_DIRECTORY=$(INPUT_DIRECTORY) \ - -e PDK_PATH=$(PDK_ROOT)/$(PDK) \ - -e PDK_ROOT=$(PDK_ROOT) \ - -e PDKPATH=$(PDKPATH) \ - -u $(shell id -u $(USER)):$(shell id -g $(USER)) \ - efabless/mpw_precheck:latest bash -c "cd $(PRECHECK_ROOT) ; python3 mpw_precheck.py --input_directory $(INPUT_DIRECTORY) --pdk_path $(PDK_ROOT)/$(PDK)"; \ - fi + $(eval INPUT_DIRECTORY := $(shell pwd)) \ + cd $(PRECHECK_ROOT) && \ + docker run -it -v $(PRECHECK_ROOT):$(PRECHECK_ROOT) \ + -v $(INPUT_DIRECTORY):$(INPUT_DIRECTORY) \ + -v $(PDK_ROOT):$(PDK_ROOT) \ + -e INPUT_DIRECTORY=$(INPUT_DIRECTORY) \ + -e PDK_PATH=$(PDK_ROOT)/$(PDK) \ + -e PDK_ROOT=$(PDK_ROOT) \ + -e PDKPATH=$(PDKPATH) \ + -u $(shell id -u $(USER)):$(shell id -g $(USER)) \ + efabless/mpw_precheck:latest bash -c "cd $(PRECHECK_ROOT) ; python3 mpw_precheck.py --input_directory $(INPUT_DIRECTORY) --pdk_path $(PDK_ROOT)/$(PDK) --private"; \ + + +.PHONY: run-precheck-no-lvs +run-precheck-no-lvs: check_versions check-pdk check-precheck + $(eval INPUT_DIRECTORY := $(shell pwd)) \ + cd $(PRECHECK_ROOT) && \ + docker run -it -v $(PRECHECK_ROOT):$(PRECHECK_ROOT) \ + -v $(INPUT_DIRECTORY):$(INPUT_DIRECTORY) \ + -v $(PDK_ROOT):$(PDK_ROOT) \ + -e INPUT_DIRECTORY=$(INPUT_DIRECTORY) \ + -e PDK_PATH=$(PDK_ROOT)/$(PDK) \ + -e PDK_ROOT=$(PDK_ROOT) \ + -e PDKPATH=$(PDKPATH) \ + -u $(shell id -u $(USER)):$(shell id -g $(USER)) \ + efabless/mpw_precheck:latest bash -c "cd $(PRECHECK_ROOT) ; python3 mpw_precheck.py --input_directory $(INPUT_DIRECTORY) --pdk_path $(PDK_ROOT)/$(PDK) license makefile consistency gpio_defines xor magic_drc klayout_feol klayout_beol klayout_offgrid klayout_met_min_ca_density klayout_pin_label_purposes_overlapping_drawing klayout_zeroarea oeb"; \ BLOCKS = $(shell cd lvs && find * -maxdepth 0 -type d) From 988b24f0afbcc6160b2330e41542405fbb1c7d89 Mon Sep 17 00:00:00 2001 From: marwaneltoukhy Date: Mon, 4 Dec 2023 13:14:13 +0200 Subject: [PATCH 14/20] fix makefile --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 5bdb340ee..75ebf959e 100644 --- a/Makefile +++ b/Makefile @@ -69,7 +69,7 @@ endif .PHONY: % : check-caravel %: @if [ -d "$(CARAVEL_ROOT)" ]; then \ - @export CARAVEL_ROOT=$(CARAVEL_ROOT) && $(MAKE) -f $(CARAVEL_ROOT)/Makefile $@; \ + export CARAVEL_ROOT=$(CARAVEL_ROOT) && $(MAKE) -f $(CARAVEL_ROOT)/Makefile $@; \ fi # Install DV setup From 40343cbeedff7122e74889bea3bade3b3cfd11f5 Mon Sep 17 00:00:00 2001 From: marwaneltoukhy Date: Mon, 4 Dec 2023 14:13:23 +0200 Subject: [PATCH 15/20] fix make openlane --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 75ebf959e..103e26f77 100644 --- a/Makefile +++ b/Makefile @@ -237,7 +237,7 @@ pdk-with-volare: clean_log check-python check_dependencies install-volare .PHONY: openlane openlane: clean_log check-python check_dependencies install-volare @./venv/bin/$(PYTHON_BIN) -m pip install --upgrade --no-cache-dir requests >> setup.log - @./venv/bin/$(PYTHON_BIN) -u scripts/get_tools.py --openlane_root $(OPENLANE_ROOT) --precheck_root $(PRECHECK_ROOT) --pdk_root $(PDK_ROOT) --caravel_root $(CARAVEL_ROOT) --mcw_root $(MCW_ROOT) --timing_root $(TIMING_ROOT) --tool openlane + @./venv/bin/$(PYTHON_BIN) -u scripts/get_tools.py --openlane_root $(OPENLANE_ROOT) --precheck_root $(PRECHECK_ROOT) --pdk_root $(PDK_ROOT) --caravel_root $(CARAVEL_ROOT) --mcw_root $(MCW_ROOT) --timing_root $(TIMING_ROOT) --tool OpenLane # Install timing-scripts From 865fdb6d47cde304d9ac377a28e8067a227fc285 Mon Sep 17 00:00:00 2001 From: marwaneltoukhy Date: Tue, 5 Dec 2023 11:58:14 +0200 Subject: [PATCH 16/20] fix logs --- scripts/get_tools.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/scripts/get_tools.py b/scripts/get_tools.py index d69620576..6767095d6 100644 --- a/scripts/get_tools.py +++ b/scripts/get_tools.py @@ -59,7 +59,10 @@ def download_tools(openlane_root, precheck_root, pdk_root, caravel_root, mcw_roo data = parse_json_file(url) f = open("setup.log", "a") with Progress(TextColumn("[progress.description]{task.description}"), BarColumn(), MofNCompleteColumn(), TimeElapsedColumn()) as progress: - task = progress.add_task("[cyan]Downloading Tools...", total=6) + if tool: + task = progress.add_task("[cyan]Downloading Tools...", total=1) + else: + task = progress.add_task("[cyan]Downloading Tools...", total=6) for key, value in data.items(): if tool and key != tool: continue From a94b8096102c19fdef663ef9edf689c170ac8c69 Mon Sep 17 00:00:00 2001 From: Marwan Abbas <67271180+marwaneltoukhy@users.noreply.github.com> Date: Mon, 11 Dec 2023 10:09:58 +0200 Subject: [PATCH 17/20] Update Makefile --- Makefile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 103e26f77..5ca0d1e6d 100644 --- a/Makefile +++ b/Makefile @@ -97,9 +97,10 @@ install-volare: @./venv/bin/$(PYTHON_BIN) -m pip install --upgrade --no-cache-dir pip >> setup.log @./venv/bin/$(PYTHON_BIN) -m pip install --upgrade --no-cache-dir volare >> setup.log +.PHONY: check-python check-python: ifeq ($(shell which python3),) -$(error Please install python 3.6+) +$(error Please install python 3.8+) endif # Openlane From bebd9df4f21ecba8c904c945c20a619c6a33e797 Mon Sep 17 00:00:00 2001 From: Marwan Abbas <67271180+marwaneltoukhy@users.noreply.github.com> Date: Mon, 11 Dec 2023 10:10:48 +0200 Subject: [PATCH 18/20] Update index.rst --- docs/source/index.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/index.rst b/docs/source/index.rst index bb272cbbc..e27638240 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -59,7 +59,7 @@ Prerequisites - Docker: `Linux `_ || `Windows `_ || `Mac with Intel Chip `_ || `Mac with M1 Chip `_ -- Python 3.6+ with PIP +- Python 3.8+ with PIP Quickstart From 5334e3094d0bfb1dd0b5dbc2c89f6c58e86978b1 Mon Sep 17 00:00:00 2001 From: marwaneltoukhy Date: Mon, 11 Dec 2023 10:24:51 +0200 Subject: [PATCH 19/20] added exception when no internet connection --- scripts/compare_versions.py | 39 +++++++++++++++++++++---------------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/scripts/compare_versions.py b/scripts/compare_versions.py index 43ee7f28f..4b4fdd3c9 100644 --- a/scripts/compare_versions.py +++ b/scripts/compare_versions.py @@ -19,25 +19,30 @@ def compare_json(tool_versions_json_path): - # Get the upstream JSON from the URL - upstream_url = 'https://raw.githubusercontent.com/efabless/central_CI/main/tools.json' - response = requests.get(upstream_url) - if response.status_code != 200: - raise ValueError(f'Failed to get upstream JSON from {upstream_url}: {response.status_code}') - upstream_json = response.json() + try: + # Get the upstream JSON from the URL + upstream_url = 'https://raw.githubusercontent.com/efabless/central_CI/main/tools.json' + response = requests.get(upstream_url) + if response.status_code != 200: + raise ValueError(f'Failed to get upstream JSON from {upstream_url}: {response.status_code}') + upstream_json = response.json() - if os.path.isfile(tool_versions_json_path): - with open(tool_versions_json_path, 'r') as tool_versions_file: - tool_versions_json = json.load(tool_versions_file) - else: - print("Couldn't find tool_versions.json, please run make setup") - exit(1) + if os.path.isfile(tool_versions_json_path): + with open(tool_versions_json_path, 'r') as tool_versions_file: + tool_versions_json = json.load(tool_versions_file) + else: + print("Couldn't find tool_versions.json, please run make setup") + exit(1) - # Compare the two JSON objects - if upstream_json == tool_versions_json: - print("The upstream JSON is the same as tool_versions.json") - else: - print("The upstream JSON is different from tool_versions.json, please update by running make setup") + # Compare the two JSON objects + if upstream_json == tool_versions_json: + print("The upstream JSON is the same as tool_versions.json") + else: + print("The upstream JSON is different from tool_versions.json, please update by running make setup") + exit(1) + except requests.exceptions.RequestException as e: + print("An error occurred while fetching data") + print("Please check your internet connection.") exit(1) From ce8f884a5fad00bfcff05251bd11cdd7ce9d9a38 Mon Sep 17 00:00:00 2001 From: marwaneltoukhy Date: Sun, 17 Dec 2023 17:24:25 +0200 Subject: [PATCH 20/20] added open-gui command --- Makefile | 12 ++++++++++++ docs/source/index.rst | 16 ++++++++++++++++ openlane/Makefile | 21 +++++++++++++++++++++ 3 files changed, 49 insertions(+) diff --git a/Makefile b/Makefile index 5ca0d1e6d..98ec8ee50 100644 --- a/Makefile +++ b/Makefile @@ -109,6 +109,18 @@ blocks=$(shell cd openlane && find * -maxdepth 0 -type d) $(blocks): % : check_versions $(MAKE) -C openlane $* +# Openlane open last step gui using klayout +blocks=$(shell cd openlane && find * -maxdepth 0 -type d) +.PHONY: open-gui-% +open-gui-% : + $(MAKE) -C openlane open-gui-$* + +# Openlane open last step gui using openroad +blocks=$(shell cd openlane && find * -maxdepth 0 -type d) +.PHONY: open-odb-gui-% +open-odb-gui-% : + $(MAKE) -C openlane open-odb-gui-$* + .PHONY: clean_log clean_log: @rm -f setup.log diff --git a/docs/source/index.rst b/docs/source/index.rst index e27638240..400302666 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -116,6 +116,22 @@ Starting your project .. For an example of hardening a project please refer to `Hardening the User Project using OpenLane`_. . + + * In case a failure happens, view the last generated layout before failure: + - Last generated def file using klayout: + + .. code:: bash + + make open-gui- + .. + + - Last generated odb file using openroad-gui: + + .. code:: bash + + make open-odb-gui- + .. + #. Integrate modules into the user_project_wrapper diff --git a/openlane/Makefile b/openlane/Makefile index d2a52864c..dc72ba52e 100644 --- a/openlane/Makefile +++ b/openlane/Makefile @@ -37,6 +37,9 @@ openlane_cmd = \ -ignore_mismatches" openlane_cmd_interactive = "flow.tcl -it -file $$(realpath ./$*/interactive.tcl)" +openlane_gui_klayout_cmd = "python3 $(OPENLANE_ROOT)/gui.py --viewer klayout --format def $$(realpath ./$*/runs/$*)" +openlane_gui_openroad_cmd = "python3 $(OPENLANE_ROOT)/gui.py --viewer openroad --format odb $$(realpath ./$*/runs/$*)" + docker_mounts = \ -v $$(realpath $(PWD)/..):$$(realpath $(PWD)/..) \ -v $(PDK_ROOT):$(PDK_ROOT) \ @@ -50,6 +53,13 @@ docker_env = \ -e CARAVEL_ROOT=$(CARAVEL_ROOT) \ -e OPENLANE_RUN_TAG=$(OPENLANE_RUN_TAG) +docker_extra_args = \ + -e DISPLAY=$(DISPLAY) \ + -v /tmp/.X11-unix:/tmp/.X11-unix \ + -v $(HOME)/.Xauthority:/.Xauthority \ + --network host \ + --security-opt seccomp=unconfined + ifneq ($(MCW_ROOT),) docker_env += -e MCW_ROOT=$(MCW_ROOT) docker_mounts += -v $(MCW_ROOT):$(MCW_ROOT) @@ -102,3 +112,14 @@ ifeq ($(OPENLANE_ROOT),) @echo "Please export OPENLANE_ROOT" @exit 1 endif + +.PHONY: open-gui-% +open-gui-%: + $(docker_run) $(docker_extra_args) \ + $(OPENLANE_IMAGE_NAME) sh -c $(openlane_gui_klayout_cmd) + +.PHONY: open-odb-gui-% +open-odb-gui-%: + $(docker_run) $(docker_extra_args) \ + $(OPENLANE_IMAGE_NAME) sh -c $(openlane_gui_openroad_cmd) +