-
孟笑朵 authorededff5ceb
SRC_PATH ?= src
INC_PATH += include
BUILD_PATH ?= build
TEST_PATH ?= test/functional
# TEST_PATH ?= test/hidden_functional
# TEST_PATH ?= test/performance
OBJ_PATH ?= $(BUILD_PATH)/obj
BINARY ?= $(BUILD_PATH)/compiler
SYSLIB_PATH ?= sysyruntimelibrary
INC = $(addprefix -I, $(INC_PATH))
SRC = $(shell find $(SRC_PATH) -name "*.cpp")
CFLAGS = -O2 -g -Wall -std=c++17 $(INC)
FLEX ?= $(SRC_PATH)/lexer.l
LEXER ?= $(addsuffix .cpp, $(basename $(FLEX)))
BISON ?= $(SRC_PATH)/parser.y
PARSER ?= $(addsuffix .cpp, $(basename $(BISON)))
SRC += $(LEXER)
SRC += $(PARSER)
OBJ = $(SRC:$(SRC_PATH)/%.cpp=$(OBJ_PATH)/%.o)
PARSERH ?= $(INC_PATH)/$(addsuffix .h, $(notdir $(basename $(PARSER))))
TESTCASE = $(shell find $(TEST_PATH) -name "*.sy")
TESTCASE_NUM = $(words $(TESTCASE))
LLVM_IR = $(addsuffix _std.ll, $(basename $(TESTCASE)))
GCC_ASM = $(addsuffix _std.s, $(basename $(TESTCASE)))
OUTPUT_LAB4 = $(addsuffix .toks, $(basename $(TESTCASE)))
OUTPUT_LAB5 = $(addsuffix .ast, $(basename $(TESTCASE)))
OUTPUT_LAB6 = $(addsuffix .ll, $(basename $(TESTCASE)))
OUTPUT_LAB7 = $(addsuffix .s, $(basename $(TESTCASE)))
OUTPUT_RES = $(addsuffix .res, $(basename $(TESTCASE)))
OUTPUT_BIN = $(addsuffix .bin, $(basename $(TESTCASE)))
OUTPUT_LOG = $(addsuffix .log, $(basename $(TESTCASE)))
.phony:all app run gdb testlab4 testlab5 testlab6 testlab7 test clean clean-all clean-test clean-app llvmir gccasm run1 ll0
all:app
$(LEXER):$(FLEX)
@flex -o $@ $<
$(PARSER):$(BISON)
@bison -o $@ $< --warnings=error=all --defines=$(PARSERH)
$(OBJ_PATH)/%.o:$(SRC_PATH)/%.cpp
@mkdir -p $(OBJ_PATH)
@clang++ $(CFLAGS) -c -o $@ $<
$(BINARY):$(OBJ)
@clang++ -O2 -g -o $@ $^
app:$(LEXER) $(PARSER) $(BINARY)
run:app
@$(BINARY) -o example.s -S example.sy -O2
runS:
arm-linux-gnueabihf-gcc example_O2.s $(SYSLIB_PATH)/libsysy.a -o example
qemu-arm -L /usr/arm-linux-gnueabihf/ ./example <example.in
echo $$?
gdb:app
#@gdb $(BINARY)
@gdb example #--args example.in
ll0:app
@$(BINARY) -o example_O2.ll -i example.sy -O2
ll02s: