-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
40 lines (30 loc) · 913 Bytes
/
Makefile
File metadata and controls
40 lines (30 loc) · 913 Bytes
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
JAVA=java
GENERATED=generated
GRAMMAR=Mini.g4
RUNTIME=antlr/runtime
CC=g++
CCARGS=-c -I $(RUNTIME)/include/ -I $(GENERATED) -std=c++20 -ggdb -Wunused
LDARGS=-ggdb
LIBS=$(RUNTIME)/lib/libantlr4-runtime.a
GEN_SRC=generated/MiniLexer.cpp \
generated/MiniParser.cpp
GEN_OBJ=$(patsubst generated/%.cpp, build/%.o, $(GEN_SRC))
CPP_SRC=$(wildcard src/*.cpp)
CPP_OBJ=$(patsubst src/%.cpp, build/%.o, $(CPP_SRC))
.PHONY: all clean
all: mini
$(GENERATED): $(GRAMMAR)
@mkdir -p $(GENERATED)
$(JAVA) -jar antlr/antlr-4.13.2-complete.jar -Dlanguage=Cpp -no-listener -no-visitor -o $(GENERATED) $(GRAMMAR)
build/%.o: src/%.cpp $(GENERATED)
@mkdir -p build
$(CC) $(CCARGS) $< -o $@
build/%.o: generated/%.cpp $(GENERATED)
@mkdir -p build
$(CC) $(CCARGS) $< -o $@
mini: $(CPP_OBJ) $(GEN_OBJ)
$(CC) $(LDARGS) $(CPP_OBJ) $(GEN_OBJ) $(LIBS) -o mini
clean:
@rm -rf build
@rm -rf $(GENERATED)
@rm -f mini