* [Buildroot] [PATCH] toolchain-internal: skip gcc-intermediate when possible
@ 2013-07-11 14:06 Thomas Petazzoni
2013-07-27 13:20 ` Thomas Petazzoni
0 siblings, 1 reply; 4+ messages in thread
From: Thomas Petazzoni @ 2013-07-11 14:06 UTC (permalink / raw)
To: buildroot
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.
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
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(-)
diff --git a/package/eglibc/eglibc.mk b/package/eglibc/eglibc.mk
index ccdc210..8bac72f 100644
--- a/package/eglibc/eglibc.mk
+++ b/package/eglibc/eglibc.mk
@@ -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
diff --git a/package/gcc/Config.in.host b/package/gcc/Config.in.host
index 86f7fdc..e34f73e 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
@@ -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
diff --git a/package/gcc/gcc-initial/gcc-initial.mk b/package/gcc/gcc-initial/gcc-initial.mk
index 05c956a..08c7028 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
@@ -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))
diff --git a/package/uclibc/Config.in b/package/uclibc/Config.in
index f309243..23f7ae0 100644
--- a/package/uclibc/Config.in
+++ b/package/uclibc/Config.in
@@ -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
diff --git a/package/uclibc/uclibc.mk b/package/uclibc/uclibc.mk
index 421e323..2dbf328 100644
--- a/package/uclibc/uclibc.mk
+++ b/package/uclibc/uclibc.mk
@@ -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.
diff --git a/toolchain/Config.in b/toolchain/Config.in
index 53d2573..64cdf81 100644
--- a/toolchain/Config.in
+++ b/toolchain/Config.in
@@ -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
--
1.8.1.2
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [Buildroot] [PATCH] toolchain-internal: skip gcc-intermediate when possible
2013-07-11 14:06 [Buildroot] [PATCH] toolchain-internal: skip gcc-intermediate when possible Thomas Petazzoni
@ 2013-07-27 13:20 ` Thomas Petazzoni
2013-08-22 8:25 ` Fabio Porcedda
0 siblings, 1 reply; 4+ messages in thread
From: Thomas Petazzoni @ 2013-07-27 13:20 UTC (permalink / raw)
To: buildroot
Hello,
Could someone review/test/comment the below patch?
Thanks,
Thomas
On Thu, 11 Jul 2013 16:06:04 +0200, Thomas Petazzoni wrote:
> 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.
>
> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
> ---
> 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(-)
>
> diff --git a/package/eglibc/eglibc.mk b/package/eglibc/eglibc.mk
> index ccdc210..8bac72f 100644
> --- a/package/eglibc/eglibc.mk
> +++ b/package/eglibc/eglibc.mk
> @@ -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
>
> diff --git a/package/gcc/Config.in.host b/package/gcc/Config.in.host
> index 86f7fdc..e34f73e 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
> @@ -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
> diff --git a/package/gcc/gcc-initial/gcc-initial.mk b/package/gcc/gcc-initial/gcc-initial.mk
> index 05c956a..08c7028 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
> @@ -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))
> diff --git a/package/uclibc/Config.in b/package/uclibc/Config.in
> index f309243..23f7ae0 100644
> --- a/package/uclibc/Config.in
> +++ b/package/uclibc/Config.in
> @@ -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
> diff --git a/package/uclibc/uclibc.mk b/package/uclibc/uclibc.mk
> index 421e323..2dbf328 100644
> --- a/package/uclibc/uclibc.mk
> +++ b/package/uclibc/uclibc.mk
> @@ -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.
> diff --git a/toolchain/Config.in b/toolchain/Config.in
> index 53d2573..64cdf81 100644
> --- a/toolchain/Config.in
> +++ b/toolchain/Config.in
> @@ -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
--
Thomas Petazzoni, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com
^ permalink raw reply [flat|nested] 4+ messages in thread
* [Buildroot] [PATCH] toolchain-internal: skip gcc-intermediate when possible
2013-07-27 13:20 ` Thomas Petazzoni
@ 2013-08-22 8:25 ` Fabio Porcedda
2013-08-23 4:58 ` Thomas Petazzoni
0 siblings, 1 reply; 4+ messages in thread
From: Fabio Porcedda @ 2013-08-22 8:25 UTC (permalink / raw)
To: buildroot
On Sat, Jul 27, 2013 at 3:20 PM, Thomas Petazzoni
<thomas.petazzoni@free-electrons.com> wrote:
> 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
> Thanks,
>
> Thomas
>
> On Thu, 11 Jul 2013 16:06:04 +0200, Thomas Petazzoni wrote:
>> 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.
>>
>> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
>> ---
>> 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(-)
>>
>> diff --git a/package/eglibc/eglibc.mk b/package/eglibc/eglibc.mk
>> index ccdc210..8bac72f 100644
>> --- a/package/eglibc/eglibc.mk
>> +++ b/package/eglibc/eglibc.mk
>> @@ -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
>>
>> diff --git a/package/gcc/Config.in.host b/package/gcc/Config.in.host
>> index 86f7fdc..e34f73e 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
>> @@ -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
>> diff --git a/package/gcc/gcc-initial/gcc-initial.mk b/package/gcc/gcc-initial/gcc-initial.mk
>> index 05c956a..08c7028 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
>> @@ -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))
>> diff --git a/package/uclibc/Config.in b/package/uclibc/Config.in
>> index f309243..23f7ae0 100644
>> --- a/package/uclibc/Config.in
>> +++ b/package/uclibc/Config.in
>> @@ -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
>> diff --git a/package/uclibc/uclibc.mk b/package/uclibc/uclibc.mk
>> index 421e323..2dbf328 100644
>> --- a/package/uclibc/uclibc.mk
>> +++ b/package/uclibc/uclibc.mk
>> @@ -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.
>> diff --git a/toolchain/Config.in b/toolchain/Config.in
>> index 53d2573..64cdf81 100644
>> --- a/toolchain/Config.in
>> +++ b/toolchain/Config.in
>> @@ -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
>
>
>
> --
> 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
--
Fabio Porcedda
^ permalink raw reply [flat|nested] 4+ messages in thread
* [Buildroot] [PATCH] toolchain-internal: skip gcc-intermediate when possible
2013-08-22 8:25 ` Fabio Porcedda
@ 2013-08-23 4:58 ` Thomas Petazzoni
0 siblings, 0 replies; 4+ messages in thread
From: Thomas Petazzoni @ 2013-08-23 4:58 UTC (permalink / raw)
To: buildroot
Dear Fabio Porcedda,
On Thu, 22 Aug 2013 10:25:08 +0200, Fabio Porcedda wrote:
> On Sat, Jul 27, 2013 at 3:20 PM, Thomas Petazzoni
> <thomas.petazzoni@free-electrons.com> wrote:
> > 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
--
Thomas Petazzoni, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2013-08-23 4:58 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-07-11 14:06 [Buildroot] [PATCH] toolchain-internal: skip gcc-intermediate when possible Thomas Petazzoni
2013-07-27 13:20 ` Thomas Petazzoni
2013-08-22 8:25 ` Fabio Porcedda
2013-08-23 4:58 ` Thomas Petazzoni
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox