|
| 1 | +# © 2021 Intel Corporation |
| 2 | +# SPDX-License-Identifier: MPL-2.0 |
| 3 | + |
| 4 | +# |
| 5 | +# makefile for dmlc |
| 6 | +# |
| 7 | + |
| 8 | +DMLC_DIR := $(SRC_BASE)/$(TARGET) |
| 9 | +LIBDIR := $(SIMICS_PROJECT)/$(HOST_TYPE)/bin |
| 10 | + |
| 11 | +PYFILES := dml/__init__.py \ |
| 12 | + dml/ast.py \ |
| 13 | + dml/c_backend.py \ |
| 14 | + dml/g_backend.py \ |
| 15 | + dml/codegen.py \ |
| 16 | + dml/crep.py \ |
| 17 | + dml/ctree.py \ |
| 18 | + dml/template.py \ |
| 19 | + dml/toplevel.py \ |
| 20 | + dml/traits.py \ |
| 21 | + dml/types.py \ |
| 22 | + dml/dmllex.py \ |
| 23 | + dml/dmllex12.py \ |
| 24 | + dml/dmllex14.py \ |
| 25 | + dml/dmlparse.py \ |
| 26 | + dml/dmlc.py \ |
| 27 | + dml/expr.py \ |
| 28 | + dml/expr_util.py \ |
| 29 | + dml/globals.py \ |
| 30 | + dml/info_backend.py \ |
| 31 | + dml/io_memory.py \ |
| 32 | + dml/int_register.py \ |
| 33 | + dml/logging.py \ |
| 34 | + dml/messages.py \ |
| 35 | + dml/objects.py \ |
| 36 | + dml/output.py \ |
| 37 | + dml/reginfo.py \ |
| 38 | + dml/serialize.py \ |
| 39 | + dml/slotsmeta.py \ |
| 40 | + dml/structure.py \ |
| 41 | + dml/symtab.py \ |
| 42 | + __main__.py |
| 43 | + |
| 44 | +PYUNIT_FILES := $(wildcard $(DMLC_DIR)/py/dml/*_test.py) |
| 45 | +PYUNIT_TESTED := $(foreach x,$(PYUNIT_FILES),$(basename $(notdir $x))-pyunit-tested) |
| 46 | + |
| 47 | +GEN_PYFILES := dml12_parsetab.py \ |
| 48 | + dml14_parsetab.py |
| 49 | + |
| 50 | +.SECONDARY: $(GEN_PYFILES) |
| 51 | + |
| 52 | +PYTHONPATH = $(LIBDIR)/dml/python |
| 53 | + |
| 54 | +OUT_PYFILES := $(addprefix $(PYTHONPATH)/,$(PYFILES)) |
| 55 | +OUT_GEN_PYFILES := $(addprefix $(PYTHONPATH)/dml/,$(GEN_PYFILES)) |
| 56 | + |
| 57 | +# used later on by refmanual build |
| 58 | +PARSER_DEBUGFILES := $(PYTHONPATH)/dml12_parser.out \ |
| 59 | + $(PYTHONPATH)/dml14_parser.out |
| 60 | + |
| 61 | +include $(SIMICS_BASE)/$(HOST_TYPE)/include/api-versions.mk |
| 62 | + |
| 63 | +# lib-old-4.8/* is copied to bin/dml-old-4.8 |
| 64 | +# lib/* is copied to both bin/dml, bin/dml-old-4.8 |
| 65 | +OLD_DMLLIB_SRC_4_8 := $(DMLC_DIR)/lib-old-4.8 |
| 66 | +OLD_DMLLIB_DEST_4_8 := $(LIBDIR)/dml-old-4.8 |
| 67 | +DMLLIB_SRC := $(DMLC_DIR)/lib |
| 68 | +DMLLIB_DEST := $(LIBDIR)/dml |
| 69 | +DMLLIB_DESTDIRS := $(addprefix $(DMLLIB_DEST)/,1.2 1.4) |
| 70 | +OLD_DMLLIB_DESTDIRS_4_8 := $(addprefix $(OLD_DMLLIB_DEST_4_8)/,1.2 1.4) |
| 71 | +OLD_DMLFILES_4_8 := $(wildcard $(OLD_DMLLIB_SRC_4_8)/*/*.dml) |
| 72 | +DMLFILES := $(wildcard $(DMLLIB_SRC)/*/*.dml) |
| 73 | +OLD_DMLFILES_SRC_4_8 := $(subst $(OLD_DMLLIB_SRC_4_8)/,,$(OLD_DMLFILES_4_8)) |
| 74 | +DMLFILES := $(subst $(DMLLIB_SRC)/,,$(DMLFILES)) |
| 75 | +OLD_DMLFILES_4_8 := $(addprefix $(OLD_DMLLIB_DEST_4_8)/,$(DMLFILES) $(OLD_DMLFILES_SRC_4_8)) |
| 76 | +DMLFILES := $(addprefix $(DMLLIB_DEST)/,$(DMLFILES)) |
| 77 | +SCRIPTS := $(PYTHONPATH)/port_dml.py |
| 78 | +MPL_LICENSE := $(PYTHONPATH)/LICENSE |
| 79 | +BSD0_LICENSES := $(addsuffix /LICENSE,$(DMLLIB_DESTDIRS) $(OLD_DMLLIB_DESTDIRS_4_8) $(DMLLIB_DEST)/include/simics) |
| 80 | + |
| 81 | +HFILES := $(DMLLIB_DEST)/include/simics/dmllib.h |
| 82 | + |
| 83 | +DMLC_BIN := $(OUT_PYFILES) $(OUT_GEN_PYFILES) $(HFILES) |
| 84 | + |
| 85 | +all: $(DMLC_BIN) \ |
| 86 | + $(SCRIPTS) \ |
| 87 | + $(DMLFILES) \ |
| 88 | + $(OLD_DMLFILES_4_8) \ |
| 89 | + $(BSD0_LICENSES) \ |
| 90 | + $(MPL_LICENSE) \ |
| 91 | + $(PYUNIT_TESTED) \ |
| 92 | + $(PARSER_DEBUGFILES) |
| 93 | + |
| 94 | +EXE_SUFFIX := $(if $(findstring win,$(HOST_TYPE)),.exe,) |
| 95 | +DMLC_CMD := $(PYTHON) $(PYTHONPATH)/__main__.py |
| 96 | + |
| 97 | +PYCOMPILE:=$(PYTHON) $(SIMICS_BASE)/scripts/copy_python.py --compile |
| 98 | + |
| 99 | +$(OUT_GEN_PYFILES): $(LIBDIR)/dml/python/dml/%.py: %.py |
| 100 | + $(info Compiling $(<F)) |
| 101 | + $(PYCOMPILE) $^ $@ |
| 102 | + |
| 103 | +$(OUT_PYFILES): $(LIBDIR)/dml/python/%.py: $(DMLC_DIR)/py/%.py |
| 104 | + $(info Compiling $(<F)) |
| 105 | + $(PYCOMPILE) $^ $@ |
| 106 | + |
| 107 | +$(SCRIPTS): $(PYTHONPATH)/%: $(DMLC_DIR)/py/% |
| 108 | + cp $< $@ |
| 109 | + |
| 110 | +$(HFILES): $(DMLLIB_DEST)/%: $(DMLC_DIR)/% |
| 111 | + $(PYTHON) $(DMLC_DIR)/copy_h.py $< $@ |
| 112 | + |
| 113 | +# Generate the parser tables |
| 114 | +# Fairly expensive, so we only rebuild when relevant files have |
| 115 | +# changed |
| 116 | +# We would want to keep the parsetabs in the dml Python package, but |
| 117 | +# that cannot be done because of ply (which assumes it's a top-level module) |
| 118 | +dml%_parsetab.py $(PYTHONPATH)/dml%_parser.out: \ |
| 119 | + $(SRC_BASE)/$(TARGET)/generate_parsetabs.py \ |
| 120 | + $(filter %dmlparse.py %dmllex.py %dmllex12.py %dmllex14.py %ast.py, \ |
| 121 | + $(OUT_PYFILES)) \ |
| 122 | + | $(OUT_PYFILES) $(filter-out %parsetab.py,$(OUT_GEN_PYFILES)) |
| 123 | + $(info Generating $(@F)) |
| 124 | + $(PYTHON) $< $(PYTHONPATH) $* dml$*_parsetab $(PYTHONPATH)/dml$*_parser.out |
| 125 | + |
| 126 | +# needed by ctree_test.py |
| 127 | +export CC |
| 128 | +export SIMICS_BASE |
| 129 | + |
| 130 | +RUN_PY_UNIT_TEST := $(PYTHON) $(DMLC_DIR)/run_unit_tests.py |
| 131 | +%-pyunit-tested: $(DMLC_DIR)/py/dml/%.py $(OUT_PYFILES) |
| 132 | + $(info Testing $<) |
| 133 | + $(RUN_PY_UNIT_TEST) $(SIMICS_PROJECT)/$(HOST_TYPE) $< |
| 134 | + touch $@ |
| 135 | + |
| 136 | +$(DMLLIB_DESTDIRS) $(OLD_DMLLIB_DESTDIRS_4_8) $(PYTHONPATH): |
| 137 | + $(MKDIRS) $@ |
| 138 | + |
| 139 | +# Copy the DML library files |
| 140 | +$(DMLFILES): $(DMLLIB_DEST)/%: $(DMLLIB_SRC)/% | $(DMLLIB_DESTDIRS) |
| 141 | + $(info Copying $*) |
| 142 | + cp $< $@ |
| 143 | + |
| 144 | +$(OLD_DMLLIB_DEST_4_8)/%: $(DMLLIB_SRC)/% | $(OLD_DMLLIB_DESTDIRS_4_8) |
| 145 | + $(info Copying $*) |
| 146 | + cp $< $@ |
| 147 | + |
| 148 | +$(OLD_DMLLIB_DEST_4_8)/%: $(OLD_DMLLIB_SRC_4_8)/% | $(OLD_DMLLIB_DESTDIRS_4_8) |
| 149 | + $(info Copying $*) |
| 150 | + cp $< $@ |
| 151 | + |
| 152 | +$(MPL_LICENSE): $(PYTHONPATH)/%: $(DMLC_DIR)/% | $(PYTHONPATH) |
| 153 | + $(info Copying $*) |
| 154 | + cp $< $@ |
| 155 | + |
| 156 | +$(DMLLIB_DESTDIRS:=/LICENSE): $(DMLLIB_DEST)/%: $(DMLC_DIR)/lib/% | $(DMLLIB_DESTDIRS) |
| 157 | + $(info Copying $*) |
| 158 | + cp $< $@ |
| 159 | +$(OLD_DMLLIB_DESTDIRS_4_8:=/LICENSE): $(DMLC_DIR)/lib-old-4.8/1.2/LICENSE | $(OLD_DMLLIB_DESTDIRS_4_8) |
| 160 | + $(info Copying $*) |
| 161 | + cp $< $@ |
| 162 | +# HFILES dep to have the dest dir created |
| 163 | +$(DMLLIB_DEST)/include/simics/LICENSE: $(DMLLIB_DEST)/%: $(DMLC_DIR)/% | $(HFILES) |
| 164 | + $(info Copying $*) |
| 165 | + cp $< $@ |
| 166 | + |
| 167 | +# Rules that depend on this marker file can rely on dmlc to be built, |
| 168 | +# and will be rebuilt when the parser has changed. |
| 169 | +dmlast-generator: $(DMLC_BIN) |
| 170 | + $(if $(filter %_parsetab.py %/dmlc.py,$?),touch $@) |
| 171 | + |
| 172 | +# New .dmlast files are generated for all .dml files that changed |
| 173 | +# since last time. |
| 174 | +# Makefile contraption: the files <build-dir>/x/y/z.d are both markers and |
| 175 | +# depfiles. For each such marker, we run dmlc with a --save-asts that |
| 176 | +# both pre-compiles all files in <bin-dir>/x/y/z, and creates the |
| 177 | +# marker. The marker doubles as a depfile that makes sure we rebuild |
| 178 | +# this directory when DML files are updated |
| 179 | +PREPARSE_MARKERS := $(foreach d,1.2 1.4,\ |
| 180 | + dml-old-4.8/$d.d dml/$d.d $(foreach a,$(API_VERSIONS),dml/api/$a/$d.d)) |
| 181 | +-include $(PREPARSE_MARKERS) |
| 182 | +DML_VERSIONS:=1.2 1.4 |
| 183 | +$(DML_VERSIONS:%=dml-old-4.8/%.d): $(OLD_DMLFILES_4_8) |
| 184 | +$(DML_VERSIONS:%=dml/%.d): $(DMLFILES) |
| 185 | +DMLAST_SRC_BASE:=$(if $(_CORE_PROJECT_BUILD),$(SIMICS_PROJECT),$(SIMICS_BASE)) |
| 186 | +$(foreach d,1.2 1.4,dml-old-4.8/$d.d dml/$d.d): DMLAST_SRC_BASE:=$(SIMICS_PROJECT) |
| 187 | +$(PREPARSE_MARKERS): dmlast-generator |
| 188 | + $(info Generating .dmlast files for $(@:.d=)) |
| 189 | + $(PYTHON) $(SRC_BASE)/$(TARGET)/dmlast.py $(PYTHONPATH) $(SIMICS_PROJECT)/$(HOST_TYPE)/bin/$(@:.d=) $(DMLAST_SRC_BASE)/$(HOST_TYPE)/bin/$(@:.d=) $@ |
| 190 | +all: $(PREPARSE_MARKERS) |
| 191 | + |
| 192 | +DODOC := $(SIMICS_BASE)/$(HOST_TYPE)/bin/dodoc$(EXE_SUFFIX) |
| 193 | + |
| 194 | +generated-md-1.2 generated-md-1.4: |
| 195 | + $(MKDIRS) $@ |
| 196 | +generated-md-1.2/grammar.md generated-md-1.4/grammar.md: generated-md-1.%/grammar.md: $(PYTHONPATH)/dml1%_parser.out $(SRC_BASE)/$(TARGET)/grammar_to_md.py |
| 197 | + $(PYTHON) $(SRC_BASE)/$(TARGET)/grammar_to_md.py $(PYTHONPATH) $< $@ |
| 198 | +generated-md-1.2/messages.md generated-md-1.4/messages.md: generated-md-%/messages.md: $(SRC_BASE)/$(TARGET)/messages_to_md.py $(DMLC_BIN) |
| 199 | + $(PYTHON) $< $(PYTHONPATH) $* $@ |
| 200 | + |
| 201 | +DOC_SRC_DIR_14 := $(SRC_BASE)/$(TARGET)/doc/1.4 |
| 202 | +DOC_FILES_14 := $(wildcard $(DOC_SRC_DIR_14)/*.md) $(DOC_SRC_DIR_14)/toc.json |
| 203 | + |
| 204 | +DOC_DEST_14 := $(SIMICS_PROJECT)/$(HOST_TYPE)/doc/html/dml-1.4-reference-manual |
| 205 | +DOC_MARKER_14 := $(DOC_DEST_14)/filelist.json |
| 206 | + |
| 207 | +GENERATED_MD_FILES_14 = $(addprefix generated-md-1.4/,grammar.md messages.md changes-auto.md dml-builtins.md utility.md) |
| 208 | +generated-md-1.4/changes-auto.md: $(SRC_BASE)/$(TARGET)/porting_to_md.py $(DMLC_BIN) | generated-md-1.4 |
| 209 | + $(PYTHON) $< $(PYTHONPATH) $@ |
| 210 | +generated-md-1.4/dml-builtins.md generated-md-1.4/utility.md: generated-md-1.4/%.md: $(DMLC_DIR)/lib/1.4/%.dml |
| 211 | + $(PYTHON) $(DMLC_DIR)/dmlcomments_to_md.py $< $@ |
| 212 | +DOC_FILES_14 += $(GENERATED_MD_FILES_14) |
| 213 | +$(GENERATED_MD_FILES_14): | generated-md-1.4 |
| 214 | +$(DOC_MARKER_14): $(DOC_FILES_14) |
| 215 | + $(PYTHON) $(DMLC_DIR)/validate_md_links.py $(DOC_SRC_DIR_14)/toc.json $(DOC_SRC_DIR_14) generated-md-1.4 |
| 216 | + $(DODOC) --css simics.css $(SIMICS_BASE)/src/docs/dodoc -o $(DOC_DEST_14) $(DOC_SRC_DIR_14) generated-md-1.4 |
| 217 | + |
| 218 | +all: $(DOC_MARKER_14) |
| 219 | + |
| 220 | +DOC_SRC_DIR_12 := $(SRC_BASE)/$(TARGET)/doc/1.2 |
| 221 | +DOC_FILES_12 := $(wildcard $(DOC_SRC_DIR_12)/*.md) $(DOC_SRC_DIR_12)/toc.json |
| 222 | + |
| 223 | +DOC_DEST_12 := $(SIMICS_PROJECT)/$(HOST_TYPE)/doc/html/dml-1.2-reference-manual |
| 224 | +DOC_MARKER_12 := $(DOC_DEST_12)/filelist.json |
| 225 | + |
| 226 | +GENERATED_MD_FILES_12 = $(addprefix generated-md-1.2/,grammar.md messages.md) |
| 227 | +DOC_FILES_12 += $(GENERATED_MD_FILES_12) |
| 228 | +$(GENERATED_MD_FILES_12): | generated-md-1.2 |
| 229 | +$(DOC_MARKER_12): $(DOC_FILES_12) |
| 230 | + $(PYTHON) $(DMLC_DIR)/validate_md_links.py $(DOC_SRC_DIR_12)/toc.json $(DOC_SRC_DIR_12) generated-md-1.2 |
| 231 | + $(DODOC) --css simics.css $(SIMICS_BASE)/src/docs/dodoc -o $(DOC_DEST_12) $(DOC_SRC_DIR_12) generated-md-1.2 |
| 232 | + |
| 233 | +all: $(DOC_MARKER_12) |
0 commit comments