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 a4c9919e3a
commit 8e4cc8e887
6 changed files with 20 additions and 27 deletions

View File

@ -254,10 +254,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 --defines=parse.h -o $@ $<
parse.h: parse.cc
# 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

@ -88,9 +88,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 --defines=fp.h -o $@ $<
fp.h: fp.cc
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,10 +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 --defines=parse.h -o $@ $<
parse.h: parse.cc
# 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

@ -149,20 +149,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: $(V2005) libvpi.a
$(CC) @shared@ -o $@ $(V2005) -L. $(LDFLAGS) -lvpi $(VA_MATH_VPI_LDFLAGS)

View File

@ -140,10 +140,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 --defines=parse.h -o $@ $<
parse.h: parse.cc
# 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