Skip to contentSkip to conversation

gcc/gcc-final: pass TARGET_CFLAGS flags to configure with --enable-cxx-flags

PATCH New Max Filippov 3 participants 6 messages Jun 1, 2015 – Mar 10, 2016

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 gcc/gcc-final: pass TARGET_CFLAGS flags to configure with --enable-cxx-flags

Currently only TARGET_ABI flags are passed to the final compiler configure script and only when building for Xtensa. Since libstdc++ is a normal library it should be built with full TARGET_CFLAGS on all targets.

Pass TARGET_CFLAGS flags to gcc-final configure script for all targets in the --enable-cxx-flags parameter.

---
 package/gcc/gcc-final/gcc-final.mk | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)
package/gcc/gcc-final/gcc-final.mk +1 -3
index 8d7009b..59c8708 100644
@@ -185,8 +185,6 @@ endef
 HOST_GCC_FINAL_POST_INSTALL_HOOKS += HOST_GCC_FINAL_INSTALL_USR_LIBS
 endif
 
-ifeq ($(BR2_xtensa),y)
-HOST_GCC_FINAL_CONF_OPTS += --enable-cxx-flags="$(TARGET_ABI)"
-endif
+HOST_GCC_FINAL_CONF_OPTS += --enable-cxx-flags="$(TARGET_CFLAGS)"
 
 $(eval $(host-autotools-package))
Signature · 1 line
1.8.1.4
#1 lore raw

PATCH 1/1 gcc/gcc-final: pass TARGET_CFLAGS flags to configure with --enable-cxx-flags

Max, All,

On 2015-06-01 17:37 +0300, Max Filippov spake thusly:

Quoted 10 lines

Currently only TARGET_ABI flags are passed to the final compiler configure script and only when building for Xtensa. Since libstdc++ is a normal library it should be built with full TARGET_CFLAGS on all targets.

Pass TARGET_CFLAGS flags to gcc-final configure script for all targets in the --enable-cxx-flags parameter.

So, I finally had a look at this patch. I've tested it to build a gcc-4.9 + glibc-2.21 + binutils-2.24 toolchain with C++ support, which then was used to suessfully build Qt5base (which is quite a heavy C++ user).

However, I'd like to understand what this is all about.

In gcc.mk, we do:

    GCC_COMMON_TARGET_CXXFLAGS = $(TARGET_CXXFLAGS)
    [...]
    HOST_GCC_COMMON_CONF_ENV += CXXFLAGS_FOR_TARGET="$(GCC_COMMON_TARGET_CXXFLAGS)"

So it looks like we were already passing the proper CXXFLAGS to gcc (we only filter-out problematic flags, like -Os on broken gcc-4.5 for PPC).

So, what are we supposed to gain/loose with this change?

As a side note, we should not have to pass TARGET_ABI either, since it is part of TARGET_CFLAGS and as shown above, it is already part of the CFLAGS_FOR_TARGET that we pass gcc.

Any explanations? Something that I missed?

Regards,
Yann E. MORIN.

Quoted 25 lines
---
 package/gcc/gcc-final/gcc-final.mk | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)
package/gcc/gcc-final/gcc-final.mk +1 -3
index 8d7009b..59c8708 100644
@@ -185,8 +185,6 @@ endef
 HOST_GCC_FINAL_POST_INSTALL_HOOKS += HOST_GCC_FINAL_INSTALL_USR_LIBS
 endif
 
-ifeq ($(BR2_xtensa),y)
-HOST_GCC_FINAL_CONF_OPTS += --enable-cxx-flags="$(TARGET_ABI)"
-endif
+HOST_GCC_FINAL_CONF_OPTS += --enable-cxx-flags="$(TARGET_CFLAGS)"
 
 $(eval $(host-autotools-package))
Signature · 6 lines
1.8.1.4

_______________________________________________
buildroot mailing list
buildroot at busybox.net
http://lists.busybox.net/mailman/listinfo/buildroot
Signature · 6 lines
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'
#2 lore raw

