Skip to content

Commit cef0592

Browse files
authored
Merge pull request #1543 from Pinata-Consulting/makefile-do-gds
makefile: add do-gds
2 parents b08d627 + 9992ba4 commit cef0592

File tree

1 file changed

+45
-13
lines changed

1 file changed

+45
-13
lines changed

flow/Makefile

Lines changed: 45 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -376,8 +376,12 @@ $(OBJECTS_DIR)/lib/merged.lib:
376376
# Pre-process KLayout tech
377377
# ==============================================================================
378378
$(OBJECTS_DIR)/klayout_tech.lef: $(TECH_LEF)
379+
$(UNSET_AND_MAKE) do-klayout_tech
380+
381+
.PHONY: do-klayout_tech
382+
do-klayout_tech:
379383
@mkdir -p $(OBJECTS_DIR)
380-
cp $< $@
384+
cp $(TECH_LEF) $(OBJECTS_DIR)/klayout_tech.lef
381385

382386
KLAYOUT_ENV_VAR_IN_PATH_VERSION = 0.28.11
383387
KLAYOUT_VERSION = $(shell $(KLAYOUT_CMD) -v 2>/dev/null | grep 'KLayout' | cut -d ' ' -f2)
@@ -392,21 +396,29 @@ KLAYOUT_ENV_VAR_IN_PATH = $(shell \
392396
fi)
393397

394398
$(OBJECTS_DIR)/klayout.lyt: $(KLAYOUT_TECH_FILE) $(OBJECTS_DIR)/klayout_tech.lef
399+
$(UNSET_AND_MAKE) do-klayout
400+
401+
.PHONY: do-klayout
402+
do-klayout:
395403
ifeq ($(KLAYOUT_ENV_VAR_IN_PATH),valid)
396404
SC_LEF_RELATIVE_PATH="$$\(env('FLOW_HOME')\)/$(shell realpath --relative-to=$(FLOW_HOME) $(SC_LEF))"; \
397405
OTHER_LEFS_RELATIVE_PATHS=$$(echo "$(foreach file, $(OBJECTS_DIR)/klayout_tech.lef $(ADDITIONAL_LEFS),<lef-files>$$(realpath --relative-to=$(RESULTS_DIR) $(file))</lef-files>)"); \
398-
sed 's,<lef-files>.*</lef-files>,<lef-files>'"$$SC_LEF_RELATIVE_PATH"'</lef-files>'"$$OTHER_LEFS_RELATIVE_PATHS"',g' $< > $@
406+
sed 's,<lef-files>.*</lef-files>,<lef-files>'"$$SC_LEF_RELATIVE_PATH"'</lef-files>'"$$OTHER_LEFS_RELATIVE_PATHS"',g' $(KLAYOUT_TECH_FILE) > $(OBJECTS_DIR)/klayout.lyt
399407
else
400-
sed 's,<lef-files>.*</lef-files>,$(foreach file, $(OBJECTS_DIR)/klayout_tech.lef $(SC_LEF) $(ADDITIONAL_LEFS),<lef-files>$(shell realpath --relative-to=$(RESULTS_DIR) $(file))</lef-files>),g' $< > $@
408+
sed 's,<lef-files>.*</lef-files>,$(foreach file, $(OBJECTS_DIR)/klayout_tech.lef $(SC_LEF) $(ADDITIONAL_LEFS),<lef-files>$(shell realpath --relative-to=$(RESULTS_DIR) $(file))</lef-files>),g' $(KLAYOUT_TECH_FILE) > $(OBJECTS_DIR)/klayout.lyt
401409
endif
402410

