forked from NUDT-compiler/nudt-compiler-cpp
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
52 lines
1.3 KiB
52 lines
1.3 KiB
# Makefile for SysY Compiler
|
|
# Competition build script
|
|
# Usage: make
|
|
|
|
CXX = clang++
|
|
CXXFLAGS = -std=c++17 -O2 -Wall -Wextra
|
|
LDFLAGS = -lpthread
|
|
|
|
# Project root
|
|
ROOT = $(shell pwd)
|
|
|
|
# Include paths
|
|
INCLUDES = -I$(ROOT)/include \
|
|
-I$(ROOT)/src \
|
|
-I$(ROOT)/third_party/antlr4-runtime-4.13.2/runtime/src \
|
|
-I$(ROOT)/build/generated/antlr4/src/antlr4
|
|
|
|
# Source files
|
|
SRCDIR = $(ROOT)/src
|
|
ANTLR_RUNTIME = $(ROOT)/third_party/antlr4-runtime-4.13.2/runtime/src
|
|
GENERATED = $(ROOT)/build/generated/antlr4/src/antlr4
|
|
|
|
SRC = $(shell find $(SRCDIR) -name '*.cpp' 2>/dev/null)
|
|
ANTLR_SRC = $(shell find $(ANTLR_RUNTIME) -name '*.cpp' 2>/dev/null)
|
|
GEN_SRC = $(shell find $(GENERATED) -name '*.cpp' 2>/dev/null || echo "")
|
|
|
|
# Target
|
|
TARGET = $(ROOT)/compiler
|
|
|
|
.PHONY: all clean generate
|
|
|
|
all: generate $(TARGET)
|
|
|
|
generate:
|
|
@mkdir -p $(ROOT)/build/generated/antlr4
|
|
@if [ ! -f "$(GENERATED)/SysYParser.h" ]; then \
|
|
echo "[ANTLR4] Generating parser..."; \
|
|
java -jar $(ROOT)/third_party/antlr-4.13.2-complete.jar \
|
|
-Dlanguage=Cpp -visitor \
|
|
-o $(ROOT)/build/generated/antlr4 \
|
|
$(ROOT)/src/frontend/SysY.g4; \
|
|
fi
|
|
|
|
$(TARGET): $(SRC) $(ANTLR_SRC) $(GEN_SRC)
|
|
@echo "[CXX] Linking $(TARGET)..."
|
|
$(CXX) $(CXXFLAGS) $(INCLUDES) \
|
|
$(SRC) $(ANTLR_SRC) $(GEN_SRC) \
|
|
$(LDFLAGS) -o $@
|
|
|
|
clean:
|
|
rm -rf build $(TARGET)
|