diff options
author | Thomas Petazzoni <thomas.petazzoni@free-electrons.com> | 2013-09-02 18:06:29 +0200 |
---|---|---|
committer | Peter Korsgaard <jacmet@sunsite.dk> | 2013-09-15 22:50:20 +0200 |
commit | 2babed4a50fcd050abc4686e05e24d0e374d10a8 (patch) | |
tree | 28e47f2aecb6ad0aa8274e18539faa8a19f08a4a /package/gcc | |
parent | a8164107ecc07933b244fd436ad1025d8ae1aff1 (diff) | |
download | buildroot-2babed4a50fcd050abc4686e05e24d0e374d10a8.tar.gz buildroot-2babed4a50fcd050abc4686e05e24d0e374d10a8.zip |
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
use only a two stages build process when possible.
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
Diffstat (limited to 'package/gcc')
-rw-r--r-- | package/gcc/Config.in.host | 11 | ||||
-rw-r--r-- | package/gcc/gcc-initial/gcc-initial.mk | 8 |
2 files changed, 19 insertions, 0 deletions
diff --git a/package/gcc/Config.in.host b/package/gcc/Config.in.host index a6acaa25c6..7e6df2d9e6 100644 --- a/package/gcc/Config.in.host +++ b/package/gcc/Config.in.host @@ -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 @@ -16,11 +22,13 @@ choice 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 depends on !BR2_ARM_EABIHF 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 @@ -29,6 +37,7 @@ choice depends on !BR2_ARM_EABIHF # VFPv4 support appeared in gcc 4.5 depends on !BR2_ARM_FPU_VFPV4 && !BR2_ARM_FPU_VFPV4D16 + 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 @@ -36,11 +45,13 @@ choice # ARM EABIhf support appeared in gcc 4.6 depends on !BR2_ARM_EABIHF 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_bfin && !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_bfin && !BR2_sparc_sparchfleon && !BR2_sparc_sparchfleonv8 && !BR2_sparc_sparcsfleon && !BR2_sparc_sparcsfleonv8 && !BR2_pj4 diff --git a/package/gcc/gcc-initial/gcc-initial.mk b/package/gcc/gcc-initial/gcc-initial.mk index 0eb492fa4d..83767ea509 100644 --- a/package/gcc/gcc-initial/gcc-initial.mk +++ b/package/gcc/gcc-initial/gcc-initial.mk @@ -29,6 +29,7 @@ HOST_GCC_INITIAL_CONF_OPT = \ --enable-languages=c \ --disable-shared \ --without-headers \ + --disable-threads \ --with-newlib \ --disable-largefile \ --disable-nls \ @@ -40,4 +41,11 @@ HOST_GCC_INITIAL_CONF_ENV = \ 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)) |