Makefile (4293B)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 | ################################ # Makefile for XIIRegexBuilder # ################################ # OS Detection ifeq ($(OS),Windows_NT) EXE := .exe RM := del /f /q RMDIR := rmdir /s /q MKDIR = if not exist $(subst /,\,$1) mkdir $(subst /,\,$1) FIX_PATH = $(subst /,\,$1) else EXE := RM := rm -f RMDIR := rm -rf MKDIR = mkdir -p $1 FIX_PATH = $1 endif CC = g++ CFLAGS = -Wall -Wextra -std=c++17 -Isrc -static BUILD_DIR = build TARGET = $(BUILD_DIR)/regex_builder$(EXE) TESTER = $(BUILD_DIR)/nfa_tester$(EXE) GOLDEN = $(BUILD_DIR)/golden$(EXE) SRCS = src/main.cpp src/lexer.cpp src/parser.cpp src/nfa.cpp src/emitter.cpp TEST_SRCS = src/parser_tester.cpp src/lexer.cpp src/parser.cpp src/nfa.cpp GOLDEN_SRCS = src/golden.cpp OBJS = $(SRCS:.cpp=.o) TEST_OBJS = $(TEST_SRCS:.cpp=.o) GOLDEN_OBJS = $(GOLDEN_SRCS:.cpp=.o) INPUT_DIR = inputs OUTPUT_DIR = output # Vivado Simulation Tools VIVADO_PATH = vivado XVLOG = xvlog XELAB = xelab XSIM = xsim SIM_TOP = tb_top SNAPSHOT = regex_sim # Processor variables PROC_BUILD_DIR = processor/build PROC_SRC_DIR = processor PROC_PY_DIR = processor/src $(TARGET): $(OBJS) | $(BUILD_DIR) $(CC) $(CFLAGS) -o $(TARGET) $(OBJS) $(TESTER): $(TEST_OBJS) | $(BUILD_DIR) $(CC) $(CFLAGS) -o $(TESTER) $(TEST_OBJS) $(GOLDEN): $(GOLDEN_OBJS) | $(BUILD_DIR) $(CC) $(CFLAGS) -o $(GOLDEN) $(GOLDEN_OBJS) $(BUILD_DIR): $(call MKDIR,$(BUILD_DIR)) $(PROC_BUILD_DIR): $(call MKDIR,$(PROC_BUILD_DIR)) $(OUTPUT_DIR): $(call MKDIR,$(OUTPUT_DIR)) %.o: %.cpp $(CC) $(CFLAGS) -c $< -o $@ all: $(TARGET) $(GOLDEN) run: all | $(OUTPUT_DIR) $(TARGET) $(INPUT_DIR)/regexes.txt $(INPUT_DIR)/test_strings.txt $(OUTPUT_DIR) test: $(TESTER) $(TESTER) $(INPUT_DIR)/regexes.txt $(INPUT_DIR)/test_strings.txt golden: $(GOLDEN) | $(OUTPUT_DIR) $(GOLDEN) $(INPUT_DIR)/regexes.txt $(INPUT_DIR)/test_strings.txt $(OUTPUT_DIR)/expected_matches.txt sim: run @echo "1. Compiling Verilog files..." $(XVLOG) $(OUTPUT_DIR)/*.v @echo "2. Elaborating design..." $(XELAB) -top $(SIM_TOP) -snapshot $(SNAPSHOT) -debug typical @echo "3. Running simulation..." $(XSIM) $(SNAPSHOT) -R # FPGA Targets BITSTREAM ?= build/top_fpga.bit synth: run @echo "Launching Vivado Synthesis Flow..." $(VIVADO_PATH) -mode batch -source $(call FIX_PATH,scripts/synth.tcl) program: @echo "Launching Vivado Programming Flow for $(BITSTREAM)..." $(VIVADO_PATH) -mode batch -source $(call FIX_PATH,scripts/program.tcl) -tclargs $(BITSTREAM) # Processor Targets proc_asm: | $(PROC_BUILD_DIR) python $(PROC_PY_DIR)/compile_regex.py $(PROC_SRC_DIR)/regex.txt $(PROC_BUILD_DIR)/regexes.rasm python $(PROC_PY_DIR)/asm.py $(PROC_BUILD_DIR)/regexes.rasm $(PROC_BUILD_DIR)/imem.hex proc_sim: proc_asm @echo "1. Compiling Verilog files for Processor..." $(XVLOG) -work work $(PROC_SRC_DIR)/regex_cpu.v $(PROC_SRC_DIR)/tb_regex_cpu.v @echo "2. Elaborating design..." $(XELAB) -top tb_regex_cpu -snapshot cpu_sim -debug typical @echo "3. Running simulation..." $(XSIM) cpu_sim -R proc_update_regex: | $(PROC_BUILD_DIR) python $(PROC_PY_DIR)/compile_regex.py $(PROC_SRC_DIR)/regex.txt $(PROC_BUILD_DIR)/regexes.rasm python $(PROC_PY_DIR)/asm.py $(PROC_BUILD_DIR)/regexes.rasm $(PROC_BUILD_DIR)/imem.hex python $(PROC_PY_DIR)/prog_fpga.py $(PROC_BUILD_DIR)/imem.hex proc_synth: proc_asm | $(PROC_BUILD_DIR) @echo "Launching Vivado Synthesis Flow for Processor..." $(VIVADO_PATH) -mode batch -source $(call FIX_PATH,scripts/synth_proc.tcl) proc_program: $(MAKE) program BITSTREAM=$(PROC_BUILD_DIR)/top_fpga.bit # PII Guard Targets pii_build: all | $(OUTPUT_DIR) $(TARGET) --pii pii/pii_regexes.txt $(INPUT_DIR)/test_strings.txt $(OUTPUT_DIR) pii_synth: pii_build @echo "Launching Vivado Synthesis Flow for PII Guard..." $(VIVADO_PATH) -mode batch -source $(call FIX_PATH,scripts/synth_pii.tcl) clean: -$(RM) $(call FIX_PATH,src/*.o) -$(RMDIR) $(call FIX_PATH,$(BUILD_DIR)) -$(RMDIR) $(call FIX_PATH,$(OUTPUT_DIR)) -$(RMDIR) $(call FIX_PATH,processor/build) -$(RM) *.bit *.log *.jou *.pb *.wdb *.str usage_statistics_webtalk.* -$(RM) clockInfo.txt dfx_runtime.txt *.hex *.exe -$(RMDIR) xsim.dir .Xil .PHONY: all run test golden synth program proc_asm proc_sim proc_update_regex proc_synth proc_program pii_build pii_synth clean |