Index: tools/trusted_cross_toolchains/trusted-toolchain-creator.mipsel.debian.sh |
diff --git a/tools/trusted_cross_toolchains/trusted-toolchain-creator.mipsel.squeeze.sh b/tools/trusted_cross_toolchains/trusted-toolchain-creator.mipsel.debian.sh |
similarity index 79% |
rename from tools/trusted_cross_toolchains/trusted-toolchain-creator.mipsel.squeeze.sh |
rename to tools/trusted_cross_toolchains/trusted-toolchain-creator.mipsel.debian.sh |
index 94709f0766554d6ae2dbc31dcd6d8387acd5162b..0f042aed80eab069e14031f9e81482975db9d6b5 100755 |
--- a/tools/trusted_cross_toolchains/trusted-toolchain-creator.mipsel.squeeze.sh |
+++ b/tools/trusted_cross_toolchains/trusted-toolchain-creator.mipsel.debian.sh |
@@ -9,12 +9,6 @@ |
# This script is intended to build a mipsel-linux-gnu cross compilation |
# toolchain that runs on x86 linux and generates code for a little-endian, |
# hard-float, mips32 target. |
-# |
-# It expects the host machine to have relatively recent versions of GMP (4.2.0 |
-# or later), MPFR (2.4.2), and MPC (0.8.1) in order to build the GCC. |
-# |
-# Common way to get those is: |
-# sudo apt-get install libmpfr-dev libmpc-dev libgmp3-dev |
###################################################################### |
# Config |
@@ -29,6 +23,15 @@ readonly SCRIPT_DIR=$(dirname $0) |
readonly MAKE_OPTS="-j8" |
readonly ARCH="mips32" |
+readonly GMP_URL="http://ftp.gnu.org/gnu/gmp/gmp-4.3.2.tar.bz2" |
+readonly GMP_SHA1SUM="c011e8feaf1bb89158bd55eaabd7ef8fdd101a2c" |
+ |
+readonly MPFR_URL="http://ftp.gnu.org/gnu/mpfr/mpfr-2.4.2.tar.bz2" |
+readonly MPFR_SHA1SUM="7ca93006e38ae6e53a995af836173cf10ee7c18c" |
+ |
+readonly MPC_URL="http://ftp.gnu.org/gnu/mpc/mpc-1.0.1.tar.gz" |
+readonly MPC_SHA1SUM="8c7e19ad0dd9b3b5cc652273403423d6cf0c5edf" |
+ |
readonly GCC_URL="http://ftp.gnu.org/gnu/gcc/gcc-4.7.2/gcc-4.7.2.tar.bz2" |
readonly GCC_SHA1SUM="a464ba0f26eef24c29bcd1e7489421117fb9ee35" |
@@ -98,12 +101,15 @@ CheckoutOrCopy() { |
exit 1 |
fi |
- if [ "${filetype}" == "svn" ]; then |
- SubBanner "checkout from ${url} -> ${filename}" |
- svn --force export -r ${revision} ${url} ${filename} |
- else |
- SubBanner "copying from ${url}" |
- cp ${url} ${filename} |
+ if [ ! -f "${filename}/completed" ]; then |
+ if [ "${filetype}" == "svn" ]; then |
+ SubBanner "checkout from ${url} -> ${filename}" |
+ svn --force export -r ${revision} ${url} ${filename} |
+ else |
+ SubBanner "copying from ${url}" |
+ cp ${url} ${filename} |
+ fi |
+ touch ${filename}/completed |
fi |
} |
@@ -175,7 +181,7 @@ SanityCheck() { |
exit -1 |
fi |
- for tool in cleanlinks wget ; do |
+ for tool in wget ; do |
if ! which ${tool} ; then |
echo "Required binary $tool not found." |
echo "Exiting." |
@@ -207,13 +213,41 @@ CreateTarBall() { |
DownloadOrCopyAndInstallToolchain() { |
Banner "Installing toolchain" |
- local tarball="${TMP}/${BINUTILS_URL##*/}" |
- DownloadOrCopyAndVerify ${BINUTILS_URL} ${BINUTILS_SHA1SUM} |
+ tarball="${TMP}/${GCC_URL##*/}" |
+ DownloadOrCopyAndVerify ${GCC_URL} ${GCC_SHA1SUM} |
SubBanner "extracting from ${tarball}" |
tar jxf ${tarball} -C ${TMP} |
- tarball="${TMP}/${GCC_URL##*/}" |
- DownloadOrCopyAndVerify ${GCC_URL} ${GCC_SHA1SUM} |
+ pushd ${TMP}/gcc-* |
+ |
+ local tarball="${TMP}/${GMP_URL##*/}" |
+ DownloadOrCopyAndVerify ${GMP_URL} ${GMP_SHA1SUM} |
+ SubBanner "extracting from ${tarball}" |
+ tar jxf ${tarball} |
+ local filename=`ls | grep gmp\-` |
+ rm -f gmp |
+ ln -s ${filename} gmp |
+ |
+ local tarball="${TMP}/${MPFR_URL##*/}" |
+ DownloadOrCopyAndVerify ${MPFR_URL} ${MPFR_SHA1SUM} |
+ SubBanner "extracting from ${tarball}" |
+ tar jxf ${tarball} |
+ local filename=`ls | grep mpfr\-` |
+ rm -f mpfr |
+ ln -s ${filename} mpfr |
+ |
+ local tarball="${TMP}/${MPC_URL##*/}" |
+ DownloadOrCopyAndVerify ${MPC_URL} ${MPC_SHA1SUM} |
+ SubBanner "extracting from ${tarball}" |
+ tar zxf ${tarball} |
+ local filename=`ls | grep mpc\-` |
+ rm -f mpc |
+ ln -s ${filename} mpc |
+ |
+ popd |
+ |
+ local tarball="${TMP}/${BINUTILS_URL##*/}" |
+ DownloadOrCopyAndVerify ${BINUTILS_URL} ${BINUTILS_SHA1SUM} |
SubBanner "extracting from ${tarball}" |
tar jxf ${tarball} -C ${TMP} |
@@ -248,6 +282,7 @@ DownloadOrCopyAndInstallToolchain() { |
Banner "Building binutils" |
+ rm -rf ${BUILD_DIR}/binutils/ |
mkdir -p ${BUILD_DIR}/binutils/ |
pushd ${BUILD_DIR}/binutils/ |
@@ -268,6 +303,7 @@ DownloadOrCopyAndInstallToolchain() { |
Banner "Building GCC (initial)" |
+ rm -rf ${BUILD_DIR}/gcc/initial |
mkdir -p ${BUILD_DIR}/gcc/initial |
pushd ${BUILD_DIR}/gcc/initial |
@@ -309,6 +345,8 @@ DownloadOrCopyAndInstallToolchain() { |
Banner "Building EGLIBC (initial)" |
mkdir -p ${JAIL_MIPS32}/usr/lib |
+ |
+ rm -rf ${BUILD_DIR}/eglibc/initial |
mkdir -p ${BUILD_DIR}/eglibc/initial |
pushd ${BUILD_DIR}/eglibc/initial |
@@ -346,6 +384,7 @@ DownloadOrCopyAndInstallToolchain() { |
Banner "Building GCC (intermediate)" |
+ rm -rf ${BUILD_DIR}/gcc/intermediate |
mkdir -p ${BUILD_DIR}/gcc/intermediate |
pushd ${BUILD_DIR}/gcc/intermediate |
@@ -377,6 +416,7 @@ DownloadOrCopyAndInstallToolchain() { |
Banner "Building EGLIBC (final)" |
+ rm -rf ${BUILD_DIR}/eglibc/final |
mkdir -p ${BUILD_DIR}/eglibc/final |
pushd ${BUILD_DIR}/eglibc/final |
@@ -406,6 +446,7 @@ DownloadOrCopyAndInstallToolchain() { |
Banner "Building GCC (final)" |
+ rm -rf ${BUILD_DIR}/gcc/final |
mkdir -p ${BUILD_DIR}/gcc/final |
pushd ${BUILD_DIR}/gcc/final |
@@ -435,6 +476,7 @@ DownloadOrCopyAndInstallToolchain() { |
Banner "Building GDB" |
+ rm -rf ${BUILD_DIR}/gdb/ |
mkdir -p ${BUILD_DIR}/gdb/ |
pushd ${BUILD_DIR}/gdb/ |
@@ -472,18 +514,19 @@ InstallTrustedLinkerScript() { |
# ---------------------------------------------------------------------- |
readonly REPO_DEBIAN=http://ftp.debian.org/debian |
-readonly MIPS32_PACKAGES=${REPO_DEBIAN}/dists/squeeze/main/binary-mipsel/Packages.bz2 |
+readonly MIPS32_PACKAGES=${REPO_DEBIAN}/dists/wheezy/main/binary-mipsel/Packages.bz2 |
-readonly BASE_PACKAGELIST_MIPS32=${SCRIPT_DIR}/packagelist.squeeze.mipsel.base |
-readonly EXTRA_PACKAGELIST_MIPS32=${SCRIPT_DIR}/packagelist.squeeze.mipsel.extra |
-readonly TMP_BASE_PKG_MIPS32=${TMP}/packagelist.generated.squeeze.mipsel.base |
-readonly TMP_EXTRA_PKG_MIPS32=${TMP}/packagelist.generated.squeeze.mipsel.extra |
+readonly BASE_PACKAGELIST_MIPS32=${SCRIPT_DIR}/packagelist.wheezy.mipsel.base |
+readonly EXTRA_PACKAGELIST_MIPS32=${SCRIPT_DIR}/packagelist.wheezy.mipsel.extra |
+readonly TMP_BASE_PKG_MIPS32=${TMP}/packagelist.generated.wheezy.mipsel.base |
+readonly TMP_EXTRA_PKG_MIPS32=${TMP}/packagelist.generated.wheezy.mipsel.extra |
GeneratePackageLists() { |
local sdk_target=$1 |
local packages= |
local TMP_PACKAGELIST= |
Banner "generating ${sdk_target} package lists for mips32" |
+ rm -f ${TMP}/Packages.bz2 |
DownloadOrCopy ${MIPS32_PACKAGES} |
bzcat ${TMP}/Packages.bz2\ |
| egrep '^(Package:|Filename:)' > ${TMP}/Packages_mipsel |
@@ -528,56 +571,78 @@ InstallMissingLibraries() { |
dpkg --fsys-tarfile ${package}\ |
| tar -xvf - --exclude=./usr/share -C ${JAIL_MIPS32} |
done |
- |
- Banner "some cleanup" |
- |
- pushd ${JAIL_MIPS32}/usr/lib/ |
- cleanlinks > /dev/null 2> /dev/null |
- FixLibs |
- popd |
} |
-FixLibs() { |
- Banner "Fixing libraries" |
- |
- rm -f libbz2.so |
- ln -s ../../lib/libbz2.so.1 libbz2.so |
- |
- rm -f libm.so |
- ln -s ../../lib/libm.so.6 libm.so |
- |
- rm -f libdl.so |
- ln -s ../../lib/libdl.so.2 libdl.so |
- |
- rm -f librt.so |
- ln -s ../../lib/librt.so.1 librt.so |
+# Workaround for missing headers since pkg-config is not working correctly. |
+FixIncludes() { |
+ Banner "Fixing includes" |
+ pushd ${JAIL_MIPS32}/usr/include/glib-2.0 |
+ ln -s ../../lib/glib-2.0/include/glibconfig.h . |
+ popd |
- rm -f libpcre.so |
- ln -s ../../lib/libpcre.so.3 libpcre.so |
+ pushd ${JAIL_MIPS32}/usr/include/gtk-2.0 |
+ ln -s ../../lib/gtk-2.0/include/gdkconfig.h . |
+ popd |
- rm -f libresolv.so |
- ln -s ../../lib/libresolv.so.2 libresolv.so |
+ pushd ${JAIL_MIPS32}/usr/include/dbus-1.0/dbus |
+ ln -s ../../../lib/dbus-1.0/include/dbus/dbus-arch-deps.h . |
+ popd |
+} |
- rm -f libglib-2.0.so |
- ln -s ../../lib/libglib-2.0.so.0 libglib-2.0.so |
+FixLinks() { |
+ Banner "Fixing links" |
+ pushd ${JAIL_MIPS32}/lib/ |
+ mv mipsel-linux-gnu/* . |
+ rm -rf mipsel-linux-gnu |
+ ln -s . mipsel-linux-gnu |
+ popd |
- rm -f libudev.so |
- ln -s ../../lib/libudev.so.0 libudev.so |
+ pushd ${JAIL_MIPS32}/usr/lib/ |
+ mkdir -p pkgconfig |
+ mv mipsel-linux-gnu/pkgconfig/* pkgconfig/ |
+ rm -rf mipsel-linux-gnu/pkgconfig |
+ mv mipsel-linux-gnu/* . |
+ rm -rf mipsel-linux-gnu |
+ ln -s . mipsel-linux-gnu |
+ popd |
- rm -f libcom_err.so |
- ln -s ../../lib/libcom_err.so.2 libcom_err.so |
+ pushd ${JAIL_MIPS32}/usr/lib/ |
+ rm -f libstdc++.so* |
+ ln -s ../../../mipsel-linux-gnu/lib/libstdc++.so.6.0.17 . |
+ ln -s libstdc++.so.6.0.17 libstdc++.so.6 |
+ ln -s libstdc++.so.6.0.17 libstdc++.so |
+ |
+ rm -f libgcc_s.so* |
+ ln -s ../../../mipsel-linux-gnu/lib/libgcc_s.so.1 . |
+ ln -s libgcc_s.so.1 libgcc_s.so |
+ popd |
+} |
- rm -f libXdmcp.so |
- ln -s ../../lib/libXdmcp.so.6 libXdmcp.so |
+FixLibs() { |
+ Banner "Fixing libraries" |
- rm -f libstdc++.so* |
- ln -s ../../../mipsel-linux-gnu/lib/libstdc++.so.6.0.17 . |
- ln -s libstdc++.so.6.0.17 libstdc++.so.6 |
- ln -s libstdc++.so.6.0.17 libstdc++.so |
+ readonly liblist="libbz2.so \ |
+ libcom_err.so \ |
+ libdbus-1.so \ |
+ libexpat.so \ |
+ libglib-2.0.so \ |
+ libgpg-error.so \ |
+ libkeyutils.so \ |
+ libpamc.so \ |
+ libpam_misc.so \ |
+ libpam.so \ |
+ libpci.so \ |
+ libpcre.so \ |
+ libpng12.so \ |
+ libudev.so \ |
+ libz.so" |
- rm -f libgcc_s.so* |
- ln -s ../../../mipsel-linux-gnu/lib/libgcc_s.so.1 . |
- ln -s libgcc_s.so.1 libgcc_s.so |
+ pushd ${JAIL_MIPS32}/usr/lib/ |
+ for library in ${liblist}; do |
+ rm -f ${library} |
+ ln -s ../../lib/${library}.[0123] ${library} |
+ done |
+ popd |
} |
BuildAndInstallQemu() { |
@@ -615,8 +680,7 @@ BuildAndInstallQemu() { |
--disable-bsd-user \ |
--target-list=mipsel-linux-user \ |
--disable-sdl \ |
- --disable-linux-aio \ |
- --static |
+ --disable-linux-aio |
SubBanner "Make" |
env -i PATH=/usr/bin/:/bin \ |
@@ -647,11 +711,14 @@ elif [[ $1 == "nacl_sdk" || $1 == "chrome_sdk" ]] ; then |
DownloadOrCopyAndInstallToolchain |
GeneratePackageLists $1 |
InstallMissingLibraries $1 |
+ FixLinks |
if [[ $1 == "nacl_sdk" ]] ; then |
InstallTrustedLinkerScript |
BuildAndInstallQemu |
CreateTarBall $1 |
else |
+ FixLibs |
+ FixIncludes |
CreateTarBall ${CROSS_TARBALL} |
fi |