Use GNU make pattern rules to handle multiple file output from bison.

With a pattern rule, the recipe will only be executed once, even when
the rule has multiple targets. Using this to handle the output from
bison is included as an example in the GNU make manual.

This fixes the makefiles so that bison-generated header files will be
regenerated if they are deleted.
This commit is contained in:
Martin Whitaker 2020-07-30 16:27:01 +01:00
parent e013745035
commit b988543096
6 changed files with 20 additions and 35 deletions

View File

@ -252,12 +252,9 @@ lexor.o: lexor.cc parse.h
parse.o: parse.cc
# Build this in two steps to avoid parallel build issues (see pr3462585)
parse.cc: $(srcdir)/parse.y
$(YACC) --verbose -t -p VL -d -o $@ $<
parse.h: parse.cc
mv parse.cc.h $@ 2>/dev/null || mv parse.hh $@
touch $@
# Use pattern rules to avoid parallel build issues (see pr3462585)
parse%cc parse%h: $(srcdir)/parse%y
$(YACC) --verbose -t -p VL --defines=parse.h -o parse.cc $<
syn-rules.cc: $(srcdir)/syn-rules.y
$(YACC) --verbose -t -p syn_ -o $@ $<

View File

@ -85,10 +85,9 @@ iverilog@EXEEXT@: $O
cflexor.c: $(srcdir)/cflexor.lex
$(LEX) -s -t $< > $@
# Build this in two steps to avoid parallel build issues (see pr3462585)
cfparse.c: $(srcdir)/cfparse.y
$(YACC) --verbose -t -p cf -d -o $@ $<
cfparse.h: cfparse.c
# Use pattern rules to avoid parallel build issues (see pr3462585)
cfparse%c cfparse%h: $(srcdir)/cfparse%y
$(YACC) --verbose -t -p cf -d -o cfparse.c $<
%.o: %.c
$(CC) $(CPPFLAGS) $(CFLAGS) @DEPENDENCY_FLAG@ -c $< -o $*.o

View File

@ -87,11 +87,8 @@ fp_lex.o: fp_lex.cc fp.h
fp_lex.cc: $(srcdir)/fp.lex
$(LEX) -s -ofp_lex.cc $(srcdir)/fp.lex
fp.cc: $(srcdir)/fp.y
$(YACC) --verbose -t -p fp -d -o $@ $<
fp.h: fp.cc
mv fp.cc.h $@ 2>/dev/null || mv fp.hh $@
touch $@
fp%cc fp%h: $(srcdir)/fp%y
$(YACC) --verbose -t -p fp --defines=fp.h -o fp.cc $<
ifeq (@WIN32@,yes)
TGTLDFLAGS=-L.. -livl

View File

@ -115,12 +115,9 @@ parse.o: parse.cc
lexor.cc: $(srcdir)/lexor.lex
$(LEX) -s -olexor.cc $(srcdir)/lexor.lex
# Build this in two steps to avoid parallel build issues (see pr3462585)
parse.cc: $(srcdir)/parse.y
$(YACC) --verbose -t -d -o $@ $<
parse.h: parse.cc
mv parse.cc.h $@ 2>/dev/null || mv parse.hh $@
touch $@
# Use pattern rules to avoid parallel build issues (see pr3462585)
parse%cc parse%h: $(srcdir)/parse%y
$(YACC) --verbose -t --defines=parse.h -o parse.cc $<
lexor_keyword.o: lexor_keyword.cc parse.h

View File

@ -136,20 +136,18 @@ sdf_lexor.o: sdf_lexor.c sdf_parse.h
sdf_lexor.c: $(srcdir)/sdf_lexor.lex
$(LEX) -t $< > $@
# Build this in two steps to avoid parallel build issues (see pr3462585)
sdf_parse.c: $(srcdir)/sdf_parse.y
$(YACC) --verbose -t -p sdf -d -o $@ $<
sdf_parse.h: sdf_parse.c
# Use pattern rules to avoid parallel build issues (see pr3462585)
sdf_parse%c sdf_parse%h: $(srcdir)/sdf_parse%y
$(YACC) --verbose -t -p sdf -d -o sdf_parse.c $<
table_mod_lexor.o: table_mod_lexor.c table_mod_parse.h
table_mod_lexor.c: $(srcdir)/table_mod_lexor.lex
$(LEX) -t $< > $@
# Build this in two steps to avoid parallel build issues (see pr3462585)
table_mod_parse.c: $(srcdir)/table_mod_parse.y
$(YACC) --verbose -t -p tblmod -d -o $@ $<
table_mod_parse.h: table_mod_parse.c
# Use pattern rules to avoid parallel build issues (see pr3462585)
table_mod_parse%c table_mod_parse%h: $(srcdir)/table_mod_parse%y
$(YACC) --verbose -t -p tblmod -d -o table_mod_parse.c $<
v2005_math.vpi: $M ../vvp/libvpi.a
$(CC) @shared@ -o $@ $M -L../vvp $(LDFLAGS) -lvpi $(VA_MATH_VPI_LDFLAGS)

View File

@ -163,12 +163,9 @@ parse.o: parse.cc
tables.o: tables.cc
# Build this in two steps to avoid parallel build issues (see pr3462585)
parse.cc: $(srcdir)/parse.y
$(YACC) --verbose -t -d -o $@ $<
parse.h: parse.cc
mv parse.cc.h $@ 2>/dev/null || mv parse.hh $@
touch $@
# Use pattern rules to avoid parallel build issues (see pr3462585)
parse%cc parse%h: $(srcdir)/parse%y
$(YACC) --verbose -t --defines=parse.h -o parse.cc $<
lexor.cc: $(srcdir)/lexor.lex
$(LEX) -s -olexor.cc $(srcdir)/lexor.lex