Files
chip_ignite/openlane/Makefile
2026-02-23 20:42:11 -07:00

117 lines
3.8 KiB
Makefile

# Copyright 2025 UmbraLogic Technologies LLC
#
# Adapted from Caravel User Project
#
# Copyright 2020-2024 Efabless Corporation
# SPDX-FileCopyrightText:
# 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
# set shell to bash
SHELL := /bin/bash
ifeq ($(origin LIBRELANE_RUN_TAG), undefined)
export LIBRELANE_RUN_TAG := $(shell date '+%y_%m_%d_%H_%M')
endif
ifeq ($(origin CF_LIBRELANE_TAG), undefined)
export CF_LIBRELANE_TAG := CI2511
endif
export CARAVEL_ROOT := $(CARAVEL_ROOT)
export PDK := $(PDK)
export PDK_ROOT := $(PDK_ROOT)
designs = $(shell cd $(PROJECT_ROOT)/openlane && find * -maxdepth 0 -type d)
current_design = null
LIBRELANE_USE_NIX ?= 0
librelane_args = \
--run-tag $(LIBRELANE_RUN_TAG) \
--manual-pdk \
--pdk-root $(PDK_ROOT) \
--pdk $(PDK)
docker_mounts = \
-m $(PROJECT_ROOT) \
-m $(PDK_ROOT) \
-m $(CARAVEL_ROOT) \
-m $(HOME)/.ipm
ifneq ($(MCW_ROOT),)
export MCW_ROOT:=$(MCW_ROOT)
docker_mounts += -m $(MCW_ROOT)
endif
ifeq ($(LIBRELANE_USE_NIX),1)
ifeq ($(origin UPSTREAM_LIBRELANE_TAG), undefined)
librelane_run = nix run github:chipfoundry/openlane-2/$(CF_LIBRELANE_TAG) --
else
librelane_run = nix run github:librelane/librelane/$(UPSTREAM_LIBRELANE_TAG) --
endif
else
librelane_docker_args = $(shell test -t 0 || echo "--docker-no-tty")
librelane_run = $(PROJECT_ROOT)/openlane/.venv/bin/python3 -m librelane $(docker_mounts) $(librelane_docker_args) --dockerized
endif
list:
@echo $(designs)
.PHONY: $(designs)
$(designs) : export current_design=$@
$(designs):
@config_dir="$(PROJECT_ROOT)/openlane/$@"; \
config=""; \
for ext in yaml json tcl; do \
if [ -f "$$config_dir/config.$$ext" ]; then \
config="$$config_dir/config.$$ext"; break; \
fi; \
done; \
if [ -n "$$config" ]; then \
cmd='$(librelane_run) $(librelane_args) --ef-save-views-to $(PROJECT_ROOT) --overwrite "$$config"'; \
echo "* Running LibreLane on $@ with $$config"; \
echo $$cmd; \
eval $$cmd; \
fi
librelane: librelane-venv librelane-docker-image
.PHONY: librelane-docker-image
librelane-docker-image:
@echo "LibreLane will automatically pull the appropriate Docker image as needed."
librelane-venv: $(PROJECT_ROOT)/openlane/.venv/manifest.txt
$(PROJECT_ROOT)/openlane/.venv/manifest.txt: $(PROJECT_ROOT)/openlane/.version-$(CF_LIBRELANE_TAG)
rm -rf $(PROJECT_ROOT)/openlane/.venv
python3 -m venv $(PROJECT_ROOT)/openlane/.venv
PYTHONPATH= $(PROJECT_ROOT)/openlane/.venv/bin/python3 -m pip install --upgrade pip
PYTHONPATH= $(PROJECT_ROOT)/openlane/.venv/bin/python3 -m pip install "https://github.com/chipfoundry/openlane-2/tarball/$(CF_LIBRELANE_TAG)"
PYTHONPATH= $(PROJECT_ROOT)/openlane/.venv/bin/python3 -m pip freeze > $@
$(PROJECT_ROOT)/openlane/.version-$(CF_LIBRELANE_TAG):
echo "$(CF_LIBRELANE_TAG)" > $@
python3 -c 'import os; [os.remove(f) for f in os.listdir("$(@D)") if f.startswith(".version-") and f != os.path.basename("$@")]'
.PHONY: librelane-nix
librelane-nix:
@if ! command -v nix > /dev/null; then\
echo "Nix not found. Please install Nix using the LibreLane documentation:"; \
echo " https://librelane.readthedocs.io/en/latest/getting_started/common/nix_installation/index.html"; \
else \
echo "Activating LibreLane Nix environment…"; \
nix develop github:chipfoundry/openlane-2/$(CF_LIBRELANE_TAG); \
fi