scripts/build/companion_libs/200-libelf.sh
author "Yann E. MORIN" <yann.morin.1998@free.fr>
Sun May 11 23:43:52 2014 +0200 (2014-05-11)
changeset 3320 78af1c99bc6d
parent 3115 1c68438f44f7
permissions -rw-r--r--
scripts/functions: add target_endian_le and target_endian_be

We currently define target_endian_el and target_endian_eb to be the
tuple extension depending on endianness, defined to be respectively
'el' or 'eb' according to the endianness.

Some architecture do not use 'el' or 'eb', but use 'le' or 'be'.

Provide that as well, as two new variables: target_endian_le and
target_endian_be.

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Cody P Schafer <dev@codyps.com>
yann@479
     1
# Build script for libelf
yann@479
     2
yann@1811
     3
do_libelf_get() { :; }
yann@1811
     4
do_libelf_extract() { :; }
yann@2929
     5
do_libelf_for_build() { :; }
yann@2927
     6
do_libelf_for_host() { :; }
yann@2905
     7
do_libelf_for_target() { :; }
yann@1811
     8
yann@1811
     9
if [ "${CT_LIBELF}" = "y" -o "${CT_LIBELF_TARGET}" = "y" ]; then
yann@1811
    10
yann@1811
    11
do_libelf_get() {
yann@479
    12
    # The server hosting libelf will return an "HTTP 300 : Multiple Choices"
yann@479
    13
    # error code if we try to download a file that does not exists there.
yann@479
    14
    # So we have to request the file with an explicit extension.
yann@479
    15
    CT_GetFile "libelf-${CT_LIBELF_VERSION}" .tar.gz http://www.mr511.de/software/
yann@479
    16
}
yann@479
    17
yann@1811
    18
do_libelf_extract() {
yann@1126
    19
    CT_Extract "libelf-${CT_LIBELF_VERSION}"
yann@1901
    20
    CT_Patch "libelf" "${CT_LIBELF_VERSION}"
yann@479
    21
}
yann@479
    22
yann@1811
    23
if [ "${CT_LIBELF}" = "y" ]; then
yann@1811
    24
yann@2929
    25
# Build libelf for running on build
yann@2929
    26
# - always build statically
yann@2929
    27
# - we do not have build-specific CFLAGS
yann@2929
    28
# - install in build-tools prefix
yann@2929
    29
do_libelf_for_build() {
yann@2929
    30
    local -a libelf_opts
yann@2929
    31
yann@2929
    32
    case "${CT_TOOLCHAIN_TYPE}" in
yann@2929
    33
        native|cross)   return 0;;
yann@2929
    34
    esac
yann@2929
    35
yann@2929
    36
    CT_DoStep INFO "Installing libelf for build"
yann@2929
    37
    CT_mkdir_pushd "${CT_BUILD_DIR}/build-libelf-build-${CT_BUILD}"
yann@2929
    38
yann@2929
    39
    libelf_opts+=( "host=${CT_BUILD}" )
yann@2929
    40
    libelf_opts+=( "prefix=${CT_BUILDTOOLS_PREFIX_DIR}" )
diorcet@3119
    41
    libelf_opts+=( "cflags=${CT_CFLAGS_FOR_BUILD}" )
diorcet@3119
    42
    libelf_opts+=( "ldflags=${CT_LDFLAGS_FOR_BUILD}" )
yann@2929
    43
    do_libelf_backend "${libelf_opts[@]}"
yann@2929
    44
yann@2929
    45
    CT_Popd
yann@2929
    46
    CT_EndStep
yann@2929
    47
}
yann@2929
    48
yann@2927
    49
# Build libelf for running on host
yann@2927
    50
do_libelf_for_host() {
yann@2927
    51
    local -a libelf_opts
yann@1918
    52
yann@2927
    53
    CT_DoStep INFO "Installing libelf for host"
yann@2927
    54
    CT_mkdir_pushd "${CT_BUILD_DIR}/build-libelf-host-${CT_HOST}"
yann@1918
    55
yann@2927
    56
    libelf_opts+=( "host=${CT_HOST}" )
yann@2931
    57
    libelf_opts+=( "prefix=${CT_HOST_COMPLIBS_DIR}" )
yann@2927
    58
    libelf_opts+=( "cflags=${CT_CFLAGS_FOR_HOST}" )
diorcet@3119
    59
    libelf_opts+=( "ldflags=${CT_LDFLAGS_FOR_HOST}" )
yann@2927
    60
    do_libelf_backend "${libelf_opts[@]}"
yann@1918
    61
yann@1918
    62
    CT_Popd
yann@1918
    63
    CT_EndStep
yann@1811
    64
}
yann@1811
    65
