diff mbox

[v4,20/22] toolchain-external-custom: new package

Message ID 20161107012017.22505-21-arnout@mind.be
State Accepted
Headers show

Commit Message

Arnout Vandecappelle Nov. 7, 2016, 1:20 a.m. UTC
From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>

This commit adds a new package to support custom external toolchains.

The legacy implementation is removed.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Signed-off-by: Romain Naour <romain.naour@gmail.com>
Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
---
v4: add PREFIX definition, remove legacy implementation.
---
 toolchain/toolchain-external/Config.in             | 351 +--------------------
 .../toolchain-external-custom/Config.in            |   5 +
 .../toolchain-external-custom/Config.in.options    | 334 ++++++++++++++++++++
 .../toolchain-external-custom.mk                   |  15 +
 toolchain/toolchain-external/toolchain-external.mk |   6 -
 5 files changed, 361 insertions(+), 350 deletions(-)
 create mode 100644 toolchain/toolchain-external/toolchain-external-custom/Config.in
 create mode 100644 toolchain/toolchain-external/toolchain-external-custom/Config.in.options
 create mode 100644 toolchain/toolchain-external/toolchain-external-custom/toolchain-external-custom.mk

Comments

Romain Naour Nov. 22, 2016, 9:49 p.m. UTC | #1
Le 07/11/2016 à 02:20, Arnout Vandecappelle (Essensium/Mind) a écrit :
> From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
> 
> This commit adds a new package to support custom external toolchains.
> 
> The legacy implementation is removed.
> 
> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
> Signed-off-by: Romain Naour <romain.naour@gmail.com>
> Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>

Reviewed-by: Romain Naour <romain.naour@gmail.com>

Best regards,
Romain

