diff mbox

[v2] gcc: explicitly use C{XX}FLAGS_FOR_TARGET instead of --enable-target-optspace

Message ID 1409230758-14548-1-git-send-email-abrodkin@synopsys.com
State Superseded
Headers show

Commit Message

Alexey Brodkin Aug. 28, 2014, 12:59 p.m. UTC
The gcc.mk file is passing --enable-target-optspace to gcc configure
script, to ask for space-optimized (-Os) target libraries. However,
passing this option has the effect of overriding any custom
CFLAGS_FOR_TARGET or CXXFLAGS_FOR_TARGET values that may be passed.

These are some situations when it is required to pass custom flags on buildong
of libgcc:
 * Default flags "-g -Os" lead to build isses as with PowerPC on gcc 4.5
(https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43810)
 * Particular CPU requires specific instructions for HW support
 * Deep optimizations

Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>

Cc: Anton Kolesov <akolesov@synopsys.com>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Cc: Peter Korsgaard <peter@korsgaard.com>
Cc: Gustavo Zacarias <gustavo@zacarias.com.ar>
---
Compared to v1:
 1) All changes are implemented in common part so applicable to all stages.
 2) Comments doesn't contain separators that confuse Patchwork
 3) Use TARGET_C{XX}FLAGS instead of pre-defined -O2 or -Os
---
 package/gcc/gcc.mk | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

Comments

Thomas Petazzoni Aug. 29, 2014, 5:02 p.m. UTC | #1
Dear Alexey Brodkin,

On Thu, 28 Aug 2014 16:59:18 +0400, Alexey Brodkin wrote:

> @@ -111,12 +111,15 @@ HOST_GCC_COMMON_CONF_ENV = \
>  # Workaround until it's fixed in 4.5.4 or later
>  ifeq ($(ARCH),powerpc)
>  ifeq ($(findstring x4.5.,x$(GCC_VERSION)),x4.5.)
> -HOST_GCC_COMMON_CONF_OPT += --disable-target-optspace
> +TARGET_CFLAGS := $(subst -Os,,$(TARGET_CFLAGS))
> +TARGET_CXXFLAGS := $(subst -Os,,$(TARGET_CXXFLAGS))

No. Remember that the namespace of variables is global in Buildroot. A
given package is clearly *not* allowed to change global variables such
as TARGET_CFLAGS and TARGET_CXXFLAGS. If you want to remove -Os just
for gcc, you should do:

GCC_TARGET_CFLAGS = $(TARGET_CFLAGS)

ifeq (powerpc ... your condition ...)
GCC_TARGET_CFLAGS = $(filter-out -Os,$(GCC_TARGET_CFLAGS))
endif

HOST_GCC_COMMON_CONF_ENV += CFLAGS_FOR_TARGET="$(GCC_TARGET_CFLAGS)"

Thomas
Alexey Brodkin Sept. 1, 2014, 6:01 a.m. UTC | #2
Hi Thomas,

On Fri, 2014-08-29 at 19:02 +0200, Thomas Petazzoni wrote:
> Dear Alexey Brodkin,
> 
> On Thu, 28 Aug 2014 16:59:18 +0400, Alexey Brodkin wrote:
> 
> > @@ -111,12 +111,15 @@ HOST_GCC_COMMON_CONF_ENV = \
> >  # Workaround until it's fixed in 4.5.4 or later
> >  ifeq ($(ARCH),powerpc)
> >  ifeq ($(findstring x4.5.,x$(GCC_VERSION)),x4.5.)
> > -HOST_GCC_COMMON_CONF_OPT += --disable-target-optspace
> > +TARGET_CFLAGS := $(subst -Os,,$(TARGET_CFLAGS))
> > +TARGET_CXXFLAGS := $(subst -Os,,$(TARGET_CXXFLAGS))
> 
> No. Remember that the namespace of variables is global in Buildroot. A
> given package is clearly *not* allowed to change global variables such
> as TARGET_CFLAGS and TARGET_CXXFLAGS. If you want to remove -Os just
> for gcc, you should do:

Hm, I was under impression that variables are visible only within
"package/name" and according to hierarchy.

Now it's clear they are all global - will keep it in mind then.

Already smoke-testing v3 and will send it to the list shortly.

-Alexey
diff mbox

Patch

diff --git a/package/gcc/gcc.mk b/package/gcc/gcc.mk
index b344a14..95c15e2 100644
--- a/package/gcc/gcc.mk
+++ b/package/gcc/gcc.mk
@@ -111,12 +111,15 @@  HOST_GCC_COMMON_CONF_ENV = \
 # Workaround until it's fixed in 4.5.4 or later
 ifeq ($(ARCH),powerpc)
 ifeq ($(findstring x4.5.,x$(GCC_VERSION)),x4.5.)
-HOST_GCC_COMMON_CONF_OPT += --disable-target-optspace
+TARGET_CFLAGS := $(subst -Os,,$(TARGET_CFLAGS))
+TARGET_CXXFLAGS := $(subst -Os,,$(TARGET_CXXFLAGS))
 endif
-else
-HOST_GCC_COMMON_CONF_OPT += --enable-target-optspace
 endif
 
+# Propagate options used for target software building to GCC target libs
+HOST_GCC_COMMON_CONF_ENV += CFLAGS_FOR_TARGET="$(TARGET_CFLAGS)"
+HOST_GCC_COMMON_CONF_ENV += CXXFLAGS_FOR_TARGET="$(TARGET_CXXFLAGS)"
+
 # gcc 4.6.x quadmath requires wchar
 ifneq ($(BR2_TOOLCHAIN_BUILDROOT_WCHAR),y)
 HOST_GCC_COMMON_CONF_OPT += --disable-libquadmath