From 82072d0cbc238000fd1547551deb198aa8c8d466 Mon Sep 17 00:00:00 2001 From: Alexey Neyman Date: Wed, 30 Mar 2016 12:15:54 -0700 Subject: multilib: Determine which options may pass through. On some arches (e.g. MIPS) the options like -mabi do not work if specified more than once (see the comment in 100-gcc.sh). Therefore, we need to determine which of the options produced by .sh can be passed to multilib builds and which must be removed (i.e., which options vary among the multilibs). This presents a chicken-and-egg problem. GCC developers, in their infinite wisdom, do not allow arbitrary multilib specification to be supplied to GCC's configure. Instead, the target (and sometimes some extra options) determine the set of multilibs - which may include different CPUs, different ABIs, different endianness, different FPUs, different floating-point ABIs, ... That is, we don't know which parts vary until we build GCC and ask it. So, the solution implemented here is: - For multilib builds, start with empty CT_ARCH_TARGET_CFLAGS/LDFLAGS. - For multilib builds, require core pass 1. Pass 1 does not build any target binaries, so at that point, our target options have not been used yet. - Provide an API to modify the environment variables for the steps that follow the current one. - As a part of multilib-related housekeeping, determine the variable part of multilibs and filter out these options; pass the rest into CT_TARGET_CFLAGS/LDFLAGS. This still does not handle extra dependencies between GCC options (like -ma implying -mcpu=X -mtune=Y, etc.) but I feel that would complicate matters too much. Let's leave this until there's a compelling case for it. Also, query GCC's sysroot suffix for targets that use it (SuperH, for example) - the default multilib may not work if the command line specifies the default option explicitly (%sysroot_suffix_spec is not aware of multilib defaults). Signed-off-by: Alexey Neyman --- config/target.in | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'config') diff --git a/config/target.in b/config/target.in index 8cbaabc0..e8f0fe7d 100644 --- a/config/target.in +++ b/config/target.in @@ -65,9 +65,13 @@ config ARCH_REQUIRES_MULTILIB bool select MULTILIB +# Multilib requires 1st core pass (i.e., pass without building libgcc) +# to determine which target cflags vary with multilib and which must be +# passed from the arch configuration. config MULTILIB bool prompt "Build a multilib toolchain (READ HELP!!!)" + select CC_CORE_PASS_1_NEEDED help If you say 'y' here, then the toolchain will also contain the C library optimised for some variants of the selected architecture, besides the -- cgit v1.2.3 From d58e740be8ea07e5f4f24378f903773eae247828 Mon Sep 17 00:00:00 2001 From: Alexey Neyman Date: Thu, 31 Mar 2016 08:44:50 -0700 Subject: glibc.sh: cleanups - Dump CT_LIBC_EXTRA_CC_ARGS: instead, treat CT_LIBC_EXTRA_CFLAGS as arguments to CC (or they are not applied to .S, for example). Combine them with multi_flags and CT_TARGET_CFLAGS in proper order. - Analyze thus combined flags to determine --with-fp/--without-fp. Don't need to check CT_ARCH_FLOAT - it is reflected in CT_TARGET_CFLAGS anyway. Check more soft/hard float options defined on different architectures. - Drop checking for endianness flags: they are not reflected in configure arguments in any way, and they're already present in CFLAGS (either via multi_flags or via CT_TARGET_CFLAGS). Besides, CT_ARCH_ENDIAN_OPT was actually called CT_ARCH_ENDIAN_CFLAG, so this was a no-op anyway. Signed-off-by: Alexey Neyman --- config/libc/glibc.in.2 | 10 ------ scripts/build/libc/glibc.sh | 88 +++++++++++++++++---------------------------- 2 files changed, 33 insertions(+), 65 deletions(-) (limited to 'config') diff --git a/config/libc/glibc.in.2 b/config/libc/glibc.in.2 index 346f9b7c..104552a6 100644 --- a/config/libc/glibc.in.2 +++ b/config/libc/glibc.in.2 @@ -55,16 +55,6 @@ config LIBC_GLIBC_EXTRA_CFLAGS help Extra target CFLAGS to use when building. -config LIBC_EXTRA_CC_ARGS - string - prompt "gcc extra flags" - default "" - help - Extra flags to pass gcc when building. - - Seldom used, except for sparc64 which seems to need the flag -64 - to be passed onto gcc. - config LIBC_ENABLE_FORTIFIED_BUILD bool prompt "Enable fortified build (EXPERIMENTAL)" diff --git a/scripts/build/libc/glibc.sh b/scripts/build/libc/glibc.sh index c3926bf4..dcd9e159 100644 --- a/scripts/build/libc/glibc.sh +++ b/scripts/build/libc/glibc.sh @@ -182,14 +182,11 @@ do_libc_backend_once() { local multi_flags multi_dir multi_os_dir multi_root multi_last multi_root local startfiles_dir local src_dir="${CT_SRC_DIR}/${CT_LIBC}-${CT_LIBC_VERSION}" - local extra_cc_args local -a extra_config local -a extra_make_args local glibc_cflags - local float_extra - local endian_extra local libc_target="${CT_TARGET}" - local arg + local arg opt for arg in "$@"; do eval "${arg// /\\ }" @@ -217,14 +214,8 @@ do_libc_backend_once() { CT_DoLog EXTRA "Configuring C library" - case "${CT_LIBC}" in - glibc) - # glibc can't be built without -O2 (reference needed!) - OPTIMIZE=-O2 - # Also, if those two are missing, iconv build breaks - extra_config+=( --disable-debug --disable-sanity-checks ) - ;; - esac + # Also, if those two are missing, iconv build breaks + extra_config+=( --disable-debug --disable-sanity-checks ) # always include rpc, the user can still override it with TI-RPC extra_config+=( --enable-obsolete-rpc ) @@ -252,21 +243,6 @@ do_libc_backend_once() { *) extra_config+=("--disable-shared");; esac - float_extra="$( echo "${multi_flags}" \ - |${sed} -r -e '/^(.*[[:space:]])?-m(hard|soft)-float([[:space:]].*)?$/!d;' \ - -e 's//\2/;' \ - )" - case "${float_extra}" in - hard) extra_config+=("--with-fp");; - soft) extra_config+=("--without-fp");; - "") - case "${CT_ARCH_FLOAT}" in - hard|softfp) extra_config+=("--with-fp");; - soft) extra_config+=("--without-fp");; - esac - ;; - esac - if [ "${CT_LIBC_DISABLE_VERSIONING}" = "y" ]; then extra_config+=("--disable-versioning") fi @@ -283,24 +259,6 @@ do_libc_backend_once() { extra_config+=("--with-pkgversion=${CT_PKGVERSION}") [ -n "${CT_TOOLCHAIN_BUGURL}" ] && extra_config+=("--with-bugurl=${CT_TOOLCHAIN_BUGURL}") - # Extract the endianness options if any - # This should cover all possible endianness options - # in gcc, but it is prone to bit-rot... :-( - endian_extra="$( echo "${multi_flags}" \ - |${sed} -r -e '/^(.*[[:space:]])?-(E[BL]|m((big|little)(-endian)?|e?[bl]))([[:space:]].*)?$/!d;' \ - -e 's//\2/;' \ - )" - # If multi_flags contained an endianness option, no need to add it again. Otherwise, - # add the option from the configuration. - case "${endian_extra}" in - EB|mbig-endian|mbig|meb|mb) - ;; - EL|mlittle-endian|mlittle|mel|ml) - ;; - "") extra_cc_args="${extra_cc_args} ${CT_ARCH_ENDIAN_OPT}" - ;; - esac - touch config.cache if [ "${CT_LIBC_GLIBC_FORCE_UNWIND}" = "y" ]; then echo "libc_cv_forced_unwind=yes" >>config.cache @@ -310,13 +268,30 @@ do_libc_backend_once() { # Pre-seed the configparms file with values from the config option printf "%s\n" "${CT_LIBC_GLIBC_CONFIGPARMS}" > configparms - extra_cc_args+=" ${multi_flags}" + # glibc can't be built without -O2 (reference needed!) + glibc_cflags+=" -O2" case "${CT_LIBC_ENABLE_FORTIFIED_BUILD}" in y) ;; *) glibc_cflags+=" -U_FORTIFY_SOURCE";; esac - glibc_cflags+=" ${CT_TARGET_CFLAGS} ${OPTIMIZE} ${CT_LIBC_GLIBC_EXTRA_CFLAGS}" + + # In the order of increasing precedence. Flags common to compiler and linker. + glibc_cflags+=" ${CT_TARGET_CFLAGS}" + glibc_cflags+=" ${CT_LIBC_GLIBC_EXTRA_CFLAGS}" + glibc_cflags+=" ${multi_flags}" + + # Analyze the resulting options for any extra configure switches to throw in. + for opt in ${glibc_cflags}; do + case ${opt} in + -mhard-float|-mfloat-abi=hard|-mfloat-abi=softfp|-mno-soft-float|-mfpu) + extra_config+=("--with-fp") + ;; + -msoft-float|-mfloat-abi=soft|-mno-float|-mno-fpu) + extra_config+=("--without-fp") + ;; + esac + done # ./configure is mislead by our tools override wrapper for bash # so just tell it where the real bash is _on_the_target_! @@ -333,9 +308,12 @@ do_libc_backend_once() { # Configure with --prefix the way we want it on the target... # There are a whole lot of settings here. You'll probably want - # to read up on what they all mean, and customize a bit, possibly by setting GLIBC_EXTRA_CONFIG_ARRAY - # Compare these options with the ones used when installing the glibc headers above - they're different. - # Adding "--without-gd" option to avoid error "memusagestat.c:36:16: gd.h: No such file or directory" + # to read up on what they all mean, and customize a bit, possibly + # by setting GLIBC_EXTRA_CONFIG_ARRAY. + # Compare these options with the ones used when installing + # the glibc headers above - they're different. + # Adding "--without-gd" option to avoid error "memusagestat.c:36:16: + # gd.h: No such file or directory" # See also http://sources.redhat.com/ml/libc-alpha/2000-07/msg00024.html. # Set BUILD_CC, or we won't be able to build datafiles # Run explicitly through CONFIG_SHELL, or the build breaks badly (loop-of-death) @@ -343,15 +321,15 @@ do_libc_backend_once() { CT_DoLog DEBUG "Configuring with addons : '$(do_libc_add_ons_list ,)'" CT_DoLog DEBUG "Extra config args passed : '${extra_config[*]}'" - CT_DoLog DEBUG "Extra CC args passed : '${glibc_cflags}'" - CT_DoLog DEBUG "Extra flags (multilib) : '${multi_flags}'" + CT_DoLog DEBUG "Extra CFLAGS passed : '${glibc_cflags}'" CT_DoLog DEBUG "Placing startfiles into : '${startfiles_dir}'" CT_DoLog DEBUG "Configuring with --host : '${libc_target}'" + # CFLAGS are only applied when compiling .c files. .S files are compiled with ASFLAGS, + # but they are not passed by configure. Thus, pass everything in CC instead. CT_DoExecLog CFG \ - BUILD_CC="${CT_BUILD}-gcc" \ - CFLAGS="${glibc_cflags}" \ - CC="${CT_TARGET}-gcc ${CT_LIBC_EXTRA_CC_ARGS} ${extra_cc_args}" \ + BUILD_CC=${CT_BUILD}-gcc \ + CC="${CT_TARGET}-gcc ${glibc_cflags}" \ AR=${CT_TARGET}-ar \ RANLIB=${CT_TARGET}-ranlib \ "${CONFIG_SHELL}" \ -- cgit v1.2.3 From f204cc8ec4b70eee4de79ac5e7df831cfe0cb751 Mon Sep 17 00:00:00 2001 From: Alexey Neyman Date: Fri, 1 Apr 2016 15:43:56 -0700 Subject: Spelling fixes. Signed-off-by: Alexey Neyman --- config/cc/gcc.in | 2 +- config/debug/gdb.in.cross | 2 +- config/libc/none.in | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) (limited to 'config') diff --git a/config/cc/gcc.in b/config/cc/gcc.in index 2df20580..1fcdb722 100644 --- a/config/cc/gcc.in +++ b/config/cc/gcc.in @@ -226,7 +226,7 @@ config CC_GCC_HAS_LNK_HASH_STYLE bool # Only enable gcc's support for plugins if binutils has it as well -# They are usefull only when doing LTO, but it does no harm enabling +# They are useful only when doing LTO, but it does no harm enabling # them even without LTO. config CC_GCC_ENABLE_PLUGINS bool diff --git a/config/debug/gdb.in.cross b/config/debug/gdb.in.cross index 07b85b85..fb993c91 100644 --- a/config/debug/gdb.in.cross +++ b/config/debug/gdb.in.cross @@ -21,7 +21,7 @@ config GDB_CROSS_STATIC depends on CONFIGURE_has_static_link select WANTS_STATIC_LINK help - A static cross gdb can be usefull if you debug on a machine that is + A static cross gdb can be useful if you debug on a machine that is not the one that is used to compile the toolchain. That way, you can share the cross-gdb without installing a toolchain diff --git a/config/libc/none.in b/config/libc/none.in index d587faff..b8860b07 100644 --- a/config/libc/none.in +++ b/config/libc/none.in @@ -4,10 +4,10 @@ ## ## help Do not use a C library. ## help -## help This is usefull if your project is self-contained, does not rely on +## help This is useful if your project is self-contained, does not rely on ## help an external C library, and provides all the necessary bits. ## help -## help Most probably usefull to bootloaders, as they generally don't depend +## help Most probably useful to bootloaders, as they generally don't depend ## help on the C library. ## help ## help If unsure: do *not* choose that, and use another option in the choice. -- cgit v1.2.3 From 4ee22d66a849123c06812736dd1472840aad5823 Mon Sep 17 00:00:00 2001 From: Alexey Neyman Date: Fri, 1 Apr 2016 23:28:43 -0700 Subject: uclibc: merge startfiles/final into single backend. In preparation for multilib support, use the same "backend" model that is already employed by glibc and musl. Also, the verbosity setting descriptions were swapped. V=2 is actually less verbose than V=1: V=1 prints full commands, while V=2 prints 'CC '. Signed-off-by: Alexey Neyman --- config/libc/uClibc.in | 4 +- scripts/build/libc/uClibc.sh | 269 ++++++++++++++++++------------------------- 2 files changed, 111 insertions(+), 162 deletions(-) (limited to 'config') diff --git a/config/libc/uClibc.in b/config/libc/uClibc.in index 989da7ba..a99ff736 100644 --- a/config/libc/uClibc.in +++ b/config/libc/uClibc.in @@ -129,13 +129,13 @@ config LIBC_UCLIBC_VERBOSITY_0 config LIBC_UCLIBC_VERBOSITY_1 bool - prompt "Brief build (show defines, ld flags)" + prompt "Very verbose build" help Print simplified command lines. config LIBC_UCLIBC_VERBOSITY_2 bool - prompt "Very verbose build" + prompt "Brief build (show defines, ld flags)" help Print full command lines. diff --git a/scripts/build/libc/uClibc.sh b/scripts/build/libc/uClibc.sh index 41b651f2..edd82f6a 100644 --- a/scripts/build/libc/uClibc.sh +++ b/scripts/build/libc/uClibc.sh @@ -73,180 +73,129 @@ do_libc_check_config() { # Build and install headers and start files do_libc_start_files() { - local multi_os_dir multi_root startfiles_dir - - CT_DoStep INFO "Installing C library headers" - - # Simply copy files until uClibc has the ability to build out-of-tree - CT_DoLog EXTRA "Copying sources to build dir" - CT_DoExecLog ALL cp -a "${CT_SRC_DIR}/${uclibc_name}-${CT_LIBC_VERSION}" \ - "${CT_BUILD_DIR}/build-libc-headers" - cd "${CT_BUILD_DIR}/build-libc-headers" - - # Retrieve the config file - CT_DoExecLog ALL cp "${CT_CONFIG_DIR}/uClibc.config" .config - - multi_os_dir=$( "${CT_TARGET}-gcc" -print-multi-os-directory ) - multi_root=$( "${CT_TARGET}-gcc" -print-sysroot ) - startfiles_dir="${multi_root}/usr/lib/${multi_os_dir}" - CT_SanitizeVarDir startfiles_dir - CT_DoExecLog ALL mkdir -p "${startfiles_dir}" - - # Force the date of the pregen locale data, as the - # newer ones that are referenced are not available - CT_DoLog EXTRA "Applying configuration" - CT_DoYes "" |CT_DoExecLog ALL \ - ${make} CROSS_COMPILE="${CT_TARGET}-" \ - UCLIBC_EXTRA_CFLAGS="-pipe" \ - PREFIX="${multi_root}/" \ - LOCALE_DATA_FILENAME="${uclibc_locale_tarball}.tgz" \ - oldconfig - - CT_DoLog EXTRA "Building headers" - CT_DoExecLog ALL \ - ${make} ${CT_LIBC_UCLIBC_VERBOSITY} \ - CROSS_COMPILE="${CT_TARGET}-" \ - UCLIBC_EXTRA_CFLAGS="-pipe" \ - PREFIX="${multi_root}/" \ - LOCALE_DATA_FILENAME="${uclibc_locale_tarball}.tgz" \ - headers - - CT_DoLog EXTRA "Installing headers" - CT_DoExecLog ALL \ - ${make} ${CT_LIBC_UCLIBC_VERBOSITY} \ - CROSS_COMPILE="${CT_TARGET}-" \ - UCLIBC_EXTRA_CFLAGS="-pipe" \ - PREFIX="${multi_root}/" \ - LOCALE_DATA_FILENAME="${uclibc_locale_tarball}.tgz" \ - install_headers - - # The check might look bogus, but it is the same condition as is used - # by GCC build script to enable/disable shared library support. - if [ "${CT_THREADS}" = "nptl" ]; then - CT_DoLog EXTRA "Building start files" - CT_DoExecLog ALL \ - ${make} ${CT_LIBC_UCLIBC_PARALLEL:+${JOBSFLAGS}} \ - CROSS_COMPILE="${CT_TARGET}-" \ - UCLIBC_EXTRA_CFLAGS="-pipe" \ - PREFIX="${multi_root}/" \ - STRIPTOOL=true \ - ${CT_LIBC_UCLIBC_VERBOSITY} \ - LOCALE_DATA_FILENAME="${uclibc_locale_tarball}.tgz" \ - lib/crt1.o lib/crti.o lib/crtn.o - - # From: http://git.openembedded.org/cgit.cgi/openembedded/commit/?id=ad5668a7ac7e0436db92e55caaf3fdf782b6ba3b - # libm.so is needed for ppc, as libgcc is linked against libm.so - # No problem to create it for other archs. - CT_DoLog EXTRA "Building dummy shared libs" - CT_DoExecLog ALL "${CT_TARGET}-gcc" -nostdlib \ - -nostartfiles \ - -shared \ - -x c /dev/null \ - -o libdummy.so - - CT_DoLog EXTRA "Installing start files" - CT_DoExecLog ALL ${install} -m 0644 lib/crt1.o lib/crti.o lib/crtn.o \ - "${startfiles_dir}" - - CT_DoLog EXTRA "Installing dummy shared libs" - CT_DoExecLog ALL ${install} -m 0755 libdummy.so "${startfiles_dir}/libc.so" - CT_DoExecLog ALL ${install} -m 0755 libdummy.so "${startfiles_dir}/libm.so" - fi # CT_THREADS == nptl - - CT_EndStep + # Start files and Headers should be configured the same way as the + # final libc, but built and installed differently. + do_libc_backend libc_mode=startfiles } -# This function build and install the full uClibc +# This function builds and install the full C library do_libc() { + do_libc_backend libc_mode=final +} + +# Common backend for 1st and 2nd passes +do_libc_backend() { + local libc_mode local multi_os_dir multi_root multilib_dir startfiles_dir + local jflag=${CT_LIBC_UCLIBC_PARALLEL:+${JOBSFLAGS}} + local -a make_args - CT_DoStep INFO "Installing C library" + for arg in "$@"; do + eval "${arg// /\\ }" + done + + case "${libc_mode}" in + startfiles) CT_DoStep INFO "Installing C library headers & start files";; + final) CT_DoStep INFO "Installing C library";; + *) CT_Abort "Unsupported (or unset) libc_mode='${libc_mode}'";; + esac # Simply copy files until uClibc has the ability to build out-of-tree CT_DoLog EXTRA "Copying sources to build dir" - CT_DoExecLog ALL cp -av "${CT_SRC_DIR}/${uclibc_name}-${CT_LIBC_VERSION}" \ - "${CT_BUILD_DIR}/build-libc" - cd "${CT_BUILD_DIR}/build-libc" - - # Retrieve the config file - CT_DoExecLog ALL cp "${CT_CONFIG_DIR}/uClibc.config" .config + CT_DoExecLog ALL cp -a "${CT_SRC_DIR}/${uclibc_name}-${CT_LIBC_VERSION}" \ + "${CT_BUILD_DIR}/build-libc-${libc_mode}" + cd "${CT_BUILD_DIR}/build-libc-${libc_mode}" multi_os_dir=$( "${CT_TARGET}-gcc" -print-multi-os-directory ) multi_root=$( "${CT_TARGET}-gcc" -print-sysroot ) - startfiles_dir="${multi_root}/usr/lib/${multi_os_dir}" + multilib_dir="lib/${multi_os_dir}" + startfiles_dir="${multi_root}/usr/${multilib_dir}" + CT_SanitizeVarDir multilib_dir startfiles_dir + + # Construct make arguments: + # - uClibc uses the CROSS environment variable as a prefix to the compiler + # tools to use. Since it requires core pass-1, thusly named compiler is + # already available. + # - Note about CFLAGS: In uClibc, CFLAGS are generated by Rules.mak, + # depending on the configuration of the library. That is, they are tailored + # to best fit the target. So it is useless and seems to be a bad thing to + # use LIBC_EXTRA_CFLAGS here. + # - We do _not_ want to strip anything for now, in case we specifically + # asked for a debug toolchain, thus the STRIPTOOL= assignment. + make_args=( CROSS_COMPILE="${CT_TARGET}-" \ + UCLIBC_EXTRA_CFLAGS="-pipe" \ + PREFIX="${multi_root}/" \ + MULTILIB_DIR="${multilib_dir}" \ + LOCALE_DATA_FILENAME="${uclibc_locale_tarball}.tgz" \ + STRIPTOOL=true \ + ${CT_LIBC_UCLIBC_VERBOSITY} \ + ) - CT_DoLog EXTRA "Cleaning up startfiles" - CT_DoExecLog ALL rm -f "${startfiles_dir}/crt1.o" \ - "${startfiles_dir}/crti.o" \ - "${startfiles_dir}/crtn.o" \ - "${startfiles_dir}/libc.so" \ - "${startfiles_dir}/libm.so" + # Retrieve the config file + CT_DoExecLog ALL cp "${CT_CONFIG_DIR}/uClibc.config" .config - multilib_dir="lib/${multi_os_dir}" - CT_SanitizeVarDir multilib_dir - - # uClibc uses the CROSS environment variable as a prefix to the compiler - # tools to use. The newly built tools should be in our path, so we need - # only give the correct name for them. - # Note about CFLAGS: In uClibc, CFLAGS are generated by Rules.mak, - # depending on the configuration of the library. That is, they are tailored - # to best fit the target. So it is useless and seems to be a bad thing to - # use LIBC_EXTRA_CFLAGS here. + # Force the date of the pregen locale data, as the + # newer ones that are referenced are not available CT_DoLog EXTRA "Applying configuration" - CT_DoYes "" |CT_DoExecLog CFG \ - ${make} CROSS_COMPILE=${CT_TARGET}- \ - UCLIBC_EXTRA_CFLAGS="-pipe" \ - PREFIX="${multi_root}/" \ - LOCALE_DATA_FILENAME="${uclibc_locale_tarball}.tgz" \ - oldconfig - - # We do _not_ want to strip anything for now, in case we specifically - # asked for a debug toolchain, thus the STRIPTOOL= assignment - # /Old/ versions can not build in // - CT_DoLog EXTRA "Building C library" - CT_DoExecLog ALL \ - ${make} -j1 \ - CROSS_COMPILE=${CT_TARGET}- \ - UCLIBC_EXTRA_CFLAGS="-pipe" \ - PREFIX="${multi_root}/" \ - STRIPTOOL=true \ - ${CT_LIBC_UCLIBC_VERBOSITY} \ - LOCALE_DATA_FILENAME="${uclibc_locale_tarball}.tgz" \ - pregen - CT_DoExecLog ALL \ - ${make} ${CT_LIBC_UCLIBC_PARALLEL:+${JOBSFLAGS}} \ - CROSS_COMPILE=${CT_TARGET}- \ - UCLIBC_EXTRA_CFLAGS="-pipe" \ - PREFIX="${multi_root}/" \ - STRIPTOOL=true \ - ${CT_LIBC_UCLIBC_VERBOSITY} \ - LOCALE_DATA_FILENAME="${uclibc_locale_tarball}.tgz" \ - all - - # YEM-FIXME: - # - we want to install 'runtime' files, eg. lib*.{a,so*}, crti.o and - # such files, except the headers as they already are installed - # - "make install_dev" installs the headers, the crti.o... and the - # static libs, but not the dynamic libs - # - "make install_runtime" installs the dynamic libs only - # - "make install" calls install_runtime and install_dev - # - so we're left with re-installing the headers... Sigh... - # - # We do _not_ want to strip anything for now, in case we specifically - # asked for a debug toolchain, hence the STRIPTOOL= assignment - # - # Note: JOBSFLAGS is not useful for installation. - # - CT_DoLog EXTRA "Installing C library" - CT_DoExecLog ALL \ - ${make} CROSS_COMPILE=${CT_TARGET}- \ - UCLIBC_EXTRA_CFLAGS="-pipe" \ - PREFIX="${multi_root}/" \ - STRIPTOOL=true \ - ${CT_LIBC_UCLIBC_VERBOSITY} \ - LOCALE_DATA_FILENAME="${uclibc_locale_tarball}.tgz" \ - MULTILIB_DIR="${multilib_dir}" \ - install + CT_DoYes | CT_DoExecLog ALL ${make} "${make_args[@]}" oldconfig + + if [ "${libc_mode}" = "startfiles" ]; then + CT_DoLog EXTRA "Building headers" + CT_DoExecLog ALL ${make} "${make_args[@]}" headers + + # Ensure the directory for installing multilib-specific binaries exists. + CT_DoExecLog ALL mkdir -p "${startfiles_dir}" + + CT_DoLog EXTRA "Installing headers" + CT_DoExecLog ALL ${make} "${make_args[@]}" install_headers + + # The check might look bogus, but it is the same condition as is used + # by GCC build script to enable/disable shared library support. + if [ "${CT_THREADS}" = "nptl" ]; then + CT_DoLog EXTRA "Building start files" + CT_DoExecLog ALL ${make} ${jflag} "${make_args[@]}" \ + lib/crt1.o lib/crti.o lib/crtn.o + + # From: http://git.openembedded.org/cgit.cgi/openembedded/commit/?id=ad5668a7ac7e0436db92e55caaf3fdf782b6ba3b + # libm.so is needed for ppc, as libgcc is linked against libm.so + # No problem to create it for other archs. + CT_DoLog EXTRA "Building dummy shared libs" + CT_DoExecLog ALL "${CT_TARGET}-gcc" -nostdlib -nostartfiles \ + -shared -x c /dev/null -o libdummy.so + + CT_DoLog EXTRA "Installing start files" + CT_DoExecLog ALL ${install} -m 0644 lib/crt1.o lib/crti.o lib/crtn.o \ + "${startfiles_dir}" + + CT_DoLog EXTRA "Installing dummy shared libs" + CT_DoExecLog ALL ${install} -m 0755 libdummy.so "${startfiles_dir}/libc.so" + CT_DoExecLog ALL ${install} -m 0755 libdummy.so "${startfiles_dir}/libm.so" + fi # CT_THREADS == nptl + fi # libc_mode == startfiles + + if [ "${libc_mode}" = "final" ]; then + CT_DoLog EXTRA "Cleaning up startfiles" + CT_DoExecLog ALL rm -f "${startfiles_dir}/crt1.o" \ + "${startfiles_dir}/crti.o" \ + "${startfiles_dir}/crtn.o" \ + "${startfiles_dir}/libc.so" \ + "${startfiles_dir}/libm.so" + + CT_DoLog EXTRA "Building C library" + CT_DoExecLog ALL ${make} "${make_args[@]}" pregen + CT_DoExecLog ALL ${make} ${jflag} "${make_args[@]}" all + + # YEM-FIXME: + # - we want to install 'runtime' files, eg. lib*.{a,so*}, crti.o and + # such files, except the headers as they already are installed + # - "make install_dev" installs the headers, the crti.o... and the + # static libs, but not the dynamic libs + # - "make install_runtime" installs the dynamic libs only + # - "make install" calls install_runtime and install_dev + # - so we're left with re-installing the headers... Sigh... + CT_DoLog EXTRA "Installing C library" + CT_DoExecLog ALL ${make} "${make_args[@]}" install + fi # libc_mode == final CT_EndStep } -- cgit v1.2.3 From 99dd2f6f60ff244f509d917dc00d080667a90f69 Mon Sep 17 00:00:00 2001 From: Alexey Neyman Date: Sat, 9 Apr 2016 00:27:21 -0700 Subject: mips: allow o32 ABI as default for multilib ... since n32 and n64 are going to get built as well. Signed-off-by: Alexey Neyman --- config/arch/mips.in.2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'config') diff --git a/config/arch/mips.in.2 b/config/arch/mips.in.2 index ee0424d2..35c60e05 100644 --- a/config/arch/mips.in.2 +++ b/config/arch/mips.in.2 @@ -7,7 +7,7 @@ choice config ARCH_mips_o32 bool prompt "o32" - depends on ARCH_32 + depends on (ARCH_32 || MULTILIB) help This is the -mabi=32 gcc option. -- cgit v1.2.3