scripts/build/libc/eglibc.sh
author "Yann E. MORIN" <yann.morin.1998@free.fr>
Sun May 05 00:01:05 2013 +0200 (2013-05-05)
changeset 3218 3709e61ad85b
parent 3041 b9f695c2f5b7
child 3251 ec603d1371b9
permissions -rw-r--r--
complibs/cloog: add support for the ISL backend

CLooG 0.18+ will use ISL instead of PPL, so we have to configure
adequately depending of which backend is in use.

The Kconfig entries will decide for us which is selected, so we
can rely on either PPL xor ISL to be selected, not both.

Reported-by: "Plotnikov Dmitry" <leitz@ispras.ru>
[Dmitry did a preliminray patch to add ISL support,
which this patch is inspired from]
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
     1 # eglibc build functions (initially by Thomas JOURDAN).
     2 
     3 # Add the definitions common to glibc and eglibc
     4 #   do_libc_extract
     5 #   do_libc_start_files
     6 #   do_libc
     7 #   do_libc_add_ons_list
     8 #   do_libc_min_kernel_config
     9 . "${CT_LIB_DIR}/scripts/build/libc/glibc-eglibc.sh-common"
    10 
    11 # Download glibc
    12 # eglibc is only available through subversion, there are no
    13 # snapshots available.
    14 do_libc_get() {
    15     local addon
    16     local -a extra_addons
    17     local svn_base
    18 
    19     if [ "${CT_EGLIBC_HTTP}" = "y" ]; then
    20         svn_base="http://www.eglibc.org/svn"
    21     else
    22         svn_base="svn://svn.eglibc.org"
    23     fi
    24 
    25     case "${CT_LIBC_VERSION}" in
    26         trunk)  svn_base+="/trunk";;
    27         *)      svn_base+="/branches/eglibc-${CT_LIBC_VERSION}";;
    28     esac
    29 
    30     CT_GetSVN "eglibc-${CT_LIBC_VERSION}"   \
    31               "${svn_base}/libc"            \
    32               "${CT_EGLIBC_REVISION:-HEAD}"
    33 
    34     if [ "${CT_LIBC_LOCALES}" = "y" ]; then
    35         extra_addons+=("localedef")
    36     fi
    37 
    38     for addon in $(do_libc_add_ons_list " ") "${extra_addons[@]}"; do
    39         # Never ever try to download these add-ons,
    40         # they've always been internal
    41         case "${addon}" in
    42             nptl)   continue;;
    43         esac
    44 
    45         if ! CT_GetSVN "eglibc-${addon}-${CT_LIBC_VERSION}" \
    46                        "${svn_base}/${addon}"               \
    47                        "${CT_EGLIBC_REVISION:-HEAD}"
    48         then
    49             # Some add-ons are bundled with the main sources
    50             # so failure to download them is expected
    51             CT_DoLog DEBUG "Addon '${addon}' could not be downloaded."
    52             CT_DoLog DEBUG "We'll see later if we can find it in the source tree"
    53         fi
    54     done
    55 }
    56 
    57 # Copy user provided eglibc configuration file if provided
    58 do_libc_check_config() {
    59     if [ "${CT_EGLIBC_CUSTOM_CONFIG}" != "y" ]; then
    60         return 0
    61     fi
    62 
    63     CT_DoStep INFO "Checking C library configuration"
    64 
    65     CT_TestOrAbort "You did not provide an eglibc config file!" \
    66         -n "${CT_EGLIBC_OPTION_GROUPS_FILE}" -a \
    67         -f "${CT_EGLIBC_OPTION_GROUPS_FILE}"
    68 
    69     CT_DoExecLog ALL cp "${CT_EGLIBC_OPTION_GROUPS_FILE}" "${CT_CONFIG_DIR}/eglibc.config"
    70 
    71     # NSS configuration
    72     if grep -E '^OPTION_EGLIBC_NSSWITCH[[:space:]]*=[[:space:]]*n' "${CT_EGLIBC_OPTION_GROUPS_FILE}" >/dev/null 2>&1; then
    73         CT_DoLog DEBUG "Using fixed-configuration nsswitch facility"
    74 
    75         if [ "${CT_EGLIBC_BUNDLED_NSS_CONFIG}" = "y" ]; then
    76             nss_config="${CT_SRC_DIR}/eglibc-${CT_LIBC_VERSION}/nss/fixed-nsswitch.conf"
    77         else
    78             nss_config="${CT_EGLIBC_NSS_CONFIG_FILE}"
    79         fi
    80         CT_TestOrAbort "NSS config file not found!" -n "${nss_config}" -a -f "${nss_config}"
    81 
    82         CT_DoExecLog ALL cp "${nss_config}" "${CT_CONFIG_DIR}/nsswitch.config"
    83         echo "OPTION_EGLIBC_NSSWITCH_FIXED_CONFIG = ${CT_CONFIG_DIR}/nsswitch.config" \
    84             >> "${CT_CONFIG_DIR}/eglibc.config"
    85 
    86         if [ "${CT_EGLIBC_BUNDLED_NSS_FUNCTIONS}" = "y" ]; then
    87             nss_functions="${CT_SRC_DIR}/eglibc-${CT_LIBC_VERSION}/nss/fixed-nsswitch.functions"
    88         else
    89             nss_functions="${CT_EGLIBC_NSS_FUNCTIONS_FILE}"
    90         fi
    91         CT_TestOrAbort "NSS functions file not found!" -n "${nss_functions}" -a -f "${nss_functions}"
    92 
    93         CT_DoExecLog ALL cp "${nss_functions}" "${CT_CONFIG_DIR}/nsswitch.functions"
    94         echo "OPTION_EGLIBC_NSSWITCH_FIXED_FUNCTIONS = ${CT_CONFIG_DIR}/nsswitch.functions" \
    95             >> "${CT_CONFIG_DIR}/eglibc.config"
    96     else
    97         CT_DoLog DEBUG "Using full-blown nsswitch facility"
    98     fi
    99 
   100     CT_EndStep
   101 }
   102 
   103 # Extract the files required for the libc locales
   104 do_libc_locales_extract() {
   105     CT_Extract "eglibc-localedef-${CT_LIBC_VERSION}"
   106     CT_Patch "eglibc" "localedef-${CT_LIBC_VERSION}"
   107 }
   108 
   109 # Build and install the libc locales
   110 do_libc_locales() {
   111     local libc_src_dir="${CT_SRC_DIR}/eglibc-${CT_LIBC_VERSION}"
   112     local src_dir="${CT_SRC_DIR}/eglibc-localedef-${CT_LIBC_VERSION}"
   113     local -a extra_config
   114     local -a localedef_opts
   115 
   116     mkdir -p "${CT_BUILD_DIR}/build-localedef"
   117     cd "${CT_BUILD_DIR}/build-localedef"
   118 
   119     CT_DoLog EXTRA "Configuring C library localedef"
   120 
   121     if [ "${CT_LIBC_EGLIBC_HAS_PKGVERSION_BUGURL}" = "y" ]; then
   122         extra_config+=("--with-pkgversion=${CT_PKGVERSION}")
   123         [ -n "${CT_TOOLCHAIN_BUGURL}" ] && extra_config+=("--with-bugurl=${CT_TOOLCHAIN_BUGURL}")
   124     fi
   125 
   126     CT_DoLog DEBUG "Extra config args passed: '${extra_config[*]}'"
   127 
   128     # ./configure is misled by our tools override wrapper for bash
   129     # so just tell it where the real bash is _on_the_target_!
   130     # Notes:
   131     # - ${ac_cv_path_BASH_SHELL} is only used to set BASH_SHELL
   132     # - ${BASH_SHELL}            is only used to set BASH
   133     # - ${BASH}                  is only used to set the shebang
   134     #                            in two scripts to run on the target
   135     # So we can safely bypass bash detection at compile time.
   136     # Should this change in a future eglibc release, we'd better
   137     # directly mangle the generated scripts _after_ they get built,
   138     # or even after they get installed...
   139     echo "ac_cv_path_BASH_SHELL=/bin/bash" >>config.cache
   140 
   141     # Configure with --prefix the way we want it on the target...
   142 
   143     CT_DoExecLog CFG                                                \
   144     CPPFLAGS="-DNOT_IN_libc"                                        \
   145     "${src_dir}/configure"                                          \
   146         --prefix=/usr                                               \
   147         --cache-file="$(pwd)/config.cache"                          \
   148         --with-glibc="${libc_src_dir}"                              \
   149         "${extra_config[@]}"
   150 
   151     CT_DoLog EXTRA "Building C library localedef"
   152     CT_DoExecLog ALL make ${JOBSFLAGS}
   153 
   154     # Set the localedef endianness option
   155     case "${CT_ARCH_ENDIAN}" in
   156         big)    localedef_opts+=(--big-endian);;
   157         little) localedef_opts+=(--little-endian);;
   158     esac
   159 
   160     # Set the localedef option for the target's uint32_t alignment in bytes.
   161     # This is target-specific, but for now, 32-bit alignment should work for all
   162     # supported targets, even 64-bit ones.
   163     localedef_opts+=(--uint32-align=4)
   164 
   165     CT_DoLog EXTRA "Installing C library locales"
   166     CT_DoExecLog ALL make ${JOBSFLAGS}                              \
   167                           "LOCALEDEF_OPTS=${localedef_opts[*]}"     \
   168                           install_root="${CT_SYSROOT_DIR}"          \
   169                           install-locales
   170 }