PATCH 1/1 gcc/gcc-final: pass TARGET_CFLAGS flags to configure with --enable-cxx-flags

Hi Max,

Quoted 30 lines · Yann E. MORIN

Max, All,

On 2015-06-01 17:37 +0300, Max Filippov spake thusly:

Quoted 10 lines

Currently only TARGET_ABI flags are passed to the final compiler configure script and only when building for Xtensa. Since libstdc++ is a normal library it should be built with full TARGET_CFLAGS on all targets.

Pass TARGET_CFLAGS flags to gcc-final configure script for all targets in the --enable-cxx-flags parameter.

So, I finally had a look at this patch. I've tested it to build a gcc-4.9 + glibc-2.21 + binutils-2.24 toolchain with C++ support, which then was used to suessfully build Qt5base (which is quite a heavy C++ user).

However, I'd like to understand what this is all about.

In gcc.mk, we do:

     GCC_COMMON_TARGET_CXXFLAGS = $(TARGET_CXXFLAGS)
     [...]
     HOST_GCC_COMMON_CONF_ENV += CXXFLAGS_FOR_TARGET="$(GCC_COMMON_TARGET_CXXFLAGS)"

So it looks like we were already passing the proper CXXFLAGS to gcc (we only filter-out problematic flags, like -Os on broken gcc-4.5 for PPC).

Quoted 7 lines

So, what are we supposed to gain/loose with this change?

As a side note, we should not have to pass TARGET_ABI either, since it is part of TARGET_CFLAGS and as shown above, it is already part of the CFLAGS_FOR_TARGET that we pass gcc.

Any explanations? Something that I missed?

I checked in the gcc source and also couldn't find a reason why the
CXXFLAGS_FOR_TARGET wouldn't work. Since you haven't replied to this, I've marked your patch as rejected in patchwork. If you do still fel it is warranted, please repost with a satisfactory explanation.

Regards,
Arnout

Quoted 30 lines

Regards,
Yann E. MORIN.

Quoted 25 lines
---
  package/gcc/gcc-final/gcc-final.mk | 4 +---
  1 file changed, 1 insertion(+), 3 deletions(-)
package/gcc/gcc-final/gcc-final.mk +1 -4
index 8d7009b..59c8708 100644
@@ -185,8 +185,6 @@ endef
  HOST_GCC_FINAL_POST_INSTALL_HOOKS += HOST_GCC_FINAL_INSTALL_USR_LIBS
  endif
 
-ifeq ($(BR2_xtensa),y)
-HOST_GCC_FINAL_CONF_OPTS += --enable-cxx-flags="$(TARGET_ABI)"
-endif
+HOST_GCC_FINAL_CONF_OPTS += --enable-cxx-flags="$(TARGET_CFLAGS)"
 
  $(eval $(host-autotools-package))
--

1.8.1.4

_______________________________________________
buildroot mailing list
buildroot at busybox.net
http://lists.busybox.net/mailman/listinfo/buildroot

Signature · 6 lines
Arnout Vandecappelle                          arnout at mind be
Senior Embedded Software Architect            +32-16-286500
Essensium/Mind                                http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium           BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint:  7493 020B C7E3 8618 8DEC 222C 82EB F404 F9AC 0DDF
#3 lore raw

PATCH 1/1 gcc/gcc-final: pass TARGET_CFLAGS flags to configure with --enable-cxx-flags

Arnout, Yann,

Quoted 38 lines · Arnout Vandecappelle
Quoted 37 lines · Yann E. MORIN

On 2015-06-01 17:37 +0300, Max Filippov spake thusly:

Quoted 11 lines

Currently only TARGET_ABI flags are passed to the final compiler configure script and only when building for Xtensa. Since libstdc++ is a normal library it should be built with full TARGET_CFLAGS on all targets.

Pass TARGET_CFLAGS flags to gcc-final configure script for all targets in the --enable-cxx-flags parameter.

