toolchain-internal: skip gcc-intermediate when possible
PATCH 1/1 toolchain-internal: skip gcc-intermediate when possible
When NPTL support was introduced, gcc required a three stages build process. Since gcc 4.7, this is no longer necessary, and it is possible to get back to a two stages build process. This patch takes advantage of this, by doing a two stages build process when possible.
We introduce a few hidden kconfig options:
* BR2_GCC_VERSION_NEEDS_THREE_STAGE_BUILD, which is set by the gcc Config.in logic to indicate that the compiler might need a three stages build. Currently, all versions prior to 4.7.x are selecting this kconfig option.
* BR2_TOOLCHAIN_LIBC_NEEDS_THREE_STAGE_BUILD, which indicates whether the C library might need a three stages build. This is the case for eglibc, and uClibc when NPTL is enabled.
* BR2_TOOLCHAIN_NEEDS_THREE_STAGE_BUILD finally is enabled when both of the previous options are enabled. It indicates that a three stages build is actually needed.
In addition to those options, the uClibc/gcc build logic is changed to take use only a two stages build process when possible.
---
This stuff is fairly tricky, so if people could test, it would be great. Also, I am not necessarily entirely happy with the new Config.in options and their naming, so if people have suggestions, I'm interested.
package/eglibc/eglibc.mk | 5 +++-- package/gcc/Config.in.host | 12 ++++++++++++ package/gcc/gcc-initial/gcc-initial.mk | 8 ++++++++ package/uclibc/Config.in | 1 + package/uclibc/uclibc.mk | 5 +++-- toolchain/Config.in | 9 +++++++++ 6 files changed, 36 insertions(+), 4 deletions(-)
package/eglibc/eglibc.mk +3 -2
@@ -14,8 +14,9 @@ EGLIBC_LICENSE_FILES = libc/COPYING libc/COPYING.LIB libc/LICENSES # cross-compiler and the kernel headers EGLIBC_DEPENDENCIES = host-gcc-initial linux-headers host-gawk -# Before eglibc is built, we must have the second stage cross-compiler -eglibc-build: host-gcc-intermediate +# Before eglibc is built, we must have the second stage +# cross-compiler, for some gcc versions +eglibc-build: $(if $(BR2_TOOLCHAIN_NEEDS_THREE_STAGE_BUILD),host-gcc-intermediate) EGLIBC_SUBDIR = build
package/gcc/Config.in.host +12 -0
@@ -3,6 +3,12 @@ comment "GCC Options" config BR2_GCC_NEEDS_MPC bool +# Until gcc 4.7, a three stage build process was needed when using +# NPTL. This hidden option tells whether gcc is a version that +# requires this three stage build process. +config BR2_GCC_VERSION_NEEDS_THREE_STAGE_BUILD + bool + choice prompt "GCC compiler Version" default BR2_GCC_VERSION_4_4_X if BR2_sparc_sparchfleon || BR2_sparc_sparchfleonv8 || BR2_sparc_sparcsfleon || BR2_sparc_sparcsfleonv8
@@ -15,28 +21,34 @@ choice config BR2_GCC_VERSION_4_4_7_ARC depends on BR2_arc bool "gcc 4.4.7-arc" + select BR2_GCC_VERSION_NEEDS_THREE_STAGE_BUILD config BR2_GCC_VERSION_4_2_2_AVR32_2_1_5 depends on BR2_avr32 bool "gcc 4.2.2-avr32-2.1.5" + select BR2_GCC_VERSION_NEEDS_THREE_STAGE_BUILD config BR2_GCC_VERSION_4_3_X depends on !BR2_arc && !BR2_avr32 && !BR2_sparc_sparchfleon && !BR2_sparc_sparchfleonv8 && !BR2_sparc_sparcsfleon && !BR2_sparc_sparcsfleonv8 && !BR2_cortex_a5 && !BR2_cortex_a7 && !BR2_cortex_a8 && !BR2_cortex_a9 && !BR2_cortex_a15 && !BR2_x86_atom && !BR2_powerpc_e300c2 && !BR2_powerpc_e300c3 && !BR2_powerpc_e500mc && !BR2_powerpc_464 && !BR2_powerpc_464fp && !BR2_powerpc_476 && !BR2_powerpc_476fp && !BR2_fa526 && !BR2_pj4 bool "gcc 4.3.x" + select BR2_GCC_VERSION_NEEDS_THREE_STAGE_BUILD config BR2_GCC_VERSION_4_4_X depends on !BR2_arc && !BR2_avr32 && !BR2_cortex_a5 && !BR2_cortex_a7 && !BR2_cortex_a15 && !BR2_x86_atom && !BR2_powerpc_476 && !BR2_powerpc_476fp && !BR2_fa526 && !BR2_pj4 bool "gcc 4.4.x" + select BR2_GCC_VERSION_NEEDS_THREE_STAGE_BUILD config BR2_GCC_VERSION_4_5_X depends on !BR2_arc && !BR2_avr32 && !BR2_cortex_a7 && !BR2_cortex_a15 && !BR2_sparc_sparchfleon && !BR2_sparc_sparchfleonv8 && !BR2_sparc_sparcsfleon && !BR2_sparc_sparcsfleonv8 && !BR2_fa526 && !BR2_pj4 select BR2_GCC_NEEDS_MPC bool "gcc 4.5.x" + select BR2_GCC_VERSION_NEEDS_THREE_STAGE_BUILD config BR2_GCC_VERSION_4_6_X depends on !BR2_arc && !BR2_avr32 && !BR2_cortex_a7 && !BR2_sparc_sparchfleon && !BR2_sparc_sparchfleonv8 && !BR2_sparc_sparcsfleon && !BR2_sparc_sparcsfleonv8 && !BR2_pj4 select BR2_GCC_NEEDS_MPC bool "gcc 4.6.x" + select BR2_GCC_VERSION_NEEDS_THREE_STAGE_BUILD config BR2_GCC_VERSION_4_7_X depends on !BR2_arc && !BR2_avr32 && !BR2_sparc_sparchfleon && !BR2_sparc_sparchfleonv8 && !BR2_sparc_sparcsfleon && !BR2_sparc_sparcsfleonv8 && !BR2_pj4
package/gcc/gcc-initial/gcc-initial.mk +8 -0
@@ -29,6 +29,7 @@ HOST_GCC_INITIAL_CONF_OPT = \ --enable-languages=c \ --disable-shared \ --without-headers \ + --disable-threads \ --with-newlib \ --disable-largefile \ --disable-nls
@@ -36,4 +37,11 @@ HOST_GCC_INITIAL_CONF_OPT = \ HOST_GCC_INITIAL_MAKE_OPT = all-gcc HOST_GCC_INITIAL_INSTALL_OPT = install-gcc +ifeq ($(BR2_TOOLCHAIN_NEEDS_THREE_STAGE_BUILD),) +ifeq ($(BR2_GCC_SUPPORTS_FINEGRAINEDMTUNE),y) +HOST_GCC_INITIAL_MAKE_OPT += all-target-libgcc +HOST_GCC_INITIAL_INSTALL_OPT += install-target-libgcc +endif +endif + $(eval $(host-autotools-package))
package/uclibc/Config.in +1 -0
@@ -114,6 +114,7 @@ choice config BR2_PTHREADS_NATIVE bool "Native POSIX Threading (NPTL)" select BR2_TOOLCHAIN_HAS_THREADS + select BR2_TOOLCHAIN_LIBC_NEEDS_THREE_STAGE_BUILD depends on !BR2_ARM_OABI depends on !BR2_x86_i386 depends on !BR2_avr32
package/uclibc/uclibc.mk +3 -2
@@ -22,8 +22,9 @@ UCLIBC_INSTALL_STAGING = YES # cross-compiler and the kernel headers UCLIBC_DEPENDENCIES = host-gcc-initial linux-headers -# Before uClibc is built, we must have the second stage cross-compiler -uclibc-build: host-gcc-intermediate +# Before uClibc is built, we must have the second stage +# cross-compiler, for some gcc versions, and when NPTL is used. +uclibc-build: $(if $(BR2_TOOLCHAIN_NEEDS_THREE_STAGE_BUILD),host-gcc-intermediate) # specifying UCLIBC_CONFIG_FILE on the command-line overrides the .config # setting.
toolchain/Config.in +9 -0
@@ -1,5 +1,13 @@ menu "Toolchain" +config BR2_TOOLCHAIN_NEEDS_THREE_STAGE_BUILD + bool + default y if BR2_TOOLCHAIN_LIBC_NEEDS_THREE_STAGE_BUILD && \ + BR2_GCC_VERSION_NEEDS_THREE_STAGE_BUILD + +config BR2_TOOLCHAIN_LIBC_NEEDS_THREE_STAGE_BUILD + bool + # Should be selected for glibc or eglibc config BR2_TOOLCHAIN_USES_GLIBC bool
@@ -10,6 +18,7 @@ config BR2_TOOLCHAIN_USES_GLIBC select BR2_TOOLCHAIN_HAS_THREADS select BR2_TOOLCHAIN_HAS_THREADS_DEBUG select BR2_TOOLCHAIN_HAS_SHADOW_PASSWORDS + select BR2_TOOLCHAIN_LIBC_NEEDS_THREE_STAGE_BUILD config BR2_TOOLCHAIN_USES_UCLIBC bool
Signature · 1 line
1.8.1.2
PATCH 1/1 toolchain-internal: skip gcc-intermediate when possible
Hello,
Could someone review/test/comment the below patch?
Thanks,
Thomas
Quoted 184 lines · Thomas Petazzoni
When NPTL support was introduced, gcc required a three stages build process. Since gcc 4.7, this is no longer necessary, and it is possible to get back to a two stages build process. This patch takes advantage of this, by doing a two stages build process when possible.
We introduce a few hidden kconfig options:
*
BR2_GCC_VERSION_NEEDS_THREE_STAGE_BUILD, which is set by the gcc Config.in logic to indicate that the compiler might need a three stages build. Currently, all versions prior to 4.7.x are selecting this kconfig option.*
BR2_TOOLCHAIN_LIBC_NEEDS_THREE_STAGE_BUILD, which indicates whether the C library might need a three stages build. This is the case for eglibc, and uClibc when NPTL is enabled.*
BR2_TOOLCHAIN_NEEDS_THREE_STAGE_BUILDfinally is enabled when both of the previous options are enabled. It indicates that a three stages build is actually needed.In addition to those options, the uClibc/gcc build logic is changed to take use only a two stages build process when possible.
Signed-off-by Thomas Petazzoni <[email protected]>---
This stuff is fairly tricky, so if people could test, it would be great. Also, I am not necessarily entirely happy with the new Config.in options and their naming, so if people have suggestions, I'm interested.package/eglibc/eglibc.mk | 5 +++-- package/gcc/Config.in.host | 12 ++++++++++++ package/gcc/gcc-initial/gcc-initial.mk | 8 ++++++++ package/uclibc/Config.in | 1 + package/uclibc/uclibc.mk | 5 +++-- toolchain/Config.in | 9 +++++++++ 6 files changed, 36 insertions(+), 4 deletions(-)package/eglibc/eglibc.mk +3
-2@@ -14,8 +14,9 @@ EGLIBC_LICENSE_FILES = libc/COPYING libc/COPYING.LIB libc/LICENSES # cross-compiler and the kernel headers EGLIBC_DEPENDENCIES = host-gcc-initial linux-headers host-gawk -# Before eglibc is built, we must have the second stage cross-compiler -eglibc-build: host-gcc-intermediate +# Before eglibc is built, we must have the second stage +# cross-compiler, for some gcc versions +eglibc-build: $(if $(BR2_TOOLCHAIN_NEEDS_THREE_STAGE_BUILD),host-gcc-intermediate) EGLIBC_SUBDIR = buildpackage/gcc/Config.in.host +12
-0@@ -3,6 +3,12 @@ comment "GCC Options" config BR2_GCC_NEEDS_MPC bool +# Until gcc 4.7, a three stage build process was needed when using +# NPTL. This hidden option tells whether gcc is a version that +# requires this three stage build process. +config BR2_GCC_VERSION_NEEDS_THREE_STAGE_BUILD + bool + choice prompt "GCC compiler Version" default BR2_GCC_VERSION_4_4_X if BR2_sparc_sparchfleon || BR2_sparc_sparchfleonv8 || BR2_sparc_sparcsfleon || BR2_sparc_sparcsfleonv8@@ -15,28 +21,34 @@ choice config BR2_GCC_VERSION_4_4_7_ARC depends on BR2_arc bool "gcc 4.4.7-arc" + select BR2_GCC_VERSION_NEEDS_THREE_STAGE_BUILD config BR2_GCC_VERSION_4_2_2_AVR32_2_1_5 depends on BR2_avr32 bool "gcc 4.2.2-avr32-2.1.5" + select BR2_GCC_VERSION_NEEDS_THREE_STAGE_BUILD config BR2_GCC_VERSION_4_3_X depends on !BR2_arc && !BR2_avr32 && !BR2_sparc_sparchfleon && !BR2_sparc_sparchfleonv8 && !BR2_sparc_sparcsfleon && !BR2_sparc_sparcsfleonv8 && !BR2_cortex_a5 && !BR2_cortex_a7 && !BR2_cortex_a8 && !BR2_cortex_a9 && !BR2_cortex_a15 && !BR2_x86_atom && !BR2_powerpc_e300c2 && !BR2_powerpc_e300c3 && !BR2_powerpc_e500mc && !BR2_powerpc_464 && !BR2_powerpc_464fp && !BR2_powerpc_476 && !BR2_powerpc_476fp && !BR2_fa526 && !BR2_pj4 bool "gcc 4.3.x" + select BR2_GCC_VERSION_NEEDS_THREE_STAGE_BUILD config BR2_GCC_VERSION_4_4_X depends on !BR2_arc && !BR2_avr32 && !BR2_cortex_a5 && !BR2_cortex_a7 && !BR2_cortex_a15 && !BR2_x86_atom && !BR2_powerpc_476 && !BR2_powerpc_476fp && !BR2_fa526 && !BR2_pj4 bool "gcc 4.4.x" + select BR2_GCC_VERSION_NEEDS_THREE_STAGE_BUILD config BR2_GCC_VERSION_4_5_X depends on !BR2_arc && !BR2_avr32 && !BR2_cortex_a7 && !BR2_cortex_a15 && !BR2_sparc_sparchfleon && !BR2_sparc_sparchfleonv8 && !BR2_sparc_sparcsfleon && !BR2_sparc_sparcsfleonv8 && !BR2_fa526 && !BR2_pj4 select BR2_GCC_NEEDS_MPC bool "gcc 4.5.x" + select BR2_GCC_VERSION_NEEDS_THREE_STAGE_BUILD config BR2_GCC_VERSION_4_6_X depends on !BR2_arc && !BR2_avr32 && !BR2_cortex_a7 && !BR2_sparc_sparchfleon && !BR2_sparc_sparchfleonv8 && !BR2_sparc_sparcsfleon && !BR2_sparc_sparcsfleonv8 && !BR2_pj4 select BR2_GCC_NEEDS_MPC bool "gcc 4.6.x" + select BR2_GCC_VERSION_NEEDS_THREE_STAGE_BUILD config BR2_GCC_VERSION_4_7_X depends on !BR2_arc && !BR2_avr32 && !BR2_sparc_sparchfleon && !BR2_sparc_sparchfleonv8 && !BR2_sparc_sparcsfleon && !BR2_sparc_sparcsfleonv8 && !BR2_pj4package/gcc/gcc-initial/gcc-initial.mk +8
-0@@ -29,6 +29,7 @@ HOST_GCC_INITIAL_CONF_OPT = \ --enable-languages=c \ --disable-shared \ --without-headers \ + --disable-threads \ --with-newlib \ --disable-largefile \ --disable-nls@@ -36,4 +37,11 @@ HOST_GCC_INITIAL_CONF_OPT = \ HOST_GCC_INITIAL_MAKE_OPT = all-gcc HOST_GCC_INITIAL_INSTALL_OPT = install-gcc +ifeq ($(BR2_TOOLCHAIN_NEEDS_THREE_STAGE_BUILD),) +ifeq ($(BR2_GCC_SUPPORTS_FINEGRAINEDMTUNE),y) +HOST_GCC_INITIAL_MAKE_OPT += all-target-libgcc +HOST_GCC_INITIAL_INSTALL_OPT += install-target-libgcc +endif +endif + $(eval $(host-autotools-package))package/uclibc/Config.in +1
-0@@ -114,6 +114,7 @@ choice config BR2_PTHREADS_NATIVE bool "Native POSIX Threading (NPTL)" select BR2_TOOLCHAIN_HAS_THREADS + select BR2_TOOLCHAIN_LIBC_NEEDS_THREE_STAGE_BUILD depends on !BR2_ARM_OABI depends on !BR2_x86_i386 depends on !BR2_avr32package/uclibc/uclibc.mk +3
-2@@ -22,8 +22,9 @@ UCLIBC_INSTALL_STAGING = YES # cross-compiler and the kernel headers UCLIBC_DEPENDENCIES = host-gcc-initial linux-headers -# Before uClibc is built, we must have the second stage cross-compiler -uclibc-build: host-gcc-intermediate +# Before uClibc is built, we must have the second stage +# cross-compiler, for some gcc versions, and when NPTL is used. +uclibc-build: $(if $(BR2_TOOLCHAIN_NEEDS_THREE_STAGE_BUILD),host-gcc-intermediate) # specifying UCLIBC_CONFIG_FILE on the command-line overrides the .config # setting.toolchain/Config.in +9
-0@@ -1,5 +1,13 @@ menu "Toolchain" +config BR2_TOOLCHAIN_NEEDS_THREE_STAGE_BUILD + bool + default y if BR2_TOOLCHAIN_LIBC_NEEDS_THREE_STAGE_BUILD && \ + BR2_GCC_VERSION_NEEDS_THREE_STAGE_BUILD + +config BR2_TOOLCHAIN_LIBC_NEEDS_THREE_STAGE_BUILD + bool + # Should be selected for glibc or eglibc config BR2_TOOLCHAIN_USES_GLIBC bool@@ -10,6 +18,7 @@ config BR2_TOOLCHAIN_USES_GLIBC select BR2_TOOLCHAIN_HAS_THREADS select BR2_TOOLCHAIN_HAS_THREADS_DEBUG select BR2_TOOLCHAIN_HAS_SHADOW_PASSWORDS + select BR2_TOOLCHAIN_LIBC_NEEDS_THREE_STAGE_BUILD config BR2_TOOLCHAIN_USES_UCLIBC bool
Signature · 4 lines
Thomas Petazzoni, Free Electrons Kernel, drivers, real-time and embedded Linux development, consulting, training and support. http://free-electrons.com
PATCH 1/1 toolchain-internal: skip gcc-intermediate when possible
Quoted 3 lines · Thomas Petazzoni
Hello,
Could someone review/test/comment the below patch?
This patch does not apply to master or next branch, i need to apply some other patches before to apply this patch?
Applying: toolchain-internal: skip gcc-intermediate when possible
error: patch failed: package/gcc/Config.in.host:15
error: package/gcc/Config.in.host: patch does not apply
error: patch failed: package/gcc/gcc-initial/gcc-initial.mk:29
error: package/gcc/gcc-initial/gcc-initial.mk: patch does not apply
error: patch failed: package/uclibc/Config.in:114
error: package/uclibc/Config.in: patch does not apply
Patch failed at 0001 toolchain-internal: skip gcc-intermediate when possible
Best regards
Fabio Porcedda
Quoted 201 lines
Thanks,
Thomas
Quoted 177 lines · Thomas Petazzoni
When NPTL support was introduced, gcc required a three stages build process. Since gcc 4.7, this is no longer necessary, and it is possible to get back to a two stages build process. This patch takes advantage of this, by doing a two stages build process when possible.
We introduce a few hidden kconfig options:
*
BR2_GCC_VERSION_NEEDS_THREE_STAGE_BUILD, which is set by the gcc Config.in logic to indicate that the compiler might need a three stages build. Currently, all versions prior to 4.7.x are selecting this kconfig option.*
BR2_TOOLCHAIN_LIBC_NEEDS_THREE_STAGE_BUILD, which indicates whether the C library might need a three stages build. This is the case for eglibc, and uClibc when NPTL is enabled.*
BR2_TOOLCHAIN_NEEDS_THREE_STAGE_BUILDfinally is enabled when both of the previous options are enabled. It indicates that a three stages build is actually needed.In addition to those options, the uClibc/gcc build logic is changed to take use only a two stages build process when possible.
Signed-off-by Thomas Petazzoni <[email protected]>---
This stuff is fairly tricky, so if people could test, it would be great. Also, I am not necessarily entirely happy with the new Config.in options and their naming, so if people have suggestions, I'm interested.package/eglibc/eglibc.mk | 5 +++-- package/gcc/Config.in.host | 12 ++++++++++++ package/gcc/gcc-initial/gcc-initial.mk | 8 ++++++++ package/uclibc/Config.in | 1 + package/uclibc/uclibc.mk | 5 +++-- toolchain/Config.in | 9 +++++++++ 6 files changed, 36 insertions(+), 4 deletions(-)package/eglibc/eglibc.mk +3
-2@@ -14,8 +14,9 @@ EGLIBC_LICENSE_FILES = libc/COPYING libc/COPYING.LIB libc/LICENSES # cross-compiler and the kernel headers EGLIBC_DEPENDENCIES = host-gcc-initial linux-headers host-gawk -# Before eglibc is built, we must have the second stage cross-compiler -eglibc-build: host-gcc-intermediate +# Before eglibc is built, we must have the second stage +# cross-compiler, for some gcc versions +eglibc-build: $(if $(BR2_TOOLCHAIN_NEEDS_THREE_STAGE_BUILD),host-gcc-intermediate) EGLIBC_SUBDIR = buildpackage/gcc/Config.in.host +12
-0@@ -3,6 +3,12 @@ comment "GCC Options" config BR2_GCC_NEEDS_MPC bool +# Until gcc 4.7, a three stage build process was needed when using +# NPTL. This hidden option tells whether gcc is a version that +# requires this three stage build process. +config BR2_GCC_VERSION_NEEDS_THREE_STAGE_BUILD + bool + choice prompt "GCC compiler Version" default BR2_GCC_VERSION_4_4_X if BR2_sparc_sparchfleon || BR2_sparc_sparchfleonv8 || BR2_sparc_sparcsfleon || BR2_sparc_sparcsfleonv8@@ -15,28 +21,34 @@ choice config BR2_GCC_VERSION_4_4_7_ARC depends on BR2_arc bool "gcc 4.4.7-arc" + select BR2_GCC_VERSION_NEEDS_THREE_STAGE_BUILD config BR2_GCC_VERSION_4_2_2_AVR32_2_1_5 depends on BR2_avr32 bool "gcc 4.2.2-avr32-2.1.5" + select BR2_GCC_VERSION_NEEDS_THREE_STAGE_BUILD config BR2_GCC_VERSION_4_3_X depends on !BR2_arc && !BR2_avr32 && !BR2_sparc_sparchfleon && !BR2_sparc_sparchfleonv8 && !BR2_sparc_sparcsfleon && !BR2_sparc_sparcsfleonv8 && !BR2_cortex_a5 && !BR2_cortex_a7 && !BR2_cortex_a8 && !BR2_cortex_a9 && !BR2_cortex_a15 && !BR2_x86_atom && !BR2_powerpc_e300c2 && !BR2_powerpc_e300c3 && !BR2_powerpc_e500mc && !BR2_powerpc_464 && !BR2_powerpc_464fp && !BR2_powerpc_476 && !BR2_powerpc_476fp && !BR2_fa526 && !BR2_pj4 bool "gcc 4.3.x" + select BR2_GCC_VERSION_NEEDS_THREE_STAGE_BUILD config BR2_GCC_VERSION_4_4_X depends on !BR2_arc && !BR2_avr32 && !BR2_cortex_a5 && !BR2_cortex_a7 && !BR2_cortex_a15 && !BR2_x86_atom && !BR2_powerpc_476 && !BR2_powerpc_476fp && !BR2_fa526 && !BR2_pj4 bool "gcc 4.4.x" + select BR2_GCC_VERSION_NEEDS_THREE_STAGE_BUILD config BR2_GCC_VERSION_4_5_X depends on !BR2_arc && !BR2_avr32 && !BR2_cortex_a7 && !BR2_cortex_a15 && !BR2_sparc_sparchfleon && !BR2_sparc_sparchfleonv8 && !BR2_sparc_sparcsfleon && !BR2_sparc_sparcsfleonv8 && !BR2_fa526 && !BR2_pj4 select BR2_GCC_NEEDS_MPC bool "gcc 4.5.x" + select BR2_GCC_VERSION_NEEDS_THREE_STAGE_BUILD config BR2_GCC_VERSION_4_6_X depends on !BR2_arc && !BR2_avr32 && !BR2_cortex_a7 && !BR2_sparc_sparchfleon && !BR2_sparc_sparchfleonv8 && !BR2_sparc_sparcsfleon && !BR2_sparc_sparcsfleonv8 && !BR2_pj4 select BR2_GCC_NEEDS_MPC bool "gcc 4.6.x" + select BR2_GCC_VERSION_NEEDS_THREE_STAGE_BUILD config BR2_GCC_VERSION_4_7_X depends on !BR2_arc && !BR2_avr32 && !BR2_sparc_sparchfleon && !BR2_sparc_sparchfleonv8 && !BR2_sparc_sparcsfleon && !BR2_sparc_sparcsfleonv8 && !BR2_pj4package/gcc/gcc-initial/gcc-initial.mk +8
-0@@ -29,6 +29,7 @@ HOST_GCC_INITIAL_CONF_OPT = \ --enable-languages=c \ --disable-shared \ --without-headers \ + --disable-threads \ --with-newlib \ --disable-largefile \ --disable-nls@@ -36,4 +37,11 @@ HOST_GCC_INITIAL_CONF_OPT = \ HOST_GCC_INITIAL_MAKE_OPT = all-gcc HOST_GCC_INITIAL_INSTALL_OPT = install-gcc +ifeq ($(BR2_TOOLCHAIN_NEEDS_THREE_STAGE_BUILD),) +ifeq ($(BR2_GCC_SUPPORTS_FINEGRAINEDMTUNE),y) +HOST_GCC_INITIAL_MAKE_OPT += all-target-libgcc +HOST_GCC_INITIAL_INSTALL_OPT += install-target-libgcc +endif +endif + $(eval $(host-autotools-package))package/uclibc/Config.in +1
-0@@ -114,6 +114,7 @@ choice config BR2_PTHREADS_NATIVE bool "Native POSIX Threading (NPTL)" select BR2_TOOLCHAIN_HAS_THREADS + select BR2_TOOLCHAIN_LIBC_NEEDS_THREE_STAGE_BUILD depends on !BR2_ARM_OABI depends on !BR2_x86_i386 depends on !BR2_avr32package/uclibc/uclibc.mk +3
-2@@ -22,8 +22,9 @@ UCLIBC_INSTALL_STAGING = YES # cross-compiler and the kernel headers UCLIBC_DEPENDENCIES = host-gcc-initial linux-headers -# Before uClibc is built, we must have the second stage cross-compiler -uclibc-build: host-gcc-intermediate +# Before uClibc is built, we must have the second stage +# cross-compiler, for some gcc versions, and when NPTL is used. +uclibc-build: $(if $(BR2_TOOLCHAIN_NEEDS_THREE_STAGE_BUILD),host-gcc-intermediate) # specifying UCLIBC_CONFIG_FILE on the command-line overrides the .config # setting.toolchain/Config.in +8
-0@@ -1,5 +1,13 @@ menu "Toolchain" +config BR2_TOOLCHAIN_NEEDS_THREE_STAGE_BUILD + bool + default y if BR2_TOOLCHAIN_LIBC_NEEDS_THREE_STAGE_BUILD && \ + BR2_GCC_VERSION_NEEDS_THREE_STAGE_BUILD + +config BR2_TOOLCHAIN_LIBC_NEEDS_THREE_STAGE_BUILD + bool + # Should be selected for glibc or eglibc config BR2_TOOLCHAIN_USES_GLIBC booltoolchain/Config.in config BR2_TOOLCHAIN_USES_GLIBC · line 24
Quoted 7 lines
toolchain/Config.in +1
-0@@ -10,6 +18,7 @@ config BR2_TOOLCHAIN_USES_GLIBC select BR2_TOOLCHAIN_HAS_THREADS select BR2_TOOLCHAIN_HAS_THREADS_DEBUG select BR2_TOOLCHAIN_HAS_SHADOW_PASSWORDS + select BR2_TOOLCHAIN_LIBC_NEEDS_THREE_STAGE_BUILD config BR2_TOOLCHAIN_USES_UCLIBC bool--
Thomas Petazzoni, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com
_______________________________________________
buildroot mailing list
buildroot at busybox.net
http://lists.busybox.net/mailman/listinfo/buildroot
Signature · 1 line
Fabio Porcedda
PATCH 1/1 toolchain-internal: skip gcc-intermediate when possible
Dear Fabio Porcedda,
Quoted 8 lines · Fabio Porcedda
Quoted 3 lines · Thomas Petazzoni
Hello,
Could someone review/test/comment the below patch?
This patch does not apply to master or next branch, i need to apply some other patches before to apply this patch?
No, it's just that other patches got merged since the patch was written, so it no longer applies. I need to rebase it on top of the next branch.
Thanks!
Thomas
Signature · 4 lines
Thomas Petazzoni, Free Electrons Kernel, drivers, real-time and embedded Linux development, consulting, training and support. http://free-electrons.com