72 lines
2.1 KiB
Makefile
72 lines
2.1 KiB
Makefile
# config.mk contains the paths to antlr4 etc.
|
|
# Each student should have a config.mk corresponding to her system.
|
|
# Examples are ubuntu.mk, DI.mk, fedora.mk
|
|
# Then config.mk should be in the .gitignore of your project
|
|
include config.mk
|
|
|
|
CC=g++
|
|
CCFLAGS=-g -c -std=c++17 -I$(ANTLRINC) -Wno-attributes # -Wno-defaulted-function-deleted -Wno-unknown-warning-option
|
|
LDFLAGS=-g
|
|
|
|
default: all
|
|
all: ifcc
|
|
|
|
##########################################
|
|
# link together all pieces of our compiler
|
|
OBJECTS=build/ifccBaseVisitor.o \
|
|
build/ifccLexer.o \
|
|
build/ifccVisitor.o \
|
|
build/ifccParser.o \
|
|
build/main.o \
|
|
build/CodeGenVisitor.o
|
|
|
|
ifcc: $(OBJECTS)
|
|
@mkdir -p build
|
|
$(CC) $(LDFLAGS) build/*.o $(ANTLRLIB) -o ifcc
|
|
|
|
##########################################
|
|
# compile our hand-writen C++ code: main(), CodeGenVisitor, etc.
|
|
build/%.o: %.cpp generated/ifccParser.cpp
|
|
@mkdir -p build
|
|
$(CC) $(CCFLAGS) -MMD -o $@ $<
|
|
|
|
##########################################
|
|
# compile all the antlr-generated C++
|
|
build/%.o: generated/%.cpp
|
|
@mkdir -p build
|
|
$(CC) $(CCFLAGS) -MMD -o $@ $<
|
|
|
|
# automagic dependency management: `gcc -MMD` generates all the .d files for us
|
|
-include build/*.d
|
|
build/%.d:
|
|
|
|
##########################################
|
|
# generate the C++ implementation of our Lexer/Parser/Visitor
|
|
generated/ifccLexer.cpp: generated/ifccParser.cpp
|
|
generated/ifccVisitor.cpp: generated/ifccParser.cpp
|
|
generated/ifccBaseVisitor.cpp: generated/ifccParser.cpp
|
|
generated/ifccParser.cpp: ifcc.g4
|
|
@mkdir -p generated
|
|
java -jar $(ANTLRJAR) -visitor -no-listener -Dlanguage=Cpp -o generated ifcc.g4
|
|
|
|
# prevent automatic cleanup of "intermediate" files like ifccLexer.cpp etc
|
|
.PRECIOUS: generated/ifcc%.cpp
|
|
|
|
##########################################
|
|
# view the parse tree in a graphical window
|
|
|
|
# Usage: `make gui FILE=path/to/your/file.c`
|
|
FILE ?= ../tests/testfiles/1_return42.c
|
|
|
|
gui:
|
|
@mkdir -p generated build
|
|
java -jar $(ANTLRJAR) -Dlanguage=Java -o generated ifcc.g4
|
|
javac -cp $(ANTLRJAR) -d build generated/*.java
|
|
java -cp $(ANTLRJAR):build org.antlr.v4.gui.TestRig ifcc axiom -gui $(FILE)
|
|
|
|
##########################################
|
|
# delete all machine-generated files
|
|
clean:
|
|
rm -rf build generated
|
|
rm -f ifcc
|