So, I finally had a look at this patch. I've tested it to build a gcc-4.9 + glibc-2.21 + binutils-2.24 toolchain with C++ support, which then was used to suessfully build Qt5base (which is quite a heavy C++ user).

However, I'd like to understand what this is all about.

In gcc.mk, we do:

     GCC_COMMON_TARGET_CXXFLAGS = $(TARGET_CXXFLAGS)
     [...]
     HOST_GCC_COMMON_CONF_ENV +=

CXXFLAGS_FOR_TARGET="$(GCC_COMMON_TARGET_CXXFLAGS)"

So it looks like we were already passing the proper CXXFLAGS to gcc (we only filter-out problematic flags, like -Os on broken gcc-4.5 for PPC).

So, what are we supposed to gain/loose with this change?

As a side note, we should not have to pass TARGET_ABI either, since it is part of TARGET_CFLAGS and as shown above, it is already part of the CFLAGS_FOR_TARGET that we pass gcc.

Quoted 7 lines
Quoted 1 line

Any explanations? Something that I missed?

I checked in the gcc source and also couldn't find a reason why the
CXXFLAGS_FOR_TARGET wouldn't work. Since you haven't replied to this, I've marked your patch as rejected in patchwork. If you do still fel it is warranted, please repost with a satisfactory explanation.

Sorry, took me too long to answer the first mail.

