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.
nudt-compiler-cpp/Makefile

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)