blob: 0071b95bdb1d424a70927460b768a65731813af1 [file] [log] [blame]
Ahmed Ghazy31c34652020-12-01 19:59:44 +02001# cannot commit files larger than 100 MB to GitHub
2FILE_SIZE_LIMIT_MB = 100
3LARGE_FILES := $(shell find ./gds -type f -name "*.gds")
Ahmed Ghazy0011f612020-12-02 22:53:33 +02004LARGE_FILES += $(shell find . -type f -size +$(FILE_SIZE_LIMIT_MB)M -not -path "./.git/*" -not -path "./gds/*" -not -path "./openlane/*")
Ahmed Ghazy5898e4a2020-11-13 22:28:55 +02005
6LARGE_FILES_GZ := $(addsuffix .gz, $(LARGE_FILES))
7
8ARCHIVES := $(shell find . -type f -name "*.gz")
9ARCHIVE_SOURCES := $(basename $(ARCHIVES))
10
Ahmed Ghazyfdda2cb2020-12-04 02:00:38 +020011
agorararmard212cd822020-11-26 22:40:17 +020012# PDK setup configs
13THREADS ?= $(shell nproc)
14STD_CELL_LIBRARY ?= sky130_fd_sc_hd
15SPECIAL_VOLTAGE_LIBRARY ?= sky130_fd_sc_hvl
16IO_LIBRARY ?= sky130_fd_io
agorararmardfed74ec2020-12-01 18:03:46 +020017SKYWATER_COMMIT ?= 3d7617a1acb92ea883539bcf22a632d6361a5de4
agorararmardc8043332020-12-04 23:53:38 +020018OPEN_PDKS_COMMIT ?= b184e85de7629b8c87087a46b79eb45e7f7cd383
Ahmed Ghazyefdc5292020-11-19 16:05:48 +020019
20.DEFAULT_GOAL := ship
Ahmed Ghazyefdc5292020-11-19 16:05:48 +020021# We need portable GDS_FILE pointers...
22.PHONY: ship
agorararmard212cd822020-11-26 22:40:17 +020023ship: check-env uncompress
Ahmed Ghazyefdc5292020-11-19 16:05:48 +020024 @echo "###############################################"
25 @echo "Generating Caravel GDS (sources are in the 'gds' directory)"
26 @sleep 1
agorararmardf8e91c32020-11-30 23:59:58 +020027 @cp gds/caravel.gds gds/caravel.old.gds && echo "Copying old Caravel to gds/caravel.old.gds" || true
Ahmed Ghazy0252f542020-11-25 14:45:38 +020028 @cd gds && MAGTYPE=mag magic -rcfile ${PDK_ROOT}/sky130A/libs.tech/magic/current/sky130A.magicrc -noc -dnull gen_caravel.tcl < /dev/null
Ahmed Ghazyefdc5292020-11-19 16:05:48 +020029
30
Ahmed Ghazye4c7ec52020-11-20 13:10:15 +020031
Ahmed Ghazy5898e4a2020-11-13 22:28:55 +020032.PHONY: clean
33clean:
34 echo "clean"
35
36
37
38.PHONY: verify
39verify:
40 echo "verify"
41
42
43
44$(LARGE_FILES_GZ): %.gz: %
Ahmed Ghazy0252f542020-11-25 14:45:38 +020045 @if ! [ $(suffix $<) == ".gz" ]; then\
Ahmed Ghazye4c7ec52020-11-20 13:10:15 +020046 gzip -n --best $< > /dev/null &&\
Ahmed Ghazy5898e4a2020-11-13 22:28:55 +020047 echo "$< -> $@";\
48 fi
49
Ahmed Ghazye4c7ec52020-11-20 13:10:15 +020050# This target compresses all files larger than $(FILE_SIZE_LIMIT_MB) MB
Ahmed Ghazy5898e4a2020-11-13 22:28:55 +020051.PHONY: compress
52compress: $(LARGE_FILES_GZ)
53 @echo "Files larger than $(FILE_SIZE_LIMIT_MB) MBytes are compressed!"
54
55
56
57$(ARCHIVE_SOURCES): %: %.gz
Ahmed Ghazye4c7ec52020-11-20 13:10:15 +020058 @gzip -d $< &&\
59 echo "$< -> $@";\
Ahmed Ghazy5898e4a2020-11-13 22:28:55 +020060
61.PHONY: uncompress
62uncompress: $(ARCHIVE_SOURCES)
63 @echo "All files are uncompressed!"
agorararmard212cd822020-11-26 22:40:17 +020064
Ahmed Ghazyfdda2cb2020-12-04 02:00:38 +020065
66# LVS
Ahmed Ghazyfdda2cb2020-12-04 02:00:38 +020067BLOCKS = $(shell cd openlane && find * -maxdepth 0 -type d)
68LVS_BLOCKS = $(foreach block, $(BLOCKS), lvs-$(block))
Ahmed Ghazy7f70d6f2020-12-05 23:05:31 +020069$(LVS_BLOCKS): lvs-% : ./mag/%.mag ./verilog/gl/%.v
Ahmed Ghazyfdda2cb2020-12-04 02:00:38 +020070 echo "Extracting $*"
71 mkdir -p ./mag/tmp
72 echo "load $* -dereference;\
73 extract no all;\
74 extract do local;\
75 extract;\
76 ext2spice lvs;\
77 ext2spice;\
78 feedback save extract_$*.log;\
79 exit;" > ./mag/extract_$*.tcl
80 cd mag && MAGTYPE=maglef magic -rcfile ${PDK_ROOT}/sky130A/libs.tech/magic/current/sky130A.magicrc -noc -dnull extract_$*.tcl
81 mv ./mag/$*.spice ./spi/lvs
82 mv -f ./mag/extract_$*.{tcl,log} ./mag/*.ext ./mag/tmp
83 ####
84 mkdir -p ./spi/lvs/tmp
85 sh ./spi/lvs/run_lvs.sh ./verilog/gl/$*.v ./spi/lvs/$*.spice $*
Ahmed Ghazy7f70d6f2020-12-05 23:05:31 +020086 mv -f ./spi/lvs/*{.out,.json,.log} ./spi/lvs/tmp 2> /dev/null || true
Ahmed Ghazyfdda2cb2020-12-04 02:00:38 +020087
88
89.PHONY: help
90help:
91 @$(MAKE) -pRrq -f $(lastword $(MAKEFILE_LIST)) : 2>/dev/null | awk -v RS= -F: '/^# File/,/^# Finished Make data base/ {if ($$1 !~ "^[#.]") {print $$1}}' | sort | egrep -v -e '^[^[:alnum:]]' -e '^$@$$'
92
93
94###########################################################################
agorararmard212cd822020-11-26 22:40:17 +020095.PHONY: pdk
96pdk: skywater-pdk skywater-library open_pdks build-pdk
97
98$(PDK_ROOT)/skywater-pdk:
99 git clone https://github.com/google/skywater-pdk.git $(PDK_ROOT)/skywater-pdk
100
101.PHONY: skywater-pdk
102skywater-pdk: check-env $(PDK_ROOT)/skywater-pdk
103 cd $(PDK_ROOT)/skywater-pdk && \
104 git checkout -qf $(SKYWATER_COMMIT)
105
106.PHONY: skywater-library
107skywater-library: check-env $(PDK_ROOT)/skywater-pdk
108 cd $(PDK_ROOT)/skywater-pdk && \
109 git submodule update --init libraries/$(STD_CELL_LIBRARY)/latest && \
110 git submodule update --init libraries/$(IO_LIBRARY)/latest && \
111 git submodule update --init libraries/$(SPECIAL_VOLTAGE_LIBRARY)/latest && \
112 $(MAKE) -j$(THREADS) timing
113
114### OPEN_PDKS
115$(PDK_ROOT)/open_pdks:
agorararmard065a9422020-12-05 00:24:07 +0200116 git clone https://github.com/RTimothyEdwards/open_pdks.git $(PDK_ROOT)/open_pdks
agorararmard212cd822020-11-26 22:40:17 +0200117
118.PHONY: open_pdks
119open_pdks: check-env $(PDK_ROOT)/open_pdks
120 cd $(PDK_ROOT)/open_pdks && \
121 git checkout -qf $(OPEN_PDKS_COMMIT)
122
123.PHONY: build-pdk
124build-pdk: check-env $(PDK_ROOT)/open_pdks $(PDK_ROOT)/skywater-pdk
125 [ -d $(PDK_ROOT)/sky130A ] && \
126 (echo "Warning: A sky130A build already exists under $(PDK_ROOT). It will be deleted first!" && \
127 sleep 5 && \
128 rm -rf $(PDK_ROOT)/sky130A) || \
129 true
130 cd $(PDK_ROOT)/open_pdks && \
131 ./configure --with-sky130-source=$(PDK_ROOT)/skywater-pdk/libraries --with-sky130-local-path=$(PDK_ROOT) && \
132 cd sky130 && \
133 $(MAKE) veryclean && \
134 $(MAKE) && \
135 $(MAKE) install-local
136
137check-env:
138ifndef PDK_ROOT
139 $(error PDK_ROOT is undefined, please export it before running make)
Ahmed Ghazy31c34652020-12-01 19:59:44 +0200140endif