AFAICS neither gcc-4.8.x nor gcc-4.9.x propagate CXXFLAGS_FOR_TARGET to CXXFLAGS for builds of libstdc++. gcc-5.x however does.
Compare the following build log excerpts for libstdc++ of gcc-4.8, gcc-4.9 and gcc-5 (I've reverted 2dcab526a97d and c44cf2cc97df before running these builds):

gcc-4.8:
make[3]: Entering directory '/home/jcmvbkbc/tmp/br/build-gdb-binutils-update-dc233c/build/host-gcc-final-4.8.5/build/xtensa-buildroot-linux-uclibc/libstdc++-v3' /usr/bin/make "AR_FLAGS=rc" "CC_FOR_BUILD=/usr/bin/gcc" "CC_FOR_TARGET=/home/jcmvbkbc/tmp/br/build-gdb-binutils-update-dc233c/build/host-gcc-final-4.8.5/build/./gcc/xgcc -B/home/jcmvbkbc/tmp/br/build-gdb-binutils-update-dc233c/build/host-gcc-final-4.8.5/build/./gcc/" "CFLAGS=-D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE
-D_FILE_OFFSET_BITS=64 -mlongcalls -mauto-litpools -Os -g2"
"CXXFLAGS=-O2 -I/home/jcmvbkbc/tmp/br/build-gdb-binutils-update-dc233c/host/usr/include
-D_GNU_SOURCE" "CFLAGS_FOR_BUILD=-O2 -I/home/jcmvbkbc/tmp/br/build-gdb-binutils-update-dc233c/host/usr/include" "CFLAGS_FOR_TARGET=-D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE
-D_FILE_OFFSET_BITS=64 -mlongcalls -mauto-litpools -Os -g2"
"INSTALL=/usr/bin/install -c" "INSTALL_DATA=/usr/bin/install -c -m
644" "INSTALL_PROGRAM=/usr/bin/install -c"
"INSTALL_SCRIPT=/usr/bin/install -c" "LDFLAGS="
"LIBCFLAGS=-D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE
-D_FILE_OFFSET_BITS=64 -mlongcalls -mauto-litpools -Os -g2"
"LIBCFLAGS_FOR_TARGET=-D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE
-D_FILE_OFFSET_BITS=64 -mlongcalls -mauto-litpools -Os -g2"
"MAKE=/usr/bin/make" "MAKEINFO=/home/jcmvbkbc/tmp/br/build-gdb-binutils-update-dc233c/build/host-gcc-final-4.8.5/missing
makeinfo --split-size=5000000 --split-size=5000000 " "SHELL=/bin/bash"
"RUNTESTFLAGS="
"exec_prefix=/home/jcmvbkbc/tmp/br/build-gdb-binutils-update-dc233c/host/usr" "infodir=/home/jcmvbkbc/tmp/br/build-gdb-binutils-update-dc233c/host/usr/share/info" "libdir=/home/jcmvbkbc/tmp/br/build-gdb-binutils-update-dc233c/host/usr/lib" "includedir=/home/jcmvbkbc/tmp/br/build-gdb-binutils-update-dc233c/host/usr/include" "prefix=/home/jcmvbkbc/tmp/br/build-gdb-binutils-update-dc233c/host/usr" "tooldir=/home/jcmvbkbc/tmp/br/build-gdb-binutils-update-dc233c/host/usr/xtensa-buildroot-linux-uclibc" "gxx_include_dir=/home/jcmvbkbc/tmp/br/build-gdb-binutils-update-dc233c/host/usr/xtensa-buildroot-linux-uclibc/include/c++/4.8.5" "AR=/home/jcmvbkbc/tmp/br/build-gdb-binutils-update-dc233c/host/usr/xtensa-buildroot-linux-uclibc/bin/ar" "AS=/home/jcmvbkbc/tmp/br/build-gdb-binutils-update-dc233c/build/host-gcc-final-4.8.5/build/./gcc/as" "LD=/home/jcmvbkbc/tmp/br/build-gdb-binutils-update-dc233c/build/host-gcc-final-4.8.5/build/./gcc/collect-ld" "RANLIB=/home/jcmvbkbc/tmp/br/build-gdb-binutils-update-dc233c/host/usr/xtensa-buildroot-linux-uclibc/bin/ranlib" "NM=/home/jcmvbkbc/tmp/br/build-gdb-binutils-update-dc233c/build/host-gcc-final-4.8.5/build/./gcc/nm" "NM_FOR_BUILD=" "NM_FOR_TARGET=/home/jcmvbkbc/tmp/br/build-gdb-binutils-update-dc233c/host/usr/xtensa-buildroot-linux-uclibc/bin/nm" "DESTDIR=" "WERROR=" all-recursive

gcc-4.9:
make[3]: Entering directory '/home/jcmvbkbc/tmp/br/build-gdb-binutils-update-dc233c/build/host-gcc-final-4.9.3/build/xtensa-buildroot-linux-uclibc/libstdc++-v3' /usr/bin/make "AR_FLAGS=rc" "CC_FOR_BUILD=/usr/bin/gcc" "CC_FOR_TARGET=/home/jcmvbkbc/tmp/br/build-gdb-binutils-update-dc233c/build/host-gcc-final-4.9.3/build/./gcc/xgcc -B/home/jcmvbkbc/tmp/br/build-gdb-binutils-update-dc233c/build/host-gcc-final-4.9.3/build/./gcc/" "CFLAGS=-D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE
-D_FILE_OFFSET_BITS=64 -mlongcalls -mauto-litpools -Os -g2"
"CXXFLAGS=-O2 -I/home/jcmvbkbc/tmp/br/build-gdb-binutils-update-dc233c/host/usr/include
-D_GNU_SOURCE" "CFLAGS_FOR_BUILD=-O2 -I/home/jcmvbkbc/tmp/br/build-gdb-binutils-update-dc233c/host/usr/include" "CFLAGS_FOR_TARGET=-D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE
-D_FILE_OFFSET_BITS=64 -mlongcalls -mauto-litpools -Os -g2"
"INSTALL=/usr/bin/install -c" "INSTALL_DATA=/usr/bin/install -c -m
644" "INSTALL_PROGRAM=/usr/bin/install -c"
"INSTALL_SCRIPT=/usr/bin/install -c" "LDFLAGS="
"LIBCFLAGS=-D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE
-D_FILE_OFFSET_BITS=64 -mlongcalls -mauto-litpools -Os -g2"
"LIBCFLAGS_FOR_TARGET=-D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE
-D_FILE_OFFSET_BITS=64 -mlongcalls -mauto-litpools -Os -g2"
"MAKE=/usr/bin/make" "MAKEINFO=/home/jcmvbkbc/tmp/br/build-gdb-binutils-update-dc233c/build/host-gcc-final-4.9.3/missing
makeinfo --split-size=5000000 --split-size=5000000 " "SHELL=/bin/bash"
"RUNTESTFLAGS="
"exec_prefix=/home/jcmvbkbc/tmp/br/build-gdb-binutils-update-dc233c/host/usr" "infodir=/home/jcmvbkbc/tmp/br/build-gdb-binutils-update-dc233c/host/usr/share/info" "libdir=/home/jcmvbkbc/tmp/br/build-gdb-binutils-update-dc233c/host/usr/lib" "includedir=/home/jcmvbkbc/tmp/br/build-gdb-binutils-update-dc233c/host/usr/include" "prefix=/home/jcmvbkbc/tmp/br/build-gdb-binutils-update-dc233c/host/usr" "tooldir=/home/jcmvbkbc/tmp/br/build-gdb-binutils-update-dc233c/host/usr/xtensa-buildroot-linux-uclibc" "gxx_include_dir=/home/jcmvbkbc/tmp/br/build-gdb-binutils-update-dc233c/host/usr/xtensa-buildroot-linux-uclibc/include/c++/4.9.3" "AR=/home/jcmvbkbc/tmp/br/build-gdb-binutils-update-dc233c/host/usr/xtensa-buildroot-linux-uclibc/bin/ar" "AS=/home/jcmvbkbc/tmp/br/build-gdb-binutils-update-dc233c/build/host-gcc-final-4.9.3/build/./gcc/as" "LD=/home/jcmvbkbc/tmp/br/build-gdb-binutils-update-dc233c/build/host-gcc-final-4.9.3/build/./gcc/collect-ld" "RANLIB=/home/jcmvbkbc/tmp/br/build-gdb-binutils-update-dc233c/host/usr/xtensa-buildroot-linux-uclibc/bin/ranlib" "NM=/home/jcmvbkbc/tmp/br/build-gdb-binutils-update-dc233c/build/host-gcc-final-4.9.3/build/./gcc/nm" "NM_FOR_BUILD=" "NM_FOR_TARGET=/home/jcmvbkbc/tmp/br/build-gdb-binutils-update-dc233c/host/usr/xtensa-buildroot-linux-uclibc/bin/nm" "DESTDIR=" "WERROR=" all-recursive

gcc-5:
make[3]: Entering directory '/home/jcmvbkbc/tmp/br/build-gdb-binutils-update-dc233c/build/host-gcc-final-5.3.0/build/xtensa-buildroot-linux-uclibc/libstdc++-v3' /usr/bin/make "AR_FLAGS=rc" "CC_FOR_BUILD=/usr/bin/gcc" "CC_FOR_TARGET=/home/jcmvbkbc/tmp/br/build-gdb-binutils-update-dc233c/build/host-gcc-final-5.3.0/build/./gcc/xgcc -B/home/jcmvbkbc/tmp/br/build-gdb-binutils-update-dc233c/build/host-gcc-final-5.3.0/build/./gcc/" "CFLAGS=-D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE
-D_FILE_OFFSET_BITS=64 -mlongcalls -mauto-litpools -Os -g2"
"CXXFLAGS=-D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE
-D_FILE_OFFSET_BITS=64 -mlongcalls -mauto-litpools -Os -g2
-D_GNU_SOURCE" "CFLAGS_FOR_BUILD=-O2 -I/home/jcmvbkbc/tmp/br/build-gdb-binutils-update-dc233c/host/usr/include" "CFLAGS_FOR_TARGET=-D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE
-D_FILE_OFFSET_BITS=64 -mlongcalls -mauto-litpools -Os -g2"
"INSTALL=/usr/bin/install -c" "INSTALL_DATA=/usr/bin/install -c -m
644" "INSTALL_PROGRAM=/usr/bin/install -c"
"INSTALL_SCRIPT=/usr/bin/install -c" "LDFLAGS="
"LIBCFLAGS=-D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE
-D_FILE_OFFSET_BITS=64 -mlongcalls -mauto-litpools -Os -g2"
"LIBCFLAGS_FOR_TARGET=-D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE
-D_FILE_OFFSET_BITS=64 -mlongcalls -mauto-litpools -Os -g2"
"MAKE=/usr/bin/make" "MAKEINFO=/home/jcmvbkbc/tmp/br/build-gdb-binutils-update-dc233c/build/host-gcc-final-5.3.0/missing
makeinfo --split-size=5000000 --split-size=5000000 " "SHELL=/bin/bash"
"RUNTESTFLAGS="
"exec_prefix=/home/jcmvbkbc/tmp/br/build-gdb-binutils-update-dc233c/host/usr" "infodir=/home/jcmvbkbc/tmp/br/build-gdb-binutils-update-dc233c/host/usr/share/info" "libdir=/home/jcmvbkbc/tmp/br/build-gdb-binutils-update-dc233c/host/usr/lib" "includedir=/home/jcmvbkbc/tmp/br/build-gdb-binutils-update-dc233c/host/usr/include" "prefix=/home/jcmvbkbc/tmp/br/build-gdb-binutils-update-dc233c/host/usr" "tooldir=/home/jcmvbkbc/tmp/br/build-gdb-binutils-update-dc233c/host/usr/xtensa-buildroot-linux-uclibc" "gxx_include_dir=/home/jcmvbkbc/tmp/br/build-gdb-binutils-update-dc233c/host/usr/xtensa-buildroot-linux-uclibc/include/c++/5.3.0" "AR=/home/jcmvbkbc/tmp/br/build-gdb-binutils-update-dc233c/host/usr/xtensa-buildroot-linux-uclibc/bin/ar" "AS=/home/jcmvbkbc/tmp/br/build-gdb-binutils-update-dc233c/build/host-gcc-final-5.3.0/build/./gcc/as" "LD=/home/jcmvbkbc/tmp/br/build-gdb-binutils-update-dc233c/build/host-gcc-final-5.3.0/build/./gcc/collect-ld" "RANLIB=/home/jcmvbkbc/tmp/br/build-gdb-binutils-update-dc233c/host/usr/xtensa-buildroot-linux-uclibc/bin/ranlib" "NM=/home/jcmvbkbc/tmp/br/build-gdb-binutils-update-dc233c/build/host-gcc-final-5.3.0/build/./gcc/nm" "NM_FOR_BUILD=" "NM_FOR_TARGET=/home/jcmvbkbc/tmp/br/build-gdb-binutils-update-dc233c/host/usr/xtensa-buildroot-linux-uclibc/bin/nm" "DESTDIR=" "WERROR=" all-recursive

With --enable-cxx-flags="$(TARGET_CFLAGS)" in the HOST_GCC_FINAL_CONF_OPTS make invocation lines are the same, but makefiles in libstdc++ differ by the EXTRA_CXX_FLAGS.

OTOH since flags propagation is fixed in gcc-5.x maybe backporting that fix is the right thing?

Signature · 2 lines
Thanks.
-- Max
#4 lore raw

PATCH 1/1 gcc/gcc-final: pass TARGET_CFLAGS flags to configure with --enable-cxx-flags

Quoted 49 lines · Max Filippov

Arnout, Yann,

Quoted 38 lines · Arnout Vandecappelle
Quoted 37 lines · Yann E. MORIN

On 2015-06-01 17:37 +0300, Max Filippov spake thusly:

Quoted 11 lines

Currently only TARGET_ABI flags are passed to the final compiler configure script and only when building for Xtensa. Since libstdc++ is a normal library it should be built with full TARGET_CFLAGS on all targets.

Pass TARGET_CFLAGS flags to gcc-final configure script for all targets in the --enable-cxx-flags parameter.

So, I finally had a look at this patch. I've tested it to build a gcc-4.9 + glibc-2.21 + binutils-2.24 toolchain with C++ support, which then was used to suessfully build Qt5base (which is quite a heavy C++ user).

However, I'd like to understand what this is all about.

In gcc.mk, we do:

      GCC_COMMON_TARGET_CXXFLAGS = $(TARGET_CXXFLAGS)
      [...]
      HOST_GCC_COMMON_CONF_ENV +=

CXXFLAGS_FOR_TARGET="$(GCC_COMMON_TARGET_CXXFLAGS)"

So it looks like we were already passing the proper CXXFLAGS to gcc (we only filter-out problematic flags, like -Os on broken gcc-4.5 for PPC).

So, what are we supposed to gain/loose with this change?

As a side note, we should not have to pass TARGET_ABI either, since it is part of TARGET_CFLAGS and as shown above, it is already part of the CFLAGS_FOR_TARGET that we pass gcc.

Quoted 7 lines
Quoted 1 line

Any explanations? Something that I missed?

I checked in the gcc source and also couldn't find a reason why the
CXXFLAGS_FOR_TARGET wouldn't work. Since you haven't replied to this, I've marked your patch as rejected in patchwork. If you do still fel it is warranted, please repost with a satisfactory explanation.

Quoted 4 lines

Sorry, took me too long to answer the first mail.

AFAICS neither gcc-4.8.x nor gcc-4.9.x propagate CXXFLAGS_FOR_TARGET to CXXFLAGS for builds of libstdc++. gcc-5.x however does.

Of course, I only checked the source of gcc-5.x :-)