yann@1811
    66
fi # CT_LIBELF
yann@1811
    67
yann@1811
    68
if [ "${CT_LIBELF_TARGET}" = "y" ]; then
yann@1811
    69
yann@2905
    70
do_libelf_for_target() {
yann@2927
    71
    local -a libelf_opts
yann@2927
    72
yann@1811
    73
    CT_DoStep INFO "Installing libelf for the target"
yann@2927
    74
    CT_mkdir_pushd "${CT_BUILD_DIR}/build-libelf-target-${CT_TARGET}"
yann@479
    75
yann@2927
    76
    libelf_opts+=( "destdir=${CT_SYSROOT_DIR}" )
yann@2927
    77
    libelf_opts+=( "host=${CT_TARGET}" )
yann@2927
    78
    libelf_opts+=( "prefix=/usr" )
yann@2927
    79
    libelf_opts+=( "shared=y" )
yann@2927
    80
    do_libelf_backend "${libelf_opts[@]}"
yann@479
    81
yann@479
    82
    CT_Popd
yann@479
    83
    CT_EndStep
yann@479
    84
}
yann@479
    85
yann@1811
    86
fi # CT_LIBELF_TARGET
yann@1811
    87
yann@2927
    88
# Build libelf
yann@2927
    89
#     Parameter     : description               : type      : default
yann@2927
    90
#     destdir       : out-of-tree install dir   : string    : /
yann@2927
    91
#     host          : machine to run on         : tuple     : (none)
yann@2927
    92
#     prefix        : prefix to install into    : dir       : (none)
diorcet@3119
    93
#     cflags        : cflags to use             : string    : (empty)
diorcet@3119
    94
#     ldflags       : ldflags to use            : string    : (empty)
yann@2927
    95
#     shared        : also buils shared lib     : bool      : n
yann@2927
    96
do_libelf_backend() {
yann@2927
    97
    local destdir="/"
yann@2927
    98
    local host
yann@2927
    99
    local prefix
yann@2927
   100
    local cflags
diorcet@3119
   101
    local ldflags
yann@2927
   102
    local shared
yann@2927
   103
    local -a extra_config
yann@2927
   104
    local arg
yann@2927
   105
yann@2927
   106
    for arg in "$@"; do
yann@2927
   107
        eval "${arg// /\\ }"
yann@2927
   108
    done
yann@2927
   109
yann@2927
   110
    CT_DoLog EXTRA "Configuring libelf"
yann@2927
   111
yann@2927
   112
    if [ "${shared}" = "y" ]; then
yann@2927
   113
        extra_config+=( --enable-shared )
yann@2927
   114
    else
yann@2927
   115
        extra_config+=( --disable-shared )
yann@2927
   116
    fi
yann@2927
   117
yann@2927
   118
    CT_DoExecLog CFG                                        \
yann@2927
   119
    CC="${host}-gcc"                                        \
yann@2927
   120
    RANLIB="${host}-ranlib"                                 \
yann@2927
   121
    CFLAGS="${cflags} -fPIC"                                \
diorcet@3119
   122
    LDFLAGS="${ldflags}"                                    \
yann@2927
   123
    "${CT_SRC_DIR}/libelf-${CT_LIBELF_VERSION}/configure"   \
yann@2927
   124
        --build=${CT_BUILD}                                 \
yann@2927
   125
        --host=${host}                                      \
yann@2927
   126
        --target=${CT_TARGET}                               \
yann@2927
   127
        --prefix="${prefix}"                                \
yann@2927
   128
        --enable-compat                                     \
yann@2927
   129
        --enable-elf64                                      \
yann@2927
   130
        --enable-extended-format                            \
yann@2927
   131
        --enable-static                                     \
yann@2927
   132
        "${extra_config[@]}"
yann@2927
   133
yann@2927
   134
    CT_DoLog EXTRA "Building libelf"
yann@2927
   135
    CT_DoExecLog ALL make
yann@2927
   136
yann@2927
   137
    CT_DoLog EXTRA "Installing libelf"
yann@2927
   138
    CT_DoExecLog ALL make instroot="${destdir}" install
yann@2927
   139
}
yann@2927
   140
yann@1811
   141
fi # CT_LIBELF || CT_LIBELF_TARGET