# This file adds functions to build elf2flt
# Copyright 2009 John Williams
# Copyright 2007 Yann E. MORIN
# Licensed under the GPL v2. See COPYING in the root of this package

# Default: do nothing
do_elf2flt_get()     { :; }
do_elf2flt_extract() { :; }
do_elf2flt()         { :; }

if [ -n "${CT_ARCH_BINFMT_FLAT}" ]; then

# Download elf2flt
do_elf2flt_get() {
    CT_GetCVS "elf2flt-cvs-${CT_ELF2FLT_VERSION}"           \
              ":pserver:anonymous@cvs.uclinux.org:/var/cvs" \
              "elf2flt"                                     \
              "" \
              "elf2flt-cvs-${CT_ELF2FLT_VERSION}"
}

# Extract elf2flt
do_elf2flt_extract() {
    CT_Extract "elf2flt-cvs-${CT_ELF2FLT_VERSION}"
    CT_Patch "elf2flt-cvs" "${CT_ELF2FLT_VERSION}"
}

# Build elf2flt
do_elf2flt() {
    mkdir -p "${CT_BUILD_DIR}/build-elf2flt"
    cd "${CT_BUILD_DIR}/build-elf2flt"

    CT_DoStep INFO "Installing elf2flt"

    elf2flt_opts=
    binutils_bld=${CT_BUILD_DIR}/build-binutils
    binutils_src=${CT_SRC_DIR}/binutils-${CT_BINUTILS_VERSION}

    CT_DoLog EXTRA "Configuring elf2flt"
    CT_DoExecLog CFG                                            \
    CFLAGS="${CT_CFLAGS_FOR_HOST}"                              \
    "${CT_SRC_DIR}/elf2flt-cvs-${CT_ELF2FLT_VERSION}/configure" \
        --build=${CT_BUILD}                                     \
        --host=${CT_HOST}                                       \
        --target=${CT_TARGET}                                   \
        --prefix=${CT_PREFIX_DIR}                               \
        --with-bfd-include-dir=${binutils_bld}/bfd              \
        --with-binutils-include-dir=${binutils_src}/include     \
        --with-libbfd=${binutils_bld}/bfd/libbfd.a              \
        --with-libiberty=${binutils_bld}/libiberty/libiberty.a  \
        ${elf2flt_opts}                                         \
        "${CT_ELF2FLT_EXTRA_CONFIG_ARRAY[@]}"

    CT_DoLog EXTRA "Building elf2flt"
    CT_DoExecLog ALL make ${JOBSFLAGS}

    CT_DoLog EXTRA "Installing elf2flt"
    CT_DoExecLog ALL make install

    # Make those new tools available to the core C compilers to come.
    # Note: some components want the ${TARGET}-{ar,as,ld,strip} commands as
    # well. Create that.
    mkdir -p "${CT_CC_CORE_STATIC_PREFIX_DIR}/${CT_TARGET}/bin"
    mkdir -p "${CT_CC_CORE_STATIC_PREFIX_DIR}/bin"
    mkdir -p "${CT_CC_CORE_SHARED_PREFIX_DIR}/${CT_TARGET}/bin"
    mkdir -p "${CT_CC_CORE_SHARED_PREFIX_DIR}/bin"
    for t in elf2flt flthdr; do
        ln -sv "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" "${CT_CC_CORE_STATIC_PREFIX_DIR}/${CT_TARGET}/bin/${t}"
        ln -sv "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" "${CT_CC_CORE_STATIC_PREFIX_DIR}/bin/${CT_TARGET}-${t}"
        ln -sv "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" "${CT_CC_CORE_SHARED_PREFIX_DIR}/${CT_TARGET}/bin/${t}"
        ln -sv "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" "${CT_CC_CORE_SHARED_PREFIX_DIR}/bin/${CT_TARGET}-${t}"
    done 2>&1 |CT_DoLog ALL

    CT_EndStep
}

fi # CT_ARCH_BINFMT_FLAT
