From 8e4cc8e887fb59478492424bd53e9cf7602d6f23 Mon Sep 17 00:00:00 2001 From: Martin Whitaker Date: Thu, 30 Jul 2020 16:27:01 +0100 Subject: [PATCH] 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. --- Makefile.in | 7 +++---- driver/Makefile.in | 7 +++---- tgt-pcb/Makefile.in | 5 ++--- vhdlpp/Makefile.in | 7 +++---- vpi/Makefile.in | 14 ++++++-------- vvp/Makefile.in | 7 +++---- 6 files changed, 20 insertions(+), 27 deletions(-) diff --git a/Makefile.in b/Makefile.in index cc8cac466..974593374 100644 --- a/Makefile.in +++ b/Makefile.in @@ -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 $@ $< diff --git a/driver/Makefile.in b/driver/Makefile.in index 4d7144c5e..1cfdd7d8e 100644 --- a/driver/Makefile.in +++ b/driver/Makefile.in @@ -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 diff --git a/tgt-pcb/Makefile.in b/tgt-pcb/Makefile.in index 7345e1959..5574fa781 100644 --- a/tgt-pcb/Makefile.in +++ b/tgt-pcb/Makefile.in @@ -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 diff --git a/vhdlpp/Makefile.in b/vhdlpp/Makefile.in index 458178bdf..2f808fc98 100644 --- a/vhdlpp/Makefile.in +++ b/vhdlpp/Makefile.in @@ -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 diff --git a/vpi/Makefile.in b/vpi/Makefile.in index b08ba4244..818ac8347 100644 --- a/vpi/Makefile.in +++ b/vpi/Makefile.in @@ -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) diff --git a/vvp/Makefile.in b/vvp/Makefile.in index cdd940f5d..14608b9eb 100644 --- a/vvp/Makefile.in +++ b/vvp/Makefile.in @@ -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