Initial commit
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user