> ---
> v4: add PREFIX definition, remove legacy implementation.
> ---
>  toolchain/toolchain-external/Config.in             | 351 +--------------------
>  .../toolchain-external-custom/Config.in            |   5 +
>  .../toolchain-external-custom/Config.in.options    | 334 ++++++++++++++++++++
>  .../toolchain-external-custom.mk                   |  15 +
>  toolchain/toolchain-external/toolchain-external.mk |   6 -
>  5 files changed, 361 insertions(+), 350 deletions(-)
>  create mode 100644 toolchain/toolchain-external/toolchain-external-custom/Config.in
>  create mode 100644 toolchain/toolchain-external/toolchain-external-custom/Config.in.options
>  create mode 100644 toolchain/toolchain-external/toolchain-external-custom/toolchain-external-custom.mk
> 
> diff --git a/toolchain/toolchain-external/Config.in b/toolchain/toolchain-external/Config.in
> index 5188e1a..e592ec2 100644
> --- a/toolchain/toolchain-external/Config.in
> +++ b/toolchain/toolchain-external/Config.in
> @@ -43,6 +43,11 @@ source "toolchain/toolchain-external/toolchain-external-codesourcery-x86/Config.
>  # Musl based toolchains (after all the others)
>  source "toolchain/toolchain-external/toolchain-external-musl-cross/Config.in"
>  
> +# Kept last, so it remains the non-default choice, unless there isn't
> +# any available toolchain profile for the currently selected
> +# architecture.
> +source "toolchain/toolchain-external/toolchain-external-custom/Config.in"
> +
>  config BR2_TOOLCHAIN_EXTERNAL_ARAGO_ARMV7A
>  	bool "Arago ARMv7 2011.09"
>  	depends on BR2_arm
> @@ -109,12 +114,6 @@ config BR2_TOOLCHAIN_EXTERNAL_SYNOPSYS_ARC
>  	  Toolchain for the ARC cores, from
>  	  https://github.com/foss-for-synopsys-dwc-arc-processors/toolchain/releases
>  
> -config BR2_TOOLCHAIN_EXTERNAL_CUSTOM
> -	bool "Custom toolchain"
> -	help
> -	  Use this option to use a custom toolchain pre-installed on
> -	  your system.
> -
>  endchoice
>  
>  choice
> @@ -146,25 +145,12 @@ config BR2_TOOLCHAIN_EXTERNAL_PATH
>  	help
>  	  Path to where the external toolchain is installed.
>  
> -config BR2_TOOLCHAIN_EXTERNAL_URL
> -	string "Toolchain URL"
> -	depends on BR2_TOOLCHAIN_EXTERNAL_CUSTOM && BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD
> -	help
> -	  URL of the custom toolchain tarball to download and install.
> -
> -config BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX
> -	string "Toolchain prefix"
> -	depends on BR2_TOOLCHAIN_EXTERNAL_CUSTOM
> -	default "$(ARCH)-linux"
> -
>  config BR2_TOOLCHAIN_EXTERNAL_PREFIX
>  	string
>  	default "arc-linux"		 if BR2_TOOLCHAIN_EXTERNAL_SYNOPSYS_ARC && BR2_arcle
>  	default "arceb-linux"		 if BR2_TOOLCHAIN_EXTERNAL_SYNOPSYS_ARC && BR2_arceb
>  	default "arm-arago-linux-gnueabi" if BR2_TOOLCHAIN_EXTERNAL_ARAGO_ARMV7A
>  	default "arm-arago-linux-gnueabi" if BR2_TOOLCHAIN_EXTERNAL_ARAGO_ARMV5TE
> -	default BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX \
> -					 if BR2_TOOLCHAIN_EXTERNAL_CUSTOM
>  
>  config BR2_TOOLCHAIN_EXTERNAL_GLIBC
>  	bool
> @@ -224,331 +210,8 @@ source "toolchain/toolchain-external/toolchain-external-codesourcery-x86/Config.
>  # Musl based toolchains
>  source "toolchain/toolchain-external/toolchain-external-musl-cross/Config.in.options"
>  
> -if BR2_TOOLCHAIN_EXTERNAL_CUSTOM
> -
> -choice
> -	bool "External toolchain gcc version"
> -	default BR2_TOOLCHAIN_EXTERNAL_GCC_4_3
> -	help
> -	  Set to the gcc version that is used by your external
> -	  toolchain.
> -
> -config BR2_TOOLCHAIN_EXTERNAL_GCC_6
> -	bool "6.x"
> -	select BR2_TOOLCHAIN_GCC_AT_LEAST_6
> -
> -config BR2_TOOLCHAIN_EXTERNAL_GCC_5
> -	bool "5.x"
> -	select BR2_TOOLCHAIN_GCC_AT_LEAST_5
> -
> -config BR2_TOOLCHAIN_EXTERNAL_GCC_4_9
> -	bool "4.9.x"
> -	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_9
> -
> -config BR2_TOOLCHAIN_EXTERNAL_GCC_4_8
> -	bool "4.8.x"
> -	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_8
> -
> -config BR2_TOOLCHAIN_EXTERNAL_GCC_4_7
> -	bool "4.7.x"
> -	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_7
> -
> -config BR2_TOOLCHAIN_EXTERNAL_GCC_4_6
> -	bool "4.6.x"
> -	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_6
> -
> -config BR2_TOOLCHAIN_EXTERNAL_GCC_4_5
> -	bool "4.5.x"
> -	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_5
> -
> -config BR2_TOOLCHAIN_EXTERNAL_GCC_4_4
> -	bool "4.4.x"
> -	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_4
> -
> -config BR2_TOOLCHAIN_EXTERNAL_GCC_4_3
> -	bool "4.3.x"
> -	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_3
> -
> -endchoice
> -
> -choice
> -	bool "External toolchain kernel headers series"
> -	default BR2_TOOLCHAIN_EXTERNAL_HEADERS_REALLY_OLD
> -	help
> -	  Set to the kernel headers version that were used to build
> -	  this external toolchain.
> -
> -	  This is used to hide/show some packages that have strict
> -	  requirements on the version of kernel headers.
> -
> -	  If unsure what version your toolchain is using, you can look
> -	  at the value of LINUX_VERSION_CODE in linux/version.h in your
> -	  toolchain. The Linux version is M.m.p, with:
> -	    M = ( LINUX_VERSION_CODE >> 16 ) & 0xFF
> -	    m = ( LINUX_VERSION_CODE >> 8  ) & 0xFF
> -	    p = ( LINUX_VERSION_CODE >> 0  ) & 0xFF
> -
> -config BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_8
> -	bool "4.8.x"
> -	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_8
> -
> -config BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_7
> -	bool "4.7.x"
> -	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_7
> -
> -config BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_6
> -	bool "4.6.x"
> -	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_6
> -
> -config BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_5
> -	bool "4.5.x"
> -	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_5
> -
> -config BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_4
> -	bool "4.4.x"
> -	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_4
> -
> -config BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_3
> -	bool "4.3.x"
> -	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_3
> -
> -config BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_2
> -	bool "4.2.x"
> -	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_2
> -
> -config BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_1
> -	bool "4.1.x"
> -	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_1
> -
> -config BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_0
> -	bool "4.0.x"
> -	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_0
> -
> -config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_19
> -	bool "3.19.x"
> -	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_19
> -
> -config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_18
> -	bool "3.18.x"
> -	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_18
> -
> -config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_17
> -	bool "3.17.x"
> -	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_17
> -
> -config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_16
> -	bool "3.16.x"
> -	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_16
> -
> -config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_15
> -	bool "3.15.x"
> -	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_15
> -
> -config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_14
> -	bool "3.14.x"
> -	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_14
> -
> -config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_13
> -	bool "3.13.x"
> -	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_13
> -
> -config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_12
> -	bool "3.12.x"
> -	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12
> -
> -config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_11
> -	bool "3.11.x"
> -	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_11
> -
> -config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_10
> -	bool "3.10.x"
> -	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10
> -
> -config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_9
> -	bool "3.9.x"
> -	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_9
> -
> -config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_8
> -	bool "3.8.x"
> -	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_8
> -
> -config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_7
> -	bool "3.7.x"
> -	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_7
> -
> -config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_6
> -	bool "3.6.x"
> -	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_6
> -
> -config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_5
> -	bool "3.5.x"
> -	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_5
> -
> -config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_4
> -	bool "3.4.x"
> -	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4
> -
> -config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_3
> -	bool "3.3.x"
> -	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_3
> -
> -config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_2
> -	bool "3.2.x"
> -	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2
> -
> -config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_1
> -	bool "3.1.x"
> -	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1
> -
> -config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_0
> -	bool "3.0.x"
> -	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0
> -
> -config BR2_TOOLCHAIN_EXTERNAL_HEADERS_REALLY_OLD
> -	bool "2.6.x"
> -
> -endchoice
> -
> -choice
> -	prompt "External toolchain C library"
> -	default BR2_TOOLCHAIN_EXTERNAL_CUSTOM_UCLIBC
> -
> -config BR2_TOOLCHAIN_EXTERNAL_CUSTOM_UCLIBC
> -	bool "uClibc/uClibc-ng"
> -	select BR2_TOOLCHAIN_EXTERNAL_UCLIBC
> -	# For the time being, we assume that all custom external
> -	# toolchains have shadow password support.
> -	select BR2_TOOLCHAIN_HAS_SHADOW_PASSWORDS
> -	help
> -	  Select this option if your external toolchain uses the
> -	  uClibc (available from http://www.uclibc.org/)
> -	  or uClibc-ng (available from http://www.uclibc-ng.org)
> -	  C library.
> -
> -config BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC
> -	bool "glibc/eglibc"
> -	depends on !BR2_STATIC_LIBS
> -	select BR2_TOOLCHAIN_EXTERNAL_GLIBC
> -	help
> -	  Select this option if your external toolchain uses the GNU C
> -	  library (available from https://www.gnu.org/software/libc/)
> -	  or its variant the eglibc library (http://www.eglibc.org/).
> -
> -	  Note: eglibc is a variant of glibc that (among other things)
> -	  can be configured to exclude some of its features. Using a
> -	  toolchain with eglibc configured to exclude key features may
> -	  cause build failures to some packages.
> -
> -comment "glibc only available with shared lib support"
> -	depends on BR2_STATIC_LIBS
> -
> -config BR2_TOOLCHAIN_EXTERNAL_CUSTOM_MUSL
> -	bool "musl"
> -	select BR2_TOOLCHAIN_EXTERNAL_MUSL
> -	help
> -	  Select this option if your external toolchain uses the
> -	  'musl' C library, available from http://www.musl-libc.org/.
> -
> -endchoice
> -
> -if BR2_TOOLCHAIN_EXTERNAL_CUSTOM_UCLIBC
> -
> -config BR2_TOOLCHAIN_EXTERNAL_WCHAR
> -	bool "Toolchain has WCHAR support?"
> -	select BR2_USE_WCHAR
> -	help
> -	  Select this option if your external toolchain supports
> -	  WCHAR. If you don't know, leave the default value, Buildroot
> -	  will tell you if it's correct or not.
> -
> -config BR2_TOOLCHAIN_EXTERNAL_LOCALE
> -	bool "Toolchain has locale support?"
> -	select BR2_TOOLCHAIN_EXTERNAL_WCHAR
> -	select BR2_ENABLE_LOCALE
> -	help
> -	  Select this option if your external toolchain has locale
> -	  support. If you don't know, leave the default value,
> -	  Buildroot will tell you if it's correct or not.
> -
> -config BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS
> -	bool "Toolchain has threads support?"
> -	select BR2_TOOLCHAIN_HAS_THREADS
> -	default y
> -	help
> -	  Select this option if your external toolchain has thread
> -	  support. If you don't know, leave the default value,
> -	  Buildroot will tell you if it's correct or not.
> -
> -if BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS
> -
> -config BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS_DEBUG
> -	bool "Toolchain has threads debugging support?"
> -	select BR2_TOOLCHAIN_HAS_THREADS_DEBUG
> -	default y
> -	help
> -	  Select this option if your external toolchain has thread
> -	  debugging support. If you don't know, leave the default
> -	  value, Buildroot will tell you if it's correct or not.
> -
> -config BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS_NPTL
> -	bool "Toolchain has NPTL threads support?"
> -	select BR2_TOOLCHAIN_HAS_THREADS_NPTL
> -	default y
> -	help
> -	  Select this option if your external toolchain uses the NPTL
> -	  (Native Posix Thread Library) implementation of Posix
> -	  threads. If you don't know, leave the default value,
> -	  Buildroot will tell you if it's correct or not.
> -
> -endif # BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS
> -
> -endif # BR2_TOOLCHAIN_EXTERNAL_CUSTOM_UCLIBC
> -
> -config BR2_TOOLCHAIN_EXTERNAL_HAS_SSP
> -	bool "Toolchain has SSP support?"
> -	select BR2_TOOLCHAIN_HAS_SSP
> -	default y if BR2_TOOLCHAIN_EXTERNAL_GLIBC
> -	default y if BR2_TOOLCHAIN_EXTERNAL_MUSL
> -	help
> -	  Selection this option if your external toolchain has Stack
> -	  Smashing Protection support enabled. If you don't know,
> -	  leave the default value, Buildroot will tell you if it's
> -	  correct or not.
> -
> -config BR2_TOOLCHAIN_EXTERNAL_INET_RPC
> -	bool "Toolchain has RPC support?"
> -	select BR2_TOOLCHAIN_HAS_NATIVE_RPC
> -	depends on !BR2_TOOLCHAIN_EXTERNAL_MUSL
> -	default y if BR2_TOOLCHAIN_EXTERNAL_GLIBC
> -	help
> -	  Select this option if your external toolchain supports
> -	  RPC. If you don't know, leave the default value, Buildroot
> -	  will tell you if it's correct or not.
> -
> -config BR2_TOOLCHAIN_EXTERNAL_CXX
> -	bool "Toolchain has C++ support?"
> -	select BR2_INSTALL_LIBSTDCPP
> -	help
> -	  Select this option if your external toolchain has C++
> -	  support. If you don't know, leave the default value,
> -	  Buildroot will tell you if it's correct or not.
> -
> -config BR2_TOOLCHAIN_EXTERNAL_FORTRAN
> -	bool "Toolchain has Fortran support?"
> -	select BR2_TOOLCHAIN_HAS_FORTRAN
> -	help
> -	  Select this option if your external toolchain has Fortran
> -	  support. If you don't know, leave the default value,
> -	  Buildroot will tell you if it's correct or not.
> -
> -config BR2_TOOLCHAIN_EXTRA_EXTERNAL_LIBS
> -	string "Extra toolchain libraries to be copied to target"
> -	help
> -	  If your external toolchain provides extra libraries that
> -	  need to be copied to the target filesystem, enter them
> -	  here, separated by spaces.
> -
> -endif # BR2_TOOLCHAIN_EXTERNAL_CUSTOM
> +# Custom toolchains
> +source "toolchain/toolchain-external/toolchain-external-custom/Config.in.options"
>  
>  config BR2_TOOLCHAIN_EXTERNAL_GDB_SERVER_COPY
>  	bool "Copy gdb server to the Target"
> diff --git a/toolchain/toolchain-external/toolchain-external-custom/Config.in b/toolchain/toolchain-external/toolchain-external-custom/Config.in
> new file mode 100644
> index 0000000..a913feb
> --- /dev/null
> +++ b/toolchain/toolchain-external/toolchain-external-custom/Config.in
> @@ -0,0 +1,5 @@
> +config BR2_TOOLCHAIN_EXTERNAL_CUSTOM
> +	bool "Custom toolchain"
> +	help
> +	  Use this option to use a custom toolchain pre-installed on
> +	  your system.
> diff --git a/toolchain/toolchain-external/toolchain-external-custom/Config.in.options b/toolchain/toolchain-external/toolchain-external-custom/Config.in.options
> new file mode 100644
> index 0000000..cdc2555
> --- /dev/null
> +++ b/toolchain/toolchain-external/toolchain-external-custom/Config.in.options
> @@ -0,0 +1,334 @@
> +if BR2_TOOLCHAIN_EXTERNAL_CUSTOM
> +
> +config BR2_TOOLCHAIN_EXTERNAL_PREFIX
> +	default BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX
> +
> +config BR2_PACKAGE_PROVIDES_TOOLCHAIN_EXTERNAL
> +	default "toolchain-external-custom"
> +
> +config BR2_TOOLCHAIN_EXTERNAL_URL
> +	string "Toolchain URL"
> +	depends on BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD
> +	help
> +	  URL of the custom toolchain tarball to download and install.
> +
> +config BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX
> +	string "Toolchain prefix"
> +	default "$(ARCH)-linux"
> +
> +choice
> +	bool "External toolchain gcc version"
> +	default BR2_TOOLCHAIN_EXTERNAL_GCC_4_3
> +	help
> +	  Set to the gcc version that is used by your external
> +	  toolchain.
> +
> +config BR2_TOOLCHAIN_EXTERNAL_GCC_6
> +	bool "6.x"
> +	select BR2_TOOLCHAIN_GCC_AT_LEAST_6
> +
> +config BR2_TOOLCHAIN_EXTERNAL_GCC_5
> +	bool "5.x"
> +	select BR2_TOOLCHAIN_GCC_AT_LEAST_5
> +
> +config BR2_TOOLCHAIN_EXTERNAL_GCC_4_9
> +	bool "4.9.x"
> +	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_9
> +
> +config BR2_TOOLCHAIN_EXTERNAL_GCC_4_8
> +	bool "4.8.x"
> +	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_8
> +
> +config BR2_TOOLCHAIN_EXTERNAL_GCC_4_7
> +	bool "4.7.x"
> +	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_7
> +
> +config BR2_TOOLCHAIN_EXTERNAL_GCC_4_6
> +	bool "4.6.x"
> +	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_6
> +
> +config BR2_TOOLCHAIN_EXTERNAL_GCC_4_5
> +	bool "4.5.x"
> +	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_5
> +
> +config BR2_TOOLCHAIN_EXTERNAL_GCC_4_4
> +	bool "4.4.x"
> +	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_4
> +
> +config BR2_TOOLCHAIN_EXTERNAL_GCC_4_3
> +	bool "4.3.x"
> +	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_3
> +
> +endchoice
> +
> +choice
> +	bool "External toolchain kernel headers series"
> +	default BR2_TOOLCHAIN_EXTERNAL_HEADERS_REALLY_OLD
> +	help
> +	  Set to the kernel headers version that were used to build
> +	  this external toolchain.
> +
> +	  This is used to hide/show some packages that have strict
> +	  requirements on the version of kernel headers.
> +
> +	  If unsure what version your toolchain is using, you can look
> +	  at the value of LINUX_VERSION_CODE in linux/version.h in your
> +	  toolchain. The Linux version is M.m.p, with:
> +	    M = ( LINUX_VERSION_CODE >> 16 ) & 0xFF
> +	    m = ( LINUX_VERSION_CODE >> 8  ) & 0xFF
> +	    p = ( LINUX_VERSION_CODE >> 0  ) & 0xFF
> +
> +config BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_8
> +	bool "4.8.x"
> +	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_8
> +
> +config BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_7
> +	bool "4.7.x"
> +	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_7
> +
> +config BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_6
> +	bool "4.6.x"
> +	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_6
> +
> +config BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_5
> +	bool "4.5.x"
> +	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_5
> +
> +config BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_4
> +	bool "4.4.x"
> +	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_4
> +
> +config BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_3
> +	bool "4.3.x"
> +	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_3
> +
> +config BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_2
> +	bool "4.2.x"
> +	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_2
> +
> +config BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_1
> +	bool "4.1.x"
> +	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_1
> +
> +config BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_0
> +	bool "4.0.x"
> +	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_0
> +
> +config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_19
> +	bool "3.19.x"
> +	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_19
> +
> +config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_18
> +	bool "3.18.x"
> +	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_18
> +
> +config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_17
> +	bool "3.17.x"
> +	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_17
> +
> +config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_16
> +	bool "3.16.x"
> +	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_16
> +
> +config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_15
> +	bool "3.15.x"
> +	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_15
> +
> +config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_14
> +	bool "3.14.x"
> +	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_14
> +
> +config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_13
> +	bool "3.13.x"
> +	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_13
> +
> +config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_12
> +	bool "3.12.x"
> +	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12
> +
> +config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_11
> +	bool "3.11.x"
> +	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_11
> +
> +config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_10
> +	bool "3.10.x"
> +	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10
> +
> +config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_9
> +	bool "3.9.x"
> +	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_9
> +
> +config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_8
> +	bool "3.8.x"
> +	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_8
> +
> +config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_7
> +	bool "3.7.x"
> +	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_7
> +
> +config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_6
> +	bool "3.6.x"
> +	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_6
> +
> +config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_5
> +	bool "3.5.x"
> +	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_5
> +
> +config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_4
> +	bool "3.4.x"
> +	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4
> +
> +config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_3
> +	bool "3.3.x"
> +	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_3
> +
> +config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_2
> +	bool "3.2.x"
> +	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2
> +
> +config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_1
> +	bool "3.1.x"
> +	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1
> +
> +config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_0
> +	bool "3.0.x"
> +	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0
> +
> +config BR2_TOOLCHAIN_EXTERNAL_HEADERS_REALLY_OLD
> +	bool "2.6.x"
> +
> +endchoice
> +
> +choice
> +	prompt "External toolchain C library"
> +	default BR2_TOOLCHAIN_EXTERNAL_CUSTOM_UCLIBC
> +
> +config BR2_TOOLCHAIN_EXTERNAL_CUSTOM_UCLIBC
> +	bool "uClibc/uClibc-ng"
> +	select BR2_TOOLCHAIN_EXTERNAL_UCLIBC
> +	# For the time being, we assume that all custom external
> +	# toolchains have shadow password support.
> +	select BR2_TOOLCHAIN_HAS_SHADOW_PASSWORDS
> +	help
> +	  Select this option if your external toolchain uses the
> +	  uClibc (available from http://www.uclibc.org/)
> +	  or uClibc-ng (available from http://www.uclibc-ng.org)
> +	  C library.
> +
> +config BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC
> +	bool "glibc/eglibc"
> +	depends on !BR2_STATIC_LIBS
> +	select BR2_TOOLCHAIN_EXTERNAL_GLIBC
> +	help
> +	  Select this option if your external toolchain uses the GNU C
> +	  library (available from https://www.gnu.org/software/libc/)
> +	  or its variant the eglibc library (http://www.eglibc.org/).
> +
> +	  Note: eglibc is a variant of glibc that (among other things)
> +	  can be configured to exclude some of its features. Using a
> +	  toolchain with eglibc configured to exclude key features may
> +	  cause build failures to some packages.
> +
> +comment "(e)glibc only available with shared lib support"
> +	depends on BR2_STATIC_LIBS
> +
> +config BR2_TOOLCHAIN_EXTERNAL_CUSTOM_MUSL
> +	bool "musl (experimental)"
> +	select BR2_TOOLCHAIN_EXTERNAL_MUSL
> +	help
> +	  Select this option if your external toolchain uses the
> +	  'musl' C library, available from http://www.musl-libc.org/.
> +
> +endchoice
> +
> +if BR2_TOOLCHAIN_EXTERNAL_CUSTOM_UCLIBC
> +
> +config BR2_TOOLCHAIN_EXTERNAL_WCHAR
> +	bool "Toolchain has WCHAR support?"
> +	select BR2_USE_WCHAR
> +	help
> +	  Select this option if your external toolchain supports
> +	  WCHAR. If you don't know, leave the default value, Buildroot
> +	  will tell you if it's correct or not.
> +
> +config BR2_TOOLCHAIN_EXTERNAL_LOCALE
> +	bool "Toolchain has locale support?"
> +	select BR2_TOOLCHAIN_EXTERNAL_WCHAR
> +	select BR2_ENABLE_LOCALE
> +	help
> +	  Select this option if your external toolchain has locale
> +	  support. If you don't know, leave the default value,
> +	  Buildroot will tell you if it's correct or not.
> +
> +config BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS
> +	bool "Toolchain has threads support?"
> +	select BR2_TOOLCHAIN_HAS_THREADS
> +	default y
> +	help
> +	  Select this option if your external toolchain has thread
> +	  support. If you don't know, leave the default value,
> +	  Buildroot will tell you if it's correct or not.
> +
> +if BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS
> +
> +config BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS_DEBUG
> +	bool "Toolchain has threads debugging support?"
> +	select BR2_TOOLCHAIN_HAS_THREADS_DEBUG
> +	default y
> +	help
> +	  Select this option if your external toolchain has thread
> +	  debugging support. If you don't know, leave the default
> +	  value, Buildroot will tell you if it's correct or not.
> +
> +config BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS_NPTL
> +	bool "Toolchain has NPTL threads support?"
> +	select BR2_TOOLCHAIN_HAS_THREADS_NPTL
> +	default y
> +	help
> +	  Select this option if your external toolchain uses the NPTL
> +	  (Native Posix Thread Library) implementation of Posix
> +	  threads. If you don't know, leave the default value,
> +	  Buildroot will tell you if it's correct or not.
> +
> +endif # BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS
> +
> +endif # BR2_TOOLCHAIN_EXTERNAL_CUSTOM_UCLIBC
> +
> +config BR2_TOOLCHAIN_EXTERNAL_HAS_SSP
> +	bool "Toolchain has SSP support?"
> +	select BR2_TOOLCHAIN_HAS_SSP
> +	default y if BR2_TOOLCHAIN_EXTERNAL_GLIBC
> +	default y if BR2_TOOLCHAIN_EXTERNAL_MUSL
> +	help
> +	  Selection this option if your external toolchain has Stack
> +	  Smashing Protection support enabled. If you don't know,
> +	  leave the default value, Buildroot will tell you if it's
> +	  correct or not.
> +
> +config BR2_TOOLCHAIN_EXTERNAL_INET_RPC
> +	bool "Toolchain has RPC support?"
> +	select BR2_TOOLCHAIN_HAS_NATIVE_RPC
> +	depends on !BR2_TOOLCHAIN_EXTERNAL_MUSL
> +	default y if BR2_TOOLCHAIN_EXTERNAL_GLIBC
> +	help
> +	  Select this option if your external toolchain supports
> +	  RPC. If you don't know, leave the default value, Buildroot
> +	  will tell you if it's correct or not.
> +
> +config BR2_TOOLCHAIN_EXTERNAL_CXX
> +	bool "Toolchain has C++ support?"
> +	select BR2_INSTALL_LIBSTDCPP
> +	help
> +	  Select this option if your external toolchain has C++
> +	  support. If you don't know, leave the default value,
> +	  Buildroot will tell you if it's correct or not.
> +
> +config BR2_TOOLCHAIN_EXTRA_EXTERNAL_LIBS
> +	string "Extra toolchain libraries to be copied to target"
> +	help
> +	  If your external toolchain provides extra libraries that
> +	  need to be copied to the target filesystem, enter them
> +	  here, separated by spaces. They will be copied to the
> +	  target's /lib directory.
> +
> +endif
> diff --git a/toolchain/toolchain-external/toolchain-external-custom/toolchain-external-custom.mk b/toolchain/toolchain-external/toolchain-external-custom/toolchain-external-custom.mk
> new file mode 100644
> index 0000000..c4ae612
> --- /dev/null
> +++ b/toolchain/toolchain-external/toolchain-external-custom/toolchain-external-custom.mk
> @@ -0,0 +1,15 @@
> +################################################################################
> +#
> +# toolchain-external-custom
> +#
> +################################################################################
> +
> +TOOLCHAIN_EXTERNAL_CUSTOM_SITE = $(patsubst %/,%,$(dir $(call qstrip,$(BR2_TOOLCHAIN_EXTERNAL_URL))))
> +TOOLCHAIN_EXTERNAL_CUSTOM_SOURCE = $(notdir $(call qstrip,$(BR2_TOOLCHAIN_EXTERNAL_URL)))
> +
> +ifeq ($(BR2_TOOLCHAIN_EXTERNAL_CUSTOM),y)
> +# We can't check hashes for custom downloaded toolchains
> +BR_NO_CHECK_HASH_FOR += $(TOOLCHAIN_EXTERNAL_SOURCE)
> +endif
> +
> +$(eval $(toolchain-external-package))
> diff --git a/toolchain/toolchain-external/toolchain-external.mk b/toolchain/toolchain-external/toolchain-external.mk
> index 0680473..e13d240 100644
> --- a/toolchain/toolchain-external/toolchain-external.mk
> +++ b/toolchain/toolchain-external/toolchain-external.mk
> @@ -69,12 +69,6 @@ else
>  TOOLCHAIN_EXTERNAL_SYNOPSYS_ENDIANESS = be
>  endif
>  TOOLCHAIN_EXTERNAL_SOURCE = arc_gnu_2014.12_prebuilt_uclibc_$(TOOLCHAIN_EXTERNAL_SYNOPSYS_ENDIANESS)_$(TOOLCHAIN_EXTERNAL_SYNOPSYS_CORE)_linux_install.tar.gz
> -else
> -# Custom toolchain
> -TOOLCHAIN_EXTERNAL_SITE = $(patsubst %/,%,$(dir $(call qstrip,$(BR2_TOOLCHAIN_EXTERNAL_URL))))
> -TOOLCHAIN_EXTERNAL_SOURCE = $(notdir $(call qstrip,$(BR2_TOOLCHAIN_EXTERNAL_URL)))
> -# We can't check hashes for custom downloaded toolchains
> -BR_NO_CHECK_HASH_FOR += $(TOOLCHAIN_EXTERNAL_SOURCE)
>  endif
>  
>  # Some toolchain vendors have a regular file naming pattern.
>
diff mbox

Patch

diff --git a/toolchain/toolchain-external/Config.in b/toolchain/toolchain-external/Config.in
index 5188e1a..e592ec2 100644
--- a/toolchain/toolchain-external/Config.in
+++ b/toolchain/toolchain-external/Config.in
@@ -43,6 +43,11 @@  source "toolchain/toolchain-external/toolchain-external-codesourcery-x86/Config.
 # Musl based toolchains (after all the others)
 source "toolchain/toolchain-external/toolchain-external-musl-cross/Config.in"
 
+# Kept last, so it remains the non-default choice, unless there isn't
+# any available toolchain profile for the currently selected
+# architecture.
+source "toolchain/toolchain-external/toolchain-external-custom/Config.in"
+
 config BR2_TOOLCHAIN_EXTERNAL_ARAGO_ARMV7A
 	bool "Arago ARMv7 2011.09"
 	depends on BR2_arm
@@ -109,12 +114,6 @@  config BR2_TOOLCHAIN_EXTERNAL_SYNOPSYS_ARC
 	  Toolchain for the ARC cores, from
 	  https://github.com/foss-for-synopsys-dwc-arc-processors/toolchain/releases
 
-config BR2_TOOLCHAIN_EXTERNAL_CUSTOM
-	bool "Custom toolchain"
-	help
-	  Use this option to use a custom toolchain pre-installed on
-	  your system.
-
 endchoice
 
 choice
@@ -146,25 +145,12 @@  config BR2_TOOLCHAIN_EXTERNAL_PATH
 	help
 	  Path to where the external toolchain is installed.
 
-config BR2_TOOLCHAIN_EXTERNAL_URL
-	string "Toolchain URL"
-	depends on BR2_TOOLCHAIN_EXTERNAL_CUSTOM && BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD
-	help
-	  URL of the custom toolchain tarball to download and install.
-
-config BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX
-	string "Toolchain prefix"
-	depends on BR2_TOOLCHAIN_EXTERNAL_CUSTOM
-	default "$(ARCH)-linux"
-
 config BR2_TOOLCHAIN_EXTERNAL_PREFIX
 	string
 	default "arc-linux"		 if BR2_TOOLCHAIN_EXTERNAL_SYNOPSYS_ARC && BR2_arcle
 	default "arceb-linux"		 if BR2_TOOLCHAIN_EXTERNAL_SYNOPSYS_ARC && BR2_arceb
 	default "arm-arago-linux-gnueabi" if BR2_TOOLCHAIN_EXTERNAL_ARAGO_ARMV7A
 	default "arm-arago-linux-gnueabi" if BR2_TOOLCHAIN_EXTERNAL_ARAGO_ARMV5TE
-	default BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX \
-					 if BR2_TOOLCHAIN_EXTERNAL_CUSTOM
 
 config BR2_TOOLCHAIN_EXTERNAL_GLIBC
 	bool
@@ -224,331 +210,8 @@  source "toolchain/toolchain-external/toolchain-external-codesourcery-x86/Config.
 # Musl based toolchains
 source "toolchain/toolchain-external/toolchain-external-musl-cross/Config.in.options"
 
-if BR2_TOOLCHAIN_EXTERNAL_CUSTOM
-
-choice
-	bool "External toolchain gcc version"
-	default BR2_TOOLCHAIN_EXTERNAL_GCC_4_3
-	help
-	  Set to the gcc version that is used by your external
-	  toolchain.
-
-config BR2_TOOLCHAIN_EXTERNAL_GCC_6
-	bool "6.x"
-	select BR2_TOOLCHAIN_GCC_AT_LEAST_6
-
-config BR2_TOOLCHAIN_EXTERNAL_GCC_5
-	bool "5.x"
-	select BR2_TOOLCHAIN_GCC_AT_LEAST_5
-
-config BR2_TOOLCHAIN_EXTERNAL_GCC_4_9
-	bool "4.9.x"
-	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_9
-
-config BR2_TOOLCHAIN_EXTERNAL_GCC_4_8
-	bool "4.8.x"
-	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_8
-
-config BR2_TOOLCHAIN_EXTERNAL_GCC_4_7
-	bool "4.7.x"
-	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_7
-
-config BR2_TOOLCHAIN_EXTERNAL_GCC_4_6
-	bool "4.6.x"
-	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_6
-
-config BR2_TOOLCHAIN_EXTERNAL_GCC_4_5
-	bool "4.5.x"
-	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_5
-
-config BR2_TOOLCHAIN_EXTERNAL_GCC_4_4
-	bool "4.4.x"
-	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_4
-
-config BR2_TOOLCHAIN_EXTERNAL_GCC_4_3
-	bool "4.3.x"
-	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_3
-
-endchoice
-
-choice
-	bool "External toolchain kernel headers series"
-	default BR2_TOOLCHAIN_EXTERNAL_HEADERS_REALLY_OLD
-	help
-	  Set to the kernel headers version that were used to build
-	  this external toolchain.
-
-	  This is used to hide/show some packages that have strict
-	  requirements on the version of kernel headers.
-
-	  If unsure what version your toolchain is using, you can look
-	  at the value of LINUX_VERSION_CODE in linux/version.h in your
-	  toolchain. The Linux version is M.m.p, with:
-	    M = ( LINUX_VERSION_CODE >> 16 ) & 0xFF
-	    m = ( LINUX_VERSION_CODE >> 8  ) & 0xFF
-	    p = ( LINUX_VERSION_CODE >> 0  ) & 0xFF
-
-config BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_8
-	bool "4.8.x"
-	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_8
-
-config BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_7
-	bool "4.7.x"
-	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_7
-
-config BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_6
-	bool "4.6.x"
-	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_6
-
-config BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_5
-	bool "4.5.x"
-	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_5
-
-config BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_4
-	bool "4.4.x"
-	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_4
-
-config BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_3
-	bool "4.3.x"
-	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_3
-
-config BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_2
-	bool "4.2.x"
-	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_2
-
-config BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_1
-	bool "4.1.x"
-	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_1
-
-config BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_0
-	bool "4.0.x"
-	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_0
-
-config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_19
-	bool "3.19.x"
-	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_19
-
-config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_18
-	bool "3.18.x"
-	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_18
-
-config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_17
-	bool "3.17.x"
-	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_17
-
-config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_16
-	bool "3.16.x"
-	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_16
-
-config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_15
-	bool "3.15.x"
-	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_15
-
-config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_14
-	bool "3.14.x"
-	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_14
-
-config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_13
-	bool "3.13.x"
-	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_13
-
-config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_12
-	bool "3.12.x"
-	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12
-
-config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_11
-	bool "3.11.x"
-	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_11
-
-config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_10
-	bool "3.10.x"
-	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10
-
-config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_9
-	bool "3.9.x"
-	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_9
-
-config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_8
-	bool "3.8.x"
-	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_8
-
-config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_7
-	bool "3.7.x"
-	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_7
-
-config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_6
-	bool "3.6.x"
-	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_6
-
-config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_5
-	bool "3.5.x"
-	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_5
-
-config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_4
-	bool "3.4.x"
-	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4
-
-config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_3
-	bool "3.3.x"
-	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_3
-
-config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_2
-	bool "3.2.x"
-	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2
-
-config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_1
-	bool "3.1.x"
-	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1
-
-config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_0
-	bool "3.0.x"
-	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0
-
-config BR2_TOOLCHAIN_EXTERNAL_HEADERS_REALLY_OLD
-	bool "2.6.x"
-
-endchoice
-
-choice
-	prompt "External toolchain C library"
-	default BR2_TOOLCHAIN_EXTERNAL_CUSTOM_UCLIBC
-
-config BR2_TOOLCHAIN_EXTERNAL_CUSTOM_UCLIBC
-	bool "uClibc/uClibc-ng"
-	select BR2_TOOLCHAIN_EXTERNAL_UCLIBC
-	# For the time being, we assume that all custom external
-	# toolchains have shadow password support.
-	select BR2_TOOLCHAIN_HAS_SHADOW_PASSWORDS
-	help
-	  Select this option if your external toolchain uses the
-	  uClibc (available from http://www.uclibc.org/)
-	  or uClibc-ng (available from http://www.uclibc-ng.org)
-	  C library.
-
-config BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC
-	bool "glibc/eglibc"
-	depends on !BR2_STATIC_LIBS
-	select BR2_TOOLCHAIN_EXTERNAL_GLIBC
-	help
-	  Select this option if your external toolchain uses the GNU C
-	  library (available from https://www.gnu.org/software/libc/)
-	  or its variant the eglibc library (http://www.eglibc.org/).
-
-	  Note: eglibc is a variant of glibc that (among other things)
-	  can be configured to exclude some of its features. Using a
-	  toolchain with eglibc configured to exclude key features may
-	  cause build failures to some packages.
-
-comment "glibc only available with shared lib support"
-	depends on BR2_STATIC_LIBS
-
-config BR2_TOOLCHAIN_EXTERNAL_CUSTOM_MUSL
-	bool "musl"
-	select BR2_TOOLCHAIN_EXTERNAL_MUSL
-	help
-	  Select this option if your external toolchain uses the
-	  'musl' C library, available from http://www.musl-libc.org/.
-
-endchoice
-
-if BR2_TOOLCHAIN_EXTERNAL_CUSTOM_UCLIBC
-
-config BR2_TOOLCHAIN_EXTERNAL_WCHAR
-	bool "Toolchain has WCHAR support?"
-	select BR2_USE_WCHAR
-	help
-	  Select this option if your external toolchain supports
-	  WCHAR. If you don't know, leave the default value, Buildroot
-	  will tell you if it's correct or not.
-
-config BR2_TOOLCHAIN_EXTERNAL_LOCALE
-	bool "Toolchain has locale support?"
-	select BR2_TOOLCHAIN_EXTERNAL_WCHAR
-	select BR2_ENABLE_LOCALE
-	help
-	  Select this option if your external toolchain has locale
-	  support. If you don't know, leave the default value,
-	  Buildroot will tell you if it's correct or not.
-
-config BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS
-	bool "Toolchain has threads support?"
-	select BR2_TOOLCHAIN_HAS_THREADS
-	default y
-	help
-	  Select this option if your external toolchain has thread
-	  support. If you don't know, leave the default value,
-	  Buildroot will tell you if it's correct or not.
-
-if BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS
-
-config BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS_DEBUG
-	bool "Toolchain has threads debugging support?"
-	select BR2_TOOLCHAIN_HAS_THREADS_DEBUG
-	default y
-	help
-	  Select this option if your external toolchain has thread
-	  debugging support. If you don't know, leave the default
-	  value, Buildroot will tell you if it's correct or not.
-
-config BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS_NPTL
-	bool "Toolchain has NPTL threads support?"
-	select BR2_TOOLCHAIN_HAS_THREADS_NPTL
-	default y
-	help
-	  Select this option if your external toolchain uses the NPTL
-	  (Native Posix Thread Library) implementation of Posix
-	  threads. If you don't know, leave the default value,
-	  Buildroot will tell you if it's correct or not.
-
-endif # BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS
-
-endif # BR2_TOOLCHAIN_EXTERNAL_CUSTOM_UCLIBC
-
-config BR2_TOOLCHAIN_EXTERNAL_HAS_SSP
-	bool "Toolchain has SSP support?"
-	select BR2_TOOLCHAIN_HAS_SSP
-	default y if BR2_TOOLCHAIN_EXTERNAL_GLIBC
-	default y if BR2_TOOLCHAIN_EXTERNAL_MUSL
-	help
-	  Selection this option if your external toolchain has Stack
-	  Smashing Protection support enabled. If you don't know,
-	  leave the default value, Buildroot will tell you if it's
-	  correct or not.
-
-config BR2_TOOLCHAIN_EXTERNAL_INET_RPC
-	bool "Toolchain has RPC support?"
-	select BR2_TOOLCHAIN_HAS_NATIVE_RPC
-	depends on !BR2_TOOLCHAIN_EXTERNAL_MUSL
-	default y if BR2_TOOLCHAIN_EXTERNAL_GLIBC
-	help
-	  Select this option if your external toolchain supports
-	  RPC. If you don't know, leave the default value, Buildroot
-	  will tell you if it's correct or not.
-
-config BR2_TOOLCHAIN_EXTERNAL_CXX
-	bool "Toolchain has C++ support?"
-	select BR2_INSTALL_LIBSTDCPP
-	help
-	  Select this option if your external toolchain has C++
-	  support. If you don't know, leave the default value,
-	  Buildroot will tell you if it's correct or not.
-
-config BR2_TOOLCHAIN_EXTERNAL_FORTRAN
-	bool "Toolchain has Fortran support?"
-	select BR2_TOOLCHAIN_HAS_FORTRAN
-	help
-	  Select this option if your external toolchain has Fortran
-	  support. If you don't know, leave the default value,
-	  Buildroot will tell you if it's correct or not.
-
-config BR2_TOOLCHAIN_EXTRA_EXTERNAL_LIBS
-	string "Extra toolchain libraries to be copied to target"
-	help
-	  If your external toolchain provides extra libraries that
-	  need to be copied to the target filesystem, enter them
-	  here, separated by spaces.
-
-endif # BR2_TOOLCHAIN_EXTERNAL_CUSTOM
+# Custom toolchains
+source "toolchain/toolchain-external/toolchain-external-custom/Config.in.options"
 
 config BR2_TOOLCHAIN_EXTERNAL_GDB_SERVER_COPY
 	bool "Copy gdb server to the Target"
diff --git a/toolchain/toolchain-external/toolchain-external-custom/Config.in b/toolchain/toolchain-external/toolchain-external-custom/Config.in
new file mode 100644
index 0000000..a913feb
--- /dev/null
+++ b/toolchain/toolchain-external/toolchain-external-custom/Config.in
@@ -0,0 +1,5 @@ 
+config BR2_TOOLCHAIN_EXTERNAL_CUSTOM
+	bool "Custom toolchain"
+	help
+	  Use this option to use a custom toolchain pre-installed on
+	  your system.
diff --git a/toolchain/toolchain-external/toolchain-external-custom/Config.in.options b/toolchain/toolchain-external/toolchain-external-custom/Config.in.options
new file mode 100644
index 0000000..cdc2555
--- /dev/null
+++ b/toolchain/toolchain-external/toolchain-external-custom/Config.in.options
@@ -0,0 +1,334 @@ 
+if BR2_TOOLCHAIN_EXTERNAL_CUSTOM
+
+config BR2_TOOLCHAIN_EXTERNAL_PREFIX
+	default BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX
+
+config BR2_PACKAGE_PROVIDES_TOOLCHAIN_EXTERNAL
+	default "toolchain-external-custom"
+
+config BR2_TOOLCHAIN_EXTERNAL_URL
+	string "Toolchain URL"
+	depends on BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD
+	help
+	  URL of the custom toolchain tarball to download and install.
+
+config BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX
+	string "Toolchain prefix"
+	default "$(ARCH)-linux"
+
+choice
+	bool "External toolchain gcc version"
+	default BR2_TOOLCHAIN_EXTERNAL_GCC_4_3
+	help
+	  Set to the gcc version that is used by your external
+	  toolchain.
+
+config BR2_TOOLCHAIN_EXTERNAL_GCC_6
+	bool "6.x"
+	select BR2_TOOLCHAIN_GCC_AT_LEAST_6
+
+config BR2_TOOLCHAIN_EXTERNAL_GCC_5
+	bool "5.x"
+	select BR2_TOOLCHAIN_GCC_AT_LEAST_5
+
+config BR2_TOOLCHAIN_EXTERNAL_GCC_4_9
+	bool "4.9.x"
+	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_9
+
+config BR2_TOOLCHAIN_EXTERNAL_GCC_4_8
+	bool "4.8.x"
+	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_8
+
+config BR2_TOOLCHAIN_EXTERNAL_GCC_4_7
+	bool "4.7.x"
+	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_7
+
+config BR2_TOOLCHAIN_EXTERNAL_GCC_4_6
+	bool "4.6.x"
+	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_6
+
+config BR2_TOOLCHAIN_EXTERNAL_GCC_4_5
+	bool "4.5.x"
+	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_5
+
+config BR2_TOOLCHAIN_EXTERNAL_GCC_4_4
+	bool "4.4.x"
+	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_4
+
+config BR2_TOOLCHAIN_EXTERNAL_GCC_4_3
+	bool "4.3.x"
+	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_3
+
+endchoice
+
+choice
+	bool "External toolchain kernel headers series"
+	default BR2_TOOLCHAIN_EXTERNAL_HEADERS_REALLY_OLD
+	help
+	  Set to the kernel headers version that were used to build
+	  this external toolchain.
+
+	  This is used to hide/show some packages that have strict
+	  requirements on the version of kernel headers.
+
+	  If unsure what version your toolchain is using, you can look
+	  at the value of LINUX_VERSION_CODE in linux/version.h in your
+	  toolchain. The Linux version is M.m.p, with:
+	    M = ( LINUX_VERSION_CODE >> 16 ) & 0xFF
+	    m = ( LINUX_VERSION_CODE >> 8  ) & 0xFF
+	    p = ( LINUX_VERSION_CODE >> 0  ) & 0xFF
+
+config BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_8
+	bool "4.8.x"
+	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_8
+
+config BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_7
+	bool "4.7.x"
+	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_7
+
+config BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_6
+	bool "4.6.x"
+	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_6
+
+config BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_5
+	bool "4.5.x"
+	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_5
+
+config BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_4
+	bool "4.4.x"
+	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_4
+
+config BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_3
+	bool "4.3.x"
+	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_3
+
+config BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_2
+	bool "4.2.x"
+	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_2
+
+config BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_1
+	bool "4.1.x"
+	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_1
+
+config BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_0
+	bool "4.0.x"
+	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_0
+
+config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_19
+	bool "3.19.x"
+	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_19
+
+config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_18
+	bool "3.18.x"
+	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_18
+
+config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_17
+	bool "3.17.x"
+	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_17
+
+config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_16
+	bool "3.16.x"
+	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_16
+
+config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_15
+	bool "3.15.x"
+	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_15
+
+config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_14
+	bool "3.14.x"
+	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_14
+
+config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_13
+	bool "3.13.x"
+	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_13
+
+config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_12
+	bool "3.12.x"
+	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12
+
+config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_11
+	bool "3.11.x"
+	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_11
+
+config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_10
+	bool "3.10.x"
+	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10
+
+config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_9
+	bool "3.9.x"
+	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_9
+
+config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_8
+	bool "3.8.x"
+	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_8
+
+config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_7
+	bool "3.7.x"
+	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_7
+
+config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_6
+	bool "3.6.x"
+	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_6
+
+config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_5
+	bool "3.5.x"
+	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_5
+
+config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_4
+	bool "3.4.x"
+	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4
+
+config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_3
+	bool "3.3.x"
+	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_3
+
+config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_2
+	bool "3.2.x"
+	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2
+
+config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_1
+	bool "3.1.x"
+	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1
+
+config BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_0
+	bool "3.0.x"
+	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0
+
+config BR2_TOOLCHAIN_EXTERNAL_HEADERS_REALLY_OLD
+	bool "2.6.x"
+
+endchoice
+
+choice
+	prompt "External toolchain C library"
+	default BR2_TOOLCHAIN_EXTERNAL_CUSTOM_UCLIBC
+
+config BR2_TOOLCHAIN_EXTERNAL_CUSTOM_UCLIBC
+	bool "uClibc/uClibc-ng"
+	select BR2_TOOLCHAIN_EXTERNAL_UCLIBC
+	# For the time being, we assume that all custom external
+	# toolchains have shadow password support.
+	select BR2_TOOLCHAIN_HAS_SHADOW_PASSWORDS
+	help
+	  Select this option if your external toolchain uses the
+	  uClibc (available from http://www.uclibc.org/)
+	  or uClibc-ng (available from http://www.uclibc-ng.org)
+	  C library.
+
+config BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC
+	bool "glibc/eglibc"
+	depends on !BR2_STATIC_LIBS
+	select BR2_TOOLCHAIN_EXTERNAL_GLIBC
+	help
+	  Select this option if your external toolchain uses the GNU C
+	  library (available from https://www.gnu.org/software/libc/)
+	  or its variant the eglibc library (http://www.eglibc.org/).
+
+	  Note: eglibc is a variant of glibc that (among other things)
+	  can be configured to exclude some of its features. Using a
+	  toolchain with eglibc configured to exclude key features may
+	  cause build failures to some packages.
+
+comment "(e)glibc only available with shared lib support"
+	depends on BR2_STATIC_LIBS
+
+config BR2_TOOLCHAIN_EXTERNAL_CUSTOM_MUSL
+	bool "musl (experimental)"
+	select BR2_TOOLCHAIN_EXTERNAL_MUSL
+	help
+	  Select this option if your external toolchain uses the
+	  'musl' C library, available from http://www.musl-libc.org/.
+
+endchoice
+
+if BR2_TOOLCHAIN_EXTERNAL_CUSTOM_UCLIBC
+
+config BR2_TOOLCHAIN_EXTERNAL_WCHAR
+	bool "Toolchain has WCHAR support?"
+	select BR2_USE_WCHAR
+	help
+	  Select this option if your external toolchain supports
+	  WCHAR. If you don't know, leave the default value, Buildroot
+	  will tell you if it's correct or not.
+
+config BR2_TOOLCHAIN_EXTERNAL_LOCALE
+	bool "Toolchain has locale support?"
+	select BR2_TOOLCHAIN_EXTERNAL_WCHAR
+	select BR2_ENABLE_LOCALE
+	help
+	  Select this option if your external toolchain has locale
+	  support. If you don't know, leave the default value,
+	  Buildroot will tell you if it's correct or not.
+
+config BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS
+	bool "Toolchain has threads support?"
+	select BR2_TOOLCHAIN_HAS_THREADS
+	default y
+	help
+	  Select this option if your external toolchain has thread
+	  support. If you don't know, leave the default value,
+	  Buildroot will tell you if it's correct or not.
+
+if BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS
+
+config BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS_DEBUG
+	bool "Toolchain has threads debugging support?"
+	select BR2_TOOLCHAIN_HAS_THREADS_DEBUG
+	default y
+	help
+	  Select this option if your external toolchain has thread
+	  debugging support. If you don't know, leave the default
+	  value, Buildroot will tell you if it's correct or not.
+
+config BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS_NPTL
+	bool "Toolchain has NPTL threads support?"
+	select BR2_TOOLCHAIN_HAS_THREADS_NPTL
+	default y
+	help
+	  Select this option if your external toolchain uses the NPTL
+	  (Native Posix Thread Library) implementation of Posix
+	  threads. If you don't know, leave the default value,
+	  Buildroot will tell you if it's correct or not.
+
+endif # BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS
+
+endif # BR2_TOOLCHAIN_EXTERNAL_CUSTOM_UCLIBC
+
+config BR2_TOOLCHAIN_EXTERNAL_HAS_SSP
+	bool "Toolchain has SSP support?"
+	select BR2_TOOLCHAIN_HAS_SSP
+	default y if BR2_TOOLCHAIN_EXTERNAL_GLIBC
+	default y if BR2_TOOLCHAIN_EXTERNAL_MUSL
+	help
+	  Selection this option if your external toolchain has Stack
+	  Smashing Protection support enabled. If you don't know,
+	  leave the default value, Buildroot will tell you if it's
+	  correct or not.
+
+config BR2_TOOLCHAIN_EXTERNAL_INET_RPC
+	bool "Toolchain has RPC support?"
+	select BR2_TOOLCHAIN_HAS_NATIVE_RPC
+	depends on !BR2_TOOLCHAIN_EXTERNAL_MUSL
+	default y if BR2_TOOLCHAIN_EXTERNAL_GLIBC
+	help
+	  Select this option if your external toolchain supports
+	  RPC. If you don't know, leave the default value, Buildroot
+	  will tell you if it's correct or not.
+
+config BR2_TOOLCHAIN_EXTERNAL_CXX
+	bool "Toolchain has C++ support?"
+	select BR2_INSTALL_LIBSTDCPP
+	help
+	  Select this option if your external toolchain has C++
+	  support. If you don't know, leave the default value,
+	  Buildroot will tell you if it's correct or not.
+
+config BR2_TOOLCHAIN_EXTRA_EXTERNAL_LIBS
+	string "Extra toolchain libraries to be copied to target"
+	help
+	  If your external toolchain provides extra libraries that
+	  need to be copied to the target filesystem, enter them
+	  here, separated by spaces. They will be copied to the
+	  target's /lib directory.
+
+endif
diff --git a/toolchain/toolchain-external/toolchain-external-custom/toolchain-external-custom.mk b/toolchain/toolchain-external/toolchain-external-custom/toolchain-external-custom.mk
new file mode 100644
index 0000000..c4ae612
--- /dev/null
+++ b/toolchain/toolchain-external/toolchain-external-custom/toolchain-external-custom.mk
@@ -0,0 +1,15 @@ 
+################################################################################
+#
+# toolchain-external-custom
+#
+################################################################################
+
+TOOLCHAIN_EXTERNAL_CUSTOM_SITE = $(patsubst %/,%,$(dir $(call qstrip,$(BR2_TOOLCHAIN_EXTERNAL_URL))))
+TOOLCHAIN_EXTERNAL_CUSTOM_SOURCE = $(notdir $(call qstrip,$(BR2_TOOLCHAIN_EXTERNAL_URL)))
+
+ifeq ($(BR2_TOOLCHAIN_EXTERNAL_CUSTOM),y)
+# We can't check hashes for custom downloaded toolchains
+BR_NO_CHECK_HASH_FOR += $(TOOLCHAIN_EXTERNAL_SOURCE)
+endif
+
+$(eval $(toolchain-external-package))
diff --git a/toolchain/toolchain-external/toolchain-external.mk b/toolchain/toolchain-external/toolchain-external.mk
index 0680473..e13d240 100644
--- a/toolchain/toolchain-external/toolchain-external.mk
+++ b/toolchain/toolchain-external/toolchain-external.mk
@@ -69,12 +69,6 @@  else
 TOOLCHAIN_EXTERNAL_SYNOPSYS_ENDIANESS = be
 endif
 TOOLCHAIN_EXTERNAL_SOURCE = arc_gnu_2014.12_prebuilt_uclibc_$(TOOLCHAIN_EXTERNAL_SYNOPSYS_ENDIANESS)_$(TOOLCHAIN_EXTERNAL_SYNOPSYS_CORE)_linux_install.tar.gz
-else
-# Custom toolchain
-TOOLCHAIN_EXTERNAL_SITE = $(patsubst %/,%,$(dir $(call qstrip,$(BR2_TOOLCHAIN_EXTERNAL_URL))))
-TOOLCHAIN_EXTERNAL_SOURCE = $(notdir $(call qstrip,$(BR2_TOOLCHAIN_EXTERNAL_URL)))
-# We can't check hashes for custom downloaded toolchains
-BR_NO_CHECK_HASH_FOR += $(TOOLCHAIN_EXTERNAL_SOURCE)
 endif
 
 # Some toolchain vendors have a regular file naming pattern.