403411
$(OBJECTS_DIR)/klayout_wrap.lyt: $(KLAYOUT_TECH_FILE) $(OBJECTS_DIR)/klayout_tech.lef
404-
sed 's,<lef-files>.*</lef-files>,$(foreach file, $(OBJECTS_DIR)/klayout_tech.lef $(WRAP_LEFS),<lef-files>$(shell realpath --relative-to=$(OBJECTS_DIR)/def $(file))</lef-files>),g' $< > $@
412+
$(UNSET_AND_MAKE) do-klayout_wrap
413+
414+
.PHONY: do-klayout_wrap
415+
do-klayout_wrap:
416+
sed 's,<lef-files>.*</lef-files>,$(foreach file, $(OBJECTS_DIR)/klayout_tech.lef $(WRAP_LEFS),<lef-files>$(shell realpath --relative-to=$(OBJECTS_DIR)/def $(file))</lef-files>),g' $(KLAYOUT_TECH_FILE) > $(OBJECTS_DIR)/klayout_wrap.lyt
417+
405418
# Create Macro wrappers (if necessary)
406419
# ==============================================================================
407420
WRAP_CFG = $(PLATFORM_DIR)/wrapper.cfg
408421

409-
410422
export TCLLIBPATH := util/cell-veneer $(TCLLIBPATH)
411423
$(WRAPPED_LEFS):
412424
mkdir -p $(OBJECTS_DIR)/lef $(OBJECTS_DIR)/def
@@ -586,6 +598,7 @@ $(RESULTS_DIR)/2_floorplan.sdc: $(RESULTS_DIR)/2_1_floorplan.odb
586598

587599
.PHONY: do-floorplan
588600
do-floorplan:
601+
mkdir -p $(RESULTS_DIR) $(LOG_DIR) $(REPORTS_DIR)
589602
$(UNSET_AND_MAKE) do-2_1_floorplan do-2_2_floorplan_io do-2_3_floorplan_tdms do-2_4_floorplan_macro do-2_5_floorplan_tapcell do-2_6_floorplan_pdn do-2_floorplan
590603

591604
.PHONY: clean_floorplan
@@ -639,6 +652,7 @@ $(eval $(call do-copy,3_place,2_floorplan.sdc,,.sdc))
639652

640653
.PHONY: do-place
641654
do-place:
655+
mkdir -p $(RESULTS_DIR) $(LOG_DIR) $(REPORTS_DIR)
642656
$(UNSET_AND_MAKE) do-3_1_place_gp_skip_io do-3_2_place_iop do-3_3_place_gp do-3_4_place_resized do-3_5_place_dp do-3_place do-3_place.sdc
643657

644658
# Clean Targets
@@ -718,6 +732,7 @@ $(eval $(call do-copy,5_route,4_cts.sdc,,.sdc))
718732

719733
.PHONY: do-route
720734
do-route:
735+
mkdir -p $(RESULTS_DIR) $(LOG_DIR) $(REPORTS_DIR)
721736
$(UNSET_AND_MAKE) do-5_1_grt do-5_2_route do-5_route do-5_route.sdc
722737

