|  | # Copyright (C) 2017-2020  The Project X-Ray Authors. | 
|  | # | 
|  | # Use of this source code is governed by a ISC-style | 
|  | # license that can be found in the LICENSE file or at | 
|  | # https://opensource.org/licenses/ISC | 
|  | # | 
|  | # SPDX-License-Identifier: ISC | 
|  | PART?=${XRAY_PART} | 
|  | VIVADO_PART?=$(PART) | 
|  |  | 
|  | BIT2FASM_ARGS= --part "$(XRAY_DIR)/database/$(XRAY_DATABASE)/$(PART)" --verbose | 
|  |  | 
|  | DESIGN_FILES=$(wildcard design*.v) | 
|  | CSV_FILES=$(subst .v,.csv,$(DESIGN_FILES)) | 
|  | FASM_FILES=$(subst .v,.fasm,$(DESIGN_FILES)) | 
|  |  | 
|  | .PHONY: all clean designs analysis | 
|  | .PRECIOUS: %.bit %.fasm %.csv | 
|  |  | 
|  | all: analysis | 
|  |  | 
|  | clean: | 
|  | @rm -rf design_*.v | 
|  | @rm -rf design_*.tcl | 
|  | @rm -rf design_*.json | 
|  | @rm -rf design_*.csv | 
|  | @rm -rf design_*.fasm | 
|  | @rm -rf design_*.bit | 
|  | @rm -rf design_*.dcp | 
|  | @rm -rf designs.ok | 
|  | @rm -rf *.log | 
|  | @rm -rf *.jou | 
|  | @rm -rf *.xml | 
|  | @for f in build-*; \ | 
|  | do \ | 
|  | rm -rf $$f; \ | 
|  | done | 
|  | @rm -rf .Xil | 
|  | @rm -rf snippets | 
|  | @rm -rf features.csv | 
|  | @rm -rf results.json | 
|  | @rm -rf unknown_bits.jl | 
|  | @rm -rf iobs-$(PART).csv | 
|  |  | 
|  | iobs-$(PART).csv: ../dump_iobs.tcl | 
|  | env PART=$(PART) $(XRAY_VIVADO) -mode batch -source ../dump_iobs.tcl -nojournal -log dump_iobs.log | 
|  |  | 
|  | designs.ok: iobs-$(PART).csv generate.py | 
|  | env PART=$(PART) python3 ./generate.py | 
|  | touch designs.ok | 
|  |  | 
|  | designs: designs.ok | 
|  |  | 
|  | %.bit: %.v designs.ok ../syn+par.tcl | 
|  | mkdir -p build-$(basename $@) | 
|  | cd build-$(basename $@) && env PROJECT_NAME=$(basename $@) PART=${PART} $(XRAY_VIVADO) -mode batch -source ../../syn+par.tcl -nojournal -log ../$@.log | 
|  | rm -rf *.backup.log | 
|  |  | 
|  | %.fasm: %.bit | 
|  | $(XRAY_BIT2FASM) $(BIT2FASM_ARGS) $< > $@ | 
|  | @sort -u -o $@ $@ | 
|  |  | 
|  | %.csv: %.fasm | 
|  | python3 ./analyze.py --fasm $< --design $(basename $@).json -o $@ | 
|  |  | 
|  | analysis: features.csv unknown_bits.jl | 
|  |  | 
|  | features.csv: $(CSV_FILES) designs.ok | 
|  | @head -n 1 $(word 1,$(CSV_FILES)) >features.csv | 
|  | @rm -rf features.csv.tmp | 
|  | @for f in $(CSV_FILES); \ | 
|  | do \ | 
|  | tail -n +2 $$f >>features.csv.tmp; \ | 
|  | done | 
|  | @sort features.csv.tmp >>features.csv | 
|  | @rm -rf features.csv.tmp | 
|  |  | 
|  | unknown_bits.jl: $(FASM_FILES) designs.ok | 
|  | @cat $(FASM_FILES) | grep unknown_bit | cut -d: -f 2 | sort -u >unknown_bits.jl | 
|  |  | 
|  | snippets: features.csv | 
|  | mkdir -p snippets | 
|  | cd snippets && python3 ../snippets.py ../$< |