Initial commit
This commit is contained in:
116
openlane/Makefile
Normal file
116
openlane/Makefile
Normal file
@@ -0,0 +1,116 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user