CC    = ccache gcc
CXX   = ccache g++

EXE = grounder

CDEBUG = -g -Wall

CXXDEBUG = -g -Wall

CSTD = -std=c99
CXXSTD = -std=c++14

CFLAGS = -Wno-deprecated-register -O3  $(CDEBUG) $(CSTD) 
CXXFLAGS = -Wno-deprecated-register -O3  $(CXXDEBUG) $(CXXSTD)
LFLAGS = -static


CPPOBJ = assignment-manager prefix-tree compact-string generalized-filters global-stack macros relalgebra heading main scanner
SOBJ =  parser lexer

FILES = $(addsuffix .cc, $(CPPOBJ))

OBJS  = $(addsuffix .o, $(CPPOBJ))

CLEANLIST =  $(addsuffix .o, $(OBJ)) $(OBJS) \
				parser.tab.cc parser.tab.hh \
				location.hh position.hh \
				stack.hh parser.output parser.o \
				lexer.o lexer.yy.cc $(EXE)\

.PHONY: all
all: grounder

grounder: $(FILES)
	$(MAKE) $(SOBJ)
	$(MAKE) $(OBJS)
	$(CXX) $(CXXFLAGS) $(LFLAGS) -o $(EXE) $(OBJS) parser.o lexer.o $(LIBS)


parser: parser.yy
	bison -d -v parser.yy
	$(CXX) $(CXXFLAGS) -c -o parser.o parser.tab.cc

lexer: lexer.l
	flex --outfile=lexer.yy.cc  $<
	$(CXX)  $(CXXFLAGS) -c lexer.yy.cc -o lexer.o

.PHONY: clean
clean:
	rm -rf $(CLEANLIST)

