From de76f7cc82eedac5653283a99c1c7083d7a0d43b Mon Sep 17 00:00:00 2001 From: Alexey Brodkin Date: Wed, 24 Apr 2019 14:49:45 +0300 Subject: ARC: Support building of multi-lib Glibc toolchain From GCC's standpoint ARC's multilib items are defined by "mcpu" values which we have quite a few and for all of them might be built optimized cross-toolchain. From Glibc's standpoint multilib is just multi-ABI [1] and so very limited versions are supposed to co-exist (e.g. arc700 & archs). Here we force Glibc to install libraries in GCC's multilib folder to create a universal cross-toolchain that has libs optimized for multiple CPU types. But note we only need to mess with installation paths in case of real multilib, otherwise we keep default "lib/" paths so that GCC finds default (the one and only) libs where it expects them to be. Also here we add a sample which allows to build universal Glibc Linux toolchain for ARC. [1] https://sourceware.org/ml/libc-alpha/2019-06/msg00018.html Signed-off-by: Alexey Brodkin diff --git a/samples/arc-multilib-linux-gnu/crosstool.config b/samples/arc-multilib-linux-gnu/crosstool.config new file mode 100644 index 0000000..3dc7802 --- /dev/null +++ b/samples/arc-multilib-linux-gnu/crosstool.config @@ -0,0 +1,7 @@ +CT_CONFIG_VERSION="3" +CT_ARCH_ARC=y +CT_MULTILIB=y +CT_TARGET_CFLAGS="-matomic" +CT_TARGET_VENDOR="multilib" +CT_TARGET_ALIAS="arc-linux" +CT_KERNEL_LINUX=y diff --git a/samples/arc-multilib-linux-gnu/reported.by b/samples/arc-multilib-linux-gnu/reported.by new file mode 100644 index 0000000..e98760a --- /dev/null +++ b/samples/arc-multilib-linux-gnu/reported.by @@ -0,0 +1,3 @@ +reporter_name="Alexey Brodkin" +reporter_url="http://embarc.org" +reporter_comment="ARC multilib GNU Linux toolchain" diff --git a/scripts/build/arch/arc.sh b/scripts/build/arch/arc.sh index b13ef0e..d15f73f 100644 --- a/scripts/build/arch/arc.sh +++ b/scripts/build/arch/arc.sh @@ -29,3 +29,39 @@ CT_DoArchUClibcCflags() esac done } + +# Multilib: Adjust configure arguments for GLIBC +# Usage: CT_DoArchGlibcAdjustConfigure +# +# From GCC's standpoint ARC's multilib items are defined by "mcpu" values +# which we have quite a few and for all of them might be built optimized +# cross-toolchain. +# +# From Glibc's standpoint multilib is multi-ABI and so very limited +# versions are supposed to co-exist. +# +# Here we force Glibc to install libraries in per-multilib folder to create +# a universal cross-toolchain that has libs optimized for multiple CPU types. +CT_DoArchGlibcAdjustConfigure() { + local -a add_args + local array="${1}" + local cflags="${2}" + local opt + local mcpu + + # If building for multilib, set proper installation paths + if [ "${CT_MULTILIB}" = "y" ]; then + for opt in ${cflags}; do + case "${opt}" in + -mcpu=*) + mcpu="${opt#*=}" + add_args+=( "libc_cv_rtlddir=/lib/${mcpu}" ) + add_args+=( "libc_cv_slibdir=/lib/${mcpu}" ) + add_args+=( "--libdir=/usr/lib/${mcpu}" ) + ;; + esac + done + fi + + eval "${array}+=( \"\${add_args[@]}\" )" +} -- cgit v0.10.2-6-g49f6