aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBernd Edlinger <bernd.edlinger@hotmail.de>2019-12-13 17:21:21 +0100
committerBernd Edlinger <bernd.edlinger@hotmail.de>2019-12-19 20:18:32 +0100
commit1ee7b812e778e4fddcfaa5f0be023dfdfb5a4d6e (patch)
treefb53d8e746f0f9b7177c7ab4e9e34f6510d7bdc9
parentd411762c45d66b64c5cbfc8a9f004b1f2e1fba4b (diff)
downloadgdb-1ee7b812e778e4fddcfaa5f0be023dfdfb5a4d6e.zip
gdb-1ee7b812e778e4fddcfaa5f0be023dfdfb5a4d6e.tar.gz
gdb-1ee7b812e778e4fddcfaa5f0be023dfdfb5a4d6e.tar.bz2
Fix build with GNU Make 3.81
GNU Make 3.81 is apparently confused when the same source file is processed by a pattern rule and an explicit rule at the same time with different output file. The pattern %.o: ../%.c and alloc-ipa.o: ../alloc.c both have the source ../alloc.c but two independent object files alloc.o and alloc-ipa.o, so while building gdbserver I see the following message: make[4]: Circular alloc-ipa.o <- ../alloc.c dependency dropped. CXX alloc-ipa.o g++: warning: '-x c++' after last input file has no effect g++: fatal error: no input files compilation terminated. In the make debug output I see the pattern is first correct: alloc-ipa.o: ../alloc.c | config.h build-gnulib-gdbserver/import/string.h $(IPAGENT_COMPILE) $(WARN_CFLAGS_NO_FORMAT) $< $(POSTCOMPILE) But after the "Circular" dependency is dropped, the pattern is changed to: alloc-ipa.o: | config.h build-gnulib-gdbserver/import/string.h $(IPAGENT_COMPILE) $(WARN_CFLAGS_NO_FORMAT) $< $(POSTCOMPILE) So indeed now $< is empty, and the build step fails. This happens only when alloc.o needs to be built, when alloc.o was already built, the build succeeds, but it takes often several attempts until the build succeeds. By rewriting the alloc-ipa.c: ../alloc.c rule into a pattern rule, the problem goes away. While already at it, this patch removes also the $(WARN_CFLAGS_NO_FORMAT) from the build rule, which is just a copy/paste thing that is not necessary for alloc.c at all.
-rw-r--r--gdb/gdbserver/ChangeLog4
-rw-r--r--gdb/gdbserver/Makefile.in8
2 files changed, 8 insertions, 4 deletions
diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog
index ecc3db5..8ab1f07 100644
--- a/gdb/gdbserver/ChangeLog
+++ b/gdb/gdbserver/ChangeLog
@@ -1,3 +1,7 @@
+2019-12-16 Bernd Edlinger <bernd.edlinger@hotmail.de>
+
+ * Makefile.in: Fix build with GNU Make 3.81
+
2019-12-16 Tom Tromey <tromey@adacore.com>
* server.c (get_exec_file): Constify result.
diff --git a/gdb/gdbserver/Makefile.in b/gdb/gdbserver/Makefile.in
index 10e0040..9e8c213 100644
--- a/gdb/gdbserver/Makefile.in
+++ b/gdb/gdbserver/Makefile.in
@@ -580,10 +580,6 @@ ax.o: ax.c
$(COMPILE) $(WARN_CFLAGS_NO_FORMAT) $<
$(POSTCOMPILE)
-alloc-ipa.o: ../alloc.c
- $(IPAGENT_COMPILE) $(WARN_CFLAGS_NO_FORMAT) $<
- $(POSTCOMPILE)
-
# Rules for objects that go in the in-process agent.
arch/%-ipa.o: ../arch/%.c
@@ -602,6 +598,10 @@ gdbsupport/%-ipa.o: ../gdbsupport/%.c
$(IPAGENT_COMPILE) $<
$(POSTCOMPILE)
+%-ipa.o: ../%.c
+ $(IPAGENT_COMPILE) $<
+ $(POSTCOMPILE)
+
# Note: Between two matching pattern rules, GNU Make 3.81 chooses the first one.
# Therefore, this one needs to be before "%.o: %.c" for it to be considered for
# files such as linux-amd64-ipa.o generated from linux-amd64-ipa.c.