.PHONY: all install clean

C_FRONT = C_Front
CC      = gcc
CFLAGS  = -g -O2 -std=gnu99 -Wall -Wpointer-arith -I../../include/
MKDIR_P = install -m 755 -d
INSTALL = install
BINDIR  = /usr/local/bin
PERL5   = /usr/bin/perl
LEX     = flex

OBJECTS = c-parser.o c-lexer.o c-expr.o c-token.o c-exprcode.o c-dump.o c-comp.o c-reduce.o \
	  c-xcodeml.o c-const.o c-gcctype.o c-option.o c-type.o c-convert.o \
	  ccol-list.o ccol-hash.o c-main.o c-pragma.o c-omp-pragma.o c-xmp-pragma.o \
	  c-acc-pragma.o c-omp-xcodeml.o c-xmp-xcodeml.o c-acc-xcodeml.o c-ptree.o
HEADERS = c-acc.h c-cmn.h c-comp.h c-const.h c-error.h c-expr.h c-gcctype.h c-lexyacc.h \
	  c-omp.h c-option.h c-pragma.h c-ptree.h c-xcodeml.h c-xmp.h ccol-cmn.h \
	  ccol-hash.h ccol-list.h ccol.h ../../include/config.h c-exprcode.h c-parser.h c-token.h
CREATE_FILES = c-exprcode.c c-token.c c-lexer.c c-exprcode.h c-parser.h c-token.h c-parser.c

all: $(C_FRONT)
$(C_FRONT): $(OBJECTS)
	$(CC) $(CFLAGS) -o $@ $(OBJECTS)

$(OBJECTS): $(HEADERS)

c-exprcode.h: c-exprcode.c
c-exprcode.c: c-exprcode.pl c-exprcode.def
	$(PERL5) c-exprcode.pl

c-parser.o: c-exprcode.h
c-parser.output: c-parser.h
c-parser.h: c-parser.y c-parser.c
	/bin/bash ../.././buildutils/ylwrap c-parser.y y.tab.c c-parser.c y.tab.h \
	`echo c-parser.c | sed -e s/cc$$/hh/ -e s/cpp$$/hpp/ -e s/cxx$$/hxx/ -e s/c++$$/h++/ -e s/c$$/h/` \
	y.output c-parser.output -- ${YACC} -v -d

.c.o: 
	$(CC) $(CFLAGS) $< -c

c-token.c: c-token.pl c-parser.h
	$(PERL5) c-token.pl
c-token.h: c-token.c

c-lexer.c: c-lexer.l
	$(LEX) -oc-lexer.c c-lexer.l

debug: C_debugfront

C_debugfront: $(C_Front_OBJECTS) c-dbgmain.o
	$(CC) $(C_Front_LDADD) $(LIBS) c-parser.o c-lexer.o c-expr.o \
	c-token.o c-exprcode.o c-dump.o c-comp.o c-reduce.o c-const.o \
	c-gcctype.o c-option.o c-type.o c-convert.o ccol-list.o ccol-hash.o \
	c-dbgmain.o c-pragma.o c-omp-pragma.o c-xmp-pragma.o c-acc-pragma.o \
	c-xcodeml.o c-omp-xcodeml.o c-xmp-xcodeml.o c-acc-xcodeml.o

install: $(C_FRONT)
	$(MKDIR_P) $(BINDIR)
	$(INSTALL) $^ $(BINDIR)

clean:
	rm -f C_debugfront tags *.o *.log *.output
	rm -f $(CREATE_FILES) $(C_FRONT)
