@@ -195,21 +195,25 @@ $(OBJECTS_DIR)/klayout.lyt: $(KLAYOUT_TECH_FILE) $(OBJECTS_DIR)/klayout_tech.lef
195195
196196.PHONY : do-klayout
197197do-klayout :
198- ifeq ($(KLAYOUT_ENV_VAR_IN_PATH ) ,valid)
199- SC_LEF_RELATIVE_PATH="$(shell realpath --relative-to=$(RESULTS_DIR) $(SC_LEF))"; \
200- OTHER_LEFS_RELATIVE_PATHS=$$(echo "$(foreach file, $(OBJECTS_DIR)/klayout_tech.lef $(ADDITIONAL_LEFS),<lef-files>$$(realpath --relative-to=$(RESULTS_DIR) $(file))</lef-files>)"); \
201- 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
202- else
203- 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
204- endif
205- sed -i 's,<map-file>.*</map-file>,$(foreach file, $(FLOW_HOME)/platforms/$(PLATFORM)/*map,<map-file>$(shell realpath $(file))</map-file>),g' $(OBJECTS_DIR)/klayout.lyt
198+ @mkdir -p $(dir $(OBJECTS_DIR ) /klayout.lyt)
199+ $(PYTHON_EXE ) $(UTILS_DIR ) /generate_klayout_tech.py \
200+ --template $(KLAYOUT_TECH_FILE ) \
201+ --output $(OBJECTS_DIR ) /klayout.lyt \
202+ --lef-files $(OBJECTS_DIR ) /klayout_tech.lef $(SC_LEF ) $(ADDITIONAL_LEFS ) \
203+ --reference-dir $(RESULTS_DIR ) \
204+ --map-files $(wildcard $(FLOW_HOME ) /platforms/$(PLATFORM ) /* map)
206205
207206$(OBJECTS_DIR ) /klayout_wrap.lyt : $(KLAYOUT_TECH_FILE ) $(OBJECTS_DIR ) /klayout_tech.lef
208207 $(UNSET_AND_MAKE ) do-klayout_wrap
209208
210209.PHONY : do-klayout_wrap
211210do-klayout_wrap :
212- 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
211+ @mkdir -p $(dir $(OBJECTS_DIR ) /klayout_wrap.lyt)
212+ $(PYTHON_EXE ) $(UTILS_DIR ) /generate_klayout_tech.py \
213+ --template $(KLAYOUT_TECH_FILE ) \
214+ --output $(OBJECTS_DIR ) /klayout_wrap.lyt \
215+ --lef-files $(OBJECTS_DIR ) /klayout_tech.lef $(WRAP_LEFS ) \
216+ --reference-dir $(OBJECTS_DIR ) /def
213217
214218$(WRAPPED_LEFS ) :
215219 mkdir -p $(OBJECTS_DIR ) /lef $(OBJECTS_DIR ) /def
@@ -627,7 +631,7 @@ final: finish
627631
628632.PHONY : do-finish
629633do-finish :
630- $(UNSET_AND_MAKE ) do-6_1_fill do-6_1_fill.sdc do-6_final.sdc do-6_report do-gds elapsed
634+ $(UNSET_AND_MAKE ) do-6_1_fill do-6_1_fill.sdc do-6_final.sdc do-6_report elapsed
631635
632636.PHONY : generate_abstract
633637generate_abstract : $(RESULTS_DIR ) /6_final.gds $(RESULTS_DIR ) /6_final.def $(RESULTS_DIR ) /6_final.v $(RESULTS_DIR ) /6_final.sdc
@@ -643,6 +647,17 @@ do-generate_abstract:
643647clean_abstract :
644648 rm -f $(RESULTS_DIR ) /$(DESIGN_NAME ) .lib $(RESULTS_DIR ) /$(DESIGN_NAME ) .lef
645649
650+ .PHONY : check-klayout
651+ check-klayout :
652+ @if [ -z " $( KLAYOUT_CMD) " ]; then \
653+ echo " Error: KLayout not found. Install KLayout or set KLAYOUT_CMD." ; \
654+ echo " Hint: KLayout is needed for GDS/DRC/LVS targets." ; \
655+ exit 1; \
656+ fi
657+
658+ .PHONY : gds
659+ gds : $(GDS_FINAL_FILE )
660+
646661# Merge wrapped macros using Klayout
647662# -------------------------------------------------------------------------------
648663$(WRAPPED_GDSOAS ) : $(OBJECTS_DIR ) /klayout_wrap.lyt $(WRAPPED_LEFS )
@@ -658,7 +673,7 @@ $(WRAPPED_GDSOAS): $(OBJECTS_DIR)/klayout_wrap.lyt $(WRAPPED_LEFS)
658673
659674# Merge GDS using Klayout
660675# -------------------------------------------------------------------------------
661- $(GDS_MERGED_FILE ) : $(RESULTS_DIR ) /6_final.def $(OBJECTS_DIR ) /klayout.lyt $(GDSOAS_FILES ) $(WRAPPED_GDSOAS ) $(SEAL_GDSOAS )
676+ $(GDS_MERGED_FILE ) : check-klayout $(RESULTS_DIR ) /6_final.def $(OBJECTS_DIR ) /klayout.lyt $(GDSOAS_FILES ) $(WRAPPED_GDSOAS ) $(SEAL_GDSOAS )
662677 $(UNSET_AND_MAKE ) do-gds-merged
663678
664679.PHONY : do-gds-merged
@@ -768,7 +783,7 @@ nuke: clean_test clean_issues
768783# DEF/GDS/OAS viewer shortcuts
769784# -------------------------------------------------------------------------------
770785.PHONY : $(foreach file,$(RESULTS_DEF ) $(RESULTS_GDS ) $(RESULTS_OAS ) ,klayout_$(file ) )
771- $(foreach file,$(RESULTS_DEF ) $(RESULTS_GDS ) $(RESULTS_OAS ) ,klayout_$(file ) ) : klayout_% : $(OBJECTS_DIR ) /klayout.lyt
786+ $(foreach file,$(RESULTS_DEF ) $(RESULTS_GDS ) $(RESULTS_OAS ) ,klayout_$(file ) ) : klayout_% : check-klayout $(OBJECTS_DIR ) /klayout.lyt
772787 $(SCRIPTS_DIR ) /klayout.sh -nn $(OBJECTS_DIR ) /klayout.lyt $(RESULTS_DIR ) /$*
773788
774789$(eval $(call OPEN_GUI_SHORTCUT,synth,1_synth.odb))
0 commit comments