From 651567ff9093092a7d4aeabec44a55f563c6a231 Mon Sep 17 00:00:00 2001 From: Alexey Neyman Date: Thu, 22 Sep 2016 17:01:43 -0700 Subject: Add a checkbox for libmpx build. Disable libmpx for musl builds. Signed-off-by: Alexey Neyman diff --git a/config/cc/gcc.in b/config/cc/gcc.in index 101f2b2..9cc903f 100644 --- a/config/cc/gcc.in +++ b/config/cc/gcc.in @@ -160,6 +160,7 @@ config CC_GCC_5 select CC_GCC_HAS_LNK_HASH_STYLE select CC_GCC_HAS_LIBQUADMATH select CC_GCC_HAS_LIBSANITIZER + select CC_GCC_HAS_LIBMPX select CC_SUPPORT_GOLANG config CC_GCC_5_or_later @@ -178,6 +179,7 @@ config CC_GCC_6 select CC_GCC_HAS_LNK_HASH_STYLE select CC_GCC_HAS_LIBQUADMATH select CC_GCC_HAS_LIBSANITIZER + select CC_GCC_HAS_LIBMPX select CC_SUPPORT_GOLANG config CC_GCC_6_or_later @@ -276,6 +278,9 @@ config CC_GCC_HAS_LIBQUADMATH config CC_GCC_HAS_LIBSANITIZER bool +config CC_GCC_HAS_LIBMPX + bool + if ! CC_GCC_CUSTOM config CC_GCC_VERSION diff --git a/config/cc/gcc.in.2 b/config/cc/gcc.in.2 index c200d22..b7353df 100644 --- a/config/cc/gcc.in.2 +++ b/config/cc/gcc.in.2 @@ -182,6 +182,16 @@ config CC_GCC_LIBSANITIZER The default is 'N'. Say 'Y' if you need it, and report success/failure. +config CC_GCC_LIBMPX + bool + default y + prompt "Compile libmpx" + depends on CC_GCC_HAS_LIBMPX + depends on ARCH_x86 + depends on !LIBC_musl # MUSL does not define libc types that GCC requires + help + Enable GCC support for Intel Memory Protection Extensions (MPX). + #----------------------------------------------------------------------------- comment "Misc. obscure options." diff --git a/scripts/build/cc/100-gcc.sh b/scripts/build/cc/100-gcc.sh index db14728..8630644 100644 --- a/scripts/build/cc/100-gcc.sh +++ b/scripts/build/cc/100-gcc.sh @@ -436,6 +436,7 @@ do_gcc_core_backend() { extra_config+=(--disable-libgomp) extra_config+=(--disable-libmudflap) + extra_config+=(--disable-libmpx) if [ "${CT_CC_GCC_LIBSSP}" = "y" ]; then extra_config+=(--enable-libssp) @@ -904,6 +905,14 @@ do_gcc_backend() { fi fi + if [ "${CT_CC_GCC_HAS_LIBMPX}" = "y" ]; then + if [ "${CT_CC_GCC_LIBMPX}" = "y" ]; then + extra_config+=(--enable-libmpx) + else + extra_config+=(--disable-libmpx) + fi + fi + final_LDFLAGS+=("${ldflags}") # *** WARNING ! *** -- cgit v0.10.2-6-g49f6 From 75dee86653f7ca23aac7fcc89c1982a65c6a5c36 Mon Sep 17 00:00:00 2001 From: Alexey Neyman Date: Sun, 2 Oct 2016 15:23:53 -0700 Subject: Fix issue #449. After building final gcc, place the libraries in non-sysroot libs into sysroot. Signed-off-by: Alexey Neyman diff --git a/scripts/build/cc/100-gcc.sh b/scripts/build/cc/100-gcc.sh index db14728..5f874f8 100644 --- a/scripts/build/cc/100-gcc.sh +++ b/scripts/build/cc/100-gcc.sh @@ -769,6 +769,23 @@ do_gcc_for_build() { CT_EndStep } +gcc_movelibs() { + local multi_flags multi_dir multi_os_dir multi_root multi_index multi_count + local gcc_dir + + for arg in "$@"; do + eval "${arg// /\\ }" + done + + # Move only files, directories are for other multilibs + gcc_dir="${CT_PREFIX_DIR}/${CT_TARGET}/lib/${multi_dir}" + ls "${gcc_dir}" | while read f; do + if [ -f "${gcc_dir}/${f}" ]; then + CT_DoExecLog ALL mv "${gcc_dir}/${f}" "${multi_root}/lib/${multi_os_dir}/${f}" + fi + done +} + #------------------------------------------------------------------------------ # Build final gcc to run on host do_gcc_for_host() { @@ -800,10 +817,18 @@ do_gcc_for_host() { CT_DoStep INFO "Installing final gcc compiler" CT_mkdir_pushd "${CT_BUILD_DIR}/build-cc-gcc-final" - "${final_backend}" "${final_opts[@]}" - CT_Popd + + # GCC installs stuff (including libgcc) into its own /lib dir, + # outside of sysroot, breaking linking with -static-libgcc. + # Fix up by moving the libraries into the sysroot. + if [ "${CT_USE_SYSROOT}" = "y" ]; then + CT_mkdir_pushd "${CT_BUILD_DIR}/build-cc-gcc-final-movelibs" + CT_IterateMultilibs gcc_movelibs movelibs + CT_Popd + fi + CT_EndStep } -- cgit v0.10.2-6-g49f6 From 96338beecacca6c416cf88558367c61089c8d959 Mon Sep 17 00:00:00 2001 From: Alexey Neyman Date: Sun, 2 Oct 2016 18:50:41 -0700 Subject: GCC uses multi_os_dir for libgcc, not multi_dir. Signed-off-by: Alexey Neyman diff --git a/scripts/build/cc/100-gcc.sh b/scripts/build/cc/100-gcc.sh index 5f874f8..b44d85e 100644 --- a/scripts/build/cc/100-gcc.sh +++ b/scripts/build/cc/100-gcc.sh @@ -778,7 +778,7 @@ gcc_movelibs() { done # Move only files, directories are for other multilibs - gcc_dir="${CT_PREFIX_DIR}/${CT_TARGET}/lib/${multi_dir}" + gcc_dir="${CT_PREFIX_DIR}/${CT_TARGET}/lib/${multi_os_dir}" ls "${gcc_dir}" | while read f; do if [ -f "${gcc_dir}/${f}" ]; then CT_DoExecLog ALL mv "${gcc_dir}/${f}" "${multi_root}/lib/${multi_os_dir}/${f}" -- cgit v0.10.2-6-g49f6