Quoted 3 lines

Compare the following build log excerpts for libstdc++ of gcc-4.8, gcc-4.9 and gcc-5 (I've reverted 2dcab526a97d and c44cf2cc97df before running these builds):

[snip]

Quoted 6 lines

With --enable-cxx-flags="$(TARGET_CFLAGS)" in the HOST_GCC_FINAL_CONF_OPTS make invocation lines are the same, but makefiles in libstdc++ differ by the EXTRA_CXX_FLAGS.

OTOH since flags propagation is fixed in gcc-5.x maybe backporting that fix is the right thing?

If the backport is easy, by all means go for it. It's not as if we don't have
gcc patches already :-)

If the backport turns out to be difficult, I'm OK with taking your original
patch (because even on gcc5 it doesn't change anything in practice). But it needs a comment mentioning this version dependency, so that the workaround can be removed when 4.9 is removed from buildroot.

Regards,
Arnout

Signature · 6 lines
Arnout Vandecappelle      arnout dot vandecappelle at essensium dot com
Senior Embedded Software Architect . . . . . . +32-478-010353 (mobile)
Essensium, Mind division . . . . . . . . . . . . . . http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium . . . . . BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint:  7493 020B C7E3 8618 8DEC 222C 82EB F404 F9AC 0DDF
#5 lore raw

PATCH 1/1 gcc/gcc-final: pass TARGET_CFLAGS flags to configure with --enable-cxx-flags

Quoted 3 lines · Arnout Vandecappelle
Quoted 2 lines · Max Filippov

AFAICS neither gcc-4.8.x nor gcc-4.9.x propagate CXXFLAGS_FOR_TARGET to CXXFLAGS for builds of libstdc++. gcc-5.x however does.

[...]

Quoted 5 lines
Quoted 2 lines

OTOH since flags propagation is fixed in gcc-5.x maybe backporting that fix is the right thing?

If the backport is easy, by all means go for it. It's not as if we don't
have gcc patches already :-)

Ok, let me see if I can figure it out.

Signature · 2 lines
Thanks.
-- Max