blob: db1c3fab207f51ca7a90b991df5cc581c7ad2c17 [file] [log] [blame]
Ahmed Ghazy07c104c2020-11-20 13:10:15 +02001FILE_SIZE_LIMIT_MB = 10
Ahmed Ghazy5491ab12020-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
agorararmard5cfc1f32020-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
agorararmardb4156d92020-12-01 18:03:46 +020014SKYWATER_COMMIT ?= 3d7617a1acb92ea883539bcf22a632d6361a5de4
15OPEN_PDKS_COMMIT ?= 8688323e12530b9ced04b8053a6c4699b28402fc
Ahmed Ghazya9a08892020-11-19 16:05:48 +020016
17.DEFAULT_GOAL := ship
Ahmed Ghazya9a08892020-11-19 16:05:48 +020018# We need portable GDS_FILE pointers...
19.PHONY: ship
agorararmard5cfc1f32020-11-26 22:40:17 +020020ship: check-env uncompress
Ahmed Ghazya9a08892020-11-19 16:05:48 +020021 @echo "###############################################"
22 @echo "Generating Caravel GDS (sources are in the 'gds' directory)"
23 @sleep 1
agorararmardf493d632020-11-30 23:59:58 +020024 @cp gds/caravel.gds gds/caravel.old.gds && echo "Copying old Caravel to gds/caravel.old.gds" || true
Ahmed Ghazycc6ff7c2020-11-25 14:45:38 +020025 @cd gds && MAGTYPE=mag magic -rcfile ${PDK_ROOT}/sky130A/libs.tech/magic/current/sky130A.magicrc -noc -dnull gen_caravel.tcl < /dev/null
Ahmed Ghazya9a08892020-11-19 16:05:48 +020026
27
Ahmed Ghazy07c104c2020-11-20 13:10:15 +020028
Ahmed Ghazy5491ab12020-11-13 22:28:55 +020029.PHONY: clean
30clean:
31 echo "clean"
32
33
34
35.PHONY: verify
36verify:
37 echo "verify"
38
39
40
41$(LARGE_FILES_GZ): %.gz: %
Ahmed Ghazycc6ff7c2020-11-25 14:45:38 +020042 @if ! [ $(suffix $<) == ".gz" ]; then\
Ahmed Ghazy07c104c2020-11-20 13:10:15 +020043 gzip -n --best $< > /dev/null &&\
Ahmed Ghazy5491ab12020-11-13 22:28:55 +020044 echo "$< -> $@";\
45 fi
46
Ahmed Ghazy07c104c2020-11-20 13:10:15 +020047# This target compresses all files larger than $(FILE_SIZE_LIMIT_MB) MB
Ahmed Ghazy5491ab12020-11-13 22:28:55 +020048.PHONY: compress
49compress: $(LARGE_FILES_GZ)
50 @echo "Files larger than $(FILE_SIZE_LIMIT_MB) MBytes are compressed!"
51
52
53
54$(ARCHIVE_SOURCES): %: %.gz
Ahmed Ghazy07c104c2020-11-20 13:10:15 +020055 @gzip -d $< &&\
56 echo "$< -> $@";\
Ahmed Ghazy5491ab12020-11-13 22:28:55 +020057
58.PHONY: uncompress
59uncompress: $(ARCHIVE_SOURCES)
60 @echo "All files are uncompressed!"
agorararmard5cfc1f32020-11-26 22:40:17 +020061
62.PHONY: pdk
63pdk: skywater-pdk skywater-library open_pdks build-pdk
64
65$(PDK_ROOT)/skywater-pdk:
66 git clone https://github.com/google/skywater-pdk.git $(PDK_ROOT)/skywater-pdk
67
68.PHONY: skywater-pdk
69skywater-pdk: check-env $(PDK_ROOT)/skywater-pdk
70 cd $(PDK_ROOT)/skywater-pdk && \
71 git checkout -qf $(SKYWATER_COMMIT)
72
73.PHONY: skywater-library
74skywater-library: check-env $(PDK_ROOT)/skywater-pdk
75 cd $(PDK_ROOT)/skywater-pdk && \
76 git submodule update --init libraries/$(STD_CELL_LIBRARY)/latest && \
77 git submodule update --init libraries/$(IO_LIBRARY)/latest && \
78 git submodule update --init libraries/$(SPECIAL_VOLTAGE_LIBRARY)/latest && \
79 $(MAKE) -j$(THREADS) timing
80
81### OPEN_PDKS
82$(PDK_ROOT)/open_pdks:
83 git clone https://github.com/RTimothyEdwards/open_pdks.git $(PDK_ROOT)/open_pdks
84
85.PHONY: open_pdks
86open_pdks: check-env $(PDK_ROOT)/open_pdks
87 cd $(PDK_ROOT)/open_pdks && \
88 git checkout -qf $(OPEN_PDKS_COMMIT)
89
90.PHONY: build-pdk
91build-pdk: check-env $(PDK_ROOT)/open_pdks $(PDK_ROOT)/skywater-pdk
92 [ -d $(PDK_ROOT)/sky130A ] && \
93 (echo "Warning: A sky130A build already exists under $(PDK_ROOT). It will be deleted first!" && \
94 sleep 5 && \
95 rm -rf $(PDK_ROOT)/sky130A) || \
96 true
97 cd $(PDK_ROOT)/open_pdks && \
98 ./configure --with-sky130-source=$(PDK_ROOT)/skywater-pdk/libraries --with-sky130-local-path=$(PDK_ROOT) && \
99 cd sky130 && \
100 $(MAKE) veryclean && \
101 $(MAKE) && \
102 $(MAKE) install-local
103
104check-env:
105ifndef PDK_ROOT
106 $(error PDK_ROOT is undefined, please export it before running make)
107endif