| include common.mk | |
| .DEFAULT_GOAL := all | |
| all: $(OUT_PACKAGES)/FBInstruction/Instruction.py | |
| # flatc actually generates two files, Instruction.py and Instructions.py. make | |
| # 4.3 supports `&:` for multiple targets, but it's probably not wise to depend | |
| # on such a new version of make, so instead we use Instruction.py as a sentinel | |
| # for both files. | |
| $(OUT_PACKAGES)/FBInstruction/Instruction.py: config/instruction.fbs | $(OUT_PACKAGES) | |
| $(FLATC) -o $(OUT_PACKAGES) --python $< | |
| $(OUT_PACKAGES): | |
| mkdir -p $@ | |
| ifneq "$(wildcard $(ROOTDIR)/toolchain/riscv-opcodes)" "" | |
| # Regenerate the pipe-maps for RISC-V, based on the opcodes from the | |
| # riscv-opcodes repo. The associated pipes are copied from the old json file. | |
| RISCV_EXTS := $(shell find $(ROOTDIR)/toolchain/riscv-opcodes -maxdepth 1 -name 'opcodes-*' -printf '%f\n' | cut -d- -f2-) | |
| riscv_pipe_maps: $(RISCV_EXTS:%=pipe_maps/riscv/%.json) | |
| .PHONY: riscv_pipe_maps | |
| endif | |
| pipe_maps/riscv/%.json: $(ROOTDIR)/toolchain/riscv-opcodes/opcodes-% | |
| $(PYTHON) $(IMPORT_RISCV_OPCODES) $(if $(wildcard $@),-m $@) -n $@.new $< | |
| mv $@.new $@ | |
| requirements.txt: | |
| pip list --format=freeze --local --not-required --exclude=pip --exclude=setuptools > $@ | |
| .PHONY: requirements.txt | |
| # Use pylint 2.13.9 | |
| lint: | |
| $(PYLINT) tbm/*.py | |
| .PHONY:lint | |
| type-check: | |
| $(PYTYPE) tbm/tbm.py tbm/gentrace-spike.py tbm/merge-counters.py | |
| .PHONY: type-check | |
| # After running pytype you can merge the inferred types into the .py files. | |
| # `make merge-pyi` will merge to all files. | |
| # `make merge-pyi-<module>` will merge only to module. | |
| define merge-pyi | |
| merge-pyi-$(1): | |
| $(MERGE_PYI) -i $(2) $(3) | |
| .PHONY: merge-pyi-$(1) | |
| merge-pyi: merge-pyi-$(1) | |
| endef | |
| .PHONY: merge-pyi | |
| $(foreach py,$(wildcard tbm/*.py),\ | |
| $(eval name = $(basename $(notdir $(py))))\ | |
| $(eval pyi = .pytype/pyi/$(name).pyi)\ | |
| $(if $(wildcard $(pyi)),\ | |
| $(eval $(call merge-pyi,$(name),$(py),$(pyi))))) | |
| clean: | |
| $(RM) $(OUT_PACKAGES)/FBInstruction/Instruction.py | |
| $(RM) $(OUT_PACKAGES)/FBInstruction/Instructions.py | |
| $(RM) -r __pycache__ | |
| $(RM) -r .pytype | |
| .PHONY: clean |