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 --- scripts/build/cc/100-gcc.sh | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'scripts/build/cc') diff --git a/scripts/build/cc/100-gcc.sh b/scripts/build/cc/100-gcc.sh index db147287..86306440 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 v1.2.3 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 --- scripts/build/cc/100-gcc.sh | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) (limited to 'scripts/build/cc') diff --git a/scripts/build/cc/100-gcc.sh b/scripts/build/cc/100-gcc.sh index db147287..5f874f89 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 v1.2.3 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 --- scripts/build/cc/100-gcc.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'scripts/build/cc') diff --git a/scripts/build/cc/100-gcc.sh b/scripts/build/cc/100-gcc.sh index 5f874f89..b44d85e5 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 v1.2.3 From 3330ad719720905ed2a901ec26a90bcad9d32748 Mon Sep 17 00:00:00 2001 From: Alexey Neyman Date: Wed, 5 Oct 2016 12:34:01 -0700 Subject: Fine-tune moving gcc libraries to sysroot. 1. Check if anything was installed outside sysroot; on some [baremetal only?] configurations GCC doesn't install anything to ${CT_PREFIX_DIR}/${CT_TARGET}/lib. 2. We need to create /lib/ if it doesn't exist (MUSL only installs in /usr/lib). 3. Do not move the linker scripts; elf2flt expects to find them in gcc's dir, not sysroot. Signed-off-by: Alexey Neyman --- scripts/build/cc/100-gcc.sh | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'scripts/build/cc') diff --git a/scripts/build/cc/100-gcc.sh b/scripts/build/cc/100-gcc.sh index 14edcd4a..bab4c7b0 100644 --- a/scripts/build/cc/100-gcc.sh +++ b/scripts/build/cc/100-gcc.sh @@ -780,8 +780,20 @@ gcc_movelibs() { # Move only files, directories are for other multilibs gcc_dir="${CT_PREFIX_DIR}/${CT_TARGET}/lib/${multi_os_dir}" + if [ ! -d "${gcc_dir}" ]; then + # GCC didn't install anything outside of sysroot + return + fi ls "${gcc_dir}" | while read f; do + case "${f}" in + *.ld) + # Linker scripts remain in GCC's directory; elf2flt insists on + # finding them there. + continue + ;; + esac if [ -f "${gcc_dir}/${f}" ]; then + CT_DoExecLog ALL mkdir -p "${multi_root}/lib/${multi_os_dir}" CT_DoExecLog ALL mv "${gcc_dir}/${f}" "${multi_root}/lib/${multi_os_dir}/${f}" fi done -- cgit v1.2.3 From f4c7688946646bd3be4ee84c694dd987ea344bf6 Mon Sep 17 00:00:00 2001 From: Alexey Neyman Date: Wed, 9 Nov 2016 16:46:01 -0800 Subject: Do not run 'make install' in parallel in GCC. Signed-off-by: Alexey Neyman --- scripts/build/cc/100-gcc.sh | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'scripts/build/cc') diff --git a/scripts/build/cc/100-gcc.sh b/scripts/build/cc/100-gcc.sh index bab4c7b0..0e0f8ed5 100644 --- a/scripts/build/cc/100-gcc.sh +++ b/scripts/build/cc/100-gcc.sh @@ -696,8 +696,16 @@ do_gcc_core_backend() { CT_DoLog EXTRA "Building ${log_txt}" CT_DoExecLog ALL ${make} ${JOBSFLAGS} ${core_targets_all} + # Do not pass ${JOBSFLAGS} here: recent GCC builds have been failing + # in parallel 'make install' at random locations: libitm, libcilk, + # always for the files that are installed more than once to the same + # location (such as libitm.info). + # The symptom is that the install command fails with "File exists" + # error; running the same command manually succeeds. It looks like + # attempts to remove the destination and re-create it, but another + # install gets in the way. CT_DoLog EXTRA "Installing ${log_txt}" - CT_DoExecLog ALL ${make} ${JOBSFLAGS} ${core_targets_install} + CT_DoExecLog ALL ${make} ${core_targets_install} # Remove the libtool "pseudo-libraries": having them in the installed # tree makes the libtoolized utilities that are built next assume @@ -1128,11 +1136,12 @@ do_gcc_backend() { CT_DoLog EXTRA "Building final gcc compiler" CT_DoExecLog ALL ${make} ${JOBSFLAGS} all + # See the note on issues with parallel 'make install' in GCC above. CT_DoLog EXTRA "Installing final gcc compiler" if [ "${CT_STRIP_TARGET_TOOLCHAIN_EXECUTABLES}" = "y" ]; then - CT_DoExecLog ALL ${make} ${JOBSFLAGS} install-strip + CT_DoExecLog ALL ${make} install-strip else - CT_DoExecLog ALL ${make} ${JOBSFLAGS} install + CT_DoExecLog ALL ${make} install fi # Remove the libtool "pseudo-libraries": having them in the installed -- cgit v1.2.3