initial buildroot for linux 5.15

This commit is contained in:
Huan.Feng
2021-12-06 14:12:13 +08:00
parent d7767d594e
commit 7b6fc358fa
12736 changed files with 508822 additions and 0 deletions
+831
View File
@@ -0,0 +1,831 @@
menu "Toolchain"
# Invisible option that makes sure the toolchain package always gets
# built
config BR2_TOOLCHAIN
bool
default y
# Should be selected for glibc or eglibc
config BR2_TOOLCHAIN_USES_GLIBC
bool
select BR2_USE_WCHAR
select BR2_ENABLE_LOCALE
select BR2_TOOLCHAIN_HAS_FULL_GETTEXT
select BR2_TOOLCHAIN_HAS_THREADS
select BR2_TOOLCHAIN_HAS_THREADS_DEBUG
select BR2_TOOLCHAIN_HAS_THREADS_NPTL
select BR2_TOOLCHAIN_HAS_UCONTEXT
select BR2_TOOLCHAIN_SUPPORTS_PIE
config BR2_TOOLCHAIN_USES_UCLIBC
bool
# ucontext is only available for a subset of the supported
# architectures
select BR2_TOOLCHAIN_HAS_UCONTEXT if BR2_ARM_CPU_HAS_ARM || BR2_i386 \
|| BR2_mips || BR2_mipsel || BR2_mips64 || BR2_mips64el \
|| BR2_sparc || BR2_x86_64
select BR2_TOOLCHAIN_SUPPORTS_PIE if !BR2_m68k && !BR2_microblaze && !BR2_STATIC_LIBS
config BR2_TOOLCHAIN_USES_MUSL
bool
select BR2_USE_WCHAR
select BR2_ENABLE_LOCALE
select BR2_TOOLCHAIN_HAS_THREADS
select BR2_TOOLCHAIN_HAS_THREADS_DEBUG
select BR2_TOOLCHAIN_HAS_THREADS_NPTL
select BR2_TOOLCHAIN_HAS_UCONTEXT
select BR2_TOOLCHAIN_SUPPORTS_PIE if !BR2_STATIC_LIBS
choice
prompt "Toolchain type"
help
Select whether to use the toolchain provided by buildroot
or an external toolchain.
Some vendors provide toolchains in binary form, some in
source form.
config BR2_TOOLCHAIN_BUILDROOT
bool "Buildroot toolchain"
depends on BR2_ARCH_HAS_TOOLCHAIN_BUILDROOT
config BR2_TOOLCHAIN_EXTERNAL
bool "External toolchain"
help
Select if you want to use an existing cross-compiling
toolchain. Buildroot can either download automatically a
toolchain, or use an already installed toolchain.
endchoice
source "toolchain/toolchain-buildroot/Config.in"
source "toolchain/toolchain-external/Config.in"
# Generic toolchain options
# we want gdb config in the middle of both source and external
# toolchains, but mconf won't let us source the same file twice,
# so put it here instead
source "package/gdb/Config.in.host"
comment "Toolchain Generic Options"
# https://sourceware.org/bugzilla/show_bug.cgi?id=21464
# Affect toolchains built with binutils 2.31.1, still not fixed.
config BR2_TOOLCHAIN_HAS_BINUTILS_BUG_21464
bool
default y if BR2_or1k
# https://sourceware.org/bugzilla/show_bug.cgi?id=27597
# Affect toolchains built with binutils 2.36.1, still not fixed.
config BR2_TOOLCHAIN_HAS_BINUTILS_BUG_27597
bool
default y if BR2_nios2
# Atomic types can be:
# - never lock-free
# - sometimes lock-free
# - always lock-free
# see https://en.cppreference.com/w/c/atomic/ATOMIC_LOCK_FREE_consts
#
# On most architectures, gcc provides "always lock-free" atomic types,
# but a few architectures are limited to "sometimes lock-free"
# types. This hidden option allows to know if the architecture
# provides "always lock-free" atomic types.
config BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS
bool
default y
depends on !BR2_nios2
depends on !BR2_ARM_CPU_ARMV4
depends on !BR2_ARM_CPU_ARMV5
depends on !BR2_sparc_v8
depends on !BR2_m68k_cf5208
# GCC uses thunk functions to adjust the 'this' pointer when calling
# C++ member functions in classes derived with multiple inheritance.
# Generation of thunk functions requires support from the compiler
# back end. In the absence of that support target-independent code
# in the C++ front end is used to generate thunk functions, but it
# does not support vararg functions.
# or1k will support it in the gcc mainline starting with gcc-9.
config BR2_TOOLCHAIN_SUPPORTS_VARIADIC_MI_THUNK
bool
default y
depends on !BR2_or1k
depends on !BR2_xtensa
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43744. This bug no
# reappeared on gcc 9.x and is still not fixed on gcc 11.x
config BR2_TOOLCHAIN_HAS_GCC_BUG_43744
bool
default y if BR2_sh4
depends on !BR2_TOOLCHAIN_GCC_AT_LEAST_8 || \
BR2_TOOLCHAIN_GCC_AT_LEAST_9 || \
BR2_TOOLCHAIN_GCC_AT_LEAST_10 || \
BR2_TOOLCHAIN_GCC_AT_LEAST_11
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63261. This bug no
# longer exists in gcc 8.x.
config BR2_TOOLCHAIN_HAS_GCC_BUG_63261
bool
default y if BR2_microblaze
depends on !BR2_TOOLCHAIN_GCC_AT_LEAST_8
# Prior to gcc 7.x, exception_ptr, nested_exception and future from
# libstdc++ would only be provided on architectures that support
# always lock-free atomic ints. See
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64735. This issue has
# been removed in GCC 7.x, where exception propagation is now
# supported without lock-free atomic int.
config BR2_TOOLCHAIN_HAS_GCC_BUG_64735
bool
default y if !BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS && \
!BR2_TOOLCHAIN_GCC_AT_LEAST_7
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68485. This bug still
# exists in gcc 9.x
config BR2_TOOLCHAIN_HAS_GCC_BUG_68485
bool
default y if BR2_microblaze
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83143
# Error: invalid operands (*UND* and .text sections) for `-' on sh4.
# This bug no longer exists in gcc 10.x but reappeared on gcc 11.x and
# it still not been fixed yet.
config BR2_TOOLCHAIN_HAS_GCC_BUG_83143
bool
default y if BR2_sh
depends on !BR2_TOOLCHAIN_GCC_AT_LEAST_10 || BR2_TOOLCHAIN_GCC_AT_LEAST_11
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85180. This bug no
# longer exists in gcc 8.x.
config BR2_TOOLCHAIN_HAS_GCC_BUG_85180
bool
default y if BR2_microblaze
depends on !BR2_TOOLCHAIN_GCC_AT_LEAST_8
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85862
# An infinite loop exists in the find_base_term() logic of 6.x
# on microblaze. http://autobuild.buildroot.net/results/158e8ebb39713e1b436a5cc1a1916f46c30694df/
config BR2_TOOLCHAIN_HAS_GCC_BUG_85862
bool
default y if BR2_microblaze
depends on !BR2_TOOLCHAIN_GCC_AT_LEAST_7
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90620
# ICE: in do_output_reload, at reload1.c:7978 on microblaze.
# This bug no longer exists in gcc 10.x
config BR2_TOOLCHAIN_HAS_GCC_BUG_90620
bool
default y if BR2_microblaze
depends on !BR2_TOOLCHAIN_GCC_AT_LEAST_10
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93847
# ICE: compiler error: Segmentation fault on Nios II. This bug
# no longer exists in gcc 9.x.
config BR2_TOOLCHAIN_HAS_GCC_BUG_93847
bool
default y if BR2_nios2 && !BR2_TOOLCHAIN_GCC_AT_LEAST_9
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99410
# Error: branch offset out of range on Nios II. This bug
# no longer exists in gcc 8.x but reappeared on gcc 9.x and has been
# fixed on gcc 10.x.
config BR2_TOOLCHAIN_HAS_GCC_BUG_99140
bool
default y if !BR2_TOOLCHAIN_GCC_AT_LEAST_8
default y if BR2_TOOLCHAIN_GCC_AT_LEAST_9 && !BR2_TOOLCHAIN_GCC_AT_LEAST_10
depends on BR2_nios2
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101737
# ICE: SH4 -Os causes internal compiler error. This bug
# still exists in gcc = 11.1.0
config BR2_TOOLCHAIN_HAS_GCC_BUG_101737
bool
default y if BR2_sh4
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101915
# ICE: in extract_insn, at recog.c:2294 on microblaze.
# This bug still exists in gcc = 11.1.0
config BR2_TOOLCHAIN_HAS_GCC_BUG_101915
bool
default y if BR2_microblaze
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101916
# ICE: on SH4: Segmentation fault signal terminated program cc1.
# This bug still exists in gcc = 11.1.0
config BR2_TOOLCHAIN_HAS_GCC_BUG_101916
bool
default y if BR2_sh4
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101952
# ICE: on SH4: unaligned opcodes detected in executable segment.
# This bug still exists in gcc = 11.1.0
config BR2_TOOLCHAIN_HAS_GCC_BUG_101952
bool
default y if BR2_sh4
config BR2_TOOLCHAIN_HAS_NATIVE_RPC
bool
config BR2_USE_WCHAR
bool
config BR2_ENABLE_LOCALE
bool
config BR2_INSTALL_LIBSTDCPP
bool
config BR2_TOOLCHAIN_HAS_DLANG
bool
config BR2_TOOLCHAIN_HAS_FORTRAN
bool
config BR2_TOOLCHAIN_HAS_THREADS
bool
config BR2_TOOLCHAIN_HAS_THREADS_DEBUG
bool
config BR2_TOOLCHAIN_HAS_THREADS_NPTL
bool
config BR2_TOOLCHAIN_HAS_SSP
bool
config BR2_TOOLCHAIN_HAS_SSP_STRONG
bool
default y if BR2_TOOLCHAIN_HAS_SSP && BR2_TOOLCHAIN_GCC_AT_LEAST_4_9
config BR2_TOOLCHAIN_HAS_UCONTEXT
bool
config BR2_TOOLCHAIN_HAS_OPENMP
bool
config BR2_TOOLCHAIN_SUPPORTS_PIE
bool
config BR2_TOOLCHAIN_GLIBC_GCONV_LIBS_COPY
bool "Copy gconv libraries"
depends on BR2_TOOLCHAIN_USES_GLIBC
help
The gconv libraries are used to convert between different
character sets (charsets).
Say 'y' if you need to store and/or display different
charsets.
config BR2_TOOLCHAIN_GLIBC_GCONV_LIBS_LIST
string "Gconv libraries to copy"
depends on BR2_TOOLCHAIN_GLIBC_GCONV_LIBS_COPY
help
Set to the list of gconv libraries to copy.
Leave empty to copy all gconv libraries.
Specify only the basename of the libraries, leave
out the .so extension. Eg.:
IBM850 ISO8859-15 UNICODE
Note: the full set of gconv libs are ~8MiB (on ARM).
config BR2_TOOLCHAIN_EXTRA_LIBS
string "Extra toolchain libraries to be copied to target"
default BR2_TOOLCHAIN_EXTRA_EXTERNAL_LIBS if BR2_TOOLCHAIN_EXTRA_EXTERNAL_LIBS != "" # legacy
depends on !BR2_STATIC_LIBS
help
If your toolchain provides extra libraries that need to be
copied to the target filesystem, enter them here, separated
by spaces. The library should not include a suffix or any
type of pre/post wildcard.
Examples where this can be useful is for adding debug
libraries to the target like the GCC libsanitizer.
e.g. "libasan liblsan libtsan libubsan"
# This boolean is true if the toolchain provides a built-in full
# featured gettext implementation (glibc), and false if only a stub
# gettext implementation is provided (uclibc, musl)
config BR2_TOOLCHAIN_HAS_FULL_GETTEXT
bool
config BR2_USE_MMU
bool "Enable MMU support" if BR2_ARCH_HAS_MMU_OPTIONAL
default y if BR2_ARCH_HAS_MMU_OPTIONAL || BR2_ARCH_HAS_MMU_MANDATORY
help
If your target has a MMU, you should say Y here. If you
are unsure, just say Y.
config BR2_TARGET_OPTIMIZATION
string "Target Optimizations"
default ""
help
Optimizations to use when building for the target host.
NOTE: gcc optimization level is defined in build options.
config BR2_TARGET_LDFLAGS
string "Target linker options"
help
Extra options to pass to the linker when building for the
target.
Note that options with a '$' sign (eg.
-Wl,-rpath='$ORIGIN/../lib') are not supported.
config BR2_ECLIPSE_REGISTER
bool "Register toolchain within Eclipse Buildroot plug-in"
help
This options tells Buildroot to generate the necessary
configuration files to make your toolchain appear within
Eclipse, through the Eclipse Buildroot plugin.
# Options for packages to depend on, if they require at least a
# specific version of the kernel headers.
# Toolchains should choose the adequate option (ie. the highest
# version, not all of them).
config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0
bool
config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1
bool
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0
config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2
bool
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1
config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_3
bool
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2
config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4
bool
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_3
config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_5
bool
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4
config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_6
bool
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_5
config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_7
bool
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_6
config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_8
bool
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_7
config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_9
bool
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_8
config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10
bool
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_9
config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_11
bool
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10
config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12
bool
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_11
config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_13
bool
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12
config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_14
bool
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_13
config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_15
bool
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_14
config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_16
bool
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_15
config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_17
bool
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_16
config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_18
bool
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_17
config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_19
bool
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_18
config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_0
bool
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_19
config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_1
bool
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_0
config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_2
bool
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_1
config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_3
bool
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_2
config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_4
bool
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_3
config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_5
bool
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_4
config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_6
bool
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_5
config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_7
bool
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_6
config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_8
bool
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_7
config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_9
bool
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_8
config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_10
bool
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_9
config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_11
bool
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_10
config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_12
bool
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_11
config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_13
bool
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_12
config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_14
bool
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_13
config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_15
bool
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_14
config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_16
bool
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_15
config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_17
bool
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_16
config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_18
bool
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_17
config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_19
bool
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_18
config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_20
bool
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_19
config BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_0
bool
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_20
config BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_1
bool
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_0
config BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_2
bool
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_1
config BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_3
bool
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_2
config BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_4
bool
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_3
config BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_5
bool
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_4
config BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_6
bool
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_5
config BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_7
bool
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_6
config BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_8
bool
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_7
config BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_9
bool
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_8
config BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_10
bool
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_9
config BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_11
bool
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_10
config BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_12
bool
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_11
config BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_13
bool
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_12
config BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_14
bool
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_13
config BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_15
bool
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_14
select BR2_TOOLCHAIN_HEADERS_LATEST
# This should be selected by the latest version, above, to indicate that
# Buildroot does not know of more recent headers than the ones selected.
# This allows using toolchains with headers more recent than Buildroot
# knows about, while still enforcing strict check for older headers.
config BR2_TOOLCHAIN_HEADERS_LATEST
bool
# This order guarantees that the highest version is set, as kconfig
# stops affecting a value on the first matching default.
config BR2_TOOLCHAIN_HEADERS_AT_LEAST
string
default "5.15" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_15
default "5.14" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_14
default "5.13" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_13
default "5.12" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_12
default "5.11" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_11
default "5.10" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_10
default "5.9" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_9
default "5.8" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_8
default "5.7" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_7
default "5.6" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_6
default "5.5" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_5
default "5.4" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_4
default "5.3" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_3
default "5.2" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_2
default "5.1" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_1
default "5.0" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_0
default "4.20" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_20
default "4.19" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_19
default "4.18" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_18
default "4.17" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_17
default "4.16" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_16
default "4.15" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_15
default "4.14" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_14
default "4.13" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_13
default "4.12" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_12
default "4.11" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_11
default "4.10" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_10
default "4.9" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_9
default "4.8" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_8
default "4.7" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_7
default "4.6" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_6
default "4.5" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_5
default "4.4" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_4
default "4.3" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_3
default "4.2" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_2
default "4.1" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_1
default "4.0" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_0
default "3.19" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_19
default "3.18" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_18
default "3.17" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_17
default "3.16" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_16
default "3.15" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_15
default "3.14" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_14
default "3.13" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_13
default "3.12" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12
default "3.11" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_11
default "3.10" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10
default "3.9" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_9
default "3.8" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_8
default "3.7" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_7
default "3.6" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_6
default "3.5" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_5
default "3.4" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4
default "3.3" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_3
default "3.2" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2
default "3.1" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1
default "3.0" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0
default "2.6"
config BR2_TOOLCHAIN_GCC_AT_LEAST_4_3
bool
config BR2_TOOLCHAIN_GCC_AT_LEAST_4_4
bool
select BR2_TOOLCHAIN_GCC_AT_LEAST_4_3
config BR2_TOOLCHAIN_GCC_AT_LEAST_4_5
bool
select BR2_TOOLCHAIN_GCC_AT_LEAST_4_4
config BR2_TOOLCHAIN_GCC_AT_LEAST_4_6
bool
select BR2_TOOLCHAIN_GCC_AT_LEAST_4_5
config BR2_TOOLCHAIN_GCC_AT_LEAST_4_7
bool
select BR2_TOOLCHAIN_GCC_AT_LEAST_4_6
config BR2_TOOLCHAIN_GCC_AT_LEAST_4_8
bool
select BR2_TOOLCHAIN_GCC_AT_LEAST_4_7
config BR2_TOOLCHAIN_GCC_AT_LEAST_4_9
bool
select BR2_TOOLCHAIN_GCC_AT_LEAST_4_8
config BR2_TOOLCHAIN_GCC_AT_LEAST_5
bool
select BR2_TOOLCHAIN_GCC_AT_LEAST_4_9
config BR2_TOOLCHAIN_GCC_AT_LEAST_6
bool
select BR2_TOOLCHAIN_GCC_AT_LEAST_5
config BR2_TOOLCHAIN_GCC_AT_LEAST_7
bool
select BR2_TOOLCHAIN_GCC_AT_LEAST_6
config BR2_TOOLCHAIN_GCC_AT_LEAST_8
bool
select BR2_TOOLCHAIN_GCC_AT_LEAST_7
config BR2_TOOLCHAIN_GCC_AT_LEAST_9
bool
select BR2_TOOLCHAIN_GCC_AT_LEAST_8
config BR2_TOOLCHAIN_GCC_AT_LEAST_10
bool
select BR2_TOOLCHAIN_GCC_AT_LEAST_9
config BR2_TOOLCHAIN_GCC_AT_LEAST_11
bool
select BR2_TOOLCHAIN_GCC_AT_LEAST_10
# This order guarantees that the highest version is set, as kconfig
# stops affecting a value on the first matching default.
config BR2_TOOLCHAIN_GCC_AT_LEAST
string
default "11" if BR2_TOOLCHAIN_GCC_AT_LEAST_11
default "10" if BR2_TOOLCHAIN_GCC_AT_LEAST_10
default "9" if BR2_TOOLCHAIN_GCC_AT_LEAST_9
default "8" if BR2_TOOLCHAIN_GCC_AT_LEAST_8
default "7" if BR2_TOOLCHAIN_GCC_AT_LEAST_7
default "6" if BR2_TOOLCHAIN_GCC_AT_LEAST_6
default "5" if BR2_TOOLCHAIN_GCC_AT_LEAST_5
default "4.9" if BR2_TOOLCHAIN_GCC_AT_LEAST_4_9
default "4.8" if BR2_TOOLCHAIN_GCC_AT_LEAST_4_8
default "4.7" if BR2_TOOLCHAIN_GCC_AT_LEAST_4_7
default "4.6" if BR2_TOOLCHAIN_GCC_AT_LEAST_4_6
default "4.5" if BR2_TOOLCHAIN_GCC_AT_LEAST_4_5
default "4.4" if BR2_TOOLCHAIN_GCC_AT_LEAST_4_4
default "4.3" if BR2_TOOLCHAIN_GCC_AT_LEAST_4_3
config BR2_TOOLCHAIN_HAS_MNAN_OPTION
bool
default y if BR2_TOOLCHAIN_GCC_AT_LEAST_4_9
config BR2_TOOLCHAIN_HAS_SYNC_1
bool
default y
depends on !BR2_m68k_cf
depends on !BR2_microblaze
depends on !BR2_sparc
depends on !(BR2_arc && !BR2_ARC_ATOMIC_EXT)
config BR2_TOOLCHAIN_HAS_SYNC_2
bool
default y if BR2_TOOLCHAIN_HAS_SYNC_1
config BR2_TOOLCHAIN_HAS_SYNC_4
bool
default y
depends on !BR2_m68k_cf
depends on !BR2_sparc
depends on !(BR2_arc && !BR2_ARC_ATOMIC_EXT)
# The availability of __sync for 8-byte types on ARM is somewhat
# complicated:
#
# - It appeared in gcc starting with gcc 4.7.
#
# - On ARMv7, there is no problem, it can be directly implemented in
# userspace.
#
# - On < ARMv7, it requires help from the kernel. Unfortunately, the
# libgcc code implementing 8-byte __sync with the help from the
# kernel calls __write() when a failure occurs, which is a function
# internal to glibc, not available in uClibc and musl. This means
# that the 8-byte __sync operations are not available on < ARMv7
# with uClibc and musl. This problem was fixed as part of gcc
# PR68059, which was backported to the gcc 5 branch, but isn't yet
# part of any gcc 5.x release.
#
config BR2_TOOLCHAIN_ARM_HAS_SYNC_8
bool
default y
depends on BR2_arm || BR2_armeb
depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_7
depends on BR2_TOOLCHAIN_USES_GLIBC || BR2_ARM_CPU_ARMV7A
# 8-byte intrinsics available on most x86 CPUs, except a few old ones
config BR2_TOOLCHAIN_X86_HAS_SYNC_8
bool
default y
depends on BR2_i386
depends on !BR2_x86_i486
depends on !BR2_x86_c3
depends on !BR2_x86_winchip_c6
depends on !BR2_x86_winchip2
# 8-byte intrinsics available:
# - On all 64 bits architecture
# - On a certain combinations of ARM platforms
# - On certain x86 32 bits CPUs
config BR2_TOOLCHAIN_HAS_SYNC_8
bool
default y if BR2_ARCH_IS_64
default y if BR2_TOOLCHAIN_ARM_HAS_SYNC_8
default y if BR2_TOOLCHAIN_X86_HAS_SYNC_8
# libatomic is available since gcc 4.8, when thread support is
# enabled. Also, libatomic doesn't recognize "uclinux" as a valid OS
# part of the tuple, and is therefore not build on uclinux targets,
# which is why BR2_BINFMT_FLAT configurations are excluded.
config BR2_TOOLCHAIN_HAS_LIBATOMIC
bool
default y if BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 && \
!BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_AARCH64 && \
BR2_TOOLCHAIN_HAS_THREADS && \
!BR2_BINFMT_FLAT
# __atomic intrinsics are available:
# - with gcc 4.8, either through built-ins or libatomic, on all
# architectures. Since we don't want to separate the cases where
# libatomic is needed vs. not needed, we simplify thing and only
# support situations where libatomic is available, even if on some
# architectures libatomic is not strictly needed as all __atomic
# intrinsics might be built-in. The only case where libatomic is
# missing entirely is when the toolchain does not have support for
# threads. However, a package that does not need threads but still
# uses atomics is quite a corner case, which does not warrant the
# added complexity.
# - with gcc 4.7, libatomic did not exist, so only built-ins are
# available. This means that __atomic can only be used in a subset
# of the architectures
config BR2_TOOLCHAIN_HAS_ATOMIC
bool
default y if BR2_TOOLCHAIN_HAS_LIBATOMIC
default y if BR2_TOOLCHAIN_GCC_AT_LEAST_4_7 && BR2_arm
default y if BR2_TOOLCHAIN_GCC_AT_LEAST_4_7 && BR2_armeb
default y if BR2_TOOLCHAIN_GCC_AT_LEAST_4_7 && BR2_xtensa
default y if BR2_TOOLCHAIN_GCC_AT_LEAST_4_7 && BR2_ARCH_IS_64
# - libquadmath is not needed/available on all architectures (but gcc
# correctly handles this already).
# - At least, libquadmath is available on:
# - i*86
# - x86_64
# - When available, libquadmath requires wchar support.
config BR2_TOOLCHAIN_HAS_LIBQUADMATH
bool
default y if BR2_i386 || BR2_x86_64
endmenu
+531
View File
@@ -0,0 +1,531 @@
# This Makefile fragment declares toolchain related helper functions.
# The copy_toolchain_lib_root function copies a toolchain library and
# its symbolic links from the sysroot directory to the target
# directory. Note that this function is used both by the external
# toolchain logic, and the glibc package, so care must be taken when
# changing this function.
#
# $1: library name pattern (can include glob wildcards)
#
copy_toolchain_lib_root = \
LIBPATTERN="$(strip $1)"; \
LIBPATHS=`find $(STAGING_DIR)/ -name "$${LIBPATTERN}" 2>/dev/null` ; \
for LIBPATH in $${LIBPATHS} ; do \
while true ; do \
LIBNAME=`basename $${LIBPATH}`; \
DESTDIR=`echo $${LIBPATH} | sed "s,^$(STAGING_DIR)/,," | xargs dirname` ; \
mkdir -p $(TARGET_DIR)/$${DESTDIR}; \
rm -fr $(TARGET_DIR)/$${DESTDIR}/$${LIBNAME}; \
if test -h $${LIBPATH} ; then \
cp -d $${LIBPATH} $(TARGET_DIR)/$${DESTDIR}/$${LIBNAME}; \
LIBPATH="`readlink -f $${LIBPATH}`"; \
elif test -f $${LIBPATH}; then \
$(INSTALL) -D -m0755 $${LIBPATH} $(TARGET_DIR)/$${DESTDIR}/$${LIBNAME}; \
break ; \
else \
exit -1; \
fi; \
done; \
done
#
# Copy the full external toolchain sysroot directory to the staging
# dir. The operation of this function is rendered a little bit
# complicated by the support for multilib toolchains.
#
# We start by copying etc, 'lib', sbin, usr and usr/'lib' from the
# sysroot of the selected architecture variant (as pointed to by
# ARCH_SYSROOT_DIR). This allows to import into the staging directory
# the C library and companion libraries for the correct architecture
# variant. 'lib' may not be literally 'lib' but could be something else,
# e.g. lib32-fp (as determined by ARCH_LIB_DIR) and we only want to copy
# that lib directory and no other. When copying usr, we therefore need
# to be extra careful not to include usr/lib* but we _do_ want to
# include usr/libexec.
# We are selective in the directories we copy since other directories
# might exist for other architecture variants (on Codesourcery
# toolchain, the sysroot for the default architecture variant contains
# the armv4t and thumb2 subdirectories, which are the sysroot for the
# corresponding architecture variants), and we don't want to import
# them.
#
# If ARCH_LIB_DIR is not a singular directory component, e.g.
# 'lib32/octeon2', then symbolic links in ARCH_LIB_DIR and
# usr/ARCH_LIB_DIR may be broken because Buildroot will flatten the
# directory structure (e.g. lib32/octeon2/foo is actually stored in
# lib/foo). This is only relevant for links that contain one or more ../
# components, as links to the current directory are always fine.
# We need to fix the broken links by removing the right amount of ../
# dots from the link destination.
# Once the link destination is valid again, it can be simplified to
# remove the dependency on intermediate directory symlinks.
#
# It is possible that ARCH_LIB_DIR does not contain the dynamic loader
# (ld*.so or similar) because it (or the main symlink to it) normally
# resides in /lib while ARCH_LIB_DIR may be something else (e.g. lib64,
# lib/<tuple>, ...). Therefore, copy the dynamic loader separately.
#
# Then, if the selected architecture variant is not the default one
# (i.e, if SYSROOT_DIR != ARCH_SYSROOT_DIR), then we :
#
# * Import the header files from the default architecture
# variant. Header files are typically shared between the sysroots
# for the different architecture variants. If we use the
# non-default one, header files were not copied by the previous
# step, so we copy them here from the sysroot of the default
# architecture variant.
#
# * Create a symbolic link that matches the name of the subdirectory
# for the architecture variant in the original sysroot. This is
# required as the compiler will by default look in
# sysroot_dir/arch_variant/ for libraries and headers, when the
# non-default architecture variant is used. Without this, the
# compiler fails to find libraries and headers.
#
# Some toolchains (i.e Linaro binary toolchains) store support
# libraries (libstdc++, libgcc_s) outside of the sysroot, so we simply
# copy all the libraries from the "support lib directory" into our
# sysroot.
#
# Note that the 'locale' directories are not copied. They are huge
# (400+MB) in CodeSourcery toolchains, and they are not really useful.
#
# $1: main sysroot directory of the toolchain
# $2: arch specific sysroot directory of the toolchain
# $3: arch specific subdirectory in the sysroot
# $4: directory of libraries ('lib', 'lib32' or 'lib64')
# $5: support lib directories (for toolchains storing libgcc_s,
# libstdc++ and other gcc support libraries outside of the
# sysroot)
copy_toolchain_sysroot = \
SYSROOT_DIR="$(strip $1)"; \
ARCH_SYSROOT_DIR="$(strip $2)"; \
ARCH_SUBDIR="$(strip $3)"; \
ARCH_LIB_DIR="$(strip $4)" ; \
SUPPORT_LIB_DIR="$(strip $5)" ; \
for i in etc $${ARCH_LIB_DIR} sbin usr usr/$${ARCH_LIB_DIR}; do \
if [ ! -d $${ARCH_SYSROOT_DIR}/$$i ] ; then \
continue ; \
fi ; \
if [ "$$i" = "usr" ]; then \
rsync -au --chmod=u=rwX,go=rX --exclude 'locale/' \
--include '/libexec*/' --exclude '/lib*/' \
$${ARCH_SYSROOT_DIR}/$$i/ $(STAGING_DIR)/$$i/ ; \
else \
rsync -au --chmod=u=rwX,go=rX --exclude 'locale/' \
$${ARCH_SYSROOT_DIR}/$$i/ $(STAGING_DIR)/$$i/ ; \
fi ; \
done ; \
for link in $$(find $(STAGING_DIR) -type l); do \
target=$$(readlink $${link}) ; \
if [ "$${target}" == "$${target$(SHARP_SIGN)/}" ] ; then \
continue ; \
fi ; \
relpath="$(call relpath_prefix,$${target$(SHARP_SIGN)/})" ; \
echo "Fixing symlink $${link} from $${target} to $${relpath}$${target$(SHARP_SIGN)/}" ; \
ln -sf $${relpath}$${target$(SHARP_SIGN)/} $${link} ; \
done ; \
relpath="$(call relpath_prefix,$${ARCH_LIB_DIR})" ; \
if [ "$${relpath}" != "" ]; then \
for i in $$(find -H $(STAGING_DIR)/$${ARCH_LIB_DIR} $(STAGING_DIR)/usr/$${ARCH_LIB_DIR} -type l -xtype l); do \
LINKTARGET=`readlink $$i` ; \
NEWLINKTARGET=$${LINKTARGET\#$$relpath} ; \
ln -sf $${NEWLINKTARGET} $$i ; \
$(call simplify_symlink,$$i,$(STAGING_DIR)) ; \
done ; \
fi ; \
if [[ ! $$(find $(STAGING_DIR)/lib -name 'ld*.so.*' -print -quit) ]]; then \
find $${ARCH_SYSROOT_DIR}/lib -name 'ld*.so.*' -print0 | xargs -0 -I % cp % $(STAGING_DIR)/lib/; \
fi ; \
if [ `readlink -f $${SYSROOT_DIR}` != `readlink -f $${ARCH_SYSROOT_DIR}` ] ; then \
if [ ! -d $${ARCH_SYSROOT_DIR}/usr/include ] ; then \
cp -a $${SYSROOT_DIR}/usr/include $(STAGING_DIR)/usr ; \
fi ; \
mkdir -p `dirname $(STAGING_DIR)/$${ARCH_SUBDIR}` ; \
relpath="$(call relpath_prefix,$${ARCH_SUBDIR})./" ; \
ln -s $${relpath} $(STAGING_DIR)/$${ARCH_SUBDIR} ; \
echo "Symlinking $(STAGING_DIR)/$${ARCH_SUBDIR} -> $${relpath}" ; \
fi ; \
if test -n "$${SUPPORT_LIB_DIR}" ; then \
cp -a $${SUPPORT_LIB_DIR}/* $(STAGING_DIR)/lib/ ; \
fi ; \
find $(STAGING_DIR) -type d | xargs chmod 755
#
# Check the specified kernel headers version actually matches the
# version in the toolchain.
#
# $1: build directory
# $2: sysroot directory
# $3: kernel version string, in the form: X.Y
# $4: test to do for the latest kernel version, 'strict' or 'loose'
# always 'strict' if this is not the latest version.
#
check_kernel_headers_version = \
if ! support/scripts/check-kernel-headers.sh $(1) $(2) $(3) \
$(if $(BR2_TOOLCHAIN_HEADERS_LATEST),$(4),strict); \
then \
exit 1; \
fi
#
# Check the specific gcc version actually matches the version in the
# toolchain
#
# $1: path to gcc
# $2: expected gcc version
#
check_gcc_version = \
expected_version="$(strip $2)" ; \
if [ -z "$${expected_version}" ]; then \
exit 0 ; \
fi; \
real_version=`$(1) -dumpversion` ; \
if [[ ! "$${real_version}." =~ ^$${expected_version}\. ]] ; then \
printf "Incorrect selection of gcc version: expected %s.x, got %s\n" \
"$${expected_version}" "$${real_version}" ; \
exit 1 ; \
fi
#
# Check the availability of a particular glibc feature. This function
# is used to check toolchain options that are always supported by
# glibc, so we simply check that the corresponding option is properly
# enabled.
#
# $1: Buildroot option name
# $2: feature description
#
check_glibc_feature = \
if [ "$($(1))" != "y" ] ; then \
echo "$(2) available in C library, please enable $(1)" ; \
exit 1 ; \
fi
#
# Check the availability of RPC support in a glibc toolchain
#
# $1: sysroot directory
#
check_glibc_rpc_feature = \
IS_IN_LIBC=`test -f $(1)/usr/include/rpc/rpc.h && echo y` ; \
if [ "$(BR2_TOOLCHAIN_HAS_NATIVE_RPC)" != "y" -a "$${IS_IN_LIBC}" = "y" ] ; then \
echo "RPC support available in C library, please enable BR2_TOOLCHAIN_EXTERNAL_INET_RPC" ; \
exit 1 ; \
fi ; \
if [ "$(BR2_TOOLCHAIN_HAS_NATIVE_RPC)" = "y" -a "$${IS_IN_LIBC}" != "y" ] ; then \
echo "RPC support not available in C library, please disable BR2_TOOLCHAIN_EXTERNAL_INET_RPC" ; \
exit 1 ; \
fi
#
# Check the correctness of a glibc external toolchain configuration.
# 1. Check that the C library selected in Buildroot matches the one
# of the external toolchain
# 2. Check that all the C library-related features are enabled in the
# config, since glibc always supports all of them
#
# $1: sysroot directory
#
check_glibc = \
SYSROOT_DIR="$(strip $1)"; \
if test `find -L $${SYSROOT_DIR}/ -maxdepth 2 -name 'ld-linux*.so.*' -o -name 'ld.so.*' -o -name 'ld64.so.*' | wc -l` -eq 0 ; then \
echo "Incorrect selection of the C library"; \
exit -1; \
fi; \
$(call check_glibc_feature,BR2_USE_MMU,MMU support) ;\
$(call check_glibc_rpc_feature,$${SYSROOT_DIR})
#
# Check that the selected C library really is musl
#
# $1: cross-gcc path
# $2: cross-readelf path
check_musl = \
__CROSS_CC=$(strip $1) ; \
libc_a_path=`$${__CROSS_CC} -print-file-name=libc.a` ; \
if ! strings $${libc_a_path} | grep -q MUSL_LOCPATH ; then \
echo "Incorrect selection of the C library" ; \
exit -1; \
fi
#
# Check the conformity of Buildroot configuration with regard to the
# uClibc configuration of the external toolchain, for a particular
# feature.
#
# If 'Buildroot option name' ($2) is empty it means the uClibc option
# is mandatory.
#
# $1: uClibc macro name
# $2: Buildroot option name
# $3: uClibc config file
# $4: feature description
#
check_uclibc_feature = \
IS_IN_LIBC=`grep -q "\#define $(1) 1" $(3) && echo y` ; \
if [ -z "$(2)" ] ; then \
if [ "$${IS_IN_LIBC}" != "y" ] ; then \
echo "$(4) not available in C library, toolchain unsuitable for Buildroot" ; \
exit 1 ; \
fi ; \
else \
if [ "$($(2))" != "y" -a "$${IS_IN_LIBC}" = "y" ] ; then \
echo "$(4) available in C library, please enable $(2)" ; \
exit 1 ; \
fi ; \
if [ "$($(2))" = "y" -a "$${IS_IN_LIBC}" != "y" ] ; then \
echo "$(4) not available in C library, please disable $(2)" ; \
exit 1 ; \
fi ; \
fi
#
# Check the correctness of a uclibc external toolchain configuration
# 1. Check that the C library selected in Buildroot matches the one
# of the external toolchain
# 2. Check that the features enabled in the Buildroot configuration
# match the features available in the uClibc of the external
# toolchain
#
# $1: sysroot directory
#
check_uclibc = \
SYSROOT_DIR="$(strip $1)"; \
if ! test -f $${SYSROOT_DIR}/usr/include/bits/uClibc_config.h ; then \
echo "Incorrect selection of the C library"; \
exit -1; \
fi; \
UCLIBC_CONFIG_FILE=$${SYSROOT_DIR}/usr/include/bits/uClibc_config.h ; \
$(call check_uclibc_feature,__ARCH_USE_MMU__,BR2_USE_MMU,$${UCLIBC_CONFIG_FILE},MMU support) ;\
$(call check_uclibc_feature,__UCLIBC_HAS_LFS__,,$${UCLIBC_CONFIG_FILE},Large file support) ;\
$(call check_uclibc_feature,__UCLIBC_HAS_IPV6__,,$${UCLIBC_CONFIG_FILE},IPv6 support) ;\
$(call check_uclibc_feature,__UCLIBC_HAS_RPC__,BR2_TOOLCHAIN_HAS_NATIVE_RPC,$${UCLIBC_CONFIG_FILE},RPC support) ;\
$(call check_uclibc_feature,__UCLIBC_HAS_LOCALE__,BR2_ENABLE_LOCALE,$${UCLIBC_CONFIG_FILE},Locale support) ;\
$(call check_uclibc_feature,__UCLIBC_HAS_WCHAR__,BR2_USE_WCHAR,$${UCLIBC_CONFIG_FILE},Wide char support) ;\
$(call check_uclibc_feature,__UCLIBC_HAS_THREADS__,BR2_TOOLCHAIN_HAS_THREADS,$${UCLIBC_CONFIG_FILE},Thread support) ;\
$(call check_uclibc_feature,__PTHREADS_DEBUG_SUPPORT__,BR2_TOOLCHAIN_HAS_THREADS_DEBUG,$${UCLIBC_CONFIG_FILE},Thread debugging support) ;\
$(call check_uclibc_feature,__UCLIBC_HAS_THREADS_NATIVE__,BR2_TOOLCHAIN_HAS_THREADS_NPTL,$${UCLIBC_CONFIG_FILE},NPTL thread support)
#
# Check that the Buildroot configuration of the ABI matches the
# configuration of the external toolchain.
#
# $1: cross-gcc path
# $2: cross-readelf path
#
check_arm_abi = \
__CROSS_CC=$(strip $1) ; \
EXT_TOOLCHAIN_TARGET=`LANG=C $${__CROSS_CC} -v 2>&1 | grep ^Target | cut -f2 -d ' '` ; \
if ! echo $${EXT_TOOLCHAIN_TARGET} | grep -qE 'eabi(hf)?$$' ; then \
echo "External toolchain uses the unsuported OABI" ; \
exit 1 ; \
fi ; \
if ! echo 'int main(void) {}' | $${__CROSS_CC} -x c -o $(BUILD_DIR)/.br-toolchain-test.tmp - ; then \
rm -f $(BUILD_DIR)/.br-toolchain-test.tmp*; \
abistr_$(BR2_ARM_EABI)='EABI'; \
abistr_$(BR2_ARM_EABIHF)='EABIhf'; \
echo "Incorrect ABI setting: $${abistr_y} selected, but toolchain is incompatible"; \
exit 1 ; \
fi ; \
rm -f $(BUILD_DIR)/.br-toolchain-test.tmp*
#
# Check that the external toolchain supports C++
#
# $1: cross-g++ path
#
check_cplusplus = \
__CROSS_CXX=$(strip $1) ; \
$${__CROSS_CXX} -v > /dev/null 2>&1 ; \
if test $$? -ne 0 ; then \
echo "C++ support is selected but is not available in external toolchain" ; \
exit 1 ; \
fi
#
#
# Check that the external toolchain supports D language
#
# $1: cross-gdc path
#
check_dlang = \
__CROSS_GDC=$(strip $1) ; \
__o=$(BUILD_DIR)/.br-toolchain-test-dlang.tmp ; \
printf 'import std.stdio;\nvoid main() { writeln("Hello World!"); }\n' | \
$${__CROSS_GDC} -x d -o $${__o} - ; \
if test $$? -ne 0 ; then \
rm -f $${__o}* ; \
echo "D language support is selected but is not available in external toolchain" ; \
exit 1 ; \
fi ; \
rm -f $${__o}* \
#
#
# Check that the external toolchain supports Fortran
#
# $1: cross-gfortran path
#
check_fortran = \
__CROSS_FC=$(strip $1) ; \
__o=$(BUILD_DIR)/.br-toolchain-test-fortran.tmp ; \
printf 'program hello\n\tprint *, "Hello Fortran!\\n"\nend program hello\n' | \
$${__CROSS_FC} -x f95 -o $${__o} - ; \
if test $$? -ne 0 ; then \
rm -f $${__o}* ; \
echo "Fortran support is selected but is not available in external toolchain" ; \
exit 1 ; \
fi ; \
rm -f $${__o}* \
#
#
# Check that the external toolchain supports OpenMP
#
# $1: cross-gcc path
#
check_openmp = \
__CROSS_CC=$(strip $1) ; \
__o=$(BUILD_DIR)/.br-toolchain-test-openmp.tmp ; \
printf '\#include <omp.h>\nint main(void) { return omp_get_thread_num(); }' | \
$${__CROSS_CC} -fopenmp -x c -o $${__o} - ; \
if test $$? -ne 0 ; then \
rm -f $${__o}* ; \
echo "OpenMP support is selected but is not available in external toolchain"; \
exit 1 ; \
fi ; \
rm -f $${__o}* \
#
# Check that the cross-compiler given in the configuration exists
#
# $1: cross-gcc path
#
check_cross_compiler_exists = \
__CROSS_CC=$(strip $1) ; \
$${__CROSS_CC} -v > /dev/null 2>&1 ; \
if test $$? -ne 0 ; then \
echo "Cannot execute cross-compiler '$${__CROSS_CC}'" ; \
exit 1 ; \
fi
#
# Check for toolchains known not to work with Buildroot.
# - For the Angstrom toolchains, we check by looking at the vendor part of
# the host tuple.
# - Exclude distro-class toolchains which are not relocatable.
# - Exclude broken toolchains which return "libc.a" with -print-file-name.
# - Exclude toolchains which doesn't support --sysroot option.
#
# $1: cross-gcc path
#
check_unusable_toolchain = \
__CROSS_CC=$(strip $1) ; \
vendor=`$${__CROSS_CC} -dumpmachine | cut -f2 -d'-'` ; \
if test "$${vendor}" = "angstrom" ; then \
echo "Angstrom toolchains are not pure toolchains: they contain" ; \
echo "many other libraries than just the C library, which makes" ; \
echo "them unsuitable as external toolchains for build systems" ; \
echo "such as Buildroot." ; \
exit 1 ; \
fi; \
with_sysroot=`$${__CROSS_CC} -v 2>&1 |sed -r -e '/.* --with-sysroot=([^[:space:]]+)[[:space:]].*/!d; s//\1/'`; \
if test "$${with_sysroot}" = "/" ; then \
echo "Distribution toolchains are unsuitable for use by Buildroot," ; \
echo "as they were configured in a way that makes them non-relocatable,"; \
echo "and contain a lot of pre-built libraries that would conflict with"; \
echo "the ones Buildroot wants to build."; \
exit 1; \
fi; \
libc_a_path=`$${__CROSS_CC} -print-file-name=libc.a` ; \
if test "$${libc_a_path}" = "libc.a" ; then \
echo "Unable to detect the toolchain sysroot, Buildroot cannot use this toolchain." ; \
exit 1 ; \
fi ; \
sysroot_dir="$(call toolchain_find_sysroot,$${__CROSS_CC})" ; \
if test -z "$${sysroot_dir}" ; then \
echo "External toolchain doesn't support --sysroot. Cannot use." ; \
exit 1 ; \
fi
#
# Check if the toolchain has SSP (stack smashing protector) support
#
# $1: cross-gcc path
# $2: gcc ssp option
#
check_toolchain_ssp = \
__CROSS_CC=$(strip $1) ; \
__HAS_SSP=`echo 'void main(){}' | $${__CROSS_CC} -Werror -fstack-protector -x c - -o $(BUILD_DIR)/.br-toolchain-test.tmp >/dev/null 2>&1 && echo y` ; \
if [ "$(BR2_TOOLCHAIN_HAS_SSP)" != "y" -a "$${__HAS_SSP}" = "y" ] ; then \
echo "SSP support available in this toolchain, please enable BR2_TOOLCHAIN_EXTERNAL_HAS_SSP" ; \
exit 1 ; \
fi ; \
if [ "$(BR2_TOOLCHAIN_HAS_SSP)" = "y" -a "$${__HAS_SSP}" != "y" ] ; then \
echo "SSP support not available in this toolchain, please disable BR2_TOOLCHAIN_EXTERNAL_HAS_SSP" ; \
exit 1 ; \
fi ; \
__SSP_OPTION=$(2); \
if [ -n "$${__SSP_OPTION}" ] ; then \
if ! echo 'void main(){}' | $${__CROSS_CC} -Werror $${__SSP_OPTION} -x c - -o $(BUILD_DIR)/.br-toolchain-test.tmp >/dev/null 2>&1 ; then \
echo "SSP option $${__SSP_OPTION} not available in this toolchain, please select another SSP level" ; \
exit 1 ; \
fi; \
fi; \
rm -f $(BUILD_DIR)/.br-toolchain-test.tmp*
#
# Generate gdbinit file for use with Buildroot
#
gen_gdbinit_file = \
mkdir -p $(STAGING_DIR)/usr/share/buildroot/ ; \
echo "add-auto-load-safe-path $(STAGING_DIR)" > $(STAGING_DIR)/usr/share/buildroot/gdbinit ; \
echo "set sysroot $(STAGING_DIR)" >> $(STAGING_DIR)/usr/share/buildroot/gdbinit
# Given a path, determine the relative prefix (../) needed to return to the
# root level. Note that the last component is treated as a file component; use a
# trailing slash to force treating it as a directory. Examples:
# relpath_prefix(lib32) = ""
# relpath_prefix(lib32/octeon2) = "../"
# relpath_prefix(lib32/octeon2/) = "../../"
#
# $1: input path
define relpath_prefix
$$( \
prefix="" ; \
nbslashs=`printf $1 | sed 's%[^/]%%g' | wc -c` ; \
for slash in `seq 1 $${nbslashs}` ; do \
prefix=$${prefix}"../" ; \
done ; \
printf "$$prefix" ; \
)
endef
# Replace the destination of a symbolic link with a simpler version
# For example,
# usr/lib/libfoo.so -> ../../lib32/libfoo.so.1
# becomes
# usr/lib/libfoo.so -> ../../lib/libfoo.so.1
# since 'lib32' is a symlink to 'lib'.
#
# Likewise,
# usr/lib/octeon2/libbar.so -> ../../../lib32/octeon2/libbar.so.1
# becomes
# usr/lib/octeon2/libbar.so -> ../../lib/libbar.so.1
# assuming lib32->lib and lib/octeon2->lib.
#
# $1: symlink
# $2: base path
define simplify_symlink
( \
FULL_SRC="$$(readlink -f $$(dirname $1))/$$(basename $1)" ; \
FULL_DEST="$$(readlink -f $1)" ; \
FULL_BASE="$$(readlink -f $2)" ; \
REL_SRC="$${FULL_SRC#$${FULL_BASE}/}" ; \
REL_DEST="$${FULL_DEST#$${FULL_BASE}/}" ; \
DOTS="$(call relpath_prefix,$${REL_SRC})" ; \
ln -sf "$${DOTS}$${REL_DEST}" "$${FULL_SRC}" ; \
)
endef
+117
View File
@@ -0,0 +1,117 @@
# Config entries for internal toolchain backend
if BR2_TOOLCHAIN_BUILDROOT
comment "Toolchain Buildroot Options"
config BR2_TOOLCHAIN_BUILDROOT_VENDOR
string "custom toolchain vendor name"
default "buildroot"
help
This option allows to customize the "vendor" part of the
toolchain tuple, where the toolchain tuple has the form
<arch>-<vendor>-<os>-<libc>. The default value, "buildroot",
is fine for most cases, except in very specific situations
where gcc might make different decisions based on the vendor
part of the tuple. The value "unknown" is not allowed, as the
cross-compiling toolchain might then be confused with the
native toolchain when the target and host architecture are
identical. The value can not be empty either.
If you're not sure, just leave the default "buildroot" value.
choice
prompt "C library"
default BR2_TOOLCHAIN_BUILDROOT_UCLIBC
default BR2_TOOLCHAIN_BUILDROOT_GLIBC if BR2_powerpc64
config BR2_TOOLCHAIN_BUILDROOT_UCLIBC
bool "uClibc-ng"
depends on BR2_aarch64 || BR2_aarch64_be || BR2_arcle || BR2_arceb || \
BR2_arm || BR2_armeb || \
BR2_i386 || BR2_m68k || BR2_microblaze || \
BR2_mips || BR2_mipsel || BR2_mips64 || BR2_mips64el || \
BR2_or1k || BR2_powerpc || BR2_RISCV_64 || BR2_sh2a || \
BR2_sh4 || BR2_sh4eb || BR2_sparc || BR2_xtensa || \
BR2_x86_64
select BR2_TOOLCHAIN_USES_UCLIBC
help
This option selects uClibc-ng as the C library for the
cross-compilation toolchain.
http://uclibc-ng.org
config BR2_TOOLCHAIN_BUILDROOT_GLIBC
bool "glibc"
depends on BR2_arm || BR2_armeb || BR2_aarch64 || \
BR2_aarch64_be || BR2_i386 || BR2_mips || \
BR2_mipsel || BR2_mips64 || BR2_mips64el|| \
BR2_powerpc || BR2_powerpc64 || BR2_powerpc64le || \
BR2_riscv || BR2_s390x || BR2_sh || \
BR2_sparc64 || BR2_x86_64 || BR2_microblaze || \
BR2_nios2 || (BR2_arc && BR2_ARC_ATOMIC_EXT) || BR2_csky
depends on BR2_USE_MMU
depends on !BR2_STATIC_LIBS
depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2
depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10 || !BR2_powerpc64le
depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_5 || !BR2_MIPS_NAN_2008
depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_0 || !BR2_RISCV_64
depends on BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_1 || !BR2_arc
depends on !BR2_powerpc_SPE
depends on BR2_RISCV_ISA_RVA || !BR2_riscv
select BR2_TOOLCHAIN_USES_GLIBC
help
This option selects glibc as the C library for the
cross-compilation toolchain.
http://www.gnu.org/software/libc/
comment "glibc needs a toolchain w/ dynamic library, kernel headers >= 3.2"
depends on BR2_USE_MMU
depends on BR2_STATIC_LIBS || !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2
# glibc >= 2.26 require kernel headers >= 3.10 on powerpc64le.
comment "glibc on powerpc64le needs a toolchain w/ headers >= 3.10"
depends on BR2_powerpc64le
depends on !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10
# Support for MIPS NAN2008 needs headers >= 4.5
comment "glibc on MIPS w/ NAN2008 needs a toolchain w/ headers >= 4.5"
depends on BR2_MIPS_NAN_2008
depends on !BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_5
config BR2_TOOLCHAIN_BUILDROOT_MUSL
bool "musl"
depends on BR2_aarch64 || BR2_arm || BR2_armeb || BR2_i386 || \
BR2_microblaze || BR2_mips || BR2_mipsel || BR2_mips64 || \
BR2_mips64el || BR2_or1k || BR2_powerpc || BR2_powerpc64 || \
BR2_powerpc64le || BR2_RISCV_64 || BR2_sh || BR2_x86_64
depends on !BR2_powerpc_SPE # not supported, build breaks
depends on !(BR2_powerpc64 || BR2_powerpc64le) || BR2_POWERPC_CPU_HAS_ALTIVEC
# sh2 nommu is supported by musl, but we don't have support
# for it in Buildroot.
depends on BR2_USE_MMU
select BR2_TOOLCHAIN_USES_MUSL
help
This option selects musl as the C library for the
cross-compilation toolchain.
https://www.musl-libc.org/
endchoice
config BR2_TOOLCHAIN_BUILDROOT_LIBC
string
default "uclibc" if BR2_TOOLCHAIN_BUILDROOT_UCLIBC
default "glibc" if BR2_TOOLCHAIN_BUILDROOT_GLIBC
default "musl" if BR2_TOOLCHAIN_BUILDROOT_MUSL
source "package/linux-headers/Config.in.host"
source "package/linux-headers/Config.in"
source "package/musl/Config.in"
source "package/uclibc/Config.in"
source "package/glibc/Config.in"
source "package/binutils/Config.in.host"
source "package/gcc/Config.in.host"
source "package/elf2flt/Config.in.host"
endif
@@ -0,0 +1,17 @@
################################################################################
#
# toolchain-buildroot
#
################################################################################
BR_LIBC = $(call qstrip,$(BR2_TOOLCHAIN_BUILDROOT_LIBC))
# Triggering the build of the host-gcc-final will automatically do the
# build of binutils, uClibc, kernel headers and all the intermediate
# gcc steps.
TOOLCHAIN_BUILDROOT_DEPENDENCIES = host-gcc-final
TOOLCHAIN_BUILDROOT_ADD_TOOLCHAIN_DEPENDENCY = NO
$(eval $(virtual-package))
+165
View File
@@ -0,0 +1,165 @@
if BR2_TOOLCHAIN_EXTERNAL
comment "Toolchain External Options"
choice
prompt "Toolchain"
comment "glibc toolchains only available with shared lib support"
depends on BR2_STATIC_LIBS
# Kept toolchains sorted by architecture in order to use some toolchain
# as default choice
# Aarch64 (use ARM toolchain by default)
source "toolchain/toolchain-external/toolchain-external-arm-aarch64/Config.in"
source "toolchain/toolchain-external/toolchain-external-linaro-aarch64/Config.in"
source "toolchain/toolchain-external/toolchain-external-codesourcery-aarch64/Config.in"
# Aarch64 big-endian
source "toolchain/toolchain-external/toolchain-external-arm-aarch64-be/Config.in"
source "toolchain/toolchain-external/toolchain-external-linaro-aarch64-be/Config.in"
# ARC
source "toolchain/toolchain-external/toolchain-external-synopsys-arc/Config.in"
# Andes
source "toolchain/toolchain-external/toolchain-external-andes-nds32/Config.in"
# ARM (use ARM toolchain by default)
source "toolchain/toolchain-external/toolchain-external-arm-arm/Config.in"
source "toolchain/toolchain-external/toolchain-external-linaro-arm/Config.in"
source "toolchain/toolchain-external/toolchain-external-codesourcery-arm/Config.in"
# ARM big-endian
source "toolchain/toolchain-external/toolchain-external-linaro-armeb/Config.in"
# MIPS (use codesourcery toolchain by default)
source "toolchain/toolchain-external/toolchain-external-codesourcery-mips/Config.in"
source "toolchain/toolchain-external/toolchain-external-codescape-img-mips/Config.in"
source "toolchain/toolchain-external/toolchain-external-codescape-mti-mips/Config.in"
# NIOSII
source "toolchain/toolchain-external/toolchain-external-codesourcery-niosII/Config.in"
# Bootlin toolchains, available for virtually all architectures
source "toolchain/toolchain-external/toolchain-external-bootlin/Config.in"
# Kept last, so it remains the non-default choice, unless there isn't
# any available toolchain profile for the currently selected
# architecture, but before toolchains from br2-external trees.
source "toolchain/toolchain-external/toolchain-external-custom/Config.in"
# Toolchains from br2-external trees, if any
source "$BR2_BASE_DIR/.br2-external.in.toolchains"
endchoice
choice
prompt "Toolchain origin"
# Keep compatibility with old defconfig files that are using
# custom toolchains, and which are therefore assuming that
# "preinstalled" in the default choice.
default BR2_TOOLCHAIN_EXTERNAL_PREINSTALLED if BR2_TOOLCHAIN_EXTERNAL_CUSTOM
config BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD
bool "Toolchain to be downloaded and installed"
help
Select this option if you want Buildroot to download and
install the toolchain. If you have selected a custom
toolchain, specify the URL in BR2_TOOLCHAIN_EXTERNAL_URL.
config BR2_TOOLCHAIN_EXTERNAL_PREINSTALLED
bool "Pre-installed toolchain"
help
Select this option if you want to use a pre-installed
toolchain. Specify the path to this toolchain in
BR2_TOOLCHAIN_EXTERNAL_PATH.
endchoice
config BR2_TOOLCHAIN_EXTERNAL_PATH
string "Toolchain path"
default ""
depends on BR2_TOOLCHAIN_EXTERNAL_PREINSTALLED
help
Path to where the external toolchain is installed. The
compiler itself is expected to be in the "bin" subdirectory
of this path.
If empty, the compiler will be searched in $PATH.
config BR2_TOOLCHAIN_EXTERNAL_GLIBC
bool
select BR2_TOOLCHAIN_USES_GLIBC
config BR2_TOOLCHAIN_EXTERNAL_UCLIBC
bool
select BR2_TOOLCHAIN_USES_UCLIBC
config BR2_TOOLCHAIN_EXTERNAL_MUSL
bool
select BR2_TOOLCHAIN_USES_MUSL
# Compatibility headers: cdefs.h, queue.h
select BR2_PACKAGE_MUSL_COMPAT_HEADERS
# Make sure the virtual-package infra checks the provider
config BR2_PACKAGE_HAS_TOOLCHAIN_EXTERNAL
bool
default y
config BR2_PACKAGE_PROVIDES_TOOLCHAIN_EXTERNAL
string
config BR2_TOOLCHAIN_EXTERNAL_PREFIX
string
# Kept toolchains sorted as in the choice above
# The toolchain Config.in.options must define
# BR2_PACKAGE_PROVIDES_TOOLCHAIN_EXTERNAL and BR2_TOOLCHAIN_EXTERNAL_PREFIX
# Aarch64
source "toolchain/toolchain-external/toolchain-external-arm-aarch64/Config.in.options"
source "toolchain/toolchain-external/toolchain-external-linaro-aarch64/Config.in.options"
source "toolchain/toolchain-external/toolchain-external-codesourcery-aarch64/Config.in.options"
# Aarch64 big-endian
source "toolchain/toolchain-external/toolchain-external-arm-aarch64-be/Config.in.options"
source "toolchain/toolchain-external/toolchain-external-linaro-aarch64-be/Config.in.options"
# ARC
source "toolchain/toolchain-external/toolchain-external-synopsys-arc/Config.in.options"
# Andes
source "toolchain/toolchain-external/toolchain-external-andes-nds32/Config.in.options"
# ARM
source "toolchain/toolchain-external/toolchain-external-arm-arm/Config.in.options"
source "toolchain/toolchain-external/toolchain-external-linaro-arm/Config.in.options"
source "toolchain/toolchain-external/toolchain-external-codesourcery-arm/Config.in.options"
# ARM big-endian
source "toolchain/toolchain-external/toolchain-external-linaro-armeb/Config.in.options"
# MIPS
source "toolchain/toolchain-external/toolchain-external-codesourcery-mips/Config.in.options"
source "toolchain/toolchain-external/toolchain-external-codescape-img-mips/Config.in.options"
source "toolchain/toolchain-external/toolchain-external-codescape-mti-mips/Config.in.options"
# NIOSII
source "toolchain/toolchain-external/toolchain-external-codesourcery-niosII/Config.in.options"
# Bootlin toolchains
source "toolchain/toolchain-external/toolchain-external-bootlin/Config.in.options"
# 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"
depends on BR2_TOOLCHAIN_EXTERNAL
help
Copy the gdbserver provided by the external toolchain to the
target.
endif # BR2_TOOLCHAIN_EXTERNAL
@@ -0,0 +1,632 @@
################################################################################
# External toolchain package infrastructure
#
# This package infrastructure implements the support for external
# toolchains, i.e toolchains that are available pre-built, ready to
# use. Such toolchain may either be readily available on the Web
# (Linaro, Sourcery CodeBench, from processor vendors) or may be built
# with tools like Crosstool-NG or Buildroot itself. So far, we have
# tested this with:
#
# * Toolchains generated by Crosstool-NG
# * Toolchains generated by Buildroot
# * Toolchains provided by Linaro for the ARM and AArch64
# architectures
# * Sourcery CodeBench toolchains (from Mentor Graphics) for the ARM,
# MIPS, PowerPC, x86_64 and NIOS 2 architectures. For the MIPS
# toolchain, the -muclibc variant isn't supported yet, only the
# default glibc-based variant is.
# * Synopsys DesignWare toolchains for ARC cores
#
# The basic principle is the following
#
# 1. If the toolchain is not pre-installed, download and extract it
# in $(TOOLCHAIN_EXTERNAL_INSTALL_DIR). Otherwise,
# $(TOOLCHAIN_EXTERNAL_INSTALL_DIR) points to were the toolchain has
# already been installed by the user.
#
# 2. For all external toolchains, perform some checks on the
# conformity between the toolchain configuration described in the
# Buildroot menuconfig system, and the real configuration of the
# external toolchain. This is for example important to make sure that
# the Buildroot configuration system knows whether the toolchain
# supports RPC, IPv6, locales, large files, etc. Unfortunately, these
# things cannot be detected automatically, since the value of these
# options (such as BR2_TOOLCHAIN_HAS_NATIVE_RPC) are needed at
# configuration time because these options are used as dependencies
# for other options. And at configuration time, we are not able to
# retrieve the external toolchain configuration.
#
# 3. Copy the libraries needed at runtime to the target directory,
# $(TARGET_DIR). Obviously, things such as the C library, the dynamic
# loader and a few other utility libraries are needed if dynamic
# applications are to be executed on the target system.
#
# 4. Copy the libraries and headers to the staging directory. This
# will allow all further calls to gcc to be made using --sysroot
# $(STAGING_DIR), which greatly simplifies the compilation of the
# packages when using external toolchains. So in the end, only the
# cross-compiler binaries remains external, all libraries and headers
# are imported into the Buildroot tree.
#
# 5. Build a toolchain wrapper which executes the external toolchain
# with a number of arguments (sysroot/march/mtune/..) hardcoded,
# so we're sure the correct configuration is always used and the
# toolchain behaves similar to an internal toolchain.
# This toolchain wrapper and symlinks are installed into
# $(HOST_DIR)/bin like for the internal toolchains, and the rest
# of Buildroot is handled identical for the 2 toolchain types.
################################################################################
#
# Definitions of where the toolchain can be found
#
TOOLCHAIN_EXTERNAL_PREFIX = $(call qstrip,$(BR2_TOOLCHAIN_EXTERNAL_PREFIX))
TOOLCHAIN_EXTERNAL_DOWNLOAD_INSTALL_DIR = $(HOST_DIR)/opt/ext-toolchain
ifeq ($(BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD),y)
TOOLCHAIN_EXTERNAL_INSTALL_DIR = $(TOOLCHAIN_EXTERNAL_DOWNLOAD_INSTALL_DIR)
else
TOOLCHAIN_EXTERNAL_INSTALL_DIR = $(call qstrip,$(BR2_TOOLCHAIN_EXTERNAL_PATH))
endif
ifeq ($(TOOLCHAIN_EXTERNAL_INSTALL_DIR),)
ifneq ($(TOOLCHAIN_EXTERNAL_PREFIX),)
# if no path set, figure it out from path
TOOLCHAIN_EXTERNAL_BIN := $(dir $(shell which $(TOOLCHAIN_EXTERNAL_PREFIX)-gcc))
endif
else
TOOLCHAIN_EXTERNAL_REL_BIN_PATH = $(call qstrip,$(BR2_TOOLCHAIN_EXTERNAL_REL_BIN_PATH))
ifeq ($(TOOLCHAIN_EXTERNAL_REL_BIN_PATH),)
TOOLCHAIN_EXTERNAL_REL_BIN_PATH = bin
endif
TOOLCHAIN_EXTERNAL_BIN = $(TOOLCHAIN_EXTERNAL_INSTALL_DIR)/$(TOOLCHAIN_EXTERNAL_REL_BIN_PATH)
endif
# If this is a buildroot toolchain, it already has a wrapper which we want to
# bypass. Since this is only evaluated after it has been extracted, we can use
# $(wildcard ...) here.
TOOLCHAIN_EXTERNAL_SUFFIX = \
$(if $(wildcard $(TOOLCHAIN_EXTERNAL_BIN)/*.br_real),.br_real)
TOOLCHAIN_EXTERNAL_CROSS = $(TOOLCHAIN_EXTERNAL_BIN)/$(TOOLCHAIN_EXTERNAL_PREFIX)-
TOOLCHAIN_EXTERNAL_CC = $(TOOLCHAIN_EXTERNAL_CROSS)gcc$(TOOLCHAIN_EXTERNAL_SUFFIX)
TOOLCHAIN_EXTERNAL_CXX = $(TOOLCHAIN_EXTERNAL_CROSS)g++$(TOOLCHAIN_EXTERNAL_SUFFIX)
TOOLCHAIN_EXTERNAL_GDC = $(TOOLCHAIN_EXTERNAL_CROSS)gdc$(TOOLCHAIN_EXTERNAL_SUFFIX)
TOOLCHAIN_EXTERNAL_FC = $(TOOLCHAIN_EXTERNAL_CROSS)gfortran$(TOOLCHAIN_EXTERNAL_SUFFIX)
TOOLCHAIN_EXTERNAL_READELF = $(TOOLCHAIN_EXTERNAL_CROSS)readelf
# Normal handling of downloaded toolchain tarball extraction.
ifeq ($(BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD),y)
# As a regular package, the toolchain gets extracted in $(@D), but
# since it's actually a fairly special package, we need it to be moved
# into TOOLCHAIN_EXTERNAL_DOWNLOAD_INSTALL_DIR.
define TOOLCHAIN_EXTERNAL_MOVE
rm -rf $(TOOLCHAIN_EXTERNAL_DOWNLOAD_INSTALL_DIR)
mkdir -p $(TOOLCHAIN_EXTERNAL_DOWNLOAD_INSTALL_DIR)
mv $(@D)/* $(TOOLCHAIN_EXTERNAL_DOWNLOAD_INSTALL_DIR)/
endef
endif
#
# Definitions of the list of libraries that should be copied to the target.
#
TOOLCHAIN_EXTERNAL_LIBS += ld*.so.* libgcc_s.so.* libatomic.so.*
ifneq ($(BR2_SSP_NONE),y)
TOOLCHAIN_EXTERNAL_LIBS += libssp.so.*
endif
ifeq ($(BR2_TOOLCHAIN_EXTERNAL_GLIBC)$(BR2_TOOLCHAIN_EXTERNAL_UCLIBC),y)
TOOLCHAIN_EXTERNAL_LIBS += libc.so.* libcrypt.so.* libdl.so.* libm.so.* libnsl.so.* libresolv.so.* librt.so.* libutil.so.*
ifeq ($(BR2_TOOLCHAIN_HAS_THREADS),y)
TOOLCHAIN_EXTERNAL_LIBS += libpthread.so.*
ifneq ($(BR2_PACKAGE_GDB)$(BR2_TOOLCHAIN_EXTERNAL_GDB_SERVER_COPY),)
TOOLCHAIN_EXTERNAL_LIBS += libthread_db.so.*
endif # gdbserver
endif # ! no threads
endif
ifeq ($(BR2_TOOLCHAIN_EXTERNAL_GLIBC),y)
TOOLCHAIN_EXTERNAL_LIBS += libnss_files.so.* libnss_dns.so.* libmvec.so.* libanl.so.*
endif
ifeq ($(BR2_TOOLCHAIN_EXTERNAL_MUSL),y)
TOOLCHAIN_EXTERNAL_LIBS += libc.so
endif
ifeq ($(BR2_INSTALL_LIBSTDCPP),y)
TOOLCHAIN_EXTERNAL_LIBS += libstdc++.so.*
endif
ifeq ($(BR2_TOOLCHAIN_HAS_FORTRAN),y)
TOOLCHAIN_EXTERNAL_LIBS += libgfortran.so.*
# fortran needs quadmath on x86 and x86_64
ifeq ($(BR2_TOOLCHAIN_HAS_LIBQUADMATH),y)
TOOLCHAIN_EXTERNAL_LIBS += libquadmath.so*
endif
endif
ifeq ($(BR2_TOOLCHAIN_HAS_OPENMP),y)
TOOLCHAIN_EXTERNAL_LIBS += libgomp.so.*
endif
ifeq ($(BR2_TOOLCHAIN_HAS_DLANG),y)
TOOLCHAIN_EXTERNAL_LIBS += libgdruntime.so* libgphobos.so*
endif
TOOLCHAIN_EXTERNAL_LIBS += $(addsuffix .so*,$(call qstrip,$(BR2_TOOLCHAIN_EXTRA_LIBS)))
#
# Definition of the CFLAGS to use with the external toolchain, as well as the
# common toolchain wrapper build arguments
#
# march/mtune/floating point mode needs to be passed to the external toolchain
# to select the right multilib variant
ifeq ($(BR2_x86_64),y)
TOOLCHAIN_EXTERNAL_CFLAGS += -m64
TOOLCHAIN_EXTERNAL_TOOLCHAIN_WRAPPER_ARGS += -DBR_64
endif
ifneq ($(GCC_TARGET_ARCH),)
TOOLCHAIN_EXTERNAL_CFLAGS += -march=$(GCC_TARGET_ARCH)
TOOLCHAIN_EXTERNAL_TOOLCHAIN_WRAPPER_ARGS += -DBR_ARCH='"$(GCC_TARGET_ARCH)"'
endif
ifneq ($(GCC_TARGET_CPU),)
TOOLCHAIN_EXTERNAL_CFLAGS += -mcpu=$(GCC_TARGET_CPU)
TOOLCHAIN_EXTERNAL_TOOLCHAIN_WRAPPER_ARGS += -DBR_CPU='"$(GCC_TARGET_CPU)"'
endif
ifneq ($(GCC_TARGET_ABI),)
TOOLCHAIN_EXTERNAL_CFLAGS += -mabi=$(GCC_TARGET_ABI)
TOOLCHAIN_EXTERNAL_TOOLCHAIN_WRAPPER_ARGS += -DBR_ABI='"$(GCC_TARGET_ABI)"'
endif
ifeq ($(BR2_TOOLCHAIN_HAS_MNAN_OPTION),y)
ifneq ($(GCC_TARGET_NAN),)
TOOLCHAIN_EXTERNAL_CFLAGS += -mnan=$(GCC_TARGET_NAN)
TOOLCHAIN_EXTERNAL_TOOLCHAIN_WRAPPER_ARGS += -DBR_NAN='"$(GCC_TARGET_NAN)"'
endif
endif
ifneq ($(GCC_TARGET_FP32_MODE),)
TOOLCHAIN_EXTERNAL_CFLAGS += -mfp$(GCC_TARGET_FP32_MODE)
TOOLCHAIN_EXTERNAL_TOOLCHAIN_WRAPPER_ARGS += -DBR_FP32_MODE='"$(GCC_TARGET_FP32_MODE)"'
endif
ifneq ($(GCC_TARGET_FPU),)
TOOLCHAIN_EXTERNAL_CFLAGS += -mfpu=$(GCC_TARGET_FPU)
TOOLCHAIN_EXTERNAL_TOOLCHAIN_WRAPPER_ARGS += -DBR_FPU='"$(GCC_TARGET_FPU)"'
endif
ifneq ($(GCC_TARGET_FLOAT_ABI),)
TOOLCHAIN_EXTERNAL_CFLAGS += -mfloat-abi=$(GCC_TARGET_FLOAT_ABI)
TOOLCHAIN_EXTERNAL_TOOLCHAIN_WRAPPER_ARGS += -DBR_FLOAT_ABI='"$(GCC_TARGET_FLOAT_ABI)"'
endif
ifneq ($(GCC_TARGET_MODE),)
TOOLCHAIN_EXTERNAL_CFLAGS += -m$(GCC_TARGET_MODE)
TOOLCHAIN_EXTERNAL_TOOLCHAIN_WRAPPER_ARGS += -DBR_MODE='"$(GCC_TARGET_MODE)"'
endif
ifeq ($(BR2_BINFMT_FLAT),y)
TOOLCHAIN_EXTERNAL_CFLAGS += -Wl,-elf2flt
TOOLCHAIN_EXTERNAL_TOOLCHAIN_WRAPPER_ARGS += -DBR_BINFMT_FLAT
endif
ifeq ($(BR2_mipsel)$(BR2_mips64el),y)
TOOLCHAIN_EXTERNAL_TOOLCHAIN_WRAPPER_ARGS += -DBR_MIPS_TARGET_LITTLE_ENDIAN
TOOLCHAIN_EXTERNAL_CFLAGS += -EL
endif
ifeq ($(BR2_mips)$(BR2_mips64),y)
TOOLCHAIN_EXTERNAL_TOOLCHAIN_WRAPPER_ARGS += -DBR_MIPS_TARGET_BIG_ENDIAN
TOOLCHAIN_EXTERNAL_CFLAGS += -EB
endif
ifeq ($(BR2_arceb),y)
TOOLCHAIN_EXTERNAL_TOOLCHAIN_WRAPPER_ARGS += -DBR_ARC_TARGET_BIG_ENDIAN
TOOLCHAIN_EXTERNAL_CFLAGS += -EB
endif
TOOLCHAIN_EXTERNAL_CFLAGS += $(call qstrip,$(BR2_TARGET_OPTIMIZATION))
ifeq ($(BR2_SOFT_FLOAT),y)
TOOLCHAIN_EXTERNAL_CFLAGS += -msoft-float
TOOLCHAIN_EXTERNAL_TOOLCHAIN_WRAPPER_ARGS += -DBR_SOFTFLOAT=1
endif
TOOLCHAIN_EXTERNAL_TOOLCHAIN_WRAPPER_ARGS += \
-DBR_CROSS_PATH_SUFFIX='"$(TOOLCHAIN_EXTERNAL_SUFFIX)"'
ifeq ($(filter $(HOST_DIR)/%,$(TOOLCHAIN_EXTERNAL_BIN)),)
# TOOLCHAIN_EXTERNAL_BIN points outside HOST_DIR => absolute path
TOOLCHAIN_EXTERNAL_TOOLCHAIN_WRAPPER_ARGS += \
-DBR_CROSS_PATH_ABS='"$(TOOLCHAIN_EXTERNAL_BIN)"'
else
# TOOLCHAIN_EXTERNAL_BIN points inside HOST_DIR => relative path
TOOLCHAIN_EXTERNAL_TOOLCHAIN_WRAPPER_ARGS += \
-DBR_CROSS_PATH_REL='"$(TOOLCHAIN_EXTERNAL_BIN:$(HOST_DIR)/%=%)"'
endif
#
# The following functions creates the symbolic links needed to get the
# cross-compilation tools visible in $(HOST_DIR)/bin. Some of
# links are done directly to the corresponding tool in the external
# toolchain installation directory, while some other links are done to
# the toolchain wrapper (preprocessor, C, C++ and Fortran compiler)
#
# We skip gdb symlink when we are building our own gdb to prevent two
# gdb's in $(HOST_DIR)/bin.
#
# The LTO support in gcc creates wrappers for ar, ranlib and nm which load
# the lto plugin. These wrappers are called *-gcc-ar, *-gcc-ranlib, and
# *-gcc-nm and should be used instead of the real programs when -flto is
# used. However, we should not add the toolchain wrapper for them, and they
# match the *cc-* pattern. Therefore, an additional case is added for *-ar,
# *-ranlib and *-nm.
define TOOLCHAIN_EXTERNAL_INSTALL_WRAPPER
$(Q)cd $(HOST_DIR)/bin; \
for i in $(TOOLCHAIN_EXTERNAL_CROSS)*; do \
base=$${i##*/}; \
case "$$base" in \
*-ar|*-ranlib|*-nm) \
ln -sf $$(echo $$i | sed 's%^$(HOST_DIR)%..%') .; \
;; \
*cc|*cc-*|*++|*++-*|*cpp|*-gfortran|*-gdc) \
ln -sf toolchain-wrapper $$base; \
;; \
*gdb|*gdbtui) \
if test "$(BR2_PACKAGE_HOST_GDB)" != "y"; then \
ln -sf $$(echo $$i | sed 's%^$(HOST_DIR)%..%') .; \
fi \
;; \
*) \
ln -sf $$(echo $$i | sed 's%^$(HOST_DIR)%..%') .; \
;; \
esac; \
done
endef
# Various utility functions used by the external toolchain package
# infrastructure. Those functions are mainly responsible for:
#
# - installation the toolchain libraries to $(TARGET_DIR)
# - copying the toolchain sysroot to $(STAGING_DIR)
# - installing a gdbinit file
#
# Details about sysroot directory selection.
#
# To find the sysroot directory, we use the trick of looking for the
# 'libc.a' file with the -print-file-name gcc option, and then
# mangling the path to find the base directory of the sysroot.
#
# Note that we do not use the -print-sysroot option, because it is
# only available since gcc 4.4.x, and we only recently dropped support
# for 4.2.x and 4.3.x.
#
# When doing this, we don't pass any option to gcc that could select a
# multilib variant (such as -march) as we want the "main" sysroot,
# which contains all variants of the C library in the case of multilib
# toolchains. We use the TARGET_CC_NO_SYSROOT variable, which is the
# path of the cross-compiler, without the --sysroot=$(STAGING_DIR),
# since what we want to find is the location of the original toolchain
# sysroot. This "main" sysroot directory is stored in SYSROOT_DIR.
#
# Then, multilib toolchains are a little bit more complicated, since
# they in fact have multiple sysroots, one for each variant supported
# by the toolchain. So we need to find the particular sysroot we're
# interested in.
#
# To do so, we ask the compiler where its sysroot is by passing all
# flags (including -march and al.), except the --sysroot flag since we
# want to the compiler to tell us where its original sysroot
# is. ARCH_SUBDIR will contain the subdirectory, in the main
# SYSROOT_DIR, that corresponds to the selected architecture
# variant. ARCH_SYSROOT_DIR will contain the full path to this
# location.
#
# One might wonder why we don't just bother with ARCH_SYSROOT_DIR. The
# fact is that in multilib toolchains, the header files are often only
# present in the main sysroot, and only the libraries are available in
# each variant-specific sysroot directory.
# toolchain_find_sysroot returns the sysroot location for the given
# compiler + flags. We need to handle cases where libc.a is in:
#
# - lib/
# - usr/lib/
# - lib32/
# - lib64/
# - lib32-fp/ (Cavium toolchain)
# - lib64-fp/ (Cavium toolchain)
# - usr/lib/<tuple>/ (Linaro toolchain)
#
# And variations on these.
define toolchain_find_sysroot
$$(printf $(call toolchain_find_libc_a,$(1)) | sed -r -e 's:/(usr/)?lib(32|64)?([^/]*)?/([^/]*/)?libc\.a:/:')
endef
# Returns the lib subdirectory for the given compiler + flags (i.e
# typically lib32 or lib64 for some toolchains)
define toolchain_find_libdir
$$(printf $(call toolchain_find_libc_a,$(1)) | sed -r -e 's:.*/(usr/)?(lib(32|64)?([^/]*)?(/[^/]*)?)/libc.a:\2:')
endef
# Returns the location of the libc.a file for the given compiler + flags
define toolchain_find_libc_a
$$(readlink -f $$(LANG=C $(1) -print-file-name=libc.a))
endef
# Integration of the toolchain into Buildroot: find the main sysroot
# and the variant-specific sysroot, then copy the needed libraries to
# the $(TARGET_DIR) and copy the whole sysroot (libraries and headers)
# to $(STAGING_DIR).
#
# Variables are defined as follows:
#
# SYSROOT_DIR: the main sysroot directory, deduced from the location of
# the libc.a file in the default multilib variant, by
# removing the usr/lib[32|64]/libc.a part of the path.
# Ex: /x-tools/mips-2011.03/mips-linux-gnu/libc/
#
# ARCH_SYSROOT_DIR: the sysroot of the selected multilib variant,
# deduced from the location of the libc.a file in the
# selected multilib variant (taking into account the
# CFLAGS), by removing usr/lib[32|64]/libc.a at the end
# of the path.
# Ex: /x-tools/mips-2011.03/mips-linux-gnu/libc/mips16/soft-float/el/
#
# ARCH_LIB_DIR: 'lib', 'lib32' or 'lib64' depending on where libraries
# are stored. Deduced from the location of the libc.a file
# in the selected multilib variant, by looking at
# usr/lib??/libc.a.
# Ex: lib
#
# ARCH_SUBDIR: the relative location of the sysroot of the selected
# multilib variant compared to the main sysroot.
# Ex: mips16/soft-float/el
#
# SUPPORT_LIB_DIR: some toolchains, such as recent Linaro toolchains,
# store GCC support libraries (libstdc++,
# libgcc_s, etc.) outside of the sysroot. In
# this case, SUPPORT_LIB_DIR is set to a
# non-empty value, and points to the directory
# where these support libraries are
# available. Those libraries will be copied to
# our sysroot, and the directory will also be
# considered when searching libraries for copy
# to the target filesystem.
#
# Please be very careful to check the major toolchain sources:
# Buildroot, Crosstool-NG, CodeSourcery and Linaro
# before doing any modification on the below logic.
ifeq ($(BR2_STATIC_LIBS),)
define TOOLCHAIN_EXTERNAL_INSTALL_TARGET_LIBS
$(Q)$(call MESSAGE,"Copying external toolchain libraries to target...")
$(Q)for libpattern in $(TOOLCHAIN_EXTERNAL_LIBS); do \
$(call copy_toolchain_lib_root,$$libpattern); \
done
endef
endif
ifeq ($(BR2_TOOLCHAIN_EXTERNAL_GDB_SERVER_COPY),y)
define TOOLCHAIN_EXTERNAL_INSTALL_TARGET_GDBSERVER
$(Q)$(call MESSAGE,"Copying gdbserver")
$(Q)ARCH_SYSROOT_DIR="$(call toolchain_find_sysroot,$(TOOLCHAIN_EXTERNAL_CC) $(TOOLCHAIN_EXTERNAL_CFLAGS))" ; \
ARCH_LIB_DIR="$(call toolchain_find_libdir,$(TOOLCHAIN_EXTERNAL_CC) $(TOOLCHAIN_EXTERNAL_CFLAGS))" ; \
gdbserver_found=0 ; \
for d in $${ARCH_SYSROOT_DIR}/usr \
$${ARCH_SYSROOT_DIR}/../debug-root/usr \
$${ARCH_SYSROOT_DIR}/usr/$${ARCH_LIB_DIR} \
$(TOOLCHAIN_EXTERNAL_INSTALL_DIR); do \
if test -f $${d}/bin/gdbserver ; then \
install -m 0755 -D $${d}/bin/gdbserver $(TARGET_DIR)/usr/bin/gdbserver ; \
gdbserver_found=1 ; \
break ; \
fi ; \
done ; \
if [ $${gdbserver_found} -eq 0 ] ; then \
echo "Could not find gdbserver in external toolchain" ; \
exit 1 ; \
fi
endef
endif
define TOOLCHAIN_EXTERNAL_INSTALL_SYSROOT_LIBS
$(Q)SYSROOT_DIR="$(call toolchain_find_sysroot,$(TOOLCHAIN_EXTERNAL_CC))" ; \
ARCH_SYSROOT_DIR="$(call toolchain_find_sysroot,$(TOOLCHAIN_EXTERNAL_CC) $(TOOLCHAIN_EXTERNAL_CFLAGS))" ; \
ARCH_LIB_DIR="$(call toolchain_find_libdir,$(TOOLCHAIN_EXTERNAL_CC) $(TOOLCHAIN_EXTERNAL_CFLAGS))" ; \
SUPPORT_LIB_DIR="" ; \
if test `find $${ARCH_SYSROOT_DIR} -name 'libstdc++.a' | wc -l` -eq 0 ; then \
LIBSTDCPP_A_LOCATION=$$(LANG=C $(TOOLCHAIN_EXTERNAL_CC) $(TOOLCHAIN_EXTERNAL_CFLAGS) -print-file-name=libstdc++.a) ; \
if [ -e "$${LIBSTDCPP_A_LOCATION}" ]; then \
SUPPORT_LIB_DIR=`readlink -f $${LIBSTDCPP_A_LOCATION} | sed -r -e 's:libstdc\+\+\.a::'` ; \
fi ; \
fi ; \
if [ "$${SYSROOT_DIR}" == "$${ARCH_SYSROOT_DIR}" ] ; then \
ARCH_SUBDIR="" ; \
elif [ "`dirname $${ARCH_SYSROOT_DIR}`" = "`dirname $${SYSROOT_DIR}`" ] ; then \
SYSROOT_DIR_DIRNAME=`dirname $${SYSROOT_DIR}`/ ; \
ARCH_SUBDIR=`echo $${ARCH_SYSROOT_DIR} | sed -r -e "s:^$${SYSROOT_DIR_DIRNAME}(.*)/$$:\1:"` ; \
else \
ARCH_SUBDIR=`echo $${ARCH_SYSROOT_DIR} | sed -r -e "s:^$${SYSROOT_DIR}(.*)/$$:\1:"` ; \
fi ; \
$(call MESSAGE,"Copying external toolchain sysroot to staging...") ; \
$(call copy_toolchain_sysroot,$${SYSROOT_DIR},$${ARCH_SYSROOT_DIR},$${ARCH_SUBDIR},$${ARCH_LIB_DIR},$${SUPPORT_LIB_DIR})
endef
# Create a symlink from (usr/)$(ARCH_LIB_DIR) to lib.
# Note: the skeleton package additionally creates lib32->lib or lib64->lib
# (as appropriate)
#
# $1: destination directory (TARGET_DIR / STAGING_DIR)
create_lib_symlinks = \
$(Q)DESTDIR="$(strip $1)" ; \
ARCH_LIB_DIR="$(call toolchain_find_libdir,$(TOOLCHAIN_EXTERNAL_CC) $(TOOLCHAIN_EXTERNAL_CFLAGS))" ; \
if [ ! -e "$${DESTDIR}/$${ARCH_LIB_DIR}" -a ! -e "$${DESTDIR}/usr/$${ARCH_LIB_DIR}" ]; then \
relpath="$(call relpath_prefix,$${ARCH_LIB_DIR})" ; \
ln -snf $${relpath}lib "$${DESTDIR}/$${ARCH_LIB_DIR}" ; \
ln -snf $${relpath}lib "$${DESTDIR}/usr/$${ARCH_LIB_DIR}" ; \
fi
define TOOLCHAIN_EXTERNAL_CREATE_STAGING_LIB_SYMLINK
$(call create_lib_symlinks,$(STAGING_DIR))
endef
define TOOLCHAIN_EXTERNAL_CREATE_TARGET_LIB_SYMLINK
$(call create_lib_symlinks,$(TARGET_DIR))
endef
#
# Generate gdbinit file for use with Buildroot
#
define TOOLCHAIN_EXTERNAL_INSTALL_GDBINIT
$(Q)if test -f $(TARGET_CROSS)gdb ; then \
$(call MESSAGE,"Installing gdbinit"); \
$(gen_gdbinit_file); \
fi
endef
# GCC installs a libstdcxx-...so-gdb.py file that gdb will load automatically,
# but it contains hardcoded paths referring to the location where the (external)
# toolchain was built. Fix up these paths so that the pretty printers can be
# loaded automatically.
# By default, the pretty printers are installed in
# $(datadir)/gcc-$(gcc_version)/python but this could have been overwritten with
# the gcc configure option: --with-python-dir. We thus have to search the
# correct path first.
define TOOLCHAIN_EXTERNAL_FIXUP_PRETTY_PRINTER_LOADER
$(Q)loadfiles=$$(find $(STAGING_DIR) -name 'libstdc++.so*-gdb.py' 2>/dev/null); \
pythondir=$$(find $(TOOLCHAIN_EXTERNAL_DOWNLOAD_INSTALL_DIR) -path '*/libstdcxx/__init__.py' 2>/dev/null | sed 's%/libstdcxx/__init__.py%%' | head -n1); \
if [ -n "$$loadfiles" ] && [ -n "$$pythondir" ]; then \
echo "Fixing up hardcoded paths in GDB pretty-printer auto-load file(s) for libstdcxx: $$loadfiles"; \
sed -ri \
-e 's%^libdir\s*=.*%libdir = "$(STAGING_DIR)/lib"%' \
-e "s%^pythondir\s*=.*%pythondir = '$$pythondir'%" \
$$loadfiles; \
fi
endef
# uClibc-ng dynamic loader is called ld-uClibc.so.1, but gcc is not
# patched specifically for uClibc-ng, so it continues to generate
# binaries that expect the dynamic loader to be named ld-uClibc.so.0,
# like with the original uClibc. Therefore, we create an additional
# symbolic link to make uClibc-ng systems work properly.
define TOOLCHAIN_EXTERNAL_FIXUP_UCLIBCNG_LDSO
$(Q)if test -e $(TARGET_DIR)/lib/ld-uClibc.so.1; then \
ln -sf ld-uClibc.so.1 $(TARGET_DIR)/lib/ld-uClibc.so.0 ; \
fi
$(Q)if test -e $(TARGET_DIR)/lib/ld64-uClibc.so.1; then \
ln -sf ld64-uClibc.so.1 $(TARGET_DIR)/lib/ld64-uClibc.so.0 ; \
fi
endef
define TOOLCHAIN_EXTERNAL_INSTALL_TARGET_LDD
$(Q)if test -f $(STAGING_DIR)/usr/bin/ldd ; then \
$(INSTALL) -D $(STAGING_DIR)/usr/bin/ldd $(TARGET_DIR)/usr/bin/ldd ; \
$(SED) 's:.*/bin/bash:#!/bin/sh:' $(TARGET_DIR)/usr/bin/ldd ; \
fi
endef
################################################################################
# inner-toolchain-external-package -- defines the generic installation rules
# for external toolchain packages
#
# argument 1 is the lowercase package name
# argument 2 is the uppercase package name, including a HOST_ prefix
# for host packages
# argument 3 is the uppercase package name, without the HOST_ prefix
# for host packages
# argument 4 is the type (target or host)
################################################################################
define inner-toolchain-external-package
$(2)_INSTALL_STAGING = YES
$(2)_ADD_TOOLCHAIN_DEPENDENCY = NO
# In fact, we don't need to download the toolchain, since it is already
# available on the system, so force the site and source to be empty so
# that nothing will be downloaded/extracted.
ifeq ($$(BR2_TOOLCHAIN_EXTERNAL_PREINSTALLED),y)
$(2)_SITE =
$(2)_SOURCE =
endif
ifeq ($$(BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD),y)
$(2)_EXCLUDES = usr/lib/locale/*
$(2)_POST_EXTRACT_HOOKS += \
TOOLCHAIN_EXTERNAL_MOVE
endif
# Checks for an already installed toolchain: check the toolchain
# location, check that it is usable, and then verify that it
# matches the configuration provided in Buildroot: ABI, C++ support,
# kernel headers version, type of C library and all C library features.
define $(2)_CONFIGURE_CMDS
$$(Q)$$(call check_cross_compiler_exists,$$(TOOLCHAIN_EXTERNAL_CC))
$$(Q)$$(call check_unusable_toolchain,$$(TOOLCHAIN_EXTERNAL_CC))
$$(Q)SYSROOT_DIR="$$(call toolchain_find_sysroot,$$(TOOLCHAIN_EXTERNAL_CC))" ; \
$$(call check_kernel_headers_version,\
$$(BUILD_DIR),\
$$(call toolchain_find_sysroot,$$(TOOLCHAIN_EXTERNAL_CC)),\
$$(call qstrip,$$(BR2_TOOLCHAIN_HEADERS_AT_LEAST)),\
$$(if $$(BR2_TOOLCHAIN_EXTERNAL_CUSTOM),loose,strict)); \
$$(call check_gcc_version,$$(TOOLCHAIN_EXTERNAL_CC),\
$$(call qstrip,$$(BR2_TOOLCHAIN_GCC_AT_LEAST))); \
if test "$$(BR2_arm)" = "y" ; then \
$$(call check_arm_abi,\
"$$(TOOLCHAIN_EXTERNAL_CC) $$(TOOLCHAIN_EXTERNAL_CFLAGS)") ; \
fi ; \
if test "$$(BR2_INSTALL_LIBSTDCPP)" = "y" ; then \
$$(call check_cplusplus,$$(TOOLCHAIN_EXTERNAL_CXX)) ; \
fi ; \
if test "$$(BR2_TOOLCHAIN_HAS_DLANG)" = "y" ; then \
$$(call check_dlang,$$(TOOLCHAIN_EXTERNAL_GDC)) ; \
fi ; \
if test "$$(BR2_TOOLCHAIN_HAS_FORTRAN)" = "y" ; then \
$$(call check_fortran,$$(TOOLCHAIN_EXTERNAL_FC)) ; \
fi ; \
if test "$$(BR2_TOOLCHAIN_HAS_OPENMP)" = "y" ; then \
$$(call check_openmp,$$(TOOLCHAIN_EXTERNAL_CC)) ; \
fi ; \
if test "$$(BR2_TOOLCHAIN_EXTERNAL_UCLIBC)" = "y" ; then \
$$(call check_uclibc,$$$${SYSROOT_DIR}) ; \
elif test "$$(BR2_TOOLCHAIN_EXTERNAL_MUSL)" = "y" ; then \
$$(call check_musl,\
"$$(TOOLCHAIN_EXTERNAL_CC) $$(TOOLCHAIN_EXTERNAL_CFLAGS)") ; \
else \
$$(call check_glibc,$$$${SYSROOT_DIR}) ; \
fi
$$(Q)$$(call check_toolchain_ssp,$$(TOOLCHAIN_EXTERNAL_CC),$(BR2_SSP_OPTION))
endef
$(2)_TOOLCHAIN_WRAPPER_ARGS += $$(TOOLCHAIN_EXTERNAL_TOOLCHAIN_WRAPPER_ARGS)
$(2)_BUILD_CMDS = $$(TOOLCHAIN_WRAPPER_BUILD)
define $(2)_INSTALL_STAGING_CMDS
$$(TOOLCHAIN_WRAPPER_INSTALL)
$$(TOOLCHAIN_EXTERNAL_CREATE_STAGING_LIB_SYMLINK)
$$(TOOLCHAIN_EXTERNAL_INSTALL_SYSROOT_LIBS)
$$(TOOLCHAIN_EXTERNAL_INSTALL_WRAPPER)
$$(TOOLCHAIN_EXTERNAL_INSTALL_GDBINIT)
$$(TOOLCHAIN_EXTERNAL_FIXUP_PRETTY_PRINTER_LOADER)
endef
# Even though we're installing things in both the staging, the host
# and the target directory, we do everything within the
# install-staging step, arbitrarily.
define $(2)_INSTALL_TARGET_CMDS
$$(TOOLCHAIN_EXTERNAL_CREATE_TARGET_LIB_SYMLINK)
$$(TOOLCHAIN_EXTERNAL_INSTALL_TARGET_LIBS)
$$(TOOLCHAIN_EXTERNAL_INSTALL_TARGET_GDBSERVER)
$$(TOOLCHAIN_EXTERNAL_FIXUP_UCLIBCNG_LDSO)
$$(TOOLCHAIN_EXTERNAL_INSTALL_TARGET_LDD)
endef
# Call the generic package infrastructure to generate the necessary
# make targets
$(call inner-generic-package,$(1),$(2),$(3),$(4))
endef
toolchain-external-package = $(call inner-toolchain-external-package,$(pkgname),$(call UPPERCASE,$(pkgname)),$(call UPPERCASE,$(pkgname)),target)
@@ -0,0 +1,15 @@
config BR2_TOOLCHAIN_EXTERNAL_ANDES_NDS32
bool "Andes nds32"
depends on BR2_nds32
depends on !BR2_STATIC_LIBS
depends on BR2_HOSTARCH = "x86_64" || BR2_HOSTARCH = "x86"
select BR2_HOSTARCH_NEEDS_IA32_LIBS
select BR2_TOOLCHAIN_GCC_AT_LEAST_8
select BR2_TOOLCHAIN_EXTERNAL_GLIBC
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_17
select BR2_TOOLCHAIN_HAS_NATIVE_RPC
select BR2_TOOLCHAIN_HAS_SSP
help
nds32 toolchain for the nds32 architecture. It uses GCC
8.2.1, GDB 8.1.1, glibc 2.28, Binutils 2.30. It generates
code that runs on ae3xx platform
@@ -0,0 +1,9 @@
if BR2_TOOLCHAIN_EXTERNAL_ANDES_NDS32
config BR2_TOOLCHAIN_EXTERNAL_PREFIX
default "nds32le-linux"
config BR2_PACKAGE_PROVIDES_TOOLCHAIN_EXTERNAL
default "toolchain-external-andes-nds32"
endif
@@ -0,0 +1,2 @@
# From https://github.com/vincentzwc/prebuilt-nds32-toolchain/releases/download/20180521/nds32le-linux-glibc-v3-upstream.tar.gz
sha256 6050601df85ad93a4c211c1d57ed3773edb62aa505f7e07d7d555652e83af2cc nds32le-linux-glibc-v3-upstream.tar.gz
@@ -0,0 +1,10 @@
################################################################################
#
# toolchain-external-andes-nds32
#
################################################################################
TOOLCHAIN_EXTERNAL_ANDES_NDS32_SITE = https://github.com/vincentzwc/prebuilt-nds32-toolchain/releases/download/20180521
TOOLCHAIN_EXTERNAL_ANDES_NDS32_SOURCE = nds32le-linux-glibc-v3-upstream.tar.gz
$(eval $(toolchain-external-package))
@@ -0,0 +1,19 @@
config BR2_TOOLCHAIN_EXTERNAL_ARM_AARCH64_BE
bool "Arm AArch64 BE 2021.07"
depends on BR2_aarch64_be
depends on BR2_HOSTARCH = "x86_64"
depends on !BR2_STATIC_LIBS
select BR2_TOOLCHAIN_EXTERNAL_GLIBC
select BR2_TOOLCHAIN_HAS_SSP
select BR2_INSTALL_LIBSTDCPP
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_20
select BR2_TOOLCHAIN_GCC_AT_LEAST_10
select BR2_TOOLCHAIN_HAS_FORTRAN
select BR2_TOOLCHAIN_HAS_OPENMP
help
Arm toolchain for the AArch64 Big Endian architecture.
This is the same toolchain that was previously distributed by
Linaro.
https://developer.arm.com/open-source/gnu-toolchain
@@ -0,0 +1,9 @@
if BR2_TOOLCHAIN_EXTERNAL_ARM_AARCH64_BE
config BR2_TOOLCHAIN_EXTERNAL_PREFIX
default "aarch64_be-none-linux-gnu"
config BR2_PACKAGE_PROVIDES_TOOLCHAIN_EXTERNAL
default "toolchain-external-arm-aarch64-be"
endif
@@ -0,0 +1,4 @@
# From https://developer.arm.com/-/media/Files/downloads/gnu-a/10.3-2021.07/binrel/gcc-arm-10.3-2021.07-x86_64-aarch64_be-none-linux-gnu.tar.xz.asc
md5 54cbaef7db7eb3de27732500f9da9c6f gcc-arm-10.3-2021.07-x86_64-aarch64_be-none-linux-gnu.tar.xz
# locally calculated
sha256 63c34cac07ceadd74620ea87f27af1aa6a6f55c20a5bc116af21a59ddb6b6a6a gcc-arm-10.3-2021.07-x86_64-aarch64_be-none-linux-gnu.tar.xz
@@ -0,0 +1,12 @@
################################################################################
#
# toolchain-external-arm-aarch64-be
#
################################################################################
TOOLCHAIN_EXTERNAL_ARM_AARCH64_BE_VERSION = 2021.07
TOOLCHAIN_EXTERNAL_ARM_AARCH64_BE_SITE = https://developer.arm.com/-/media/Files/downloads/gnu-a/10.3-$(TOOLCHAIN_EXTERNAL_ARM_AARCH64_BE_VERSION)/binrel
TOOLCHAIN_EXTERNAL_ARM_AARCH64_BE_SOURCE = gcc-arm-10.3-$(TOOLCHAIN_EXTERNAL_ARM_AARCH64_BE_VERSION)-x86_64-aarch64_be-none-linux-gnu.tar.xz
$(eval $(toolchain-external-package))
@@ -0,0 +1,19 @@
config BR2_TOOLCHAIN_EXTERNAL_ARM_AARCH64
bool "Arm AArch64 2021.07"
depends on BR2_aarch64
depends on BR2_HOSTARCH = "x86_64"
depends on !BR2_STATIC_LIBS
select BR2_TOOLCHAIN_EXTERNAL_GLIBC
select BR2_TOOLCHAIN_HAS_SSP
select BR2_INSTALL_LIBSTDCPP
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_20
select BR2_TOOLCHAIN_GCC_AT_LEAST_10
select BR2_TOOLCHAIN_HAS_FORTRAN
select BR2_TOOLCHAIN_HAS_OPENMP
help
Arm toolchain for the AArch64 architecture.
This is the same toolchain that was previously distributed by
Linaro.
https://developer.arm.com/open-source/gnu-toolchain
@@ -0,0 +1,9 @@
if BR2_TOOLCHAIN_EXTERNAL_ARM_AARCH64
config BR2_TOOLCHAIN_EXTERNAL_PREFIX
default "aarch64-none-linux-gnu"
config BR2_PACKAGE_PROVIDES_TOOLCHAIN_EXTERNAL
default "toolchain-external-arm-aarch64"
endif
@@ -0,0 +1,4 @@
# From https://developer.arm.com/-/media/Files/downloads/gnu-a/10.3-2021.07/binrel/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu.tar.xz.asc
md5 07bbe2b5277b75ba36a924e9136366a4 gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu.tar.xz
# locally calculated
sha256 1e33d53dea59c8de823bbdfe0798280bdcd138636c7060da9d77a97ded095a84 gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu.tar.xz
@@ -0,0 +1,12 @@
################################################################################
#
# toolchain-external-arm-aarch64
#
################################################################################
TOOLCHAIN_EXTERNAL_ARM_AARCH64_VERSION = 2021.07
TOOLCHAIN_EXTERNAL_ARM_AARCH64_SITE = https://developer.arm.com/-/media/Files/downloads/gnu-a/10.3-$(TOOLCHAIN_EXTERNAL_ARM_AARCH64_VERSION)/binrel
TOOLCHAIN_EXTERNAL_ARM_AARCH64_SOURCE = gcc-arm-10.3-$(TOOLCHAIN_EXTERNAL_ARM_AARCH64_VERSION)-x86_64-aarch64-none-linux-gnu.tar.xz
$(eval $(toolchain-external-package))
@@ -0,0 +1,31 @@
comment "Arm toolchains available for Cortex-A with NEON + EABIhf"
depends on BR2_arm
depends on !BR2_ARM_CPU_ARMV7A || !BR2_ARM_EABIHF || !BR2_ARM_CPU_HAS_NEON
depends on !BR2_STATIC_LIBS
config BR2_TOOLCHAIN_EXTERNAL_ARM_ARM
bool "Arm ARM 2021.07"
depends on BR2_arm
depends on BR2_ARM_CPU_ARMV7A || BR2_ARM_CPU_ARMV8A
depends on BR2_ARM_CPU_HAS_NEON
depends on BR2_HOSTARCH = "x86_64"
depends on BR2_ARM_EABIHF
depends on !BR2_STATIC_LIBS
select BR2_TOOLCHAIN_EXTERNAL_GLIBC
select BR2_TOOLCHAIN_HAS_SSP
select BR2_INSTALL_LIBSTDCPP
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_20
select BR2_TOOLCHAIN_GCC_AT_LEAST_10
select BR2_TOOLCHAIN_HAS_FORTRAN
select BR2_TOOLCHAIN_HAS_OPENMP
help
Arm toolchain for the ARM architecture. It uses GCC 10.3,
GDB 10.2, glibc 2.33, Binutils 2.36.1. It generates code
that runs on all Cortex-A profile devices. The code
generated uses the hard floating point calling convention,
and uses the NEON FPU instructions.
This is the same toolchain that was previously distributed by
Linaro.
https://developer.arm.com/open-source/gnu-toolchain
@@ -0,0 +1,9 @@
if BR2_TOOLCHAIN_EXTERNAL_ARM_ARM
config BR2_TOOLCHAIN_EXTERNAL_PREFIX
default "arm-none-linux-gnueabihf"
config BR2_PACKAGE_PROVIDES_TOOLCHAIN_EXTERNAL
default "toolchain-external-arm-arm"
endif
@@ -0,0 +1,4 @@
# From https://developer.arm.com/-/media/Files/downloads/gnu-a/10.3-2021.07/binrel/gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf.tar.xz.asc
md5 87ec580b290df2febc7c476f59484635 gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf.tar.xz
# locally calculated
sha256 aa074fa8371a4f73fecbd16bd62c8b1945f23289e26414794f130d6ccdf8e39c gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf.tar.xz
@@ -0,0 +1,12 @@
################################################################################
#
# toolchain-external-arm-arm
#
################################################################################
TOOLCHAIN_EXTERNAL_ARM_ARM_VERSION = 2021.07
TOOLCHAIN_EXTERNAL_ARM_ARM_SITE = https://developer.arm.com/-/media/Files/downloads/gnu-a/10.3-$(TOOLCHAIN_EXTERNAL_ARM_ARM_VERSION)/binrel
TOOLCHAIN_EXTERNAL_ARM_ARM_SOURCE = gcc-arm-10.3-$(TOOLCHAIN_EXTERNAL_ARM_ARM_VERSION)-x86_64-arm-none-linux-gnueabihf.tar.xz
$(eval $(toolchain-external-package))
@@ -0,0 +1,9 @@
config BR2_TOOLCHAIN_EXTERNAL_BOOTLIN
bool "Bootlin toolchains"
depends on BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_ARCH_SUPPORTS
depends on BR2_HOSTARCH = "x86_64"
help
Bootlin toolchains are built using Buildroot for a large
number of architectures and C libraries configurations.
https://toolchains.bootlin.com
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,340 @@
# This file was auto-generated by support/scripts/gen-bootlin-toolchains
# Do not edit
# From https://toolchains.bootlin.com/downloads/releases/toolchains/aarch64/tarballs/aarch64--glibc--bleeding-edge-2020.08-1.sha256
sha256 212f3c05f3b2263b0e2f902d055aecc2755eba10c0011927788a38faee8fc9aa aarch64--glibc--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/aarch64/tarballs/aarch64--glibc--stable-2020.08-1.sha256
sha256 8ab7a2f17cb96621b048ab0a872650dd62faa54cd74c961b9902b8c04bff7dd1 aarch64--glibc--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/aarch64/tarballs/aarch64--musl--bleeding-edge-2020.08-1.sha256
sha256 3cf00c1ccaf16d0fbc526529789791de1cf98b918ff812e779f8400d40b6c048 aarch64--musl--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/aarch64/tarballs/aarch64--musl--stable-2020.08-1.sha256
sha256 8319d27e3e637f32ecbdf49ceee2e9b7768b32d3ec7c92c888ff52e6f062bde4 aarch64--musl--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/aarch64/tarballs/aarch64--uclibc--bleeding-edge-2020.08-1.sha256
sha256 57fe5cecf37778b35dd09d9a016a1d6d9d7bb0e96ffcc5565e0aa483a46ea3db aarch64--uclibc--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/aarch64/tarballs/aarch64--uclibc--stable-2020.08-1.sha256
sha256 04176f56ac977215c5257c307cece2d32e03770b96380e09c50379d4d84a5b39 aarch64--uclibc--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/aarch64be/tarballs/aarch64be--glibc--bleeding-edge-2020.08-1.sha256
sha256 9631a57809d2fc2c7bb82bdd79d7647ccabe193126cc59ff9721a573d8870510 aarch64be--glibc--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/aarch64be/tarballs/aarch64be--glibc--stable-2020.08-1.sha256
sha256 71e24a2a205726d7d8ec56ead13b7eb427d5aed0e057a94ee06688334a07e6dd aarch64be--glibc--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/aarch64be/tarballs/aarch64be--uclibc--bleeding-edge-2020.08-1.sha256
sha256 76017614f0e7770499b5d18943398e51ae1c36d075cf8fba90ea050a29cad747 aarch64be--uclibc--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/aarch64be/tarballs/aarch64be--uclibc--stable-2020.08-1.sha256
sha256 a3bff78e98b2e17ab142ec630f9184f0cd4be6f1f313fdc112d89a843d92cedc aarch64be--uclibc--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/arcle-750d/tarballs/arcle-750d--uclibc--bleeding-edge-2020.08-1.sha256
sha256 e33570bdddc08d01b0da81ef6c3b240c6e0a4948f0100314b0be63c18c5f75db arcle-750d--uclibc--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/arcle-750d/tarballs/arcle-750d--uclibc--stable-2020.08-1.sha256
sha256 bae0cbcab3b3b0149503aef6003dd816102b261461e37d89d32ffe9eb7f5dab9 arcle-750d--uclibc--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/arcle-hs38/tarballs/arcle-hs38--glibc--bleeding-edge-2020.08-1.sha256
sha256 219be8c5390da6830e7529cb0a611996a8c9451bfa1560d7bda4ed5b182f7744 arcle-hs38--glibc--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/arcle-hs38/tarballs/arcle-hs38--glibc--stable-2020.08-1.sha256
sha256 ca73399803b6bb46cf27aa2bef5f98eae05fb2fa547403777354067117b44f2f arcle-hs38--glibc--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/arcle-hs38/tarballs/arcle-hs38--uclibc--bleeding-edge-2020.08-1.sha256
sha256 65e1408112518c1b31350285838f000a78a0dcd78880842933ef80d64d023967 arcle-hs38--uclibc--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/arcle-hs38/tarballs/arcle-hs38--uclibc--stable-2020.08-1.sha256
sha256 f0839aa541fe3f29660387c731b52e495bf1b285127b9fba91350b5b67f8ff3e arcle-hs38--uclibc--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/armv5-eabi/tarballs/armv5-eabi--glibc--bleeding-edge-2020.08-1.sha256
sha256 261e73520fb211f63a88ecce0689d3647acf295527bd6bd16e88e1bd65b3c603 armv5-eabi--glibc--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/armv5-eabi/tarballs/armv5-eabi--glibc--stable-2020.08-1.sha256
sha256 ed175329057693e496b0d6dbac1ff9db8f8f34737530ab38b5ed677afaefad03 armv5-eabi--glibc--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/armv5-eabi/tarballs/armv5-eabi--musl--bleeding-edge-2020.08-1.sha256
sha256 486b2424321b9866c2677e1dccd3a999394a86f890542c0c63edd5f9456bc4f9 armv5-eabi--musl--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/armv5-eabi/tarballs/armv5-eabi--musl--stable-2020.08-1.sha256
sha256 732edab571d017c550d74b8c53dc703fc650de7aab66e68c70a0bc19d66d0a22 armv5-eabi--musl--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/armv5-eabi/tarballs/armv5-eabi--uclibc--bleeding-edge-2020.08-1.sha256
sha256 5e11ec24b910c43f24577b41a38cded192e443c0606be60944fe85b0fbf4b2dd armv5-eabi--uclibc--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/armv5-eabi/tarballs/armv5-eabi--uclibc--stable-2020.08-1.sha256
sha256 cf6a668d4f30a4a2e76a0e88177e1301342cc011e94ea399353e77ede0efbb22 armv5-eabi--uclibc--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/armv6-eabihf/tarballs/armv6-eabihf--glibc--bleeding-edge-2020.08-1.sha256
sha256 0c66147f05b21529311338e246ed285f9f0f4830af0d4db28e401160a81d1b4f armv6-eabihf--glibc--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/armv6-eabihf/tarballs/armv6-eabihf--glibc--stable-2020.08-1.sha256
sha256 539e31b3bdcf76c3d6710951c74fbe682e2de8da4d110b981e9108b656890f4a armv6-eabihf--glibc--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/armv6-eabihf/tarballs/armv6-eabihf--musl--bleeding-edge-2020.08-1.sha256
sha256 e8c05fb7b909dfd5a42f6de78d1b20605c453a9aea219981966d213ee98968e2 armv6-eabihf--musl--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/armv6-eabihf/tarballs/armv6-eabihf--musl--stable-2020.08-1.sha256
sha256 68e43e3cd0e1fdd5c2b3ab718368f6ee24824725c641e148ef0a0da57f872034 armv6-eabihf--musl--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/armv6-eabihf/tarballs/armv6-eabihf--uclibc--bleeding-edge-2020.08-1.sha256
sha256 749bb97f7535414c3096564f6e790d1e43ab8c406282480937d8f34478ac7a35 armv6-eabihf--uclibc--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/armv6-eabihf/tarballs/armv6-eabihf--uclibc--stable-2020.08-1.sha256
sha256 680a3bf708cb792c74561514dcba882727086c9317397e8a3ebece1b50fbea4e armv6-eabihf--uclibc--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/armv7-eabihf/tarballs/armv7-eabihf--glibc--bleeding-edge-2020.08-1.sha256
sha256 9f5c703cea20834276e1a81e2e54483d0f4fe0e57063ba4d058338ef9c858eb2 armv7-eabihf--glibc--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/armv7-eabihf/tarballs/armv7-eabihf--glibc--stable-2020.08-1.sha256
sha256 7b6682603af9a9b5c0e46fd57165723483bb68295e827d14d238e63f33a147a8 armv7-eabihf--glibc--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/armv7-eabihf/tarballs/armv7-eabihf--musl--bleeding-edge-2020.08-1.sha256
sha256 d9e71499cfb1790a31056ca9199981f699c7e4966b5854f7780d97f5a74d601e armv7-eabihf--musl--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/armv7-eabihf/tarballs/armv7-eabihf--musl--stable-2020.08-1.sha256
sha256 5c4c9bce5a2a46a9ad46e49e86df708893a8907e702a8ee1b5febd3950e030ed armv7-eabihf--musl--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/armv7-eabihf/tarballs/armv7-eabihf--uclibc--bleeding-edge-2020.08-1.sha256
sha256 7c3ee9f3d6bd4eda38ec94a686a9e348b0f800214f1225c68d172e4ac6b81066 armv7-eabihf--uclibc--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/armv7-eabihf/tarballs/armv7-eabihf--uclibc--stable-2020.08-1.sha256
sha256 f61866b0e60da62eff92b197f0e2a72e8d023bf944a25eb97efc9f5d93680ed9 armv7-eabihf--uclibc--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/armv7m/tarballs/armv7m--uclibc--bleeding-edge-2020.08-1.sha256
sha256 9ce29bbcbc0a2c4925e814a6332c2c71e9a13476040e1db0a5495c68d1566bee armv7m--uclibc--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/armv7m/tarballs/armv7m--uclibc--stable-2020.08-1.sha256
sha256 c20df31191b88df09d8ff225ca82e3bb769b2b7ffd3827f6dbf77a6d23230339 armv7m--uclibc--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/m68k-68xxx/tarballs/m68k-68xxx--uclibc--bleeding-edge-2020.08-1.sha256
sha256 49e26c831694d15bb023a0a36cf9d3967e0ab75c555d8d07bba3317a0a18aa40 m68k-68xxx--uclibc--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/m68k-68xxx/tarballs/m68k-68xxx--uclibc--stable-2020.08-1.sha256
sha256 b133663f5589c71315224792b7e542cfa578e4c354e4a2ac8afcd5ee77fd6f45 m68k-68xxx--uclibc--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/m68k-coldfire/tarballs/m68k-coldfire--uclibc--bleeding-edge-2020.08-1.sha256
sha256 3efa687ca5d1c5f1ec53032e05a12467ec148c2328836754841f74be217bb035 m68k-coldfire--uclibc--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/m68k-coldfire/tarballs/m68k-coldfire--uclibc--stable-2020.08-1.sha256
sha256 f9879a167e2279fe925a3dc963d349d3d84c85866ec91512b5a7ce667318d716 m68k-coldfire--uclibc--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/microblazebe/tarballs/microblazebe--glibc--bleeding-edge-2020.08-1.sha256
sha256 d9fb4403d14f53d5f4be18f38e9604244042ea33ad980ebf0b0057b70d603d16 microblazebe--glibc--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/microblazebe/tarballs/microblazebe--glibc--stable-2020.08-1.sha256
sha256 ea466445240a25ba98cd7b34f748afca151fc2479b187566f2faa98f586bfd93 microblazebe--glibc--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/microblazebe/tarballs/microblazebe--musl--bleeding-edge-2020.08-1.sha256
sha256 0157d051ac5e8b46b4eed7333c9323d1c1602ad5e958e2c12fe9b8dc3b6781c7 microblazebe--musl--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/microblazebe/tarballs/microblazebe--musl--stable-2020.08-1.sha256
sha256 ec51b07f63cf6d0af1eaed10641d8690a350d879e4b74addca2b3f7992186ee2 microblazebe--musl--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/microblazebe/tarballs/microblazebe--uclibc--bleeding-edge-2020.08-1.sha256
sha256 3aaaab352ca31b2263e29c363609a363a38931f9733c8ad3a386c5cbb791f8e1 microblazebe--uclibc--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/microblazebe/tarballs/microblazebe--uclibc--stable-2020.08-1.sha256
sha256 d2b31177c9c009cd70a9ad4af6e903dfdb5254e3f49fe9389e0e11af7a98e6b6 microblazebe--uclibc--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/microblazeel/tarballs/microblazeel--glibc--bleeding-edge-2020.08-1.sha256
sha256 83a451601b24b6a9c609630119e100ef9f18408bdfe1241cc53a904d540e6936 microblazeel--glibc--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/microblazeel/tarballs/microblazeel--glibc--stable-2020.08-1.sha256
sha256 c168737ec92889e632673f826b13cf74cfe4ba3ad06cc9e328ee20268ec439e9 microblazeel--glibc--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/microblazeel/tarballs/microblazeel--musl--bleeding-edge-2020.08-1.sha256
sha256 47660f8a4d84c7b8cd7610b8ba9df5bbfba043b35ebc07d96468c950b282f44d microblazeel--musl--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/microblazeel/tarballs/microblazeel--musl--stable-2020.08-1.sha256
sha256 6a51e38fe3f72765ad1172488321b60c59867253edce7b6680500c4193a542f7 microblazeel--musl--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/microblazeel/tarballs/microblazeel--uclibc--bleeding-edge-2020.08-1.sha256
sha256 6005fa2b229be380a2e4b8227daa0b4be4739b7cda628679de6d0e048755c769 microblazeel--uclibc--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/microblazeel/tarballs/microblazeel--uclibc--stable-2020.08-1.sha256
sha256 845a4795cab5f88d96679945f7147c5dfe0dd19751b88734ef786bfd5ee5db67 microblazeel--uclibc--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/mips32/tarballs/mips32--glibc--bleeding-edge-2020.08-1.sha256
sha256 63baffcf0a94d7f1b7421ad61ddb56ce5c05595acd09f482dffe13ddf17efd81 mips32--glibc--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/mips32/tarballs/mips32--glibc--stable-2020.08-1.sha256
sha256 90e300a2d224ea79b69cae68e93b0aab70858381b0d11bac846458c625d72653 mips32--glibc--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/mips32/tarballs/mips32--musl--bleeding-edge-2020.08-1.sha256
sha256 4ebc20461eafca9c9b50e36f81e13095229aac0cd1dd98a985060f2e95665983 mips32--musl--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/mips32/tarballs/mips32--musl--stable-2020.08-1.sha256
sha256 1a544242e9aaaee75c240439a31d2f4304b97705ed2d9e9e38ca552c5f03dced mips32--musl--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/mips32/tarballs/mips32--uclibc--bleeding-edge-2020.08-1.sha256
sha256 4e0e1bf24e74746775992efd8b8bafbf5b6dd56bfdd1421b2207e1ea23ba2eb3 mips32--uclibc--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/mips32/tarballs/mips32--uclibc--stable-2020.08-1.sha256
sha256 4c1da37d131f4e66b07536707c6d1be3de29719f228346d4c860c4b3cb4fef31 mips32--uclibc--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/mips32el/tarballs/mips32el--glibc--bleeding-edge-2020.08-1.sha256
sha256 617c845261bb0a00571c68f250c5a369e60a09164dd3316ab8126c327d911c4b mips32el--glibc--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/mips32el/tarballs/mips32el--glibc--stable-2020.08-1.sha256
sha256 87875c25075b3850526a54c5e828ce489355d0d50107c262539ee5f577f38d6d mips32el--glibc--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/mips32el/tarballs/mips32el--musl--bleeding-edge-2020.08-1.sha256
sha256 4c81898f2e484c1e1e7d7ac1ae80e0aca5619ef01190df37e41ca459a147e682 mips32el--musl--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/mips32el/tarballs/mips32el--musl--stable-2020.08-1.sha256
sha256 02155c88e0bf92f63105803767ce457790bfd920297ef326c9920853b5a3fe20 mips32el--musl--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/mips32el/tarballs/mips32el--uclibc--bleeding-edge-2020.08-1.sha256
sha256 024b0e27fd0c9792bad1944e052768e03173b133079d7c95bf30435d05620152 mips32el--uclibc--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/mips32el/tarballs/mips32el--uclibc--stable-2020.08-1.sha256
sha256 8398010ea3dbd43ee99b6be0e3340db44b32228bf063a9c13bf43a359e3d1f6e mips32el--uclibc--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/mips32r5el/tarballs/mips32r5el--glibc--bleeding-edge-2020.08-1.sha256
sha256 f000e8a78a24671a6f87909156e0c2a7403ab5864001c1388faf60190f8594c8 mips32r5el--glibc--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/mips32r5el/tarballs/mips32r5el--glibc--stable-2020.08-1.sha256
sha256 a52a115b852afce04732aa9460c58f30fbfdb17601f9bf32ea97a77d1a073a53 mips32r5el--glibc--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/mips32r5el/tarballs/mips32r5el--musl--bleeding-edge-2020.08-1.sha256
sha256 2620edf1045c61ddaf12f979a86719fa83b6598eb10f358a379e52462bb734ba mips32r5el--musl--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/mips32r5el/tarballs/mips32r5el--musl--stable-2020.08-1.sha256
sha256 0e03a5f2a7d8ba739f3ef53538d73c33bfc55f45522d4515688ebcb58005e5a1 mips32r5el--musl--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/mips32r5el/tarballs/mips32r5el--uclibc--bleeding-edge-2020.08-1.sha256
sha256 585e252971553b52833d3970f709196707d908a84a5e1be8360e3019d6bb0da9 mips32r5el--uclibc--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/mips32r5el/tarballs/mips32r5el--uclibc--stable-2020.08-1.sha256
sha256 7ffccb1f86e7b0f1dd0d87f455ff5f2619a58724850b0b9f106b6545d4de8b3f mips32r5el--uclibc--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/mips32r6el/tarballs/mips32r6el--glibc--bleeding-edge-2020.08-1.sha256
sha256 d6376aeb2b243a58a98c415f2ecf131e14ccdce849a76c0f01902ca4b02fc0ba mips32r6el--glibc--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/mips32r6el/tarballs/mips32r6el--glibc--stable-2020.08-1.sha256
sha256 8640635116e26e51d57b6d5dc1e3213528f742f0cf97cd326af4f5d8e17a63f2 mips32r6el--glibc--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/mips32r6el/tarballs/mips32r6el--musl--bleeding-edge-2020.08-1.sha256
sha256 2647d34cb990bdab77efbcc6b4e3d5b1fd02c5032837b7a64bc52cef64aba4ec mips32r6el--musl--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/mips32r6el/tarballs/mips32r6el--musl--stable-2020.08-1.sha256
sha256 24b1adfa2eb31f49ae5b4fce9ee9fcb30205ca6f29e423f77bd851070baaa255 mips32r6el--musl--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/mips32r6el/tarballs/mips32r6el--uclibc--bleeding-edge-2020.08-1.sha256
sha256 18dee7e9de84f6e7d6c9d083decdd465ab08979ebd661d82efbe5dc93f11dcb0 mips32r6el--uclibc--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/mips32r6el/tarballs/mips32r6el--uclibc--stable-2020.08-1.sha256
sha256 28999f7474a84c3ec36b504c47cf671fc6e82d9b38580a0e2ebe495850ada097 mips32r6el--uclibc--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/mips64-n32/tarballs/mips64-n32--glibc--bleeding-edge-2020.08-1.sha256
sha256 b5d90c06c894d841677da5f81e395113d22a79c53f934e12151128660dd08e76 mips64-n32--glibc--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/mips64-n32/tarballs/mips64-n32--glibc--stable-2020.08-1.sha256
sha256 7ed7a81f1a086e47ddb79d0bdc7142a6b7349feea20b05393be133cc4cf1fff5 mips64-n32--glibc--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/mips64-n32/tarballs/mips64-n32--musl--bleeding-edge-2020.08-1.sha256
sha256 937ce7ffda61c93489862122fe6dbfd53445afbdbfb615c06805b05497f336fb mips64-n32--musl--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/mips64-n32/tarballs/mips64-n32--musl--stable-2020.08-1.sha256
sha256 2a2acf732498b0acb22f815e1ce7c3ca8124719131febe95c723b1cbab76d947 mips64-n32--musl--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/mips64-n32/tarballs/mips64-n32--uclibc--bleeding-edge-2020.08-1.sha256
sha256 16ac2a957757f56e0414a638bb3bd526b2d1c3055dd7e036dcdec4bf950f0d1b mips64-n32--uclibc--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/mips64-n32/tarballs/mips64-n32--uclibc--stable-2020.08-1.sha256
sha256 10d9fb894e5e548e47e2930139117de9549ea49b971ca9fad12f56ef6d188b77 mips64-n32--uclibc--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/mips64el-n32/tarballs/mips64el-n32--glibc--bleeding-edge-2020.08-1.sha256
sha256 7de65f68b14350670adbd0249562d69e75f7fc65b749284303c32f88112cb6b4 mips64el-n32--glibc--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/mips64el-n32/tarballs/mips64el-n32--glibc--stable-2020.08-1.sha256
sha256 a6eea19d94a7a953cac84670dcac3adb42dd3eb8950b1f7ca0f1ef37abc7e33f mips64el-n32--glibc--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/mips64el-n32/tarballs/mips64el-n32--musl--bleeding-edge-2020.08-1.sha256
sha256 7cff57dd6d0ee7778c5b764a388bf9e997ba2349da5274b8d8598173030618be mips64el-n32--musl--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/mips64el-n32/tarballs/mips64el-n32--musl--stable-2020.08-1.sha256
sha256 3c42d88c84689703d5b1380f4cf5ad20872611d08ce5fac1a4375bfec80a6b27 mips64el-n32--musl--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/mips64el-n32/tarballs/mips64el-n32--uclibc--bleeding-edge-2020.08-1.sha256
sha256 5553a979238f6a25c4e965e18cfbebe36018041ba46968174063328c25e485fc mips64el-n32--uclibc--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/mips64el-n32/tarballs/mips64el-n32--uclibc--stable-2020.08-1.sha256
sha256 80e8fa6cca6e0267dad5376bca79ce7457b8d345d43a0d409e4820a791965db9 mips64el-n32--uclibc--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/mips64r6el-n32/tarballs/mips64r6el-n32--glibc--bleeding-edge-2020.08-1.sha256
sha256 0f09da21d6069642064f767a25e64c89caad80660ea184345652301c41a30ac9 mips64r6el-n32--glibc--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/mips64r6el-n32/tarballs/mips64r6el-n32--glibc--stable-2020.08-1.sha256
sha256 7100d3862983c5fb8237386ff4148f6e550e6b299c8b7946a349dedef60f75c9 mips64r6el-n32--glibc--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/mips64r6el-n32/tarballs/mips64r6el-n32--musl--bleeding-edge-2020.08-1.sha256
sha256 a692687149e59fdb7ad780cfc51e4a7307ed599433280369fe9e43c63453e4ec mips64r6el-n32--musl--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/mips64r6el-n32/tarballs/mips64r6el-n32--musl--stable-2020.08-1.sha256
sha256 e7a35e063fcd748df6f347e5aa97d081f4422480fb02ce6925c4c351c9aca318 mips64r6el-n32--musl--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/mips64r6el-n32/tarballs/mips64r6el-n32--uclibc--bleeding-edge-2020.08-1.sha256
sha256 69d4287cb32413e054684db9545e6898c09cb90c86a0dce8bb9999498eb798ab mips64r6el-n32--uclibc--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/mips64r6el-n32/tarballs/mips64r6el-n32--uclibc--stable-2020.08-1.sha256
sha256 4d9eb8900b99871e02ae17b823341189dce3aa592ee82864c73ca3164948aaae mips64r6el-n32--uclibc--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/nios2/tarballs/nios2--glibc--bleeding-edge-2020.08-1.sha256
sha256 b3c7c24e08759af3ea13fc39e8bddb52e4528a05d4aee3c2f75733e067d12edc nios2--glibc--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/nios2/tarballs/nios2--glibc--stable-2020.08-1.sha256
sha256 a46d5ff90e3623d159f3b5be53493e13a2e78ebb733a1ccb68e829d6e28aa129 nios2--glibc--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/openrisc/tarballs/openrisc--musl--bleeding-edge-2020.08-1.sha256
sha256 382ec04511d51f99028b6c568c909e4e010bcfe1d4a4c1ff6f10c7c07c24b3b2 openrisc--musl--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/openrisc/tarballs/openrisc--musl--stable-2020.08-1.sha256
sha256 697ef122917022f400003931bc6da75fe07bb5234ef8186cbe027e560f04a168 openrisc--musl--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/openrisc/tarballs/openrisc--uclibc--bleeding-edge-2020.08-1.sha256
sha256 e45d02c9272c909db1c92b6403ed1e0813889ef0c22b2f5166d2675f62d3f20f openrisc--uclibc--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/openrisc/tarballs/openrisc--uclibc--stable-2020.08-1.sha256
sha256 62c60f9f99828a01f3a16060ceba74b8e2603a8ca3585649434a66f721ecdf75 openrisc--uclibc--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/powerpc-440fp/tarballs/powerpc-440fp--glibc--bleeding-edge-2020.08-2.sha256
sha256 7b7c2f66ccd3d44cd8a829b5879277be9cfb17f34a26d5055b29a6bab40ff9df powerpc-440fp--glibc--bleeding-edge-2020.08-2.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/powerpc-440fp/tarballs/powerpc-440fp--glibc--stable-2020.08-2.sha256
sha256 ae7b3d06090dfcf54b1e3b4bd4fda9ae5aaaf34aba9118820e6e9d8f1b70c0c4 powerpc-440fp--glibc--stable-2020.08-2.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/powerpc-440fp/tarballs/powerpc-440fp--musl--bleeding-edge-2020.08-2.sha256
sha256 a6def102659538e3e5838bf4267cd33486d795db753a7109b5e413499ef5df89 powerpc-440fp--musl--bleeding-edge-2020.08-2.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/powerpc-440fp/tarballs/powerpc-440fp--musl--stable-2020.08-2.sha256
sha256 76de0310078633ff34654c8c54d7e80a609c58521a7f2a8041ae4a574889d38a powerpc-440fp--musl--stable-2020.08-2.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/powerpc-440fp/tarballs/powerpc-440fp--uclibc--bleeding-edge-2020.08-2.sha256
sha256 abbe38fc92a71d568c08452f99fe3470e5ded9a666c6829d9104fcf06b984503 powerpc-440fp--uclibc--bleeding-edge-2020.08-2.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/powerpc-440fp/tarballs/powerpc-440fp--uclibc--stable-2020.08-2.sha256
sha256 d4346ce563ddfbd4946b2dfbc766cafebbf4b09488dc8b398ab8bb242bac9268 powerpc-440fp--uclibc--stable-2020.08-2.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/powerpc-e300c3/tarballs/powerpc-e300c3--glibc--bleeding-edge-2020.08-1.sha256
sha256 fe4b9817f060d84118fff5b7d855eacac472975f2adfececb641d2999f94a7ea powerpc-e300c3--glibc--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/powerpc-e300c3/tarballs/powerpc-e300c3--glibc--stable-2020.08-1.sha256
sha256 77d215d650850af65c3ac1792dcf100322f3dfea78ba174118197ec0c8a49807 powerpc-e300c3--glibc--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/powerpc-e300c3/tarballs/powerpc-e300c3--musl--bleeding-edge-2020.08-1.sha256
sha256 4aa2b5c3c2c3263edfdf95284f0774aed8a47446b7a362ee44dc24d83db06896 powerpc-e300c3--musl--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/powerpc-e300c3/tarballs/powerpc-e300c3--musl--stable-2020.08-1.sha256
sha256 129d9aab59e9edfc68739b612f2ee4abce5679830250fbcd50b89ec3d2c865c5 powerpc-e300c3--musl--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/powerpc-e300c3/tarballs/powerpc-e300c3--uclibc--bleeding-edge-2020.08-1.sha256
sha256 54e6960edd6419bb268b651ffedc24af73a72ad9dd145c1849a6e0fb6f997b15 powerpc-e300c3--uclibc--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/powerpc-e300c3/tarballs/powerpc-e300c3--uclibc--stable-2020.08-1.sha256
sha256 1057b488623a80037558a1439555b1a15b25a4d7f42dc49d0169349592ad5b3e powerpc-e300c3--uclibc--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/powerpc-e500mc/tarballs/powerpc-e500mc--glibc--bleeding-edge-2020.08-1.sha256
sha256 8cab4fbb645be782a6eaeb7b6afd75fda4c0dc8ca9a4095b0be9b6eeb29a9759 powerpc-e500mc--glibc--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/powerpc-e500mc/tarballs/powerpc-e500mc--glibc--stable-2020.08-1.sha256
sha256 5bb9f6b10b9d2d1a90a1a96a477b90eea32a269c1afccd89284a38a63d7f1c82 powerpc-e500mc--glibc--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/powerpc-e500mc/tarballs/powerpc-e500mc--musl--bleeding-edge-2020.08-1.sha256
sha256 36636df56a04e44ddb5bba2e0a30b1f3986618399381278cdb2be207a25825c0 powerpc-e500mc--musl--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/powerpc-e500mc/tarballs/powerpc-e500mc--musl--stable-2020.08-1.sha256
sha256 7f924fc3cc3c9070ea1c9d270fea71715bd52beac14649d8a00416dfde1b897b powerpc-e500mc--musl--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/powerpc-e500mc/tarballs/powerpc-e500mc--uclibc--bleeding-edge-2020.08-1.sha256
sha256 262a2bddd29d6c24cbc32a873e78895499732624923195a5e7ffe16b487dc461 powerpc-e500mc--uclibc--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/powerpc-e500mc/tarballs/powerpc-e500mc--uclibc--stable-2020.08-1.sha256
sha256 e817af2d5a0fba654e7766dcad89380e278af9feb35c2d0591a0f8d893defa48 powerpc-e500mc--uclibc--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/powerpc64-e5500/tarballs/powerpc64-e5500--glibc--bleeding-edge-2020.08-1.sha256
sha256 418b79f8313ac4ff29cb6c2d639848eb74a0245666142a307374513cffd472e6 powerpc64-e5500--glibc--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/powerpc64-e5500/tarballs/powerpc64-e5500--glibc--stable-2020.08-1.sha256
sha256 a51ddba944394de41b2f7c001772bb68074175d65a0976749da5289a5e705f23 powerpc64-e5500--glibc--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/powerpc64-e6500/tarballs/powerpc64-e6500--glibc--bleeding-edge-2020.08-1.sha256
sha256 c537c2ef618f767762295806658bb0add514453068ea72ce2bd6e6e805e64af5 powerpc64-e6500--glibc--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/powerpc64-e6500/tarballs/powerpc64-e6500--glibc--stable-2020.08-1.sha256
sha256 1d8aaf1492f69496b01fc930fa928ffd3144d1465c7c954128ed31ce576306b6 powerpc64-e6500--glibc--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/powerpc64-e6500/tarballs/powerpc64-e6500--musl--bleeding-edge-2020.08-1.sha256
sha256 c46c7595384929211ce2f54655ceb4eb1d32054923892cd5d10913be364fa6f2 powerpc64-e6500--musl--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/powerpc64-e6500/tarballs/powerpc64-e6500--musl--stable-2020.08-1.sha256
sha256 a295073db591ed16eec90caf5fdef62ccff5550166d36496ab24aa993bdb2a42 powerpc64-e6500--musl--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/powerpc64-power8/tarballs/powerpc64-power8--glibc--bleeding-edge-2020.08-1.sha256
sha256 cbe65abf36fa807176a01488751a2e45800791534400b803c024e4c29357862c powerpc64-power8--glibc--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/powerpc64-power8/tarballs/powerpc64-power8--glibc--stable-2020.08-1.sha256
sha256 a670ec95dbfb53a812e9f21aec2ad880a3349125f19219b9a0d139a7d5b9e83b powerpc64-power8--glibc--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/powerpc64-power8/tarballs/powerpc64-power8--musl--bleeding-edge-2020.08-1.sha256
sha256 1f5b3da078534f9e493f29956d3a1f31ad0539d26b8f83e55c271b6671021928 powerpc64-power8--musl--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/powerpc64-power8/tarballs/powerpc64-power8--musl--stable-2020.08-1.sha256
sha256 12043ab87cd4ae0c4339cddcb3eb017eaae406bbb332bf3edebfd7f70ecd0a31 powerpc64-power8--musl--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/powerpc64le-power8/tarballs/powerpc64le-power8--glibc--bleeding-edge-2020.08-1.sha256
sha256 14e3ff4afbf363decb2c0ddc33b75e41aad9748a65a445cc176215853d0d6185 powerpc64le-power8--glibc--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/powerpc64le-power8/tarballs/powerpc64le-power8--glibc--stable-2020.08-1.sha256
sha256 342442f0773cdf5091443ab06ecf9c3d3c05cf8e2464b82a54707bec90d2a358 powerpc64le-power8--glibc--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/powerpc64le-power8/tarballs/powerpc64le-power8--musl--bleeding-edge-2020.08-1.sha256
sha256 fab5f4bc6d219f53f8b15e0d49aea27cdbac9e08e05946577440329c003fc216 powerpc64le-power8--musl--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/powerpc64le-power8/tarballs/powerpc64le-power8--musl--stable-2020.08-1.sha256
sha256 47d184beca271c67bdb544fac87cb2126ea2b397d076a79dfaf9667e999fbccd powerpc64le-power8--musl--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/riscv32-ilp32d/tarballs/riscv32-ilp32d--glibc--bleeding-edge-2020.08-1.sha256
sha256 18a47b0c221137f40720df08e9bbdc0bcb6e68cde3a30906681e4dec83eb7547 riscv32-ilp32d--glibc--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/riscv64/tarballs/riscv64--glibc--bleeding-edge-2020.08-1.sha256
sha256 09818eccb414359b1df87ec347d94e7bfccc45f8a5eafe8791fddf8110fcc581 riscv64--glibc--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/riscv64/tarballs/riscv64--musl--bleeding-edge-2020.08-1.sha256
sha256 2af03e220070eacf6eaf63ccb7442ca5af805caf96ae52fb3eb15370988f12cf riscv64--musl--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/sh-sh4/tarballs/sh-sh4--glibc--bleeding-edge-2020.08-1.sha256
sha256 277e78c999c2cba42b25660bbbe0d105a80277c986e0807cfa16a6595af6ce9e sh-sh4--glibc--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/sh-sh4/tarballs/sh-sh4--glibc--stable-2020.08-1.sha256
sha256 256064f35b2759c71ac1bb6c9fe74a7c7c62f070746cfeb35ff0ecb40a91c2b4 sh-sh4--glibc--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/sh-sh4/tarballs/sh-sh4--musl--bleeding-edge-2020.08-1.sha256
sha256 34bf211ea0456ef86bbe914e0755f18681531a015e33b8c26b97ca68e29a3ed5 sh-sh4--musl--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/sh-sh4/tarballs/sh-sh4--musl--stable-2020.08-1.sha256
sha256 d335189728a6bebd5d180c58c6dabd049500d57ae60fcc8fc51ba5aafafb21d3 sh-sh4--musl--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/sh-sh4/tarballs/sh-sh4--uclibc--bleeding-edge-2020.08-1.sha256
sha256 89e42b9e7bc3f67660656690899b2fad4015af5c9084dad6624315c39b486d76 sh-sh4--uclibc--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/sh-sh4/tarballs/sh-sh4--uclibc--stable-2020.08-1.sha256
sha256 13a60cd5653c24491748388284080d5b8da649a63090c0d308c3a3b069b04f21 sh-sh4--uclibc--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/sh-sh4aeb/tarballs/sh-sh4aeb--glibc--bleeding-edge-2020.08-1.sha256
sha256 fe063dd95c71ab41145412faf5e4c2a1386efdda5d944ecc83121fb9b4e213f2 sh-sh4aeb--glibc--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/sh-sh4aeb/tarballs/sh-sh4aeb--glibc--stable-2020.08-1.sha256
sha256 054e669a3165aff35539d3fb7cbde2650c79e5aa88a90a844488ba175a645a07 sh-sh4aeb--glibc--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/sh-sh4aeb/tarballs/sh-sh4aeb--musl--bleeding-edge-2020.08-1.sha256
sha256 aa2c560ed4cf4dac8a8803b3fccf846472a226a1a22833c1cbe0d7fd347af3a7 sh-sh4aeb--musl--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/sh-sh4aeb/tarballs/sh-sh4aeb--musl--stable-2020.08-1.sha256
sha256 89e7fa5792ed1c35bd57c65935888beafce9a81f84c7d73508b1582539415a3b sh-sh4aeb--musl--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/sparc64/tarballs/sparc64--glibc--bleeding-edge-2020.08-1.sha256
sha256 abba04fcfa11a1eedbf5f5ff38d69d793d394f08998f8374723358b3123cc113 sparc64--glibc--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/sparc64/tarballs/sparc64--glibc--stable-2020.08-1.sha256
sha256 57184f6edfba03ae9c098ad0bab6635475bb45a874982ad11c0b91bf6043dbc4 sparc64--glibc--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/sparcv8/tarballs/sparcv8--uclibc--bleeding-edge-2020.08-1.sha256
sha256 210defc0781683a240bac25295ff612d6b6c875c7d938d11512f8ec9472245bc sparcv8--uclibc--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/sparcv8/tarballs/sparcv8--uclibc--stable-2020.08-1.sha256
sha256 14d508510bf0ed813f6436718486cce7fc6ebfb29b46eea5e52a474b2d5eaa00 sparcv8--uclibc--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/x86-64-core-i7/tarballs/x86-64-core-i7--glibc--bleeding-edge-2020.08-1.sha256
sha256 77935109bbd1bdb84813a588b807052823033ed9094131fdd56f558023a3de08 x86-64-core-i7--glibc--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/x86-64-core-i7/tarballs/x86-64-core-i7--glibc--stable-2020.08-1.sha256
sha256 3dd408e857f5c8e579748995477f2783fcf5ad0aac89719ea3c5c75446dfa63c x86-64-core-i7--glibc--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/x86-64-core-i7/tarballs/x86-64-core-i7--musl--bleeding-edge-2020.08-1.sha256
sha256 5d2d13d56a76db30ec28a11a3d6219fe407c3d1b9bbcd4a7255a783da4fcdfcb x86-64-core-i7--musl--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/x86-64-core-i7/tarballs/x86-64-core-i7--musl--stable-2020.08-1.sha256
sha256 26ea3cc16c294663b64123c15a95d53f00419ef0f6bcdef489865835c6022650 x86-64-core-i7--musl--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/x86-64-core-i7/tarballs/x86-64-core-i7--uclibc--bleeding-edge-2020.08-1.sha256
sha256 d1ff16cde93c727b4b39844877f93d865d6945185e71dba4b6c07d2d725e2576 x86-64-core-i7--uclibc--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/x86-64-core-i7/tarballs/x86-64-core-i7--uclibc--stable-2020.08-1.sha256
sha256 0fdcb93add6ff697b536198da76b4e93bd81efd67793d6640fd6bc1b216abc00 x86-64-core-i7--uclibc--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/x86-core2/tarballs/x86-core2--glibc--bleeding-edge-2020.08-1.sha256
sha256 10e7b362008fc3057e9eb42a3fab5f0dc430e05b285dc4f2ec3367d5f36a3094 x86-core2--glibc--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/x86-core2/tarballs/x86-core2--glibc--stable-2020.08-1.sha256
sha256 18bbabb672df24bbc2646d94d23c47d16a6c0d8342d910bf441021fad4a82ce3 x86-core2--glibc--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/x86-core2/tarballs/x86-core2--musl--bleeding-edge-2020.08-1.sha256
sha256 81edcbd69f2fd479d9a25597d0515d42c9c891e1a534d947e87a2e9a3dc67924 x86-core2--musl--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/x86-core2/tarballs/x86-core2--musl--stable-2020.08-1.sha256
sha256 9e23de3364e1aaec50945c70089273a025ff44815ce4632324d1950e7ba07e9a x86-core2--musl--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/x86-core2/tarballs/x86-core2--uclibc--bleeding-edge-2020.08-1.sha256
sha256 717b6c103e8e50202a45277eef8f9b41b978b17a0110cacddd52a01b7eba3039 x86-core2--uclibc--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/x86-core2/tarballs/x86-core2--uclibc--stable-2020.08-1.sha256
sha256 e23812719fa1027fa0e2a161216cf97ff14bf3bcc19bb400281060a40e762a0d x86-core2--uclibc--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/x86-i686/tarballs/x86-i686--glibc--bleeding-edge-2020.08-1.sha256
sha256 9e8c83479dc91e516ee66fe21ff8693afa380cfdb3192c5c1351430a035ab92a x86-i686--glibc--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/x86-i686/tarballs/x86-i686--glibc--stable-2020.08-1.sha256
sha256 77362d37279636371a42b09bab4f8f1a51a786ed7ec316221786b279389c8008 x86-i686--glibc--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/x86-i686/tarballs/x86-i686--musl--bleeding-edge-2020.08-1.sha256
sha256 ccb6896f02be3444d6cabff0966a0b6f866ebc6d32b483031541626c2fc748fe x86-i686--musl--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/x86-i686/tarballs/x86-i686--musl--stable-2020.08-1.sha256
sha256 bbbf8b7946e65f35366cb0371910fe3e95e6399c4e6a9cac8b0a4674bcadc36b x86-i686--musl--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/x86-i686/tarballs/x86-i686--uclibc--bleeding-edge-2020.08-1.sha256
sha256 bd57d5cd7958ba7469d74abdf93db1993042f30c774ec3d1fceff57d522a489c x86-i686--uclibc--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/x86-i686/tarballs/x86-i686--uclibc--stable-2020.08-1.sha256
sha256 139c31c25f9834137bbbb4aadc9d78def2819d2c1b9e89dd2300b11fb4879bb4 x86-i686--uclibc--stable-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/xtensa-lx60/tarballs/xtensa-lx60--uclibc--bleeding-edge-2020.08-1.sha256
sha256 46801fc1ae89f380c1b6e1bf8ea723f9d7b1590eea3a2d1218a0307cd4325bc8 xtensa-lx60--uclibc--bleeding-edge-2020.08-1.tar.bz2
# From https://toolchains.bootlin.com/downloads/releases/toolchains/xtensa-lx60/tarballs/xtensa-lx60--uclibc--stable-2020.08-1.sha256
sha256 b4b28d855594290c853292c9cce43bba573d4187ecb47d78f25411a7f4300d49 xtensa-lx60--uclibc--stable-2020.08-1.tar.bz2
@@ -0,0 +1,65 @@
config BR2_TOOLCHAIN_EXTERNAL_CODESCAPE_IMG_MIPS
bool "Codescape IMG GNU Linux Toolchain 2018.09"
depends on BR2_mips || BR2_mipsel || BR2_mips64 || BR2_mips64el
depends on !BR2_ARCH_NEEDS_GCC_AT_LEAST_7
depends on BR2_HOSTARCH = "x86_64" || BR2_HOSTARCH = "x86"
depends on BR2_MIPS_CPU_MIPS32R6 || (BR2_MIPS_CPU_MIPS64R6 && !BR2_MIPS_SOFT_FLOAT)
select BR2_TOOLCHAIN_EXTERNAL_GLIBC
select BR2_INSTALL_LIBSTDCPP
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_7
select BR2_TOOLCHAIN_GCC_AT_LEAST_6
select BR2_TOOLCHAIN_HAS_FORTRAN
select BR2_TOOLCHAIN_HAS_OPENMP
help
Codescape IMG GNU Linux Toolchain 2018.09 for the MIPS
architecture, from MIPS Tech LLC. It uses gcc 6.3.0,
binutils 2.28.51, glibc 2.20, gdb 7.9.1 and kernel headers
4.7. It has support for the following variants:
- MIPS32r6 - Big-Endian, Hard-Float, 2008 NaN, o32 ABI
Select 'MIPS (big endian)' Target Architecture
Select 'mips 32r6' Target Architecture Variant
Disable 'Use soft-float'
- MIPS32r6 - Big-Endian, Soft-Float, 2008 NaN, o32 ABI
Select 'MIPS (big endian)' Target Architecture
Select 'mips 32r6' Target Architecture Variant
Enable 'Use soft-float'
- MIPS32r6 - Little-Endian, Hard-Float, 2008 NaN, o32 ABI
Select 'MIPS (little endian)' Target Architecture
Select 'mips 32r6' Target Architecture Variant
Disable 'Use soft-float'
- MIPS32r6 - Little-Endian, Soft-Float, 2008 NaN, o32 ABI
Select 'MIPS (little endian)' Target Architecture
Select 'mips 32r6' Target Architecture Variant
Enable 'Use soft-float'
- MIPS32r6 - Little-Endian, Hard-Float, 2008 NaN, o32 ABI,
microMIPS
Select 'MIPS (little endian)' Target Architecture
Select 'mips 32r6' Target Architecture Variant
Disable 'Use soft-float'
Set BR2_TARGET_OPTIMIZATION to '-mmicromips'
- MIPS32r6 - Little-Endian, Soft-Float, 2008 NaN, o32 ABI,
microMIPS
Select 'MIPS (little endian)' Target Architecture
Select 'mips 32r6' Target Architecture Variant
Enable 'Use soft-float'
Set BR2_TARGET_OPTIMIZATION to '-mmicromips'
- MIPS64r6 - Big-Endian, Hard-Float, 2008 NaN, n32 ABI
Select 'MIPS64 (big endian)' Target Architecture
Select 'mips 64r6' Target Architecture Variant
Select 'n32' Target ABI
Disable 'Use soft-float'
- MIPS64r6 - Little-Endian, Hard-Float, 2008 NaN, n32 ABI
Select 'MIPS64 (little endian)' Target Architecture
Select 'mips 64r6' Target Architecture Variant
Select 'n32' Target ABI
Disable 'Use soft-float'
- MIPS64r6 - Big-Endian, Hard-Float, 2008 NaN, n64 ABI
Select 'MIPS64 (big endian)' Target Architecture
Select 'mips 64r6' Target Architecture Variant
Select 'n64' Target ABI
Disable 'Use soft-float'
- MIPS64r6 - Little-Endian, Hard-Float, 2008 NaN, n64 ABI
Select 'MIPS64 (little endian)' Target Architecture
Select 'mips 64r6' Target Architecture Variant
Select 'n64' Target ABI
Disable 'Use soft-float'
@@ -0,0 +1,9 @@
if BR2_TOOLCHAIN_EXTERNAL_CODESCAPE_IMG_MIPS
config BR2_TOOLCHAIN_EXTERNAL_PREFIX
default "mips-img-linux-gnu"
config BR2_PACKAGE_PROVIDES_TOOLCHAIN_EXTERNAL
default "toolchain-external-codescape-img-mips"
endif
@@ -0,0 +1,4 @@
# Codescape toolchains from MIPS Tech LLC
# From: https://codescape.mips.com/components/toolchain/nanomips/2018.09-02/downloads.html
sha256 ac035f3b6a8767522977963d8e1490520d58bccca7956f4503a1eefff6492b71 Codescape.GNU.Tools.Package.2018.09-02.for.MIPS.IMG.Linux.CentOS-6.x86.tar.gz
sha256 09280f4fcbb993607905bf9a43bf5f3db2beed85726f0675b8453e19a9ddc429 Codescape.GNU.Tools.Package.2018.09-02.for.MIPS.IMG.Linux.CentOS-6.x86_64.tar.gz
@@ -0,0 +1,51 @@
################################################################################
#
# toolchain-external-codescape-img-mips
#
################################################################################
TOOLCHAIN_EXTERNAL_CODESCAPE_IMG_MIPS_VERSION = 2018.09-02
TOOLCHAIN_EXTERNAL_CODESCAPE_IMG_MIPS_SITE = https://codescape.mips.com/components/toolchain/$(TOOLCHAIN_EXTERNAL_CODESCAPE_IMG_MIPS_VERSION)
TOOLCHAIN_EXTERNAL_CODESCAPE_IMG_MIPS_STRIP_COMPONENTS = 2
ifeq ($(HOSTARCH),x86)
TOOLCHAIN_EXTERNAL_CODESCAPE_IMG_MIPS_SOURCE = Codescape.GNU.Tools.Package.$(TOOLCHAIN_EXTERNAL_CODESCAPE_IMG_MIPS_VERSION).for.MIPS.IMG.Linux.CentOS-6.x86.tar.gz
else
TOOLCHAIN_EXTERNAL_CODESCAPE_IMG_MIPS_SOURCE = Codescape.GNU.Tools.Package.$(TOOLCHAIN_EXTERNAL_CODESCAPE_IMG_MIPS_VERSION).for.MIPS.IMG.Linux.CentOS-6.x86_64.tar.gz
endif
# Special fixup for Codescape MIPS toolchains, that have bin-<abi> and
# sbin-<abi> directories. We create symlinks bin -> bin-<abi> and sbin
# -> sbin-<abi> so that the rest of Buildroot can find the toolchain
# tools in the appropriate location.
ifeq ($(BR2_MIPS_OABI32),y)
TOOLCHAIN_EXTERNAL_CODESCAPE_IMG_MIPS_BIN_DIR_SUFFIX = o32
else ifeq ($(BR2_MIPS_NABI32),y)
TOOLCHAIN_EXTERNAL_CODESCAPE_IMG_MIPS_BIN_DIR_SUFFIX = n32
else ifeq ($(BR2_MIPS_NABI64),y)
TOOLCHAIN_EXTERNAL_CODESCAPE_IMG_MIPS_BIN_DIR_SUFFIX = n64
endif
define TOOLCHAIN_EXTERNAL_CODESCAPE_IMG_MIPS_STAGING_FIXUPS
rmdir $(STAGING_DIR)/usr/bin $(STAGING_DIR)/usr/sbin
ln -sf bin-$(TOOLCHAIN_EXTERNAL_CODESCAPE_IMG_MIPS_BIN_DIR_SUFFIX) $(STAGING_DIR)/usr/bin
ln -sf sbin-$(TOOLCHAIN_EXTERNAL_CODESCAPE_IMG_MIPS_BIN_DIR_SUFFIX) $(STAGING_DIR)/usr/sbin
endef
# The Codescape toolchain uses a sysroot layout that places them
# side-by-side instead of nested like multilibs. A symlink is needed
# much like for the nested sysroots which are handled in
# copy_toolchain_sysroot but there is not enough information in there
# to determine whether the sysroot layout was nested or side-by-side.
# Add the symlink here for now.
define TOOLCHAIN_EXTERNAL_CODESCAPE_IMG_MIPS_SYMLINK
$(Q)ARCH_SYSROOT_DIR="$(call toolchain_find_sysroot,$(TOOLCHAIN_EXTERNAL_CC) $(TOOLCHAIN_EXTERNAL_CFLAGS))"; \
ARCH_SUBDIR=`basename $${ARCH_SYSROOT_DIR}`; \
ln -snf . $(STAGING_DIR)/$${ARCH_SUBDIR}
endef
TOOLCHAIN_EXTERNAL_CODESCAPE_IMG_MIPS_POST_INSTALL_STAGING_HOOKS += \
TOOLCHAIN_EXTERNAL_CODESCAPE_IMG_MIPS_STAGING_FIXUPS \
TOOLCHAIN_EXTERNAL_CODESCAPE_IMG_MIPS_SYMLINK
$(eval $(toolchain-external-package))
@@ -0,0 +1,76 @@
config BR2_TOOLCHAIN_EXTERNAL_CODESCAPE_MTI_MIPS
bool "Codescape MTI GNU Linux Toolchain 2018.09"
depends on BR2_mips || BR2_mipsel || BR2_mips64 || BR2_mips64el
depends on !BR2_ARCH_NEEDS_GCC_AT_LEAST_7
depends on BR2_HOSTARCH = "x86_64" || BR2_HOSTARCH = "x86"
depends on BR2_MIPS_CPU_MIPS32R2 || (BR2_MIPS_CPU_MIPS64R2 && !BR2_MIPS_SOFT_FLOAT) || \
BR2_MIPS_CPU_MIPS32R5 || (BR2_MIPS_CPU_MIPS64R5 && !BR2_MIPS_SOFT_FLOAT)
select BR2_TOOLCHAIN_EXTERNAL_GLIBC
select BR2_INSTALL_LIBSTDCPP
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_7
select BR2_TOOLCHAIN_GCC_AT_LEAST_6
select BR2_TOOLCHAIN_HAS_FORTRAN
select BR2_TOOLCHAIN_HAS_OPENMP
help
Codescape MTI GNU Linux Toolchain 2018.09 for the MIPS
architecture, from MIPS Tech LLC. It uses gcc 6.3.0,
binutils 2.28.51, glibc 2.20, gdb 7.9.1 and kernel headers
4.7. It has support for the following variants:
- MIPS32r2 - Big-Endian, Hard-Float, Legacy NaN, o32 ABI
Select 'MIPS (big endian)' Target Architecture
Select 'mips 32r2' Target Architecture Variant
Disable 'Use soft-float'
- MIPS32r2 - Big-Endian, Hard-Float, 2008 NaN, o32 ABI
Select 'MIPS (big endian)' Target Architecture
Select 'mips 32r2' Target Architecture Variant
Disable 'Use soft-float'
Set BR2_TARGET_OPTIMIZATION to '-mnan=2008'
- MIPS32r2 - Big-Endian, Soft-Float, Legacy NaN, o32 ABI
Select 'MIPS (big endian)' Target Architecture
Select 'mips 32r2' Target Architecture Variant
Enable 'Use soft-float'
- MIPS32r2 - Little-Endian, Hard-Float, Legacy NaN, o32 ABI
Select 'MIPS (little endian)' Target Architecture
Select 'mips 32r2' Target Architecture Variant
Disable 'Use soft-float'
- MIPS32r2 - Little-Endian, Hard-Float, 2008 NaN, o32 ABI
Select 'MIPS (little endian)' Target Architecture
Select 'mips 32r2' Target Architecture Variant
Disable 'Use soft-float'
Set BR2_TARGET_OPTIMIZATION to '-mnan=2008'
- MIPS32r2 - Little-Endian, Soft-Float, Legacy NaN, o32 ABI
Select 'MIPS (little endian)' Target Architecture
Select 'mips 32r2' Target Architecture Variant
Enable 'Use soft-float'
- MIPS32r2 - Little-Endian, Hard-Float, 2008 NaN, o32 ABI,
microMIPS
Select 'MIPS (little endian)' Target Architecture
Select 'mips 32r2' Target Architecture Variant
Enable 'Use soft-float'
Set BR2_TARGET_OPTIMIZATION to '-mmicromips'
- MIPS32r2 - Little-Endian, Soft-Float, Legacy NaN, o32 ABI,
microMIPS
Select 'MIPS (little endian)' Target Architecture
Select 'mips 32r2' Target Architecture Variant
Disable 'Use soft-float'
Set BR2_TARGET_OPTIMIZATION to '-mmicromips'
- MIPS64r2 - Big-Endian, Hard-Float, Legacy NaN, n32 ABI
Select 'MIPS64 (big endian)' Target Architecture
Select 'mips 64r2' Target Architecture Variant
Select 'n32' Target ABI
Disable 'Use soft-float'
- MIPS64r2 - Little-Endian, Hard-Float, Legacy NaN, n32 ABI
Select 'MIPS64 (little endian)' Target Architecture
Select 'mips 64r2' Target Architecture Variant
Select 'n32' Target ABI
Disable 'Use soft-float'
- MIPS64r2 - Big-Endian, Hard-Float, Legacy NaN, n64 ABI
Select 'MIPS64 (big endian)' Target Architecture
Select 'mips 64r2' Target Architecture Variant
Select 'n64' Target ABI
Disable 'Use soft-float'
- MIPS64r2 - Little-Endian, Hard-Float, Legacy NaN, n64 ABI
Select 'MIPS64 (little endian)' Target Architecture
Select 'mips 64r2' Target Architecture Variant
Select 'n64' Target ABI
Disable 'Use soft-float'
@@ -0,0 +1,9 @@
if BR2_TOOLCHAIN_EXTERNAL_CODESCAPE_MTI_MIPS
config BR2_TOOLCHAIN_EXTERNAL_PREFIX
default "mips-mti-linux-gnu"
config BR2_PACKAGE_PROVIDES_TOOLCHAIN_EXTERNAL
default "toolchain-external-codescape-mti-mips"
endif
@@ -0,0 +1,4 @@
# Codescape toolchains from MIPS Tech LLC
# From: https://codescape.mips.com/components/toolchain/nanomips/2018.09-02/downloads.html
sha256 c883a404fd7ea5718e2249a530802e223381f2be52265f88e9b1ce7035c232f3 Codescape.GNU.Tools.Package.2018.09-02.for.MIPS.MTI.Linux.CentOS-6.x86.tar.gz
sha256 d6310a970b0a8a19ad8e0a2b3ead8c38ee90d0e284a9b2511200ce447f460d2c Codescape.GNU.Tools.Package.2018.09-02.for.MIPS.MTI.Linux.CentOS-6.x86_64.tar.gz
@@ -0,0 +1,51 @@
################################################################################
#
# toolchain-external-codescape-mti-mips
#
################################################################################
TOOLCHAIN_EXTERNAL_CODESCAPE_MTI_MIPS_VERSION = 2018.09-02
TOOLCHAIN_EXTERNAL_CODESCAPE_MTI_MIPS_SITE = https://codescape.mips.com/components/toolchain/$(TOOLCHAIN_EXTERNAL_CODESCAPE_MTI_MIPS_VERSION)
TOOLCHAIN_EXTERNAL_CODESCAPE_MTI_MIPS_STRIP_COMPONENTS = 2
ifeq ($(HOSTARCH),x86)
TOOLCHAIN_EXTERNAL_CODESCAPE_MTI_MIPS_SOURCE = Codescape.GNU.Tools.Package.$(TOOLCHAIN_EXTERNAL_CODESCAPE_MTI_MIPS_VERSION).for.MIPS.MTI.Linux.CentOS-6.x86.tar.gz
else
TOOLCHAIN_EXTERNAL_CODESCAPE_MTI_MIPS_SOURCE = Codescape.GNU.Tools.Package.$(TOOLCHAIN_EXTERNAL_CODESCAPE_MTI_MIPS_VERSION).for.MIPS.MTI.Linux.CentOS-6.x86_64.tar.gz
endif
# Special fixup for Codescape MIPS toolchains, that have bin-<abi> and
# sbin-<abi> directories. We create symlinks bin -> bin-<abi> and sbin
# -> sbin-<abi> so that the rest of Buildroot can find the toolchain
# tools in the appropriate location.
ifeq ($(BR2_MIPS_OABI32),y)
TOOLCHAIN_EXTERNAL_CODESCAPE_MTI_MIPS_BIN_DIR_SUFFIX = o32
else ifeq ($(BR2_MIPS_NABI32),y)
TOOLCHAIN_EXTERNAL_CODESCAPE_MTI_MIPS_BIN_DIR_SUFFIX = n32
else ifeq ($(BR2_MIPS_NABI64),y)
TOOLCHAIN_EXTERNAL_CODESCAPE_MTI_MIPS_BIN_DIR_SUFFIX = n64
endif
define TOOLCHAIN_EXTERNAL_CODESCAPE_MTI_MIPS_STAGING_FIXUPS
rmdir $(STAGING_DIR)/usr/bin $(STAGING_DIR)/usr/sbin
ln -sf bin-$(TOOLCHAIN_EXTERNAL_CODESCAPE_MTI_MIPS_BIN_DIR_SUFFIX) $(STAGING_DIR)/usr/bin
ln -sf sbin-$(TOOLCHAIN_EXTERNAL_CODESCAPE_MTI_MIPS_BIN_DIR_SUFFIX) $(STAGING_DIR)/usr/sbin
endef
# The Codescape toolchain uses a sysroot layout that places them
# side-by-side instead of nested like multilibs. A symlink is needed
# much like for the nested sysroots which are handled in
# copy_toolchain_sysroot but there is not enough information in there
# to determine whether the sysroot layout was nested or side-by-side.
# Add the symlink here for now.
define TOOLCHAIN_EXTERNAL_CODESCAPE_MTI_MIPS_SYMLINK
$(Q)ARCH_SYSROOT_DIR="$(call toolchain_find_sysroot,$(TOOLCHAIN_EXTERNAL_CC) $(TOOLCHAIN_EXTERNAL_CFLAGS))"; \
ARCH_SUBDIR=`basename $${ARCH_SYSROOT_DIR}`; \
ln -snf . $(STAGING_DIR)/$${ARCH_SUBDIR}
endef
TOOLCHAIN_EXTERNAL_CODESCAPE_MTI_MIPS_POST_INSTALL_STAGING_HOOKS += \
TOOLCHAIN_EXTERNAL_CODESCAPE_MTI_MIPS_STAGING_FIXUPS \
TOOLCHAIN_EXTERNAL_CODESCAPE_MTI_MIPS_SYMLINK
$(eval $(toolchain-external-package))
@@ -0,0 +1,20 @@
config BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_AARCH64
bool "CodeSourcery AArch64 2014.11"
depends on BR2_aarch64
depends on !BR2_ARCH_NEEDS_GCC_AT_LEAST_5
# a57/a53 and a72/a53 appeared in gcc-6 or were broken before
depends on !BR2_cortex_a57_a53 && !BR2_cortex_a72_a53
depends on BR2_HOSTARCH = "x86_64" || BR2_HOSTARCH = "x86"
depends on !BR2_STATIC_LIBS
select BR2_TOOLCHAIN_EXTERNAL_GLIBC
select BR2_TOOLCHAIN_HAS_SSP
select BR2_INSTALL_LIBSTDCPP
select BR2_HOSTARCH_NEEDS_IA32_LIBS
select BR2_TOOLCHAIN_HAS_NATIVE_RPC
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_16
select BR2_TOOLCHAIN_GCC_AT_LEAST_4_9
help
Sourcery CodeBench toolchain for the AArch64 architecture,
from Mentor Graphics. It uses gcc 4.9.1, binutils
2.24.51.20140217, glibc 2.20, gdb 7.7.50 and kernel headers
3.16.2.
@@ -0,0 +1,9 @@
if BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_AARCH64
config BR2_TOOLCHAIN_EXTERNAL_PREFIX
default "aarch64-amd-linux-gnu"
config BR2_PACKAGE_PROVIDES_TOOLCHAIN_EXTERNAL
default "toolchain-external-codesourcery-aarch64"
endif
@@ -0,0 +1,3 @@
# Locally calculated
sha256 405aada821146755c5f2df566375c2a682456d6b8451ee47b88cf1a52b093676 aarch64-amd-2014.11-95-aarch64-amd-linux-gnu-i686-pc-linux-gnu.tar.bz2
sha256 3f50dd6ee433eb5b6992a1071b988e50379a738f54f58722bc60081613764716 aarch64-amd-2014.11-95-aarch64-amd-linux-gnu.src.tar.bz2
@@ -0,0 +1,12 @@
################################################################################
#
# toolchain-external-codesourcery-aarch64
#
################################################################################
TOOLCHAIN_EXTERNAL_CODESOURCERY_AARCH64_SITE = https://sourcery.mentor.com/public/gnu_toolchain/$(TOOLCHAIN_EXTERNAL_PREFIX)
TOOLCHAIN_EXTERNAL_CODESOURCERY_AARCH64_VERSION = 2014.11-95
TOOLCHAIN_EXTERNAL_CODESOURCERY_AARCH64_SOURCE = aarch64-amd-$(TOOLCHAIN_EXTERNAL_CODESOURCERY_AARCH64_VERSION)-$(TOOLCHAIN_EXTERNAL_PREFIX)-i686-pc-linux-gnu.tar.bz2
TOOLCHAIN_EXTERNAL_CODESOURCERY_AARCH64_ACTUAL_SOURCE_TARBALL = aarch64-amd-$(TOOLCHAIN_EXTERNAL_CODESOURCERY_AARCH64_VERSION)-$(TOOLCHAIN_EXTERNAL_PREFIX).src.tar.bz2
$(eval $(toolchain-external-package))
@@ -0,0 +1,37 @@
config BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_ARM
bool "Sourcery CodeBench ARM 2014.05"
depends on BR2_arm
depends on !BR2_ARCH_NEEDS_GCC_AT_LEAST_4_9
depends on BR2_HOSTARCH = "x86_64" || BR2_HOSTARCH = "x86"
depends on BR2_ARM_EABI
# Unsupported ARM cores
depends on !BR2_cortex_a12 && !BR2_cortex_a17 && !BR2_ARM_CPU_ARMV8A
depends on !BR2_STATIC_LIBS
select BR2_TOOLCHAIN_EXTERNAL_GLIBC
select BR2_TOOLCHAIN_HAS_SSP
select BR2_TOOLCHAIN_HAS_NATIVE_RPC
select BR2_INSTALL_LIBSTDCPP
select BR2_HOSTARCH_NEEDS_IA32_LIBS
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_13
select BR2_TOOLCHAIN_GCC_AT_LEAST_4_8
help
Sourcery CodeBench toolchain for the ARM architecture, from
Mentor Graphics. It uses gcc 4.8.3, binutils 2.24.51, glibc
2.18 and gdb 7.7.50, kernel headers 3.13. It has support
for the following variants:
- ARMv5TE, little endian, soft-float, glibc
Select ARM926T, ARM10T, XScale or another ARMv5 core
Select BR2_SOFT_FLOAT
- ARMv4T, little endian, soft-float, glibc
Select ARM720T, ARM920T, ARM922T or another ARMv4 core
Select BR2_SOFT_FLOAT
- ARMv7-A, Thumb 2, little endian, soft-float, glibc
Select Cortex-A8, Cortex-A9 or another ARMv7-A core
Select BR2_SOFT_FLOAT
Set BR2_TARGET_OPTIMIZATION to -mthumb
comment "Sourcery CodeBench toolchains available for the EABI ABI"
depends on BR2_arm
depends on !BR2_ARCH_NEEDS_GCC_AT_LEAST_4_9
depends on !BR2_ARM_EABI
depends on !BR2_STATIC_LIBS
@@ -0,0 +1,9 @@
if BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_ARM
config BR2_TOOLCHAIN_EXTERNAL_PREFIX
default "arm-none-linux-gnueabi"
config BR2_PACKAGE_PROVIDES_TOOLCHAIN_EXTERNAL
default "toolchain-external-codesourcery-arm"
endif
@@ -0,0 +1,3 @@
# Locally calculated
sha256 39ee0e789034334ecc89af94e838e3a4815400ac5ff980f808f466b04778532e arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
sha256 e16a5b1e41d7ff1e74161f9405182001bc8d1360d89564e73911032e6966cc0d arm-2014.05-29-arm-none-linux-gnueabi.src.tar.bz2
@@ -0,0 +1,13 @@
################################################################################
#
# toolchain-external-codesourcery-arm
#
################################################################################
TOOLCHAIN_EXTERNAL_CODESOURCERY_ARM_VERSION = 2014.05-29
TOOLCHAIN_EXTERNAL_CODESOURCERY_ARM_SITE = https://sourcery.mentor.com/public/gnu_toolchain/$(TOOLCHAIN_EXTERNAL_PREFIX)
TOOLCHAIN_EXTERNAL_CODESOURCERY_ARM_SOURCE = arm-$(TOOLCHAIN_EXTERNAL_CODESOURCERY_ARM_VERSION)-$(TOOLCHAIN_EXTERNAL_PREFIX)-i686-pc-linux-gnu.tar.bz2
TOOLCHAIN_EXTERNAL_CODESOURCERY_ARM_ACTUAL_SOURCE_TARBALL = arm-$(TOOLCHAIN_EXTERNAL_CODESOURCERY_ARM_VERSION)-$(TOOLCHAIN_EXTERNAL_PREFIX).src.tar.bz2
$(eval $(toolchain-external-package))
@@ -0,0 +1,96 @@
config BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_MIPS
bool "Sourcery CodeBench MIPS 2016.05"
depends on BR2_mips || BR2_mipsel || BR2_mips64 || BR2_mips64el
depends on BR2_MIPS_CPU_MIPS32R2 || BR2_MIPS_CPU_MIPS64R2
depends on !BR2_ARCH_NEEDS_GCC_AT_LEAST_6
# Unsupported MIPS cores
depends on !BR2_mips_interaptiv
depends on BR2_HOSTARCH = "x86_64" || BR2_HOSTARCH = "x86"
depends on !BR2_MIPS_NABI32
depends on !BR2_STATIC_LIBS
select BR2_TOOLCHAIN_EXTERNAL_GLIBC
select BR2_TOOLCHAIN_HAS_SSP
select BR2_TOOLCHAIN_HAS_NATIVE_RPC
select BR2_TOOLCHAIN_HAS_OPENMP
select BR2_INSTALL_LIBSTDCPP
select BR2_HOSTARCH_NEEDS_IA32_LIBS
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_4
select BR2_TOOLCHAIN_GCC_AT_LEAST_5
help
Sourcery CodeBench toolchain for the MIPS architecture, from
Mentor Graphics. It uses gcc 5.3, binutils 2.25.51, glibc
2.23, uClibc 0.9.30 and gdb 7.10.50, kernel headers 4.4.1. It
has support for the following variants:
- MIPS32r2 - Big-Endian, 2008 NaN, O32
Select MIPS (big endian) core
Disable BR2_SOFT_FLOAT
Set BR2_TARGET_OPTIMIZATION to -mnan=2008
- MIPS32r2 - Big-Endian, O32
Select MIPS (big endian) core
Disable BR2_SOFT_FLOAT
- MIPS32r2 - Big-Endian, O32, MIPS16
Select MIPS (big endian) core
Disable BR2_SOFT_FLOAT
Set BR2_TARGET_OPTIMIZATION to -mips16
- MIPS32r2 - Big-Endian, Soft-Float, O32
Select MIPS (big endian) core
Select BR2_SOFT_FLOAT
- MIPS32r2 - Big-Endian, Soft-Float, O32, MIPS16
Select MIPS (big endian) core
Select BR2_SOFT_FLOAT
Set BR2_TARGET_OPTIMIZATION to -mips16
- MIPS32r2 - Little-Endian, 2008 NaN, O32
Select MIPS (little endian) core
Disable BR2_SOFT_FLOAT
Set BR2_TARGET_OPTIMIZATION to -mnan=2008
- MIPS32r2 - Little-Endian, O32
Select MIPS (little endian) core
Disable BR2_SOFT_FLOAT
- MIPS32r2 - Little-Endian, O32, MIPS16
Select MIPS (little endian) core
Disable BR2_SOFT_FLOAT
Set BR2_TARGET_OPTIMIZATION to -mips16
- MIPS32r2 - Little-Endian, Soft-Float, O32
Select MIPS (little endian) core
Select BR2_SOFT_FLOAT
- MIPS32r2 - Little-Endian, Soft-Float, O32, MIPS16
Select MIPS (little endian) core
Select BR2_SOFT_FLOAT
Set BR2_TARGET_OPTIMIZATION to -mips16
- MIPS32r2 - Little-Endian, Soft-Float, O32, microMIPS
Select MIPS (little endian) core
Select BR2_SOFT_FLOAT
Set BR2_TARGET_OPTIMIZATION to -mmicromips
- MIPS32r2 - uClibc, Big-Endian, 2008 NaN, O32
Not usable in Buildroot yet.
- MIPS32r2 - uClibc, Big-Endian, O32
Not usable in Buildroot yet.
- MIPS32r2 - uClibc, Big-Endian, Soft-Float, O32
Not usable in Buildroot yet.
- MIPS32r2 - uClibc, Little-Endian, 2008 NaN, O32
Not usable in Buildroot yet.
- MIPS32r2 - uClibc, Little-Endian, O32
Not usable in Buildroot yet.
- MIPS32r2 - uClibc, Little-Endian, Soft-Float, O32
Not usable in Buildroot yet.
- MIPS64r2 - Big-Endian, N64
Select MIPS64 (big endian) core
Select the n64 ABI
Disable BR2_SOFT_FLOAT
- MIPS64r2 - Big-Endian, Soft-Float, N64
Select MIPS64 (big endian) core
Select the n64 ABI
Select BR2_SOFT_FLOAT
- MIPS64r2 - Little-Endian, N64
Select MIPS64 (little endian) core
Select the n64 ABI
Disable BR2_SOFT_FLOAT
- MIPS64r2 - Little-Endian, Soft-Float, N64
Select MIPS64 (little endian) core
Select the n64 ABI
Select BR2_SOFT_FLOAT
comment "Sourcery CodeBench toolchains are only available for MIPS/MIPS64 o32 and n64"
depends on !BR2_ARCH_NEEDS_GCC_AT_LEAST_6
depends on BR2_MIPS_NABI32
depends on !BR2_STATIC_LIBS
@@ -0,0 +1,9 @@
if BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_MIPS
config BR2_TOOLCHAIN_EXTERNAL_PREFIX
default "mips-linux-gnu"
config BR2_PACKAGE_PROVIDES_TOOLCHAIN_EXTERNAL
default "toolchain-external-codesourcery-mips"
endif
@@ -0,0 +1,3 @@
# Locally computed
sha256 d354447c4c5160439dafd5464fa3a0266dd41e79f973477238e4f0215a6b5397 mips-2016.05-8-mips-linux-gnu-i686-pc-linux-gnu.tar.bz2
sha256 2658e55d5b71bba25d6f77e868e18b200ea5f75c8add7ed3a9266e716d9adfff mips-2016.05-8-mips-linux-gnu.src.tar.bz2
@@ -0,0 +1,13 @@
################################################################################
#
# toolchain-external-codesourcery-mips
#
################################################################################
TOOLCHAIN_EXTERNAL_CODESOURCERY_MIPS_VERSION = 2016.05-8
TOOLCHAIN_EXTERNAL_CODESOURCERY_MIPS_SITE = https://sourcery.mentor.com/public/gnu_toolchain/$(TOOLCHAIN_EXTERNAL_PREFIX)
TOOLCHAIN_EXTERNAL_CODESOURCERY_MIPS_SOURCE = mips-$(TOOLCHAIN_EXTERNAL_CODESOURCERY_MIPS_VERSION)-$(TOOLCHAIN_EXTERNAL_PREFIX)-i686-pc-linux-gnu.tar.bz2
TOOLCHAIN_EXTERNAL_CODESOURCERY_MIPS_ACTUAL_SOURCE_TARBALL = mips-$(TOOLCHAIN_EXTERNAL_CODESOURCERY_MIPS_VERSION)-$(TOOLCHAIN_EXTERNAL_PREFIX).src.tar.bz2
$(eval $(toolchain-external-package))
@@ -0,0 +1,17 @@
config BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_NIOSII
bool "Sourcery CodeBench Nios-II 2018.05"
depends on BR2_nios2
depends on !BR2_ARCH_NEEDS_GCC_AT_LEAST_8
depends on BR2_HOSTARCH = "x86_64" || BR2_HOSTARCH = "x86"
depends on !BR2_STATIC_LIBS
select BR2_TOOLCHAIN_EXTERNAL_GLIBC
select BR2_TOOLCHAIN_HAS_SSP
select BR2_TOOLCHAIN_HAS_NATIVE_RPC
select BR2_INSTALL_LIBSTDCPP
select BR2_HOSTARCH_NEEDS_IA32_LIBS
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_15
select BR2_TOOLCHAIN_GCC_AT_LEAST_7
help
Sourcery CodeBench toolchain for the Nios-II architecture,
from Mentor Graphics. It uses gcc 7.3, binutils 2.28,
glibc 2.27, gdb 8.0.1 and kernel headers 4.15.5.
@@ -0,0 +1,9 @@
if BR2_TOOLCHAIN_EXTERNAL_CODESOURCERY_NIOSII
config BR2_TOOLCHAIN_EXTERNAL_PREFIX
default "nios2-linux-gnu"
config BR2_PACKAGE_PROVIDES_TOOLCHAIN_EXTERNAL
default "toolchain-external-codesourcery-niosII"
endif
@@ -0,0 +1,6 @@
# From https://sourcery.mentor.com/GNUToolchain/release3374
md5 4f536b3b9b4e00f483e82e304c0a27ae sourceryg++-2018.05-5-nios2-linux-gnu-i686-pc-linux-gnu.tar.bz2
md5 be42ab83da2e8db7b73dc890c2549570 sourceryg++-2018.05-5-nios2-linux-gnu.src.tar.bz2
# Locally calculated
sha256 c19afb432b5b23f8d5d639831d3a423a3ea3c9cc62e0015020d20ea2eb36dd1b sourceryg++-2018.05-5-nios2-linux-gnu-i686-pc-linux-gnu.tar.bz2
sha256 d73a6364106dd62352711f932d3be8e97fdaaa548995678b5d38d9f21e22437a sourceryg++-2018.05-5-nios2-linux-gnu.src.tar.bz2
@@ -0,0 +1,13 @@
################################################################################
#
# toolchain-external-codesourcery-niosII
#
################################################################################
TOOLCHAIN_EXTERNAL_CODESOURCERY_NIOSII_VERSION = 2018.05-5
TOOLCHAIN_EXTERNAL_CODESOURCERY_NIOSII_SITE = https://sourcery.mentor.com/public/gnu_toolchain/$(TOOLCHAIN_EXTERNAL_PREFIX)
TOOLCHAIN_EXTERNAL_CODESOURCERY_NIOSII_SOURCE = sourceryg++-$(TOOLCHAIN_EXTERNAL_CODESOURCERY_NIOSII_VERSION)-$(TOOLCHAIN_EXTERNAL_PREFIX)-i686-pc-linux-gnu.tar.bz2
TOOLCHAIN_EXTERNAL_CODESOURCERY_NIOSII_ACTUAL_SOURCE_TARBALL = sourceryg++-$(TOOLCHAIN_EXTERNAL_CODESOURCERY_NIOSII_VERSION)-$(TOOLCHAIN_EXTERNAL_PREFIX).src.tar.bz2
$(eval $(toolchain-external-package))
@@ -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.
@@ -0,0 +1,518 @@
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_REL_BIN_PATH
string "Toolchain relative binary path"
default "bin"
depends on BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD
help
Path to where the binaries (e.g. the compiler) can be found,
relative to the downloaded toolchain root directory. The
default is "bin" and is correct for most toolchains.
config BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX
string "Toolchain prefix"
default "$(ARCH)-linux"
choice
bool "External toolchain gcc version"
help
Set to the gcc version that is used by your external
toolchain.
config BR2_TOOLCHAIN_EXTERNAL_GCC_11
bool "11.x"
select BR2_TOOLCHAIN_GCC_AT_LEAST_11
config BR2_TOOLCHAIN_EXTERNAL_GCC_10
bool "10.x"
select BR2_TOOLCHAIN_GCC_AT_LEAST_10
config BR2_TOOLCHAIN_EXTERNAL_GCC_9
bool "9.x"
select BR2_TOOLCHAIN_GCC_AT_LEAST_9
config BR2_TOOLCHAIN_EXTERNAL_GCC_8
bool "8.x"
select BR2_TOOLCHAIN_GCC_AT_LEAST_8
config BR2_TOOLCHAIN_EXTERNAL_GCC_7
bool "7.x"
select BR2_TOOLCHAIN_GCC_AT_LEAST_7
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
config BR2_TOOLCHAIN_EXTERNAL_GCC_OLD
bool "older"
help
Use this option if your GCC version is older than any of the
above.
Note that the Buildroot community doesn't do any testing with
such old toolchains. Some packages may fail to build in
surprising ways, or the generated root filesystem may not
work at all. Use such old toolchains at your own risk.
endchoice
comment "GCC older than 4.8 is not tested by Buildroot. Use at your own risk."
depends on !BR2_TOOLCHAIN_GCC_AT_LEAST_4_8
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
If your toolchain uses headers newer than the latest version
in the choice, then select the latest version.
config BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_15
bool "5.15.x or later"
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_15
config BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_14
bool "5.14.x"
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_14
config BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_13
bool "5.13.x"
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_13
config BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_12
bool "5.12.x"
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_12
config BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_11
bool "5.11"
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_11
config BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_10
bool "5.10.x"
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_10
config BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_9
bool "5.9.x"
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_9
config BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_8
bool "5.8.x"
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_8
config BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_7
bool "5.7.x"
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_7
config BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_6
bool "5.6.x"
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_6
config BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_5
bool "5.5.x"
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_5
config BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_4
bool "5.4.x"
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_4
config BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_3
bool "5.3.x"
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_3
config BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_2
bool "5.2.x"
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_2
config BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_1
bool "5.1.x"
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_1
config BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_0
bool "5.0.x"
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_0
config BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_20
bool "4.20.x"
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_20
config BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_19
bool "4.19.x"
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_19
config BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_18
bool "4.18.x"
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_18
config BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_17
bool "4.17.x"
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_17
config BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_16
bool "4.16.x"
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_16
config BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_15
bool "4.15.x"
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_15
config BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_14
bool "4.14.x"
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_14
config BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_13
bool "4.13.x"
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_13
config BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_12
bool "4.12.x"
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_12
config BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_11
bool "4.11.x"
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_11
config BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_10
bool "4.10.x"
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_10
config BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_9
bool "4.9.x"
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_9
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
comment "Kernel headers older than 3.13 is not tested by Buildroot. Use at your own risk."
depends on !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_13
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
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?"
default y
select BR2_TOOLCHAIN_HAS_THREADS
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?"
default y
select BR2_TOOLCHAIN_HAS_THREADS_DEBUG
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?"
default y
select BR2_TOOLCHAIN_HAS_THREADS_NPTL
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?"
default y if BR2_TOOLCHAIN_EXTERNAL_GLIBC
default y if BR2_TOOLCHAIN_EXTERNAL_MUSL
select BR2_TOOLCHAIN_HAS_SSP
help
Select 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_HAS_SSP_STRONG
bool "Toolchain has SSP strong support?"
default y if BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 && BR2_TOOLCHAIN_EXTERNAL_GLIBC
default y if BR2_TOOLCHAIN_GCC_AT_LEAST_4_9 && BR2_TOOLCHAIN_EXTERNAL_MUSL
depends on BR2_TOOLCHAIN_EXTERNAL_HAS_SSP
select BR2_TOOLCHAIN_HAS_SSP_STRONG
help
Select this option if your external toolchain has strong
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?"
default y if BR2_TOOLCHAIN_EXTERNAL_GLIBC
depends on !BR2_TOOLCHAIN_EXTERNAL_MUSL
select BR2_TOOLCHAIN_HAS_NATIVE_RPC
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_DLANG
bool "Toolchain has D support?"
select BR2_TOOLCHAIN_HAS_DLANG
help
Select this option if your external toolchain has D
support.
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_EXTERNAL_OPENMP
bool "Toolchain has OpenMP support?"
select BR2_TOOLCHAIN_HAS_OPENMP
help
Select this option if your external toolchain has OpenMP
support. If you don't know, leave the default value,
Buildroot will tell you if it's correct or not.
endif
@@ -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))
@@ -0,0 +1,16 @@
config BR2_TOOLCHAIN_EXTERNAL_LINARO_AARCH64_BE
bool "Linaro AArch64 BE 2018.05"
depends on BR2_aarch64_be
depends on BR2_HOSTARCH = "x86_64" || BR2_HOSTARCH = "x86"
depends on !BR2_STATIC_LIBS
select BR2_TOOLCHAIN_EXTERNAL_GLIBC
select BR2_TOOLCHAIN_HAS_SSP
select BR2_INSTALL_LIBSTDCPP
select BR2_TOOLCHAIN_HAS_NATIVE_RPC
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_10
select BR2_TOOLCHAIN_GCC_AT_LEAST_7
select BR2_TOOLCHAIN_HAS_FORTRAN
select BR2_TOOLCHAIN_HAS_OPENMP
help
Toolchain for the AArch64 Big Endian architecture, from
http://www.linaro.org/engineering/armv8/
@@ -0,0 +1,9 @@
if BR2_TOOLCHAIN_EXTERNAL_LINARO_AARCH64_BE
config BR2_TOOLCHAIN_EXTERNAL_PREFIX
default "aarch64_be-linux-gnu"
config BR2_PACKAGE_PROVIDES_TOOLCHAIN_EXTERNAL
default "toolchain-external-linaro-aarch64-be"
endif
@@ -0,0 +1,3 @@
# Locally calculated
sha256 412da19c1d1bff0f3172bc19fd2c024207d8d716dbe7a8dad4bf9e3d6b71d149 gcc-linaro-7.3.1-2018.05-i686_aarch64_be-linux-gnu.tar.xz
sha256 277c1483f8dbd6007c945ffeb706fa1ba1da8ec1c397cf5cf1e29c25081426e5 gcc-linaro-7.3.1-2018.05-x86_64_aarch64_be-linux-gnu.tar.xz
@@ -0,0 +1,16 @@
################################################################################
#
# toolchain-external-linaro-aarch64-be
#
################################################################################
TOOLCHAIN_EXTERNAL_LINARO_AARCH64_BE_VERSION = 2018.05
TOOLCHAIN_EXTERNAL_LINARO_AARCH64_BE_SITE = https://releases.linaro.org/components/toolchain/binaries/7.3-$(TOOLCHAIN_EXTERNAL_LINARO_AARCH64_BE_VERSION)/aarch64_be-linux-gnu
ifeq ($(HOSTARCH),x86)
TOOLCHAIN_EXTERNAL_LINARO_AARCH64_BE_SOURCE = gcc-linaro-7.3.1-$(TOOLCHAIN_EXTERNAL_LINARO_AARCH64_BE_VERSION)-i686_aarch64_be-linux-gnu.tar.xz
else
TOOLCHAIN_EXTERNAL_LINARO_AARCH64_BE_SOURCE = gcc-linaro-7.3.1-$(TOOLCHAIN_EXTERNAL_LINARO_AARCH64_BE_VERSION)-x86_64_aarch64_be-linux-gnu.tar.xz
endif
$(eval $(toolchain-external-package))
@@ -0,0 +1,16 @@
config BR2_TOOLCHAIN_EXTERNAL_LINARO_AARCH64
bool "Linaro AArch64 2018.05"
depends on BR2_aarch64
depends on BR2_HOSTARCH = "x86_64" || BR2_HOSTARCH = "x86"
depends on !BR2_STATIC_LIBS
select BR2_TOOLCHAIN_EXTERNAL_GLIBC
select BR2_TOOLCHAIN_HAS_SSP
select BR2_INSTALL_LIBSTDCPP
select BR2_TOOLCHAIN_HAS_NATIVE_RPC
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_10
select BR2_TOOLCHAIN_GCC_AT_LEAST_7
select BR2_TOOLCHAIN_HAS_FORTRAN
select BR2_TOOLCHAIN_HAS_OPENMP
help
Toolchain for the AArch64 architecture, from
http://www.linaro.org/engineering/armv8/
@@ -0,0 +1,9 @@
if BR2_TOOLCHAIN_EXTERNAL_LINARO_AARCH64
config BR2_TOOLCHAIN_EXTERNAL_PREFIX
default "aarch64-linux-gnu"
config BR2_PACKAGE_PROVIDES_TOOLCHAIN_EXTERNAL
default "toolchain-external-linaro-aarch64"
endif
@@ -0,0 +1,3 @@
# Locally calculated
sha256 466b801a60491ae1e2ce9952e0615cf04cf611596c6ffd5bfe8a89ef5be47e03 gcc-linaro-7.3.1-2018.05-i686_aarch64-linux-gnu.tar.xz
sha256 73eed74e593e2267504efbcf3678918bb22409ab7afa3dc7c135d2c6790c2345 gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz
@@ -0,0 +1,16 @@
################################################################################
#
# toolchain-external-linaro-aarch64
#
################################################################################
TOOLCHAIN_EXTERNAL_LINARO_AARCH64_VERSION = 2018.05
TOOLCHAIN_EXTERNAL_LINARO_AARCH64_SITE = https://releases.linaro.org/components/toolchain/binaries/7.3-$(TOOLCHAIN_EXTERNAL_LINARO_AARCH64_VERSION)/aarch64-linux-gnu
ifeq ($(HOSTARCH),x86)
TOOLCHAIN_EXTERNAL_LINARO_AARCH64_SOURCE = gcc-linaro-7.3.1-$(TOOLCHAIN_EXTERNAL_LINARO_AARCH64_VERSION)-i686_aarch64-linux-gnu.tar.xz
else
TOOLCHAIN_EXTERNAL_LINARO_AARCH64_SOURCE = gcc-linaro-7.3.1-$(TOOLCHAIN_EXTERNAL_LINARO_AARCH64_VERSION)-x86_64_aarch64-linux-gnu.tar.xz
endif
$(eval $(toolchain-external-package))
@@ -0,0 +1,28 @@
comment "Linaro toolchains available for Cortex-A + EABIhf"
depends on BR2_arm
depends on !BR2_ARM_CPU_ARMV7A || !BR2_ARM_EABIHF
depends on !BR2_STATIC_LIBS
config BR2_TOOLCHAIN_EXTERNAL_LINARO_ARM
bool "Linaro ARM 2018.05"
depends on BR2_arm
depends on BR2_ARM_CPU_ARMV7A || BR2_ARM_CPU_ARMV8A
depends on BR2_HOSTARCH = "x86_64" || BR2_HOSTARCH = "x86"
depends on BR2_ARM_EABIHF
depends on !BR2_STATIC_LIBS
select BR2_TOOLCHAIN_EXTERNAL_GLIBC
select BR2_TOOLCHAIN_HAS_SSP
select BR2_TOOLCHAIN_HAS_NATIVE_RPC
select BR2_INSTALL_LIBSTDCPP
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_10
select BR2_TOOLCHAIN_GCC_AT_LEAST_7
select BR2_TOOLCHAIN_HAS_FORTRAN
select BR2_TOOLCHAIN_HAS_OPENMP
help
Linaro toolchain for the ARM architecture. It uses Linaro
GCC 2018.05 (based on gcc 7.3.1), Linaro GDB 2018.05 (based on
GDB 8.1), glibc 2.25, Binutils 2018.05 (based on 2.28). It
generates code that runs on all Cortex-A profile devices,
but tuned for the Cortex-A9. The code generated is Thumb 2,
with the hard floating point calling convention, and uses
the VFPv3-D16 FPU instructions.
@@ -0,0 +1,9 @@
if BR2_TOOLCHAIN_EXTERNAL_LINARO_ARM
config BR2_TOOLCHAIN_EXTERNAL_PREFIX
default "arm-linux-gnueabihf"
config BR2_PACKAGE_PROVIDES_TOOLCHAIN_EXTERNAL
default "toolchain-external-linaro-arm"
endif
@@ -0,0 +1,3 @@
# Locally calculated
sha256 0613b5be14eb7d50a772bbd72069c428558e6e53fa5fce7201d75a13a475ffff gcc-linaro-7.3.1-2018.05-i686_arm-linux-gnueabihf.tar.xz
sha256 7248bf105d0d468887a9b8a7120bb281ac8ad0223d9cb3d00dc7c2d498485d91 gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabihf.tar.xz
@@ -0,0 +1,16 @@
################################################################################
#
# toolchain-external-linaro-arm
#
################################################################################
TOOLCHAIN_EXTERNAL_LINARO_ARM_VERSION = 2018.05
TOOLCHAIN_EXTERNAL_LINARO_ARM_SITE = https://releases.linaro.org/components/toolchain/binaries/7.3-$(TOOLCHAIN_EXTERNAL_LINARO_ARM_VERSION)/arm-linux-gnueabihf
ifeq ($(HOSTARCH),x86)
TOOLCHAIN_EXTERNAL_LINARO_ARM_SOURCE = gcc-linaro-7.3.1-$(TOOLCHAIN_EXTERNAL_LINARO_ARM_VERSION)-i686_arm-linux-gnueabihf.tar.xz
else
TOOLCHAIN_EXTERNAL_LINARO_ARM_SOURCE = gcc-linaro-7.3.1-$(TOOLCHAIN_EXTERNAL_LINARO_ARM_VERSION)-x86_64_arm-linux-gnueabihf.tar.xz
endif
$(eval $(toolchain-external-package))
@@ -0,0 +1,27 @@
comment "Linaro toolchains available for Cortex-A + EABIhf"
depends on BR2_armeb
depends on !BR2_ARM_CPU_ARMV7A || !BR2_ARM_EABIHF
depends on !BR2_STATIC_LIBS
config BR2_TOOLCHAIN_EXTERNAL_LINARO_ARMEB
bool "Linaro armeb 2018.05"
depends on BR2_armeb
depends on BR2_ARM_CPU_ARMV7A || BR2_ARM_CPU_ARMV8A
depends on BR2_HOSTARCH = "x86_64" || BR2_HOSTARCH = "x86"
depends on BR2_ARM_EABIHF
depends on !BR2_STATIC_LIBS
select BR2_TOOLCHAIN_EXTERNAL_GLIBC
select BR2_TOOLCHAIN_HAS_SSP
select BR2_TOOLCHAIN_HAS_NATIVE_RPC
select BR2_TOOLCHAIN_HAS_OPENMP
select BR2_INSTALL_LIBSTDCPP
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_10
select BR2_TOOLCHAIN_GCC_AT_LEAST_7
help
Linaro toolchain for the ARM big endian architecture. It
uses Linaro GCC 2018.05 (based on gcc 7.3.1), Linaro GDB
2018.05 (based on GDB 8.1), glibc 2.25, Binutils 2018.05
(based on 2.28). It generates code that runs on all Cortex-A
profile devices, but tuned for the Cortex-A9. The code
generated is Thumb 2, with the hard floating point calling
convention, and uses the VFPv3-D16 FPU instructions.
@@ -0,0 +1,9 @@
if BR2_TOOLCHAIN_EXTERNAL_LINARO_ARMEB
config BR2_TOOLCHAIN_EXTERNAL_PREFIX
default "armeb-linux-gnueabihf"
config BR2_PACKAGE_PROVIDES_TOOLCHAIN_EXTERNAL
default "toolchain-external-linaro-armeb"
endif
@@ -0,0 +1,3 @@
# Locally calculated
sha256 60bf9924a0c039c94deb85cb9b129d0f28b28eadbb1fb3f7e2e227679cc43fc9 gcc-linaro-7.3.1-2018.05-i686_armeb-linux-gnueabihf.tar.xz
sha256 c1bbd598b78458d6b7ea1c971fddf736c00d57890c7131fdafd4e789289c42f9 gcc-linaro-7.3.1-2018.05-x86_64_armeb-linux-gnueabihf.tar.xz
@@ -0,0 +1,17 @@
################################################################################
#
# toolchain-external-linaro-armeb
#
################################################################################
TOOLCHAIN_EXTERNAL_LINARO_ARMEB_VERSION = 2018.05
TOOLCHAIN_EXTERNAL_LINARO_ARMEB_SITE = https://releases.linaro.org/components/toolchain/binaries/7.3-$(TOOLCHAIN_EXTERNAL_LINARO_ARMEB_VERSION)/armeb-linux-gnueabihf
ifeq ($(HOSTARCH),x86)
TOOLCHAIN_EXTERNAL_LINARO_ARMEB_SOURCE = gcc-linaro-7.3.1-$(TOOLCHAIN_EXTERNAL_LINARO_ARMEB_VERSION)-i686_armeb-linux-gnueabihf.tar.xz
else
TOOLCHAIN_EXTERNAL_LINARO_ARMEB_SOURCE = gcc-linaro-7.3.1-$(TOOLCHAIN_EXTERNAL_LINARO_ARMEB_VERSION)-x86_64_armeb-linux-gnueabihf.tar.xz
endif
$(eval $(toolchain-external-package))
@@ -0,0 +1,17 @@
config BR2_TOOLCHAIN_EXTERNAL_SYNOPSYS_ARC
bool "Synopsys ARC 2019.09 toolchain"
depends on BR2_arc
depends on BR2_HOSTARCH = "x86_64"
select BR2_TOOLCHAIN_EXTERNAL_UCLIBC
select BR2_INSTALL_LIBSTDCPP
select BR2_ENABLE_LOCALE
select BR2_USE_WCHAR
select BR2_TOOLCHAIN_HAS_THREADS
select BR2_TOOLCHAIN_HAS_THREADS_NPTL
select BR2_TOOLCHAIN_HAS_THREADS_DEBUG
select BR2_TOOLCHAIN_HAS_SSP
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_15
select BR2_TOOLCHAIN_GCC_AT_LEAST_9
help
Toolchain for the ARC cores, from
https://github.com/foss-for-synopsys-dwc-arc-processors/toolchain/releases
@@ -0,0 +1,10 @@
if BR2_TOOLCHAIN_EXTERNAL_SYNOPSYS_ARC
config BR2_TOOLCHAIN_EXTERNAL_PREFIX
default "arc-linux" if BR2_arcle
default "arceb-linux" if BR2_arceb
config BR2_PACKAGE_PROVIDES_TOOLCHAIN_EXTERNAL
default "toolchain-external-synopsys-arc"
endif
@@ -0,0 +1,5 @@
# From https://github.com/foss-for-synopsys-dwc-arc-processors/toolchain/releases/tag/arc-2019.09-release
sha256 f7cbf68ef251943db7baf63535e0ec98dafbdf5d925017b4e1d4fc64d9b38a26 arc_gnu_2019.09_prebuilt_uclibc_le_arc700_linux_install.tar.gz
sha256 ac09f0a21f9d50146a5e542f4a6abc93e5a1dcb0a1372cb5c3ba86bbefaaec7d arc_gnu_2019.09_prebuilt_uclibc_be_arc700_linux_install.tar.gz
sha256 245ca49fe8ea2456617541b18bb96e52e6c0dc619f00e293fcaad519fc436c35 arc_gnu_2019.09_prebuilt_uclibc_le_archs_linux_install.tar.gz
sha256 6f039a0158c03af398ada31fae96009e47f0d7b7f7d52e12eb419492fc3f27e7 arc_gnu_2019.09_prebuilt_uclibc_be_archs_linux_install.tar.gz
@@ -0,0 +1,24 @@
################################################################################
#
# toolchain-external-synopsys-arc
#
################################################################################
TOOLCHAIN_EXTERNAL_SYNOPSYS_ARC_VERSION = 2019.09
TOOLCHAIN_EXTERNAL_SYNOPSYS_ARC_SITE = https://github.com/foss-for-synopsys-dwc-arc-processors/toolchain/releases/download/arc-$(TOOLCHAIN_EXTERNAL_SYNOPSYS_ARC_VERSION)-release
ifeq ($(BR2_arc750d)$(BR2_arc770d),y)
TOOLCHAIN_EXTERNAL_SYNOPSYS_ARC_CORE = arc700
else
TOOLCHAIN_EXTERNAL_SYNOPSYS_ARC_CORE = archs
endif
ifeq ($(BR2_arcle),y)
TOOLCHAIN_EXTERNAL_SYNOPSYS_ARC_ENDIANESS = le
else
TOOLCHAIN_EXTERNAL_SYNOPSYS_ARC_ENDIANESS = be
endif
TOOLCHAIN_EXTERNAL_SYNOPSYS_ARC_SOURCE = arc_gnu_$(TOOLCHAIN_EXTERNAL_SYNOPSYS_ARC_VERSION)_prebuilt_uclibc_$(TOOLCHAIN_EXTERNAL_SYNOPSYS_ARC_ENDIANESS)_$(TOOLCHAIN_EXTERNAL_SYNOPSYS_ARC_CORE)_linux_install.tar.gz
$(eval $(toolchain-external-package))
@@ -0,0 +1,28 @@
################################################################################
#
# toolchain-external
#
################################################################################
TOOLCHAIN_EXTERNAL_ADD_TOOLCHAIN_DEPENDENCY = NO
# musl does not provide an implementation for sys/queue.h or sys/cdefs.h.
# So, add the musl-compat-headers package that will install those files,
# into the staging directory:
# sys/queue.h: header from NetBSD
# sys/cdefs.h: minimalist header bundled in Buildroot
ifeq ($(BR2_TOOLCHAIN_USES_MUSL),y)
TOOLCHAIN_EXTERNAL_DEPENDENCIES += musl-compat-headers
endif
$(eval $(virtual-package))
# Ensure the external-toolchain package has a prefix defined.
# This comes after the virtual-package definition, which checks the provider.
ifeq ($(BR2_TOOLCHAIN_EXTERNAL),y)
ifeq ($(call qstrip,$(BR2_TOOLCHAIN_EXTERNAL_PREFIX)),)
$(error No prefix selected for external toolchain package $(BR2_PACKAGE_PROVIDES_TOOLCHAIN_EXTERNAL). Configuration error)
endif
endif
include $(sort $(wildcard toolchain/toolchain-external/*/*.mk))
+553
View File
@@ -0,0 +1,553 @@
/**
* Buildroot wrapper for toolchains. This simply executes the real toolchain
* with a number of arguments (sysroot/arch/..) hardcoded, to ensure the
* toolchain uses the correct configuration.
* The hardcoded path arguments are defined relative to the actual location
* of the binary.
*
* (C) 2011 Peter Korsgaard <jacmet@sunsite.dk>
* (C) 2011 Daniel Nyström <daniel.nystrom@timeterminal.se>
* (C) 2012 Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
* (C) 2013 Spenser Gilliland <spenser@gillilanding.com>
*
* This file is licensed under the terms of the GNU General Public License
* version 2. This program is licensed "as is" without any warranty of any
* kind, whether express or implied.
*/
#define _GNU_SOURCE
#include <stdio.h>
#include <string.h>
#include <limits.h>
#include <unistd.h>
#include <stdlib.h>
#include <errno.h>
#include <time.h>
#include <stdbool.h>
#ifdef BR_CCACHE
static char ccache_path[PATH_MAX];
#endif
static char path[PATH_MAX];
static char sysroot[PATH_MAX];
/* As would be defined by gcc:
* https://gcc.gnu.org/onlinedocs/cpp/Standard-Predefined-Macros.html
* sizeof() on string literals includes the terminating \0. */
static char _time_[sizeof("-D__TIME__=\"HH:MM:SS\"")];
static char _date_[sizeof("-D__DATE__=\"MMM DD YYYY\"")];
/**
* GCC errors out with certain combinations of arguments (examples are
* -mfloat-abi={hard|soft} and -m{little|big}-endian), so we have to ensure
* that we only pass the predefined one to the real compiler if the inverse
* option isn't in the argument list.
* This specifies the worst case number of extra arguments we might pass
* Currently, we may have:
* -mfloat-abi=
* -march=
* -mcpu=
* -D__TIME__=
* -D__DATE__=
* -Wno-builtin-macro-redefined
* -Wl,-z,now
* -Wl,-z,relro
* -fPIE
* -pie
*/
#define EXCLUSIVE_ARGS 10
static char *predef_args[] = {
#ifdef BR_CCACHE
ccache_path,
#endif
path,
"--sysroot", sysroot,
#ifdef BR_ABI
"-mabi=" BR_ABI,
#endif
#ifdef BR_NAN
"-mnan=" BR_NAN,
#endif
#ifdef BR_FPU
"-mfpu=" BR_FPU,
#endif
#ifdef BR_SOFTFLOAT
"-msoft-float",
#endif /* BR_SOFTFLOAT */
#ifdef BR_MODE
"-m" BR_MODE,
#endif
#ifdef BR_64
"-m64",
#endif
#ifdef BR_OMIT_LOCK_PREFIX
"-Wa,-momit-lock-prefix=yes",
#endif
#ifdef BR_NO_FUSED_MADD
"-mno-fused-madd",
#endif
#ifdef BR_FP_CONTRACT_OFF
"-ffp-contract=off",
#endif
#ifdef BR_BINFMT_FLAT
"-Wl,-elf2flt",
#endif
#ifdef BR_MIPS_TARGET_LITTLE_ENDIAN
"-EL",
#endif
#if defined(BR_MIPS_TARGET_BIG_ENDIAN) || defined(BR_ARC_TARGET_BIG_ENDIAN)
"-EB",
#endif
#ifdef BR_ADDITIONAL_CFLAGS
BR_ADDITIONAL_CFLAGS
#endif
};
/* A {string,length} tuple, to avoid computing strlen() on constants.
* - str must be a \0-terminated string
* - len does not account for the terminating '\0'
*/
struct str_len_s {
const char *str;
size_t len;
};
/* Define a {string,length} tuple. Takes an unquoted constant string as
* parameter. sizeof() on a string literal includes the terminating \0,
* but we don't want to count it.
*/
#define STR_LEN(s) { #s, sizeof(#s)-1 }
/* List of paths considered unsafe for cross-compilation.
*
* An unsafe path is one that points to a directory with libraries or
* headers for the build machine, which are not suitable for the target.
*/
static const struct str_len_s unsafe_paths[] = {
STR_LEN(/lib),
STR_LEN(/usr/include),
STR_LEN(/usr/lib),
STR_LEN(/usr/local/include),
STR_LEN(/usr/local/lib),
STR_LEN(/usr/X11R6/include),
STR_LEN(/usr/X11R6/lib),
{ NULL, 0 },
};
/* Unsafe options are options that specify a potentialy unsafe path,
* that will be checked by check_unsafe_path(), below.
*/
static const struct str_len_s unsafe_opts[] = {
STR_LEN(-I),
STR_LEN(-idirafter),
STR_LEN(-iquote),
STR_LEN(-isystem),
STR_LEN(-L),
{ NULL, 0 },
};
/* Check if path is unsafe for cross-compilation. Unsafe paths are those
* pointing to the standard native include or library paths.
*
* We print the arguments leading to the failure. For some options, gcc
* accepts the path to be concatenated to the argument (e.g. -I/foo/bar)
* or separated (e.g. -I /foo/bar). In the first case, we need only print
* the argument as it already contains the path (arg_has_path), while in
* the second case we need to print both (!arg_has_path).
*
* If paranoid, exit in error instead of just printing a warning.
*/
static void check_unsafe_path(const char *arg,
const char *path,
int paranoid,
int arg_has_path)
{
const struct str_len_s *p;
for (p=unsafe_paths; p->str; p++) {
if (strncmp(path, p->str, p->len))
continue;
fprintf(stderr,
"%s: %s: unsafe header/library path used in cross-compilation: '%s%s%s'\n",
program_invocation_short_name,
paranoid ? "ERROR" : "WARNING",
arg,
arg_has_path ? "" : "' '", /* close single-quote, space, open single-quote */
arg_has_path ? "" : path); /* so that arg and path are properly quoted. */
if (paranoid)
exit(1);
}
}
#ifdef BR_NEED_SOURCE_DATE_EPOCH
/* Returns false if SOURCE_DATE_EPOCH was not defined in the environment.
*
* Returns true if SOURCE_DATE_EPOCH is in the environment and represent
* a valid timestamp, in which case the timestamp is formatted into the
* global variables _date_ and _time_.
*
* Aborts if SOURCE_DATE_EPOCH was set in the environment but did not
* contain a valid timestamp.
*
* Valid values are defined in the spec:
* https://reproducible-builds.org/specs/source-date-epoch/
* but we further restrict them to be positive or null.
*/
bool parse_source_date_epoch_from_env(void)
{
char *epoch_env, *endptr;
time_t epoch;
struct tm epoch_tm;
if ((epoch_env = getenv("SOURCE_DATE_EPOCH")) == NULL)
return false;
errno = 0;
epoch = (time_t) strtoll(epoch_env, &endptr, 10);
/* We just need to test if it is incorrect, but we do not
* care why it is incorrect.
*/
if ((errno != 0) || !*epoch_env || *endptr || (epoch < 0)) {
fprintf(stderr, "%s: invalid SOURCE_DATE_EPOCH='%s'\n",
program_invocation_short_name,
epoch_env);
exit(1);
}
tzset(); /* For localtime_r(), below. */
if (localtime_r(&epoch, &epoch_tm) == NULL) {
fprintf(stderr, "%s: cannot parse SOURCE_DATE_EPOCH=%s\n",
program_invocation_short_name,
getenv("SOURCE_DATE_EPOCH"));
exit(1);
}
if (!strftime(_time_, sizeof(_time_), "-D__TIME__=\"%T\"", &epoch_tm)) {
fprintf(stderr, "%s: cannot set time from SOURCE_DATE_EPOCH=%s\n",
program_invocation_short_name,
getenv("SOURCE_DATE_EPOCH"));
exit(1);
}
if (!strftime(_date_, sizeof(_date_), "-D__DATE__=\"%b %e %Y\"", &epoch_tm)) {
fprintf(stderr, "%s: cannot set date from SOURCE_DATE_EPOCH=%s\n",
program_invocation_short_name,
getenv("SOURCE_DATE_EPOCH"));
exit(1);
}
return true;
}
#else
bool parse_source_date_epoch_from_env(void)
{
/* The compiler is recent enough to handle SOURCE_DATE_EPOCH itself
* so we do not need to do anything here.
*/
return false;
}
#endif
int main(int argc, char **argv)
{
char **args, **cur, **exec_args;
char *relbasedir, *absbasedir;
char *progpath = argv[0];
char *basename;
char *env_debug;
char *paranoid_wrapper;
int paranoid;
int ret, i, count = 0, debug = 0, found_shared = 0;
/* Debug the wrapper to see arguments it was called with.
* If environment variable BR2_DEBUG_WRAPPER is:
* unset, empty, or 0: do not trace
* set to 1 : trace all arguments on a single line
* set to 2 : trace one argument per line
*/
if ((env_debug = getenv("BR2_DEBUG_WRAPPER"))) {
debug = atoi(env_debug);
}
if (debug > 0) {
fprintf(stderr, "Toolchain wrapper was called with:");
for (i = 0; i < argc; i++)
fprintf(stderr, "%s'%s'",
(debug == 2) ? "\n " : " ", argv[i]);
fprintf(stderr, "\n");
}
/* Calculate the relative paths */
basename = strrchr(progpath, '/');
if (basename) {
*basename = '\0';
basename++;
relbasedir = malloc(strlen(progpath) + 7);
if (relbasedir == NULL) {
perror(__FILE__ ": malloc");
return 2;
}
sprintf(relbasedir, "%s/..", argv[0]);
absbasedir = realpath(relbasedir, NULL);
} else {
basename = progpath;
absbasedir = malloc(PATH_MAX + 1);
ret = readlink("/proc/self/exe", absbasedir, PATH_MAX);
if (ret < 0) {
perror(__FILE__ ": readlink");
return 2;
}
absbasedir[ret] = '\0';
for (i = ret; i > 0; i--) {
if (absbasedir[i] == '/') {
absbasedir[i] = '\0';
if (++count == 2)
break;
}
}
}
if (absbasedir == NULL) {
perror(__FILE__ ": realpath");
return 2;
}
/* Fill in the relative paths */
#ifdef BR_CROSS_PATH_REL
ret = snprintf(path, sizeof(path), "%s/" BR_CROSS_PATH_REL "/%s" BR_CROSS_PATH_SUFFIX, absbasedir, basename);
#elif defined(BR_CROSS_PATH_ABS)
ret = snprintf(path, sizeof(path), BR_CROSS_PATH_ABS "/%s" BR_CROSS_PATH_SUFFIX, basename);
#else
ret = snprintf(path, sizeof(path), "%s/bin/%s" BR_CROSS_PATH_SUFFIX, absbasedir, basename);
#endif
if (ret >= sizeof(path)) {
perror(__FILE__ ": overflow");
return 3;
}
#ifdef BR_CCACHE
ret = snprintf(ccache_path, sizeof(ccache_path), "%s/bin/ccache", absbasedir);
if (ret >= sizeof(ccache_path)) {
perror(__FILE__ ": overflow");
return 3;
}
#endif
ret = snprintf(sysroot, sizeof(sysroot), "%s/" BR_SYSROOT, absbasedir);
if (ret >= sizeof(sysroot)) {
perror(__FILE__ ": overflow");
return 3;
}
cur = args = malloc(sizeof(predef_args) +
(sizeof(char *) * (argc + EXCLUSIVE_ARGS)));
if (args == NULL) {
perror(__FILE__ ": malloc");
return 2;
}
/* start with predefined args */
memcpy(cur, predef_args, sizeof(predef_args));
cur += sizeof(predef_args) / sizeof(predef_args[0]);
#ifdef BR_FLOAT_ABI
/* add float abi if not overridden in args */
for (i = 1; i < argc; i++) {
if (!strncmp(argv[i], "-mfloat-abi=", strlen("-mfloat-abi=")) ||
!strcmp(argv[i], "-msoft-float") ||
!strcmp(argv[i], "-mhard-float"))
break;
}
if (i == argc)
*cur++ = "-mfloat-abi=" BR_FLOAT_ABI;
#endif
#ifdef BR_FP32_MODE
/* add fp32 mode if soft-float is not args or hard-float overrides soft-float */
int add_fp32_mode = 1;
for (i = 1; i < argc; i++) {
if (!strcmp(argv[i], "-msoft-float"))
add_fp32_mode = 0;
else if (!strcmp(argv[i], "-mhard-float"))
add_fp32_mode = 1;
}
if (add_fp32_mode == 1)
*cur++ = "-mfp" BR_FP32_MODE;
#endif
#if defined(BR_ARCH) || \
defined(BR_CPU)
/* Add our -march/cpu flags, but only if none of
* -march/mtune/mcpu are already specified on the commandline
*/
for (i = 1; i < argc; i++) {
if (!strncmp(argv[i], "-march=", strlen("-march=")) ||
!strncmp(argv[i], "-mtune=", strlen("-mtune=")) ||
!strncmp(argv[i], "-mcpu=", strlen("-mcpu=" )))
break;
}
if (i == argc) {
#ifdef BR_ARCH
*cur++ = "-march=" BR_ARCH;
#endif
#ifdef BR_CPU
*cur++ = "-mcpu=" BR_CPU;
#endif
}
#endif /* ARCH || CPU */
if (parse_source_date_epoch_from_env()) {
*cur++ = _time_;
*cur++ = _date_;
/* This has existed since gcc-4.4.0. */
*cur++ = "-Wno-builtin-macro-redefined";
}
#ifdef BR2_PIC_PIE
/* Patterned after Fedora/Gentoo hardening approaches.
* https://fedoraproject.org/wiki/Changes/Harden_All_Packages
* https://wiki.gentoo.org/wiki/Hardened/Toolchain#Position_Independent_Executables_.28PIEs.29
*
* A few checks are added to allow disabling of PIE
* 1) -fno-pie and -no-pie are used by other distros to disable PIE in
* cases where the compiler enables it by default. The logic below
* maintains that behavior.
* Ref: https://wiki.ubuntu.com/SecurityTeam/PIE
* 2) A check for -fno-PIE has been used in older Linux Kernel builds
* in a similar way to -fno-pie or -no-pie.
* 3) A check is added for Kernel and U-boot defines
* (-D__KERNEL__ and -D__UBOOT__).
*/
for (i = 1; i < argc; i++) {
/* Apply all incompatible link flag and disable checks first */
if (!strcmp(argv[i], "-r") ||
!strcmp(argv[i], "-Wl,-r") ||
!strcmp(argv[i], "-static") ||
!strcmp(argv[i], "-D__KERNEL__") ||
!strcmp(argv[i], "-D__UBOOT__") ||
!strcmp(argv[i], "-fno-pie") ||
!strcmp(argv[i], "-fno-PIE") ||
!strcmp(argv[i], "-no-pie"))
break;
/* Record that shared was present which disables -pie but don't
* break out of loop as a check needs to occur that possibly
* still allows -fPIE to be set
*/
if (!strcmp(argv[i], "-shared"))
found_shared = 1;
}
if (i == argc) {
/* Compile and link condition checking have been kept split
* between these two loops, as there maybe already are valid
* compile flags set for position independence. In that case
* the wrapper just adds the -pie for link.
*/
for (i = 1; i < argc; i++) {
if (!strcmp(argv[i], "-fpie") ||
!strcmp(argv[i], "-fPIE") ||
!strcmp(argv[i], "-fpic") ||
!strcmp(argv[i], "-fPIC"))
break;
}
/* Both args below can be set at compile/link time
* and are ignored correctly when not used
*/
if (i == argc)
*cur++ = "-fPIE";
if (!found_shared)
*cur++ = "-pie";
}
#endif
/* Are we building the Linux Kernel or U-Boot? */
for (i = 1; i < argc; i++) {
if (!strcmp(argv[i], "-D__KERNEL__") ||
!strcmp(argv[i], "-D__UBOOT__"))
break;
}
if (i == argc) {
/* https://wiki.gentoo.org/wiki/Hardened/Toolchain#Mark_Read-Only_Appropriate_Sections */
#ifdef BR2_RELRO_PARTIAL
*cur++ = "-Wl,-z,relro";
#endif
#ifdef BR2_RELRO_FULL
*cur++ = "-Wl,-z,now";
*cur++ = "-Wl,-z,relro";
#endif
}
paranoid_wrapper = getenv("BR_COMPILER_PARANOID_UNSAFE_PATH");
if (paranoid_wrapper && strlen(paranoid_wrapper) > 0)
paranoid = 1;
else
paranoid = 0;
/* Check for unsafe library and header paths */
for (i = 1; i < argc; i++) {
const struct str_len_s *opt;
for (opt=unsafe_opts; opt->str; opt++ ) {
/* Skip any non-unsafe option. */
if (strncmp(argv[i], opt->str, opt->len))
continue;
/* Handle both cases:
* - path is a separate argument,
* - path is concatenated with option.
*/
if (argv[i][opt->len] == '\0') {
i++;
if (i == argc)
break;
check_unsafe_path(argv[i-1], argv[i], paranoid, 0);
} else
check_unsafe_path(argv[i], argv[i] + opt->len, paranoid, 1);
}
}
/* append forward args */
memcpy(cur, &argv[1], sizeof(char *) * (argc - 1));
cur += argc - 1;
/* finish with NULL termination */
*cur = NULL;
exec_args = args;
#ifdef BR_CCACHE
if (getenv("BR_NO_CCACHE"))
/* Skip the ccache call */
exec_args++;
#endif
/* Debug the wrapper to see final arguments passed to the real compiler. */
if (debug > 0) {
fprintf(stderr, "Toolchain wrapper executing:");
#ifdef BR_CCACHE_HASH
fprintf(stderr, "%sCCACHE_COMPILERCHECK='string:" BR_CCACHE_HASH "'",
(debug == 2) ? "\n " : " ");
#endif
#ifdef BR_CCACHE_BASEDIR
fprintf(stderr, "%sCCACHE_BASEDIR='" BR_CCACHE_BASEDIR "'",
(debug == 2) ? "\n " : " ");
#endif
for (i = 0; exec_args[i]; i++)
fprintf(stderr, "%s'%s'",
(debug == 2) ? "\n " : " ", exec_args[i]);
fprintf(stderr, "\n");
}
#ifdef BR_CCACHE_HASH
/* Allow compilercheck to be overridden through the environment */
if (setenv("CCACHE_COMPILERCHECK", "string:" BR_CCACHE_HASH, 0)) {
perror(__FILE__ ": Failed to set CCACHE_COMPILERCHECK");
return 3;
}
#endif
#ifdef BR_CCACHE_BASEDIR
/* Allow compilercheck to be overridden through the environment */
if (setenv("CCACHE_BASEDIR", BR_CCACHE_BASEDIR, 0)) {
perror(__FILE__ ": Failed to set CCACHE_BASEDIR");
return 3;
}
#endif
if (execv(exec_args[0], exec_args))
perror(path);
free(args);
return 2;
}
+92
View File
@@ -0,0 +1,92 @@
################################################################################
#
# definition of the toolchain wrapper build commands
#
################################################################################
# We use --hash-style=both to increase the compatibility of the generated
# binary with older platforms, except for MIPS, where the only acceptable
# hash style is 'sysv'
ifeq ($(findstring mips,$(HOSTARCH)),mips)
TOOLCHAIN_WRAPPER_HASH_STYLE = sysv
else
TOOLCHAIN_WRAPPER_HASH_STYLE = both
endif
TOOLCHAIN_WRAPPER_ARGS = $($(PKG)_TOOLCHAIN_WRAPPER_ARGS)
TOOLCHAIN_WRAPPER_ARGS += -DBR_SYSROOT='"$(STAGING_SUBDIR)"'
TOOLCHAIN_WRAPPER_OPTS = \
$(ARCH_TOOLCHAIN_WRAPPER_OPTS) \
$(call qstrip,$(BR2_SSP_OPTION)) \
$(call qstrip,$(BR2_TARGET_OPTIMIZATION))
ifeq ($(BR2_REPRODUCIBLE),y)
TOOLCHAIN_WRAPPER_OPTS += -Wl,--build-id=none
ifeq ($(BR2_TOOLCHAIN_GCC_AT_LEAST_8),y)
TOOLCHAIN_WRAPPER_OPTS += -ffile-prefix-map=$(BASE_DIR)=buildroot
else
TOOLCHAIN_WRAPPER_OPTS += -D__FILE__=\"\" -D__BASE_FILE__=\"\" -Wno-builtin-macro-redefined
endif
ifeq ($(BR2_TOOLCHAIN_GCC_AT_LEAST_7),)
TOOLCHAIN_WRAPPER_OPTS += -DBR_NEED_SOURCE_DATE_EPOCH
endif
endif
# Disable -ftree-loop-distribute-patterns on microblaze to
# workaround a compiler bug with gcc 10 and -O2, -Os or -O3.
# https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=5879ab5fafedc8f6f9bfe95a4cf8501b0df90edd
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97208
ifeq ($(BR2_TOOLCHAIN_GCC_AT_LEAST_10)$(BR2_microblaze),yy)
TOOLCHAIN_WRAPPER_OPTS += -fno-tree-loop-distribute-patterns
endif
# We create a list like '"-mfoo", "-mbar", "-mbarfoo"' so that each flag is a
# separate argument when used in execv() by the toolchain wrapper.
TOOLCHAIN_WRAPPER_ARGS += \
-DBR_ADDITIONAL_CFLAGS='$(foreach f,$(TOOLCHAIN_WRAPPER_OPTS),"$(f)"$(comma))'
ifeq ($(BR2_CCACHE),y)
TOOLCHAIN_WRAPPER_ARGS += -DBR_CCACHE
endif
ifeq ($(BR2_x86_x1000),y)
TOOLCHAIN_WRAPPER_ARGS += -DBR_OMIT_LOCK_PREFIX
endif
# Avoid FPU bug on XBurst CPUs
ifeq ($(BR2_mips_xburst),y)
# Before gcc 4.6, -mno-fused-madd was needed, after -ffp-contract is
# needed
ifeq ($(BR2_TOOLCHAIN_GCC_AT_LEAST_4_6),y)
TOOLCHAIN_WRAPPER_ARGS += -DBR_FP_CONTRACT_OFF
else
TOOLCHAIN_WRAPPER_ARGS += -DBR_NO_FUSED_MADD
endif
endif
ifeq ($(BR2_CCACHE_USE_BASEDIR),y)
TOOLCHAIN_WRAPPER_ARGS += -DBR_CCACHE_BASEDIR='"$(BASE_DIR)"'
endif
ifeq ($(BR2_PIC_PIE),y)
TOOLCHAIN_WRAPPER_ARGS += -DBR2_PIC_PIE
endif
ifeq ($(BR2_RELRO_PARTIAL),y)
TOOLCHAIN_WRAPPER_ARGS += -DBR2_RELRO_PARTIAL
else ifeq ($(BR2_RELRO_FULL),y)
TOOLCHAIN_WRAPPER_ARGS += -DBR2_RELRO_FULL
endif
define TOOLCHAIN_WRAPPER_BUILD
$(HOSTCC) $(HOST_CFLAGS) $(TOOLCHAIN_WRAPPER_ARGS) \
-s -Wl,--hash-style=$(TOOLCHAIN_WRAPPER_HASH_STYLE) \
toolchain/toolchain-wrapper.c \
-o $(@D)/toolchain-wrapper
endef
define TOOLCHAIN_WRAPPER_INSTALL
$(INSTALL) -D -m 0755 $(@D)/toolchain-wrapper \
$(HOST_DIR)/bin/toolchain-wrapper
endef
+50
View File
@@ -0,0 +1,50 @@
################################################################################
#
# toolchain-related customisation of the content of the target/ directory
#
################################################################################
# Those customisations are added to the TARGET_FINALIZE_HOOKS, to be applied
# just after all packages have been built.
# Install the gconv modules
ifeq ($(BR2_TOOLCHAIN_GLIBC_GCONV_LIBS_COPY),y)
TOOLCHAIN_GLIBC_GCONV_LIBS = $(call qstrip,$(BR2_TOOLCHAIN_GLIBC_GCONV_LIBS_LIST))
define TOOLCHAIN_GLIBC_COPY_GCONV_LIBS
$(Q)found_gconv=no; \
for d in $(TOOLCHAIN_EXTERNAL_PREFIX) ''; do \
[ -d "$(STAGING_DIR)/usr/lib/$${d}/gconv" ] || continue; \
found_gconv=yes; \
break; \
done; \
if [ "$${found_gconv}" = "no" ]; then \
printf "Unable to find gconv modules\n" >&2; \
exit 1; \
fi; \
if [ -z "$(TOOLCHAIN_GLIBC_GCONV_LIBS)" ]; then \
$(INSTALL) -m 0644 -D $(STAGING_DIR)/usr/lib/$${d}/gconv/gconv-modules \
$(TARGET_DIR)/usr/lib/gconv/gconv-modules && \
$(INSTALL) -m 0644 $(STAGING_DIR)/usr/lib/$${d}/gconv/*.so \
$(TARGET_DIR)/usr/lib/gconv \
|| exit 1; \
else \
for l in $(TOOLCHAIN_GLIBC_GCONV_LIBS); do \
$(INSTALL) -m 0644 -D $(STAGING_DIR)/usr/lib/$${d}/gconv/$${l}.so \
$(TARGET_DIR)/usr/lib/gconv/$${l}.so \
|| exit 1; \
$(TARGET_READELF) -d $(STAGING_DIR)/usr/lib/$${d}/gconv/$${l}.so |\
sort -u |\
sed -e '/.*(NEEDED).*\[\(.*\.so\)\]$$/!d; s//\1/;' |\
while read lib; do \
$(INSTALL) -m 0644 -D $(STAGING_DIR)/usr/lib/$${d}/gconv/$${lib} \
$(TARGET_DIR)/usr/lib/gconv/$${lib} \
|| exit 1; \
done; \
done; \
./support/scripts/expunge-gconv-modules "$(TOOLCHAIN_GLIBC_GCONV_LIBS)" \
<$(STAGING_DIR)/usr/lib/$${d}/gconv/gconv-modules \
>$(TARGET_DIR)/usr/lib/gconv/gconv-modules; \
fi
endef
TOOLCHAIN_TARGET_FINALIZE_HOOKS += TOOLCHAIN_GLIBC_COPY_GCONV_LIBS
endif
+50
View File
@@ -0,0 +1,50 @@
################################################################################
#
# toolchain
#
################################################################################
ifeq ($(BR2_TOOLCHAIN_BUILDROOT),y)
TOOLCHAIN_DEPENDENCIES += toolchain-buildroot
else ifeq ($(BR2_TOOLCHAIN_EXTERNAL),y)
TOOLCHAIN_DEPENDENCIES += toolchain-external
endif
TOOLCHAIN_ADD_TOOLCHAIN_DEPENDENCY = NO
TOOLCHAIN_INSTALL_STAGING = YES
# Apply a hack that Rick Felker suggested[1] to avoid conflicts between libc
# headers and kernel headers. This is needed for kernel headers older than
# 4.15. Kernel headers 4.15 and newer don't require __GLIBC__ to be defined.
#
# Augment the original suggestion with __USE_MISC since recent kernels
# (older than 4.15) require this glibc internal macro. Also, as musl defines
# IFF_LOWER_UP, IFF_DORMANT and IFF_ECHO, add another macro to suppress
# them in the kernel header, and avoid macro/enum conflict.
#
# Kernel version 3.12 introduced the libc-compat.h header.
#
# [1] http://www.openwall.com/lists/musl/2015/10/08/2
ifeq ($(BR2_TOOLCHAIN_USES_MUSL)$(BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12):$(BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_15),yy:)
define TOOLCHAIN_MUSL_KERNEL_HEADERS_COMPATIBILITY_HACK
$(SED) 's/^#if defined(__GLIBC__)$$/#if 1/' \
$(STAGING_DIR)/usr/include/linux/libc-compat.h
$(SED) '1s/^/#define __USE_MISC\n/' \
$(STAGING_DIR)/usr/include/linux/libc-compat.h
$(SED) '1s/^/#define __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO 0\n/' \
$(STAGING_DIR)/usr/include/linux/libc-compat.h
endef
TOOLCHAIN_POST_INSTALL_STAGING_HOOKS += TOOLCHAIN_MUSL_KERNEL_HEADERS_COMPATIBILITY_HACK
endif
# Install default nsswitch.conf file if the skeleton doesn't provide it
ifeq ($(BR2_TOOLCHAIN_USES_GLIBC),y)
define TOOLCHAIN_GLIBC_COPY_NSSWITCH_FILE
@if [ ! -f "$(TARGET_DIR)/etc/nsswitch.conf" ]; then \
$(INSTALL) -D -m 0644 package/glibc/nsswitch.conf $(TARGET_DIR)/etc/nsswitch.conf ; \
fi
endef
TOOLCHAIN_POST_INSTALL_TARGET_HOOKS += TOOLCHAIN_GLIBC_COPY_NSSWITCH_FILE
endif
$(eval $(virtual-package))