diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2016-06-30 06:56:19 -0700 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2016-06-30 09:45:25 -0700 |
commit | 9be4ecc5bbecb2fdbeee0c0d7af30e94517fd5d6 (patch) | |
tree | 5929eef83d296e0fc9e27c8ed41de8fab6af3cb4 | |
parent | 9765ffa71030efd8bb4f2ea4ed6e020fcb4bb714 (diff) |
Make copies of cstdlib/cmath and use themhjl/pr20314
If C++ headers <cstdlib> or <cmath> are used, GCC 6 will include
/usr/include/stdlib.h or /usr/include/math.h from "#include_next"
(instead of stdlib/stdlib.h or math/math.h in the glibc source
directory), and this turns up as a make dependency. An implicit
rule will kick in and make will try to install stdlib/stdlib.h or
math/math.h as /usr/include/stdlib.h or /usr/include/math.h because
the target is out of date. We make a copy of <cstdlib> and <cmath>
in the glibc build directory so that stdlib/stdlib.h and math/math.h
will be used instead of /usr/include/stdlib.h and /usr/include/math.h.
[BZ #20314]
* Makeconfig (CXXFLAGS): Prepend -I$(common-objpfx).
* Makerules (before-compile): Add $(common-objpfx)cstdlib and
$(common-objpfx)cmath.
($(common-objpfx)cstdlib): New target.
($(common-objpfx)cmath): Likewise.
-rw-r--r-- | Makeconfig | 3 | ||||
-rw-r--r-- | Makerules | 24 |
2 files changed, 26 insertions, 1 deletions
diff --git a/Makeconfig b/Makeconfig index 901e253453..03fd89c13e 100644 --- a/Makeconfig +++ b/Makeconfig @@ -889,7 +889,8 @@ override CFLAGS = -std=gnu11 -fgnu89-inline $(config-extra-cflags) \ $(CFLAGS-$(@F)) $(tls-model) \ $(foreach lib,$(libof-$(basename $(@F))) \ $(libof-$(<F)) $(libof-$(@F)),$(CFLAGS-$(lib))) -override CXXFLAGS = $(c++-sysincludes) \ +# Use our copies of cstdlib and cmath. +override CXXFLAGS = -I$(common-objpfx) $(c++-sysincludes) \ $(filter-out %frame-pointer,$(+cflags)) $(sysdep-CFLAGS) \ $(CFLAGS-$(suffix $@)) $(CFLAGS-$(<F)) $(CFLAGS-$(@F)) @@ -109,6 +109,30 @@ endif # avoid-generated endif # $(build-shared) = yes ifndef avoid-generated +ifneq (,$(CXX)) +# If C++ headers <cstdlib> or <cmath> are used, GCC 6 will include +# /usr/include/stdlib.h or /usr/include/math.h from "#include_next" +# (instead of stdlib/stdlib.h or math/math.h in the glibc source +# directory), and this turns up as a make dependency. An implicit +# rule will kick in and make will try to install stdlib/stdlib.h or +# math/math.h as /usr/include/stdlib.h or /usr/include/math.h because +# the target is out of date. We make a copy of <cstdlib> and <cmath> +# in the glibc build directory so that stdlib/stdlib.h and math/math.h +# will be used instead of /usr/include/stdlib.h and /usr/include/math.h. +before-compile := $(common-objpfx)cstdlib $(before-compile) +cstdlib=$(shell echo "\#include <cstdlib>" | $(CXX) -M -MP -x c++ - \ + | grep cstdlib: | sed -e "s/:$$//") +$(common-objpfx)cstdlib: $(cstdlib) + $(INSTALL_DATA) $< $@T + $(move-if-change) $@T $@ +before-compile := $(common-objpfx)cmath $(before-compile) +cmath=$(shell echo "\#include <cmath>" | $(CXX) -M -MP -x c++ - \ + | grep cmath: | sed -e "s/:$$//") +$(common-objpfx)cmath: $(cmath) + $(INSTALL_DATA) $< $@T + $(move-if-change) $@T $@ +endif + before-compile := $(common-objpfx)libc-abis.h $(before-compile) $(common-objpfx)libc-abis.h: $(common-objpfx)libc-abis.stamp; @: $(common-objpfx)libc-abis.stamp: $(..)scripts/gen-libc-abis \ |