1.1 --- a/scripts/build/binutils/binutils.sh Sun Jul 17 18:28:19 2011 +0200
1.2 +++ b/scripts/build/binutils/binutils.sh Sun Jul 17 18:29:35 2011 +0200
1.3 @@ -15,39 +15,92 @@
1.4 CT_Patch "binutils" "${CT_BINUTILS_VERSION}"
1.5 }
1.6
1.7 -# Build binutils
1.8 -do_binutils() {
1.9 +# Build binutils for host -> target
1.10 +do_binutils_for_host() {
1.11 + local -a binutils_tools
1.12 + local -a binutils_opts
1.13 +
1.14 + CT_DoStep INFO "Installing binutils for host"
1.15 + CT_mkdir_pushd "${CT_BUILD_DIR}/build-binutils-host-${CT_HOST}"
1.16 +
1.17 + binutils_opts+=( "host=${CT_HOST}" )
1.18 + binutils_opts+=( "prefix=${CT_PREFIX_DIR}" )
1.19 + binutils_opts+=( "static_build=${CT_STATIC_TOOLCHAIN}" )
1.20 + binutils_opts+=( "cflags=${CT_CFLAGS_FOR_HOST}" )
1.21 + binutils_opts+=( "build_manuals=${CT_BUILD_MANUALS}" )
1.22 +
1.23 + do_binutils_backend "${binutils_opts[@]}"
1.24 +
1.25 + # Make those new tools available to the core C compilers to come.
1.26 + # Note: some components want the ${TARGET}-{ar,as,ld,strip} commands as
1.27 + # well. Create that.
1.28 + # Don't do it for canadian or cross-native, because the binutils
1.29 + # are not executable on the build machine.
1.30 + case "${CT_TOOLCHAIN_TYPE}" in
1.31 + cross|native)
1.32 + binutils_tools=( ar as ld strip )
1.33 + case "${CT_BINUTILS_LINKERS_LIST}" in
1.34 + ld) binutils_tools+=( ld.bfd ) ;;
1.35 + gold) binutils_tools+=( ld.gold ) ;;
1.36 + ld,gold) binutils_tools+=( ld.bfd ld.gold ) ;;
1.37 + gold,ld) binutils_tools+=( ld.bfd ld.gold ) ;;
1.38 + esac
1.39 + mkdir -p "${CT_BUILDTOOLS_PREFIX_DIR}/${CT_TARGET}/bin"
1.40 + mkdir -p "${CT_BUILDTOOLS_PREFIX_DIR}/bin"
1.41 + for t in "${binutils_tools[@]}"; do
1.42 + CT_DoExecLog ALL ln -sv \
1.43 + "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" \
1.44 + "${CT_BUILDTOOLS_PREFIX_DIR}/${CT_TARGET}/bin/${t}"
1.45 + CT_DoExecLog ALL ln -sv \
1.46 + "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" \
1.47 + "${CT_BUILDTOOLS_PREFIX_DIR}/bin/${CT_TARGET}-${t}"
1.48 + done
1.49 + ;;
1.50 + *) ;;
1.51 + esac
1.52 +
1.53 + CT_Popd
1.54 + CT_EndStep
1.55 +}
1.56 +
1.57 +# Build binutils for X -> target
1.58 +# Parameter : description : type : default
1.59 +# host : machine to run on : tuple : (none)
1.60 +# prefix : prefix to install into : dir : (none)
1.61 +# static_build : build statcially : bool : no
1.62 +# cflags : host cflags to use : string : (empty)
1.63 +# build_manuals : whether to build manuals : bool : no
1.64 +do_binutils_backend() {
1.65 + local host
1.66 + local prefix
1.67 + local static_build
1.68 + local cflags
1.69 + local build_manuals=no
1.70 local -a extra_config
1.71 local -a extra_make_flags
1.72 - local -a binutils_tools
1.73 local -a manuals_for
1.74 local -a manuals_install
1.75 + local arg
1.76
1.77 - mkdir -p "${CT_BUILD_DIR}/build-binutils"
1.78 - cd "${CT_BUILD_DIR}/build-binutils"
1.79 -
1.80 - CT_DoStep INFO "Installing binutils"
1.81 + for arg in "$@"; do
1.82 + eval "${arg// /\\ }"
1.83 + done
1.84
1.85 CT_DoLog EXTRA "Configuring binutils"
1.86
1.87 - binutils_tools=( ar as ld strip )
1.88 if [ "${CT_BINUTILS_HAS_GOLD}" = "y" ]; then
1.89 case "${CT_BINUTILS_LINKERS_LIST}" in
1.90 ld)
1.91 extra_config+=( --enable-ld=yes --enable-gold=no )
1.92 - binutils_tools+=( ld.bfd )
1.93 ;;
1.94 gold)
1.95 extra_config+=( --enable-ld=no --enable-gold=yes )
1.96 - binutils_tools+=( ld.gold )
1.97 ;;
1.98 ld,gold)
1.99 extra_config+=( --enable-ld=default --enable-gold=yes )
1.100 - binutils_tools+=( ld.bfd ld.gold )
1.101 ;;
1.102 gold,ld)
1.103 extra_config+=( --enable-ld=yes --enable-gold=default )
1.104 - binutils_tools+=( ld.bfd ld.gold )
1.105 ;;
1.106 esac
1.107 if [ "${CT_BINUTILS_GOLD_THREADED}" = "y" ]; then
1.108 @@ -72,20 +125,20 @@
1.109 CT_DoLog DEBUG "Extra config passed: '${extra_config[*]}'"
1.110
1.111 CT_DoExecLog CFG \
1.112 - CFLAGS="${CT_CFLAGS_FOR_HOST}" \
1.113 - CXXFLAGS="${CT_CFLAGS_FOR_HOST}" \
1.114 + CFLAGS="${cflags}" \
1.115 + CXXFLAGS="${cflags}" \
1.116 "${CT_SRC_DIR}/binutils-${CT_BINUTILS_VERSION}/configure" \
1.117 --build=${CT_BUILD} \
1.118 - --host=${CT_HOST} \
1.119 + --host=${host} \
1.120 --target=${CT_TARGET} \
1.121 - --prefix=${CT_PREFIX_DIR} \
1.122 + --prefix=${prefix} \
1.123 --disable-werror \
1.124 "${extra_config[@]}" \
1.125 ${CT_ARCH_WITH_FLOAT} \
1.126 ${BINUTILS_SYSROOT_ARG} \
1.127 "${CT_BINUTILS_EXTRA_CONFIG_ARRAY[@]}"
1.128
1.129 - if [ "${CT_STATIC_TOOLCHAIN}" = "y" ]; then
1.130 + if [ "${static_build}" = "y" ]; then
1.131 extra_make_flags+=("LDFLAGS=-static -all-static")
1.132 CT_DoLog EXTRA "Prepare binutils for static build"
1.133 CT_DoExecLog ALL make ${JOBSFLAGS} configure-host
1.134 @@ -97,7 +150,7 @@
1.135 CT_DoLog EXTRA "Installing binutils"
1.136 CT_DoExecLog ALL make install
1.137
1.138 - if [ "${CT_BUILD_MANUALS}" = "y" ]; then
1.139 + if [ "${build_manuals}" = "y" ]; then
1.140 CT_DoLog EXTRA "Building and installing the binutils manuals"
1.141 manuals_for=( gas binutils ld gprof )
1.142 if [ "${CT_BINUTILS_LINKER_GOLD}" = "y" ]; then
1.143 @@ -112,39 +165,20 @@
1.144 # Install the wrapper if needed
1.145 if [ "${CT_BINUTILS_LD_WRAPPER}" = "y" ]; then
1.146 CT_DoLog EXTRA "Installing ld wrapper"
1.147 - rm -f "${CT_PREFIX_DIR}/bin/${CT_TARGET}-ld"
1.148 - rm -f "${CT_PREFIX_DIR}/${CT_TARGET}/bin/ld"
1.149 + rm -f "${prefix}/bin/${CT_TARGET}-ld"
1.150 + rm -f "${prefix}/${CT_TARGET}/bin/ld"
1.151 sed -r -e "s/@@DEFAULT_LD@@/${CT_BINUTILS_LINKER_DEFAULT}/" \
1.152 "${CT_LIB_DIR}/scripts/build/binutils/binutils-ld.in" \
1.153 - >"${CT_PREFIX_DIR}/bin/${CT_TARGET}-ld"
1.154 - chmod +x "${CT_PREFIX_DIR}/bin/${CT_TARGET}-ld"
1.155 - cp -a "${CT_PREFIX_DIR}/bin/${CT_TARGET}-ld" \
1.156 - "${CT_PREFIX_DIR}/${CT_TARGET}/bin/ld"
1.157 + >"${prefix}/bin/${CT_TARGET}-ld"
1.158 + chmod +x "${prefix}/bin/${CT_TARGET}-ld"
1.159 + cp -a "${prefix}/bin/${CT_TARGET}-ld" \
1.160 + "${prefix}/${CT_TARGET}/bin/ld"
1.161
1.162 # If needed, force using ld.bfd during the toolchain build
1.163 if [ "${CT_BINUTILS_FORCE_LD_BFD}" = "y" ]; then
1.164 export CTNG_LD_IS=bfd
1.165 fi
1.166 fi
1.167 -
1.168 - # Make those new tools available to the core C compilers to come.
1.169 - # Note: some components want the ${TARGET}-{ar,as,ld,strip} commands as
1.170 - # well. Create that.
1.171 - # Don't do it for canadian or cross-native, because the binutils
1.172 - # are not executable on the build machine.
1.173 - case "${CT_TOOLCHAIN_TYPE}" in
1.174 - cross|native)
1.175 - mkdir -p "${CT_BUILDTOOLS_PREFIX_DIR}/${CT_TARGET}/bin"
1.176 - mkdir -p "${CT_BUILDTOOLS_PREFIX_DIR}/bin"
1.177 - for t in "${binutils_tools[@]}"; do
1.178 - ln -sv "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" "${CT_BUILDTOOLS_PREFIX_DIR}/${CT_TARGET}/bin/${t}"
1.179 - ln -sv "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" "${CT_BUILDTOOLS_PREFIX_DIR}/bin/${CT_TARGET}-${t}"
1.180 - done 2>&1 |CT_DoLog ALL
1.181 - ;;
1.182 - *) ;;
1.183 - esac
1.184 -
1.185 - CT_EndStep
1.186 }
1.187
1.188 # Now on for the target libraries
2.1 --- a/scripts/build/binutils/elf2flt.sh Sun Jul 17 18:28:19 2011 +0200
2.2 +++ b/scripts/build/binutils/elf2flt.sh Sun Jul 17 18:29:35 2011 +0200
2.3 @@ -4,9 +4,9 @@
2.4 # Licensed under the GPL v2. See COPYING in the root of this package
2.5
2.6 # Default: do nothing
2.7 -do_elf2flt_get() { :; }
2.8 -do_elf2flt_extract() { :; }
2.9 -do_elf2flt() { :; }
2.10 +do_elf2flt_get() { :; }
2.11 +do_elf2flt_extract() { :; }
2.12 +do_elf2flt_for_host() { :; }
2.13
2.14 if [ -n "${CT_ARCH_BINFMT_FLAT}" ]; then
2.15
2.16 @@ -25,25 +25,74 @@
2.17 CT_Patch "elf2flt-cvs" "${CT_ELF2FLT_VERSION}"
2.18 }
2.19
2.20 -# Build elf2flt
2.21 -do_elf2flt() {
2.22 - mkdir -p "${CT_BUILD_DIR}/build-elf2flt"
2.23 - cd "${CT_BUILD_DIR}/build-elf2flt"
2.24 +# Build elf2flt for host -> target
2.25 +do_elf2flt_for_host() {
2.26 + local -a elf2flt_opts
2.27
2.28 - CT_DoStep INFO "Installing elf2flt"
2.29 + CT_DoStep INFO "Installing elf2flt for host"
2.30 + CT_mkdir_pushd "${CT_BUILD_DIR}/build-elf2flt-host-${CT_HOST}"
2.31 +
2.32 + elf2flt_opts+=( "host=${CT_HOST}" )
2.33 + elf2flt_opts+=( "prefix=${CT_PREFIX_DIR}" )
2.34 + elf2flt_opts+=( "static_build=${CT_STATIC_TOOLCHAIN}" )
2.35 + elf2flt_opts+=( "cflags=${CT_CFLAGS_FOR_HOST}" )
2.36 +
2.37 + do_elf2flt_backend "${elf2flt_opts[@]}"
2.38 +
2.39 + # Make those new tools available to the core C compilers to come.
2.40 + # Note: some components want the ${TARGET}-{ar,as,ld,strip} commands as
2.41 + # well. Create that.
2.42 + # Don't do it for canadian or cross-native, because the binutils
2.43 + # are not executable on the build machine.
2.44 + case "${CT_TOOLCHAIN_TYPE}" in
2.45 + cross|native)
2.46 + mkdir -p "${CT_BUILDTOOLS_PREFIX_DIR}/${CT_TARGET}/bin"
2.47 + mkdir -p "${CT_BUILDTOOLS_PREFIX_DIR}/bin"
2.48 + for t in elf2flt flthdr; do
2.49 + CT_DoExecLog ALL ln -sv \
2.50 + "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" \
2.51 + "${CT_BUILDTOOLS_PREFIX_DIR}/${CT_TARGET}/bin/${t}"
2.52 + CT_DoExecLog ALL ln -sv \
2.53 + "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" \
2.54 + "${CT_BUILDTOOLS_PREFIX_DIR}/bin/${CT_TARGET}-${t}"
2.55 + done
2.56 + ;;
2.57 + *) ;;
2.58 + esac
2.59 +
2.60 + CT_Popd
2.61 + CT_EndStep
2.62 +}
2.63 +
2.64 +# Build elf2flt for X -> target
2.65 +# Parameter : description : type : default
2.66 +# host : machine to run on : tuple : (none)
2.67 +# prefix : prefix to install into : dir : (none)
2.68 +# static_build : build statcially : bool : no
2.69 +# cflags : host cflags to use : string : (empty)
2.70 +do_elf2flt_backend() {
2.71 + local host
2.72 + local prefix
2.73 + local static_build
2.74 + local cflags
2.75 + local arg
2.76 +
2.77 + for arg in "$@"; do
2.78 + eval "${arg// /\\ }"
2.79 + done
2.80
2.81 elf2flt_opts=
2.82 - binutils_bld=${CT_BUILD_DIR}/build-binutils
2.83 - binutils_src=${CT_SRC_DIR}/binutils-${CT_BINUTILS_VERSION}
2.84 + binutils_bld="${CT_BUILD_DIR}/build-binutils-host-${CT_HOST}"
2.85 + binutils_src="${CT_SRC_DIR}/binutils-${CT_BINUTILS_VERSION}"
2.86
2.87 CT_DoLog EXTRA "Configuring elf2flt"
2.88 CT_DoExecLog CFG \
2.89 - CFLAGS="${CT_CFLAGS_FOR_HOST}" \
2.90 + CFLAGS="${host_cflags}" \
2.91 "${CT_SRC_DIR}/elf2flt-cvs-${CT_ELF2FLT_VERSION}/configure" \
2.92 --build=${CT_BUILD} \
2.93 - --host=${CT_HOST} \
2.94 + --host=${host} \
2.95 --target=${CT_TARGET} \
2.96 - --prefix=${CT_PREFIX_DIR} \
2.97 + --prefix=${prefix} \
2.98 --with-bfd-include-dir=${binutils_bld}/bfd \
2.99 --with-binutils-include-dir=${binutils_src}/include \
2.100 --with-libbfd=${binutils_bld}/bfd/libbfd.a \
2.101 @@ -56,25 +105,6 @@
2.102
2.103 CT_DoLog EXTRA "Installing elf2flt"
2.104 CT_DoExecLog ALL make install
2.105 -
2.106 - # Make those new tools available to the core C compilers to come.
2.107 - # Note: some components want the ${TARGET}-{ar,as,ld,strip} commands as
2.108 - # well. Create that.
2.109 - # Don't do it for canadian or cross-native, because the binutils
2.110 - # are not executable on the build machine.
2.111 - case "${CT_TOOLCHAIN_TYPE}" in
2.112 - cross|native)
2.113 - mkdir -p "${CT_BUILDTOOLS_PREFIX_DIR}/${CT_TARGET}/bin"
2.114 - mkdir -p "${CT_BUILDTOOLS_PREFIX_DIR}/bin"
2.115 - for t in elf2flt flthdr; do
2.116 - ln -sv "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" "${CT_BUILDTOOLS_PREFIX_DIR}/${CT_TARGET}/bin/${t}"
2.117 - ln -sv "${CT_PREFIX_DIR}/bin/${CT_TARGET}-${t}" "${CT_BUILDTOOLS_PREFIX_DIR}/bin/${CT_TARGET}-${t}"
2.118 - done 2>&1 |CT_DoLog ALL
2.119 - ;;
2.120 - *) ;;
2.121 - esac
2.122 -
2.123 - CT_EndStep
2.124 }
2.125
2.126 fi # CT_ARCH_BINFMT_FLAT
3.1 --- a/scripts/build/binutils/sstrip.sh Sun Jul 17 18:28:19 2011 +0200
3.2 +++ b/scripts/build/binutils/sstrip.sh Sun Jul 17 18:29:35 2011 +0200
3.3 @@ -1,8 +1,8 @@
3.4 # This will build and install sstrip to run on host and sstrip target files
3.5
3.6 -do_sstrip_get() { :; }
3.7 -do_sstrip_extract() { :; }
3.8 -do_sstrip() { :; }
3.9 +do_sstrip_get() { :; }
3.10 +do_sstrip_extract() { :; }
3.11 +do_sstrip_for_host() { :; }
3.12
3.13 if [ "${CT_SSTRIP}" = "y" ]; then
3.14 do_sstrip_get() {
3.15 @@ -19,11 +19,13 @@
3.16 CT_DoExecLog DEBUG cp -v "${CT_TARBALLS_DIR}/sstrip.c" "${CT_SRC_DIR}/sstrip"
3.17 }
3.18
3.19 - do_sstrip() {
3.20 + # Build sstrip for host -> target
3.21 + # Note: we don't need sstrip to run on the build machine,
3.22 + # so we do not need the frontend/backend stuff...
3.23 + do_sstrip_for_host() {
3.24 local sstrip_cflags
3.25 - CT_DoStep INFO "Installing sstrip"
3.26 - mkdir -p "${CT_BUILD_DIR}/build-sstrip"
3.27 - cd "${CT_BUILD_DIR}/build-sstrip"
3.28 + CT_DoStep INFO "Installing sstrip for host"
3.29 + CT_mkdir_pushd "${CT_BUILD_DIR}/build-sstrip-host"
3.30
3.31 if [ "${CT_STATIC_TOOLCHAIN}" = "y" ]; then
3.32 sstrip_cflags="-static"
3.33 @@ -35,6 +37,7 @@
3.34 CT_DoLog EXTRA "Installing sstrip"
3.35 CT_DoExecLog ALL install -m 755 sstrip "${CT_PREFIX_DIR}/bin/${CT_TARGET}-sstrip"
3.36
3.37 + CT_Popd
3.38 CT_EndStep
3.39 }
3.40 fi
4.1 --- a/steps.mk Sun Jul 17 18:28:19 2011 +0200
4.2 +++ b/steps.mk Sun Jul 17 18:29:35 2011 +0200
4.3 @@ -23,9 +23,9 @@
4.4 cloog \
4.5 mpc \
4.6 libelf \
4.7 - binutils \
4.8 - elf2flt \
4.9 - sstrip \
4.10 + binutils_for_host \
4.11 + elf2flt_for_host \
4.12 + sstrip_for_host \
4.13 cc_core_pass_1 \
4.14 kernel_headers \
4.15 libc_start_files \