723738
$(RESULTS_DIR)/5_route.v:
@@ -785,10 +800,10 @@ $(eval $(call do-step,6_report,$(RESULTS_DIR)/6_1_fill.odb $(RESULTS_DIR)/6_1_fi
785800

786801
$(RESULTS_DIR)/6_final.def: $(LOG_DIR)/6_report.log
787802

788-
# NOTE! No GDS file for now
789803
.PHONY: do-finish
790804
do-finish:
791-
$(UNSET_AND_MAKE) do-6_1_fill do-6_1_fill.sdc do-6_final.sdc do-6_report elapsed
805+
mkdir -p $(RESULTS_DIR) $(LOG_DIR) $(REPORTS_DIR)
806+
$(UNSET_AND_MAKE) do-6_1_fill do-6_1_fill.sdc do-6_final.sdc do-6_report do-gds elapsed
792807

793808
.PHONY: skip_place
794809
skip_place: $(RESULTS_DIR)/2_floorplan.odb $(RESULTS_DIR)/2_floorplan.sdc
@@ -845,34 +860,51 @@ clean_abstract:
845860
# Merge wrapped macros using Klayout
846861
#-------------------------------------------------------------------------------
847862
$(WRAPPED_GDSOAS): $(OBJECTS_DIR)/klayout_wrap.lyt $(WRAPPED_LEFS)
863+
$(UNSET_AND_MAKE) do-wrapped-gdsoas
864+
865+
.PHONY: do-wrapped-gdsoas
866+
do-wrapped-gdsoas:
867+
ifeq ($(WRAPPED_GDSOAS),)
868+
@echo "Skipping wrapped GDSOA generation"
869+
else
848870
$(call KLAYOUT_FOUND)
849-
($(TIME_CMD) $(KLAYOUT_CMD) -zz -rd design_name=$(basename $(notdir $@)) \
850-
-rd in_def=$(OBJECTS_DIR)/def/$(notdir $(@:$(STREAM_SYSTEM_EXT)=def)) \
871+
($(TIME_CMD) $(KLAYOUT_CMD) -zz -rd design_name=$(basename $(notdir $(WRAPPED_GDSOAS))) \
872+
-rd in_def=$(OBJECTS_DIR)/def/$(notdir $(WRAPPED_GDSOAS:$(STREAM_SYSTEM_EXT)=def)) \
851873
-rd in_files="$(ADDITIONAL_GDSOAS)" \
852874
-rd config_file=$(FILL_CONFIG) \
853875
-rd seal_file="" \
854-
-rd out_file=$@ \
876+
-rd out_file=$(WRAPPED_GDSOAS) \
855877
-rd tech_file=$(OBJECTS_DIR)/klayout_wrap.lyt \
856878
-rd layer_map=$(GDS_LAYER_MAP) \
857-
-r $(UTILS_DIR)/def2stream.py) 2>&1 | tee $(LOG_DIR)/6_merge_$(basename $(notdir $@)).log
879+
-r $(UTILS_DIR)/def2stream.py) 2>&1 | tee $(LOG_DIR)/6_merge_$(basename $(notdir $(WRAPPED_GDSOAS))).log
880+
endif
858881

859882
# Merge GDS using Klayout
860883
#-------------------------------------------------------------------------------
861884
GDS_MERGED_FILE = $(RESULTS_DIR)/6_1_merged.$(STREAM_SYSTEM_EXT)
862885
$(GDS_MERGED_FILE): $(RESULTS_DIR)/6_final.def $(OBJECTS_DIR)/klayout.lyt $(GDSOAS_FILES) $(WRAPPED_GDSOAS) $(SEAL_GDSOAS)
886+
$(UNSET_AND_MAKE) do-gds-merged
887+
888+
.PHONY: do-gds-merged
889+
do-gds-merged:
863890
$(call KLAYOUT_FOUND)
864891
($(TIME_CMD) $(STDBUF_CMD) $(KLAYOUT_CMD) -zz -rd design_name=$(DESIGN_NAME) \
865-
-rd in_def=$< \
892+
-rd in_def=$(RESULTS_DIR)/6_final.def \
866893
-rd in_files="$(GDSOAS_FILES) $(WRAPPED_GDSOAS)" \
867894
-rd config_file=$(FILL_CONFIG) \
868895
-rd seal_file="$(SEAL_GDSOAS)" \
869-
-rd out_file=$@ \
896+
-rd out_file=$(GDS_MERGED_FILE) \
870897
-rd tech_file=$(OBJECTS_DIR)/klayout.lyt \
871898
-rd layer_map=$(GDS_LAYER_MAP) \
872899
-r $(UTILS_DIR)/def2stream.py) 2>&1 | tee $(LOG_DIR)/6_1_merge.log
873900

874901
$(RESULTS_DIR)/6_final.v: $(LOG_DIR)/6_report.log
875902

903+
.PHONY: do-gds
904+
do-gds:
905+
$(UNSET_AND_MAKE) do-klayout_tech do-klayout do-klayout_wrap do-wrapped-gdsoas do-gds-merged
906+
cp $(GDS_MERGED_FILE) $(GDS_FINAL_FILE)
907+
876908
$(GDS_FINAL_FILE): $(GDS_MERGED_FILE)
877909
cp $< $@
878910

0 commit comments

Comments
 (0)