FB_EXE ?= $(notdir $(shell pwd)) FB_NAME ?= $(shell pwd | xargs dirname | sed 's/-/_/g') FB_NAME_PREFIX ?= $(FB_NAME)_ FB_SRC ?= $(wildcard *.y *.l) FB_SRC_Y ?= $(filter %.y,$(FB_SRC)) FB_SRC_L ?= $(filter %.l,$(FB_SRC)) FB_FLEX_PREFIX ?= $(FB_NAME_PREFIX) FB_HDRDIR ?= . FB_OUT_EXT ?= c FB_BISON_OUT_EXT ?= $(FB_OUT_EXT) FB_FLEX_OUT_EXT ?= $(FB_OUT_EXT) FB_CFLAGS ?= -D"FB_SYM(x)=$(FB_NAME_PREFIX)\#\#x" FB_CPPFLAGS ?= -std=c++11 $(FB_CFLAGS) FB_COMMON_H ?= FB_FLEX_OUT_C = $(patsubst %.l,lex.%.$(FB_FLEX_OUT_EXT),$(FB_SRC_L)) FB_FLEX_OUT_H = $(patsubst %.l,$(FB_HDRDIR)/lex.%.h,$(FB_SRC_L)) FB_BISON_OUT_C ?= $(patsubst %.y,%.tab.$(FB_BISON_OUT_EXT),$(FB_SRC_Y)) FB_BISON_OUT_H ?= $(patsubst %.y,$(FB_HDRDIR)/%.tab.h,$(FB_SRC_Y)) FB_GENERATED_H += $(FB_FLEX_OUT_H) $(FB_BISON_OUT_H) $(FB_COMMON_H) FB_GENERATED_C += $(FB_FLEX_OUT_C) $(FB_BISON_OUT_C) FB_GENERATED_C_H += $(FB_GENERATED_C) $(FB_GENERATED_H) FB_SRC_C += $(FB_GENERATED_C) $(filter-out $(FB_GENERATED_C),$(wildcard *.c) $(wildcard *.cpp)) FB_OBJ = $(patsubst %.cpp,%.o,$(patsubst %.c,%.o,$(FB_SRC_C))) FB_BISON_OPTS ?= --name-prefix=$(FB_NAME_PREFIX) FB_BISON_EXTRA_OPTS ?= FB_FLEX_OPTS ?= --prefix=$(FB_FLEX_PREFIX) FB_FLEX_EXTRA_OPTS ?= ifneq ($(filter cpp,$(FB_BISON_OUT_EXT) $(FB_FLEX_OUT_EXT)),) FB_CPPFLAGS += -Wno-sign-compare endif ifeq ($(FB_CASE_INSENSITIVE),true) FB_FLEX_OPTS += -i endif # serving tools.mk and friends SRC_ALL_CPP += $(FB_GENERATED_C) OBJ += $(FB_OBJ) LOCAL_CFLAGS += $(FB_CFLAGS) LOCAL_CPPFLAGS += $(FB_CPPFLAGS) LOCAL_LDFLAGS += -lfl .PRECIOUS: lex.%.c %.tab.$(BISON_OUT_EXT) all: install: clean: clean.flex-bison distclean: clean exe: $(FB_EXE) include $(MODDIR)/make/depend.mk $(DEPEND_MK): $(FB_GENERATED_C_H) %.tab.$(FB_BISON_OUT_EXT) $(FB_HDRDIR)/%.tab.h: %.y $(FB_COMMON_H) bison \ --report=state,solved \ --defines=$(patsubst %.tab.$(FB_BISON_OUT_EXT),$(FB_HDRDIR)/%.tab.h,$@) \ --report-file=$(patsubst %.tab.$(FB_BISON_OUT_EXT),report-%.tab.txt,$@) \ --xml=$(patsubst %.tab.$(FB_BISON_OUT_EXT),report-%.tab.xml,$@) \ --graph=$(patsubst %.tab.$(FB_BISON_OUT_EXT),graph-%.tab.txt,$@) \ $(FB_BISON_OPTS) $(FB_BISON_EXTRA_OPTS) -v -t $< -o $@ lex.%.$(FB_FLEX_OUT_EXT) $(FB_HDRDIR)/lex.%.h: %.l $(FB_COMMON_H) flex -i --header-file=$(FB_HDRDIR)/lex.$*.h $(FB_FLEX_OPTS) $(FB_FLEX_EXTRA_OPTS) -o $@ $< %.tab.o: lex.%.o #%.o: %.c # gcc -D"FB_SYM(x)=$(FB_NAME_PREFIX)##x" $(FB_CFLAGS) -c $< # #%.o: %.cpp # gcc -D"FB_SYM(x)=$(FB_NAME_PREFIX)##x" $(FB_CFLAGS) $(FB_CPPFLAGS) -c $< #$(FB_EXE): $(FB_OBJ) # g++ -g -o $(FB_EXE) $^ -lfl clean.flex-bison: $(RM) -f $(FB_GENERATED_C) $(FB_HDRDIR)/*.tab.h $(FB_HDRDIR)/lex.*.h *.output $(FB_EXE) *.tmp $(FB_OBJ) *.rep $(FB_HDRDIR)/*.rep $(RM) -f graph-*.txt report-*.xml report-*.txt echo-vars: echo-vars-flex-bison echo-vars-flex-bison: @echo FB_GENERATED_C_H = $(FB_GENERATED_C_H)