blob: 45138227d041057ba3e5ba3b44582165c74e5d48 [file] [log] [blame]
Ahmed Ghazye4c7ec52020-11-20 13:10:15 +02001FILE_SIZE_LIMIT_MB = 10
Ahmed Ghazy5898e4a2020-11-13 22:28:55 +02002LARGE_FILES := $(shell find . -type f -size +$(FILE_SIZE_LIMIT_MB)M -not -path "./.git/*")
3
4LARGE_FILES_GZ := $(addsuffix .gz, $(LARGE_FILES))
5
6ARCHIVES := $(shell find . -type f -name "*.gz")
7ARCHIVE_SOURCES := $(basename $(ARCHIVES))
8
agorararmard212cd822020-11-26 22:40:17 +02009# PDK setup configs
10THREADS ?= $(shell nproc)
11STD_CELL_LIBRARY ?= sky130_fd_sc_hd
12SPECIAL_VOLTAGE_LIBRARY ?= sky130_fd_sc_hvl
13IO_LIBRARY ?= sky130_fd_io
14SKYWATER_COMMIT ?= ca58d58c07ab2dac53488df393da633fd5fb9a02
15OPEN_PDKS_COMMIT ?= b427e3bd10dcdc36891ae270a1ef0bd02602c553
Ahmed Ghazyefdc5292020-11-19 16:05:48 +020016
17.DEFAULT_GOAL := ship
Ahmed Ghazyefdc5292020-11-19 16:05:48 +020018# We need portable GDS_FILE pointers...
19.PHONY: ship
agorararmard212cd822020-11-26 22:40:17 +020020ship: check-env uncompress
Ahmed Ghazyefdc5292020-11-19 16:05:48 +020021 @echo "###############################################"
22 @echo "Generating Caravel GDS (sources are in the 'gds' directory)"
23 @sleep 1
Ahmed Ghazy0252f542020-11-25 14:45:38 +020024 @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 +020025
26
Ahmed Ghazye4c7ec52020-11-20 13:10:15 +020027
Ahmed Ghazy5898e4a2020-11-13 22:28:55 +020028.PHONY: clean
29clean:
30 echo "clean"
31
32
33
34.PHONY: verify
35verify:
36 echo "verify"
37
38
39
40$(LARGE_FILES_GZ): %.gz: %
Ahmed Ghazy0252f542020-11-25 14:45:38 +020041 @if ! [ $(suffix $<) == ".gz" ]; then\
Ahmed Ghazye4c7ec52020-11-20 13:10:15 +020042 gzip -n --best $< > /dev/null &&\
Ahmed Ghazy5898e4a2020-11-13 22:28:55 +020043 echo "$< -> $@";\
44 fi
45
Ahmed Ghazye4c7ec52020-11-20 13:10:15 +020046# This target compresses all files larger than $(FILE_SIZE_LIMIT_MB) MB
Ahmed Ghazy5898e4a2020-11-13 22:28:55 +020047.PHONY: compress
48compress: $(LARGE_FILES_GZ)
49 @echo "Files larger than $(FILE_SIZE_LIMIT_MB) MBytes are compressed!"
50
51
52
53$(ARCHIVE_SOURCES): %: %.gz
Ahmed Ghazye4c7ec52020-11-20 13:10:15 +020054 @gzip -d $< &&\
55 echo "$< -> $@";\
Ahmed Ghazy5898e4a2020-11-13 22:28:55 +020056
57.PHONY: uncompress
58uncompress: $(ARCHIVE_SOURCES)
59 @echo "All files are uncompressed!"
agorararmard212cd822020-11-26 22:40:17 +020060
61.PHONY: pdk
62pdk: skywater-pdk skywater-library open_pdks build-pdk
63
64$(PDK_ROOT)/skywater-pdk:
65 git clone https://github.com/google/skywater-pdk.git $(PDK_ROOT)/skywater-pdk
66
67.PHONY: skywater-pdk
68skywater-pdk: check-env $(PDK_ROOT)/skywater-pdk
69 cd $(PDK_ROOT)/skywater-pdk && \
70 git checkout -qf $(SKYWATER_COMMIT)
71
72.PHONY: skywater-library
73skywater-library: check-env $(PDK_ROOT)/skywater-pdk
74 cd $(PDK_ROOT)/skywater-pdk && \
75 git submodule update --init libraries/$(STD_CELL_LIBRARY)/latest && \
76 git submodule update --init libraries/$(IO_LIBRARY)/latest && \
77 git submodule update --init libraries/$(SPECIAL_VOLTAGE_LIBRARY)/latest && \
78 $(MAKE) -j$(THREADS) timing
79
80### OPEN_PDKS
81$(PDK_ROOT)/open_pdks:
82 git clone https://github.com/RTimothyEdwards/open_pdks.git $(PDK_ROOT)/open_pdks
83
84.PHONY: open_pdks
85open_pdks: check-env $(PDK_ROOT)/open_pdks
86 cd $(PDK_ROOT)/open_pdks && \
87 git checkout -qf $(OPEN_PDKS_COMMIT)
88
89.PHONY: build-pdk
90build-pdk: check-env $(PDK_ROOT)/open_pdks $(PDK_ROOT)/skywater-pdk
91 [ -d $(PDK_ROOT)/sky130A ] && \
92 (echo "Warning: A sky130A build already exists under $(PDK_ROOT). It will be deleted first!" && \
93 sleep 5 && \
94 rm -rf $(PDK_ROOT)/sky130A) || \
95 true
96 cd $(PDK_ROOT)/open_pdks && \
97 ./configure --with-sky130-source=$(PDK_ROOT)/skywater-pdk/libraries --with-sky130-local-path=$(PDK_ROOT) && \
98 cd sky130 && \
99 $(MAKE) veryclean && \
100 $(MAKE) && \
101 $(MAKE) install-local
102
103check-env:
104ifndef PDK_ROOT
105 $(error PDK_ROOT is undefined, please export it before running make)
106endif