117 lines
3.8 KiB
Makefile
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
|