# This file adds functions to build glibc # Copyright 2007 Yann E. MORIN # Licensed under the GPL v2. See COPYING in the root of this package # Add the definitions common to glibc and eglibc # do_libc_extract # do_libc_start_files # do_libc # do_libc_add_ons_list # do_libc_min_kernel_config . "${CT_LIB_DIR}/scripts/build/libc/glibc-eglibc.sh-common" # Download glibc do_libc_get() { local date local version local -a addons_list addons_list=($(do_libc_add_ons_list " ")) # Main source if [ "${CT_LIBC_CUSTOM}" = "y" ]; then CT_GetCustom "glibc" "${CT_LIBC_VERSION}" "${CT_LIBC_GLIBC_CUSTOM_LOCATION}" CT_LIBC_CUSTOM_LOCATION="${CT_SRC_DIR}/glibc-${CT_LIBC_VERSION}" else if echo ${CT_LIBC_VERSION} |grep -q linaro; then # Linaro eglibc releases come from regular downloads... YYMM=`echo ${CT_LIBC_VERSION} |cut -d- -f3 |${sed} -e 's,^..,,'` CT_GetFile "glibc-${CT_LIBC_VERSION}" \ https://releases.linaro.org/${YYMM}/components/toolchain/glibc-linaro \ http://cbuild.validation.linaro.org/snapshots else CT_GetFile "glibc-${CT_LIBC_VERSION}" \ {http,ftp,https}://ftp.gnu.org/gnu/glibc \ ftp://{sourceware.org,gcc.gnu.org}/pub/glibc/{releases,snapshots} fi fi # C library addons for addon in "${addons_list[@]}"; do # Never ever try to download these add-ons, # they've always been internal case "${addon}" in nptl) continue;; esac case "${addon}:${CT_LIBC_GLIBC_PORTS_EXTERNAL}" in ports:y) ;; ports:*) continue;; esac if ! CT_GetFile "glibc-${addon}-${CT_LIBC_VERSION}" \ {http,ftp,https}://ftp.gnu.org/gnu/glibc \ ftp://{sourceware.org,gcc.gnu.org}/pub/glibc/{releases,snapshots} then # Some add-ons are bundled with glibc, others are # bundled in their own tarball. Eg. NPTL is internal, # while LinuxThreads was external. Also, for old # versions of glibc, the libidn add-on was external, # but with version >=2.10, it is internal. CT_DoLog DEBUG "Addon '${addon}' could not be downloaded." CT_DoLog DEBUG "We'll see later if we can find it in the source tree" fi done return 0 } # There is nothing to do for glibc check config do_libc_check_config() { : } # Extract the files required for the libc locales # Nothing to do do_libc_locales_extract() { : } # Build and install the libc locales do_libc_locales() { local src_dir="${CT_SRC_DIR}/glibc-${CT_LIBC_VERSION}" local -a extra_config local glibc_cflags mkdir -p "${CT_BUILD_DIR}/build-localedef" cd "${CT_BUILD_DIR}/build-localedef" CT_DoLog EXTRA "Configuring C library localedef" if [ "${CT_LIBC_EGLIBC_HAS_PKGVERSION_BUGURL}" = "y" ]; then extra_config+=("--with-pkgversion=${CT_PKGVERSION}") [ -n "${CT_TOOLCHAIN_BUGURL}" ] && extra_config+=("--with-bugurl=${CT_TOOLCHAIN_BUGURL}") fi CT_DoLog DEBUG "Extra config args passed: '${extra_config[*]}'" glibc_cflags="-O2 -fno-stack-protector" case "${CT_LIBC_ENABLE_FORTIFIED_BUILD}" in y) ;; *) glibc_cflags+=" -U_FORTIFY_SOURCE";; esac # ./configure is misled by our tools override wrapper for bash # so just tell it where the real bash is _on_the_target_! # Notes: # - ${ac_cv_path_BASH_SHELL} is only used to set BASH_SHELL # - ${BASH_SHELL} is only used to set BASH # - ${BASH} is only used to set the shebang # in two scripts to run on the target # So we can safely bypass bash detection at compile time. # Should this change in a future eglibc release, we'd better # directly mangle the generated scripts _after_ they get built, # or even after they get installed... echo "ac_cv_path_BASH_SHELL=/bin/bash" >>config.cache # Configure with --prefix the way we want it on the target... CT_DoExecLog CFG \ CFLAGS="${glibc_cflags}" \ "${src_dir}/configure" \ --prefix=/usr \ --cache-file="$(pwd)/config.cache" \ --without-cvs \ --disable-profile \ --without-gd \ --disable-debug \ "${extra_config[@]}" CT_DoLog EXTRA "Building C library localedef" CT_DoExecLog ALL make ${JOBSFLAGS} # The target's endianness and uint32_t alignment should be passed as options # to localedef, but glibc's localedef does not support these options, which # means that the locale files generated here will be suitable for the target # only if it has the same endianness and uint32_t alignment as the host's. CT_DoLog EXTRA "Installing C library locales" CT_DoExecLog ALL make ${JOBSFLAGS} \ install_root="${CT_SYSROOT_DIR}" \ localedata/install-locales }