OpenRAM/Makefile

230 lines
7.7 KiB
Makefile
Raw Normal View History

2021-08-18 20:21:52 +02:00
TOP_DIR := $(realpath $(dir $(lastword $(MAKEFILE_LIST))))
2021-11-02 19:10:59 +01:00
include $(TOP_DIR)/openram.mk
2021-08-18 20:21:52 +02:00
2021-11-02 19:10:59 +01:00
.DEFAULT_GOAL := install
2021-08-18 20:21:52 +02:00
# Skywater PDK SRAM library
2021-11-02 23:07:18 +01:00
SRAM_LIB_DIR ?= $(PDK_ROOT)/sky130_fd_bd_sram
2022-06-16 20:23:13 +02:00
# Use this for release
2022-02-23 19:19:46 +01:00
SRAM_LIB_GIT_REPO ?= https://github.com/vlsida/sky130_fd_bd_sram.git
2022-06-16 20:23:13 +02:00
# Use this for development
#SRAM_LIB_GIT_REPO ?= git@github.com:VLSIDA/sky130_fd_bd_sram.git
2022-02-23 19:19:46 +01:00
#SRAM_LIB_GIT_REPO ?= https://github.com/google/skywater-pdk-libs-sky130_fd_bd_sram.git
2022-06-16 20:23:13 +02:00
SRAM_LIB_GIT_COMMIT ?= a83b6468c48434d927b90058b22047843c58027b
2021-10-28 17:43:28 +02:00
2021-08-18 20:21:52 +02:00
# Open PDKs
2021-11-02 23:07:18 +01:00
OPEN_PDKS_DIR ?= $(PDK_ROOT)/open_pdks
OPEN_PDKS_GIT_REPO ?= https://github.com/RTimothyEdwards/open_pdks.git
OPEN_PDKS_GIT_COMMIT ?= 1.0.311
#OPEN_PDKS_GIT_COMMIT ?= 7ea416610339d3c29af9d0d748ceadd3fd368608
2021-11-08 18:31:56 +01:00
SKY130_PDK ?= $(PDK_ROOT)/sky130A
2021-08-18 20:21:52 +02:00
2021-12-29 23:41:55 +01:00
# Skywater PDK
SKY130_PDKS_DIR ?= $(PDK_ROOT)/skywater-pdk
SKY130_PDKS_GIT_REPO ?= https://github.com/google/skywater-pdk.git
2022-05-23 19:34:12 +02:00
SKY130_PDKS_GIT_COMMIT ?= f70d8ca46961ff92719d8870a18a076370b85f6c
2021-08-18 20:21:52 +02:00
# Create lists of all the files to copy/link
2021-11-02 23:07:18 +01:00
GDS_FILES := $(sort $(wildcard $(SRAM_LIB_DIR)/cells/*/*.gds))
2022-06-22 18:53:10 +02:00
GDS_FILES := $(GDS_FILES) $(PDK_ROOT)/skywater-pdk/libraries/sky130_fd_sc_hd/latest/cells/dlxtn/sky130_fd_sc_hd__dlxtn_1.gds
2021-11-02 23:07:18 +01:00
MAG_FILES := $(sort $(wildcard $(SRAM_LIB_DIR)/cells/*/*.mag))
2021-08-18 20:21:52 +02:00
SPICE_SUFFIX := spice
SPICE_LVS_SUFFIX := lvs.$(SPICE_SUFFIX)
SPICE_CALIBRE_SUFFIX := lvs.calibre.$(SPICE_SUFFIX)
2022-02-11 22:48:52 +01:00
SPICE_KLAYOUT_SUFFIX := lvs.klayout.$(SPICE_SUFFIX)
2021-08-18 20:21:52 +02:00
SPICE_BASE_SUFFIX := base.$(SPICE_SUFFIX)
2021-11-02 23:07:18 +01:00
ALL_SPICE_FILES := $(sort $(wildcard $(SRAM_LIB_DIR)/cells/*/*.$(SPICE_SUFFIX)))
2022-06-22 18:53:10 +02:00
ALL_SPICE_FILES := $(ALL_SPICE_FILES) $(PDK_ROOT)/skywater-pdk/libraries/sky130_fd_sc_hd/latest/cells/dlxtn/sky130_fd_sc_hd__dlxtn_1.spice
2021-08-18 20:21:52 +02:00
MAGLEF_SUFFIX := maglef
2021-11-02 23:07:18 +01:00
MAGLEF_FILES := $(sort $(wildcard $(SRAM_LIB_DIR)/cells/*/*.$(MAGLEF_SUFFIX)))
2021-08-18 20:21:52 +02:00
2021-11-02 23:07:18 +01:00
MAGICRC_FILE := $(SKY130_PDK)/libs.tech/magic/sky130A.magicrc
2021-08-18 20:21:52 +02:00
ALL_FILES := $(ALL_SPICE_FILES) $(GDS_FILES) $(MAG_FILES) $(MAGLEF_FILES)
INSTALL_BASE_DIRS := gds_lib mag_lib sp_lib lvs_lib calibre_lvs_lib klayout_lvs_lib maglef_lib
2021-08-18 20:21:52 +02:00
INSTALL_BASE := $(OPENRAM_HOME)/../technology/sky130
INSTALL_DIRS := $(addprefix $(INSTALL_BASE)/,$(INSTALL_BASE_DIRS))
2021-12-29 23:41:55 +01:00
check-pdk-root:
ifndef PDK_ROOT
$(error PDK_ROOT is undefined, please export it before running make)
endif
2022-02-23 19:19:46 +01:00
$(SKY130_PDKS_DIR): check-pdk-root
@echo "Cloning skywater PDK..."
@[ -d $(PDK_ROOT)/skywater-pdk ] || \
git clone https://github.com/google/skywater-pdk.git $(PDK_ROOT)/skywater-pdk
@cd $(SKY130_PDKS_DIR) && \
2021-12-29 23:41:55 +01:00
git checkout main && git pull && \
git checkout -qf $(SKY130_PDKS_GIT_COMMIT) && \
2022-06-22 18:53:10 +02:00
git submodule update --init libraries/sky130_fd_pr/latest libraries/sky130_fd_sc_hd/latest
2021-12-29 23:41:55 +01:00
$(OPEN_PDKS_DIR): $(SKY130_PDKS_DIR)
2021-11-02 23:07:18 +01:00
@echo "Cloning open_pdks..."
@[ -d $(OPEN_PDKS_DIR) ] || \
git clone $(OPEN_PDKS_GIT_REPO) $(OPEN_PDKS_DIR)
@cd $(OPEN_PDKS_DIR) && git pull && git checkout $(OPEN_PDKS_GIT_COMMIT)
2021-10-05 01:00:37 +02:00
$(SKY130_PDK): $(OPEN_PDKS_DIR) $(SKY130_PDKS_DIR)
2021-11-02 23:07:18 +01:00
@echo "Installing open_pdks..."
$(DOCKER_CMD) sh -c ". /home/cad-user/.bashrc && cd /pdk/open_pdks && \
2022-06-21 22:53:08 +02:00
./configure --enable-sky130-pdk=/pdk/skywater-pdk/libraries --with-sky130-local-path=/pdk && \
2021-11-08 18:31:56 +01:00
cd sky130 && \
make veryclean && \
make && \
make SHARED_PDKS_PATH=/pdk install"
2021-10-05 01:00:37 +02:00
2021-12-29 23:41:55 +01:00
$(SRAM_LIB_DIR): check-pdk-root
@echo "Cloning SRAM library..."
2021-12-29 23:41:55 +01:00
@[ -d $(SRAM_LIB_DIR) ] || (\
git clone $(SRAM_LIB_GIT_REPO) $(SRAM_LIB_DIR) && \
cd $(SRAM_LIB_DIR) && git pull && git checkout $(SRAM_LIB_GIT_COMMIT))
2021-12-29 23:41:55 +01:00
install: $(SRAM_LIB_DIR)
2021-12-29 23:41:55 +01:00
@[ -d $(PDK_ROOT)/sky130A ] || \
(echo "Warning: $(PDK_ROOT)/sky130A not found!! Run make pdk first." && false)
@[ -d $(PDK_ROOT)/skywater-pdk ] || \
(echo "Warning: $(PDK_ROOT)/skywater-pdk not found!! Run make pdk first." && false)
2021-08-18 20:21:52 +02:00
@echo "Installing sky130 SRAM PDK..."
@echo "PDK_ROOT='$(PDK_ROOT)'"
2021-11-02 23:07:18 +01:00
@echo "SRAM_LIB_DIR='$(SRAM_LIB_DIR)'"
@echo "SKY130_PDK='$(SKY130_PDK)'"
2021-12-29 23:41:55 +01:00
@make $(INSTALL_DIRS)
2021-11-02 23:07:18 +01:00
.PHONY: install
2021-08-18 20:21:52 +02:00
2021-12-29 23:41:55 +01:00
pdk: $(SKY130_PDK)
2021-08-18 20:21:52 +02:00
@true
2021-12-29 23:41:55 +01:00
.PHONY: pdk
2021-08-18 20:21:52 +02:00
$(INSTALL_BASE)/gds_lib: $(GDS_FILES)
@echo
@echo "Setting up GDS cell library for OpenRAM."
@echo "=================================================================="
mkdir -p $@
2021-11-02 23:07:18 +01:00
cp -va $? $@
2021-08-18 20:21:52 +02:00
@echo "=================================================================="
@echo
$(INSTALL_BASE)/mag_lib: $(MAG_FILES)
@echo
@echo "Setting up MAG files for OpenRAM."
@echo "=================================================================="
mkdir -p $@
@cp -va $? $@
@echo
cp -f $(MAGICRC_FILE) $(INSTALL_BASE)/tech/.magicrc
cp -f $(MAGICRC_FILE) $(INSTALL_BASE)/mag_lib/.magicrc
@echo "=================================================================="
@echo
$(INSTALL_BASE)/maglef_lib: $(MAGLEF_FILES)
@echo
@echo "Setting up MAGLEF cell library for OpenRAM."
@echo "=================================================================="
mkdir -p $@
@for SP in $?; do \
cp -va $$SP $@/$$(basename $$SP .$(MAGLEF_SUFFIX)).mag; \
done
@echo
cp -f $(MAGICRC_FILE) $(INSTALL_BASE)/maglef_lib/.magicrc
@echo "=================================================================="
@echo
$(INSTALL_BASE)/lvs_lib: $(filter %.$(SPICE_LVS_SUFFIX),$(ALL_SPICE_FILES))
@echo
@echo "Setting up LVS cell library for OpenRAM."
@echo "=================================================================="
mkdir -p $@
@for SP in $?; do \
cp -va $$SP $@/$$(basename $$SP .$(SPICE_LVS_SUFFIX)).sp; \
done
@echo "=================================================================="
@echo
$(INSTALL_BASE)/calibre_lvs_lib: $(filter %.$(SPICE_CALIBRE_SUFFIX),$(ALL_SPICE_FILES))
@echo
@echo "Setting up Calibre LVS library for OpenRAM."
@echo "=================================================================="
mkdir -p $@
@for SP in $?; do \
cp -va $$SP $@/$$(basename $$SP .$(SPICE_CALIBRE_SUFFIX)).sp; \
done
@echo "=================================================================="
@echo
2022-02-11 22:48:52 +01:00
$(INSTALL_BASE)/klayout_lvs_lib: $(filter %.$(SPICE_KLAYOUT_SUFFIX),$(ALL_SPICE_FILES))
@echo
@echo "Setting up klayout LVS library for OpenRAM."
@echo "=================================================================="
mkdir -p $@
@for SP in $?; do \
cp -va $$SP $@/$$(basename $$SP .$(SPICE_KLAYOUT_SUFFIX)).sp; \
done
@echo "=================================================================="
@echo
2021-08-18 20:21:52 +02:00
$(INSTALL_BASE)/sp_lib: $(filter-out %.$(SPICE_LVS_SUFFIX) %.$(SPICE_CALIBRE_SUFFIX),$(ALL_SPICE_FILES))
@echo
@echo "Setting up spice simulation library for OpenRAM."
@echo "=================================================================="
mkdir -p $@
@for SP in $(filter-out %.$(SPICE_BASE_SUFFIX),$?); do \
cp -va $$SP $@/$$(basename $$SP .$(SPICE_SUFFIX)).sp; \
done
@echo
@echo "Overwriting some cells with base version."
@for SP in $(filter %.$(SPICE_BASE_SUFFIX),$?); do \
cp -va $$SP $@/$$(basename $$SP .$(SPICE_BASE_SUFFIX)).sp; \
done
@echo "=================================================================="
@echo
2021-11-02 19:10:59 +01:00
macros:
cd macros && make
.PHONY: macros
2021-08-18 20:21:52 +02:00
clean:
2021-11-03 16:36:10 +01:00
@rm -f *.zip
.PHONE: clean
2021-11-02 19:10:59 +01:00
uninstall: clean
2021-11-03 16:36:10 +01:00
@rm -f $(INSTALL_BASE)/tech/.magicrc
@rm -f $(INSTALL_BASE)/mag_lib/.magicrc
@rm -f $(INSTALL_BASE)/lef_lib/.magicrc
@rm -f $(INSTALL_BASE)/maglef_lib/.magicrc
@rm -rf $(INSTALL_DIRS)
.PHONY: uninstall
2021-11-02 23:07:18 +01:00
# wipe the entire repos
wipe: uninstall
2021-12-29 23:41:55 +01:00
@echo $(SKY130_PDK)
@echo $(SRAM_LIB_DIR)
@echo $(OPEN_PDKS_DIR)
@echo $(SKY130_PDKS_DIR)
@echo "Wiping above PDK repos in 5 sec... (ctrl-c to quit)"
2021-11-03 16:36:10 +01:00
@sleep 5
2021-12-29 23:41:55 +01:00
@rm -rf $(SKY130_PDK)
@rm -rf $(SRAM_LIB_DIR)
@rm -rf $(OPEN_PDKS_DIR)
@rm -rf $(SKY130_PDKS_DIR)
.PHONY: wipe
# Build the openram library
build-library:
@rm -rf dist
@rm -rf openram.egg-info
@python3 -m pip install --upgrade build
@python3 -m build
.PHONY: build-library
# Build and install the openram library
library: build-library
@python3 -m pip install --find-links=dist openram --force
.PHONY: library