| # SPDX-FileCopyrightText: 2020 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 |
| |
| MAKEFLAGS+=--warn-undefined-variables |
| |
| export OPENLANE_RUN_TAG = $(shell date '+%y_%m_%d_%H_%M') |
| OPENLANE_TAG ?= 2021.11.23_01.42.34 |
| OPENLANE_IMAGE_NAME ?= efabless/openlane:$(OPENLANE_TAG) |
| designs = $(shell find * -maxdepth 0 -type d) |
| current_design = null |
| |
| openlane_cmd = \ |
| "flow.tcl \ |
| -design $$(realpath ./$*) \ |
| -save_path $$(realpath ..) \ |
| -save \ |
| -tag $(OPENLANE_RUN_TAG) \ |
| -overwrite" |
| openlane_cmd_interactive = "flow.tcl -it -file $$(realpath ./$*/interactive.tcl)" |
| |
| docker_mounts = \ |
| -v $$(realpath $(PWD)/..):$$(realpath $(PWD)/..) \ |
| -v $(PDK_ROOT):$(PDK_ROOT) \ |
| -v $(CARAVEL_ROOT):$(CARAVEL_ROOT) \ |
| -v $(OPENLANE_ROOT):/openlane |
| |
| docker_env = \ |
| -e PDK_ROOT=$(PDK_ROOT) \ |
| -e PDK=$(PDK) \ |
| -e MISMATCHES_OK=1 \ |
| -e QUIT_ON_MISMATCHES=0 \ |
| -e CARAVEL_ROOT=$(CARAVEL_ROOT) \ |
| -e OPENLANE_RUN_TAG=$(OPENLANE_RUN_TAG) |
| |
| ifneq ($(MCW_ROOT),) |
| docker_env += -e MCW_ROOT=$(MCW_ROOT) |
| docker_mounts += -v $(MCW_ROOT):$(MCW_ROOT) |
| endif |
| |
| docker_startup_mode = $(shell test -t 0 && echo "-it" || echo "--rm" ) |
| docker_run = \ |
| docker run $(docker_startup_mode) \ |
| $(docker_mounts) \ |
| $(docker_env) \ |
| -u $(shell id -u $(USER)):$(shell id -g $(USER)) |
| |
| list: |
| @echo $(designs) |
| |
| .PHONY: $(designs) |
| $(designs) : export current_design=$@ |
| $(designs) : % : ./%/config.tcl |
| ifneq (,$(wildcard ./$(current_design)/interactive.tcl)) |
| $(docker_run) \ |
| $(OPENLANE_IMAGE_NAME) sh -c $(openlane_cmd_interactive) |
| else |
| # $(current_design) |
| mkdir -p ./$*/runs/$(OPENLANE_RUN_TAG) |
| rm -rf ./$*/runs/$* |
| ln -s $$(realpath ./$*/runs/$(OPENLANE_RUN_TAG)) ./$*/runs/$* |
| $(docker_run) \ |
| $(OPENLANE_IMAGE_NAME) sh -c $(openlane_cmd) |
| endif |
| @mkdir -p ../signoff/$*/ |
| @cp ./$*/runs/$*/OPENLANE_VERSION ../signoff/$*/ |
| @cp ./$*/runs/$*/PDK_SOURCES ../signoff/$*/ |
| @cp ./$*/runs/$*/reports/*.csv ../signoff/$*/ |
| |
| .PHONY: openlane |
| openlane: check-openlane-env |
| if [ -d "$(OPENLANE_ROOT)" ]; then\ |
| echo "Deleting exisiting $(OPENLANE_ROOT)" && \ |
| rm -rf $(OPENLANE_ROOT) && sleep 2; \ |
| fi |
| git clone https://github.com/The-OpenROAD-Project/OpenLane --branch=$(OPENLANE_TAG) --depth=1 $(OPENLANE_ROOT) && \ |
| cd $(OPENLANE_ROOT) && \ |
| export OPENLANE_IMAGE_NAME=efabless/openlane:$(OPENLANE_TAG) && \ |
| export IMAGE_NAME=efabless/openlane:$(OPENLANE_TAG) && \ |
| $(MAKE) pull-openlane |
| |
| .PHONY: check-openlane-env |
| check-openlane-env: |
| ifeq ($(OPENLANE_ROOT),) |
| @echo "Please export OPENLANE_ROOT" |
| @exit 1 |
| endif |