From fdf4b7f5e19ee2674470ab2772f0b160990d6eb0 Mon Sep 17 00:00:00 2001 From: Jan Lindemann Date: Sun, 20 Aug 2017 09:00:03 +0000 Subject: [PATCH] flex-bison.mk: Add support for C++ Signed-off-by: Jan Lindemann --- make/flex-bison.mk | 57 ++++++++++++++++++++++++++++++++++------------ 1 file changed, 43 insertions(+), 14 deletions(-) diff --git a/make/flex-bison.mk b/make/flex-bison.mk index e09e489d..c659c6b1 100644 --- a/make/flex-bison.mk +++ b/make/flex-bison.mk @@ -4,16 +4,37 @@ FB_SRC_Y ?= $(wildcard *.y) FB_SRC_L ?= $(wildcard *.l) FB_FLEX_PREFIX ?= $(FB_NAME_PREFIX) FB_HDRDIR ?= . -FB_CFLAGS ?= -g -O0 -FB_CPPFLAGS ?= -std=c++11 -FB_FLEX_OUT_C = $(patsubst %.l,lex.%.c,$(FB_SRC_L)) -FB_BISON_OUT_C = $(patsubst %.y,%.tab.c,$(FB_SRC_Y)) +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_FLEX_OUT_C = $(patsubst %.l,lex.%.$(FB_FLEX_OUT_EXT),$(FB_SRC_L)) +FB_BISON_OUT_C ?= $(patsubst %.y,%.tab.$(FB_BISON_OUT_EXT),$(FB_SRC_Y)) FB_GENERATED_C = $(FB_FLEX_OUT_C) $(FB_BISON_OUT_C) 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_ETRA_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 + +OBJ += $(FB_OBJ) +LOCAL_CFLAGS += $(FB_CFLAGS) +LOCAL_CPPFLAGS += $(FB_CPPFLAGS) +LOCAL_LDFLAGS += -lfl .PRECIOUS: lex.%.c %.tab.c +include $(MODDIR)/make/tools.mk + all: install: clean: clean.local @@ -21,20 +42,28 @@ distclean: clean exe: $(FB_EXE) -%.tab.c: %.y - bison --defines=$(patsubst %.tab.c,$(FB_HDRDIR)/%.tab.h,$@) --name-prefix=$(FB_NAME_PREFIX) -v -t $< -o $@ +$(DEPEND_MK): $(FB_GENERATED_C) -lex.%.c: %.l $(FB_BISON_OUT_C) - flex -i --header-file=$(FB_HDRDIR)/lex.$*.h --prefix=$(FB_FLEX_PREFIX) -o $@ $< +%.tab.$(FB_BISON_OUT_EXT): %.y + bison \ + --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 $@ -%.o: %.c - gcc -D"FB_SYM(x)=$(FB_NAME_PREFIX)##x" $(FB_CFLAGS) -c $< +lex.%.$(FB_FLEX_OUT_EXT): %.l $(FB_BISON_OUT_C) + flex -i --header-file=$(FB_HDRDIR)/lex.$*.h $(FB_FLEX_OPTS) $(FB_FLEX_EXTRA_OPTS) -o $@ $< -%.o: %.cpp - gcc -D"FB_SYM(x)=$(FB_NAME_PREFIX)##x" $(FB_CFLAGS) $(FB_CPPFLAGS) -c $< +#%.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 +#$(FB_EXE): $(FB_OBJ) +# g++ -g -o $(FB_EXE) $^ -lfl clean.local: 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-*.txt