Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(266)

Unified Diff: tools/trusted_cross_toolchains/trusted-toolchain-creator.mipsel.squeeze.sh

Issue 10703143: [MIPS] Toolchain scripts for MIPS architecture. (Closed) Base URL: http://src.chromium.org/native_client/trunk/src/native_client/
Patch Set: Minor update. Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tools/trusted_cross_toolchains/qemu_tool_mips32.sh ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/trusted_cross_toolchains/trusted-toolchain-creator.mipsel.squeeze.sh
diff --git a/tools/trusted_cross_toolchains/trusted-toolchain-creator.mipsel.squeeze.sh b/tools/trusted_cross_toolchains/trusted-toolchain-creator.mipsel.squeeze.sh
new file mode 100755
index 0000000000000000000000000000000000000000..5f96de16e970b745f51871f7051ee31809b7de90
--- /dev/null
+++ b/tools/trusted_cross_toolchains/trusted-toolchain-creator.mipsel.squeeze.sh
@@ -0,0 +1,347 @@
+#!/bin/bash
+# Copyright 2012 The Native Client Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can
+# be found in the LICENSE file.
+#
+#@ This script creates the mips trusted SDK.
+#@ It must be run from the native_client directory.
+
+######################################################################
+# Config
+######################################################################
+
+set -o nounset
+set -o errexit
+
+readonly CS_URL=https://sourcery.mentor.com/sgpp/lite/mips/portal/package9761/public/mips-linux-gnu/mips-2011.09-75-mips-linux-gnu-i686-pc-linux-gnu.tar.bz2
+
+readonly DOWNLOAD_QEMU_URL="http://download.savannah.gnu.org/releases/qemu/qemu-0.12.5.tar.gz"
+
+readonly INSTALL_ROOT=$(pwd)/toolchain/linux_mips-trusted
+
+readonly TMP=$(pwd)/toolchain/tmp/crosstool-trusted
+
+readonly PATCH_MIPS32=$(readlink -f ../third_party/qemu/qemu-0.12.5.patch_mips)
+
+readonly CS_ROOT=${INSTALL_ROOT}/mips-release
+
+readonly JAIL_MIPS32=${CS_ROOT}/mips-linux-gnu/libc/el
+
+readonly MAKE_OPTS="-j8"
+# These are simple compiler wrappers to force 32bit builds
+readonly CC32=$(readlink -f pnacl/scripts/mygcc32)
+readonly CXX32=$(readlink -f pnacl/scripts/myg++32)
+######################################################################
+# Helper
+######################################################################
+
+Banner() {
+ echo "######################################################################"
+ echo $*
+ echo "######################################################################"
+}
+
+SubBanner() {
+ echo "......................................................................"
+ echo $*
+ echo "...................................................................."
+}
+
+Usage() {
+ echo
+ echo "$0 trusted_sdk"
+ echo
+ echo "trusted_sdk - Build everything and package it"
+ echo
+}
+
+DownloadOrCopy() {
+ if [[ -f "$2" ]] ; then
+ echo "$2 already in place"
+ elif [[ $1 =~ 'http://' || $1 =~ 'https://' ]] ; then
+ SubBanner "downloading from $1 -> $2"
+ wget $1 -O $2
+ else
+ SubBanner "copying from $1"
+ cp $1 $2
+ fi
+}
+
+######################################################################
+#
+######################################################################
+
+# some sanity checks to make sure this script is run from the right place
+# with the right tools
+SanityCheck() {
+ Banner "Sanity Checks"
+ if [[ $(basename $(pwd)) != "native_client" ]] ; then
+ echo "ERROR: run this script from the native_client/ dir"
+ exit -1
+ fi
+
+ if ! mkdir -p "${INSTALL_ROOT}" ; then
+ echo "ERROR: ${INSTALL_ROOT} can't be created."
+ exit -1
+ fi
+
+ for tool in cleanlinks wget ; do
+ if ! which ${tool} ; then
+ echo "Required binary $tool not found."
+ echo "Exiting."
+ exit 1
+ fi
+ done
+}
+
+
+ClearInstallDir() {
+ Banner "clearing dirs in ${INSTALL_ROOT}"
+ rm -rf ${INSTALL_ROOT}/*
+}
+
+
+CreateTarBall() {
+ local tarball=$1
+ Banner "creating tar ball ${tarball}"
+ tar cfz ${tarball}-mips.tgz -C ${INSTALL_ROOT} .
+}
+
+
+# try to keep the tarball small
+PruneDirs() {
+ Banner "pruning code sourcery tree"
+ SubBanner "Size before: $(du -msc ${CS_ROOT})"
+ rm -rf ${CS_ROOT}/share
+ rm -rf ${CS_ROOT}/mips-linux-gnu/lib/uclibc
+ rm -rf ${CS_ROOT}/mips-linux-gnu/lib/soft-float
+ rm -rf ${CS_ROOT}/mips-linux-gnu/lib/micromips
+
+ rm -rf ${CS_ROOT}/mips-linux-gnu/libc/uclibc
+ rm -rf ${CS_ROOT}/mips-linux-gnu/libc/soft-float
+ rm -rf ${CS_ROOT}/mips-linux-gnu/libc/micromips
+
+ rm -rf ${CS_ROOT}/lib/gcc/mips-linux-gnu/4.4.1/uclibc
+ rm -rf ${CS_ROOT}/lib/gcc/mips-linux-gnu/4.4.1/soft-float
+ rm -rf ${CS_ROOT}/lib/gcc/mips-linux-gnu/4.4.1/micromips
+
+ rm -rf ${CS_ROOT}/mips-linux-gnu/include/c++/4.4.1/mips-linux-gnu/uclibc
+ rm -rf ${CS_ROOT}/mips-linux-gnu/include/c++/4.4.1/mips-linux-gnu/soft-float
+ rm -rf ${CS_ROOT}/mips-linux-gnu/include/c++/4.4.1/mips-linux-gnu/micromips
+
+ SubBanner "Size after: $(du -msc ${CS_ROOT})"
+}
+
+
+# Download the codesourcery tarball or use a local copy when available.
+DownloadOrCopyAndInstallCodeSourceryTarball() {
+ Banner "Installing Codesourcery Toolchain"
+ local tarball="${TMP}/${CS_URL##*/}"
+ DownloadOrCopy ${CS_URL} ${tarball}
+
+ SubBanner "Untaring ${INSTALL_ROOT}/${tarball}"
+ tar jxf ${tarball} -C ${INSTALL_ROOT}
+
+ pushd ${INSTALL_ROOT}
+ mv mips-* mips-release
+ popd
+}
+
+
+InstallTrustedLinkerScript() {
+ local trusted_ld_script=${INSTALL_ROOT}/ld_script_mips_trusted
+ # We are using the output of "ld --verbose" which contains
+ # the linker script delimited by "=========".
+ # We are changing the image start address to 70000000
+ # to move the sel_ldr and other images "out of the way"
+ Banner "installing trusted linker script to ${trusted_ld_script}"
+
+ ${CS_ROOT}/bin/mips-linux-gnu-ld --verbose |\
+ grep -A 10000 "=======" |\
+ grep -v "=======" |\
+ sed -e 's/0400000/70000000/g' > ${trusted_ld_script}
+}
+
+
+InstallMissingHeaders() {
+ Banner "installing openssl headers from local system"
+ cp -r /usr/include/openssl ${JAIL_MIPS32}/usr/include/
+}
+
+
+MissingSharedLibCleanup() {
+ Banner "Cleanup dangling symlinks"
+}
+
+# ----------------------------------------------------------------------
+# mips32 deb files to complete our code sourcery jail
+# ----------------------------------------------------------------------
+
+readonly REPO_DEBIAN=http://ftp.debian.org/debian
+readonly MIPS32_PACKAGES=${REPO_DEBIAN}/dists/squeeze/main/binary-mipsel/Packages.bz2
+
+readonly TMP_PACKAGELIST_MIPS32=${TMP}/../packagelist_mipsel.tmp
+
+# These are good enough for native client
+readonly BASE_PACKAGES="\
+ libssl0.9.8 \
+ libssl-dev \
+ libx11-6 \
+ libx11-dev \
+ x11proto-core-dev \
+ libxt6 \
+ libxt-dev \
+ zlib1g \
+ zlib1g-dev \
+ libasound2 \
+ libasound2-dev \
+ libaa1 \
+ libaa1-dev \
+ libxau-dev \
+ libxau6 \
+ libxcb1 \
+ libxcb1-dev \
+ libxcb-render0 \
+ libxcb-render0-dev \
+ libxcb-render-util0 \
+ libxcb-render-util0-dev \
+ libxcb-shm0 \
+ libxcb-shm0-dev \
+ libxdmcp6 \
+ libxdmcp-dev \
+ libxss1 \
+ libxss-dev"
+
+GeneratePackageLists() {
+ Banner "generating package lists for mips32"
+ echo -n > ${TMP_PACKAGELIST_MIPS32}
+ DownloadOrCopy ${MIPS32_PACKAGES} ${TMP}/../Packages_mipsel.bz2
+ bzcat ${TMP}/../Packages_mipsel.bz2\
+ | egrep '^(Package:|Filename:)' > ${TMP}/../Packages_mipsel
+ for pkg in ${BASE_PACKAGES} ; do
+ grep -A 1 "${pkg}\$" ${TMP}/../Packages_mipsel\
+ | egrep -o "pool/.*" >> ${TMP_PACKAGELIST_MIPS32}
+ done
+}
+
+InstallMissingLibraries() {
+ readonly DEP_FILES_NEEDED_MIPS32=$(cat ${TMP_PACKAGELIST_MIPS32})
+ for file in ${DEP_FILES_NEEDED_MIPS32} ; do
+ local package="${TMP}/${file##*/}"
+ Banner "installing ${file}"
+ DownloadOrCopy ${REPO_DEBIAN}/${file} ${package}
+ SubBanner "extracting to ${JAIL_MIPS32}"
+ 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
+
+ rm -f libpcre.so
+ ln -s ../../lib/libpcre.so.3 libpcre.so
+
+ rm -f libresolv.so
+ ln -s ../../lib/libresolv.so.2 libresolv.so
+
+ echo "OUTPUT_FORMAT(elf32-tradlittlemips)" > libc.so
+ echo "GROUP ( libc.so.6 libc_nonshared.a AS_NEEDED ( ld.so.1 ) )" >> libc.so
+
+ echo "OUTPUT_FORMAT(elf32-tradlittlemips)" > libpthread.so
+ echo "GROUP ( libpthread.so.0 libpthread_nonshared.a )" >> libpthread.so
+}
+
+BuildAndInstallQemu() {
+ local saved_dir=$(pwd)
+ local tmpdir="${TMP}/qemu-mips.nacl"
+ local tarball="qemu-0.12.5.tar.gz"
+ Banner "Building qemu in ${tmpdir}"
+ rm -rf ${tmpdir}
+ mkdir ${tmpdir}
+ cd ${tmpdir}
+ SubBanner "Downloading"
+ wget -c ${DOWNLOAD_QEMU_URL}
+ SubBanner "Untaring"
+ tar zxf ${tarball}
+ cd qemu-0.12.5
+ SubBanner "Patching"
+ patch -p1 < ${PATCH_MIPS32}
+
+ echo
+ echo "NOTE: on 64 bit systems you will need to the following 32bit libs:"
+ echo "lib32z1-dev"
+ echo
+
+ SubBanner "Configuring"
+ env -i PATH=/usr/bin/:/bin \
+ ./configure \
+ --cc=${CC32} \
+ --disable-system \
+ --enable-linux-user \
+ --disable-darwin-user \
+ --disable-bsd-user \
+ --target-list=mipsel-linux-user \
+ --disable-sdl \
+ --disable-linux-aio \
+ --static
+
+ SubBanner "Make"
+ env -i PATH=/usr/bin/:/bin \
+ make MAKE_OPTS=${MAKE_OPTS}
+
+ SubBanner "Install"
+ cp mipsel-linux-user/qemu-mipsel ${INSTALL_ROOT}/qemu-mips32
+ cd ${saved_dir}
+ cp tools/trusted_cross_toolchains/qemu_tool_mips32.sh ${INSTALL_ROOT}
+ ln -sf qemu_tool_mips32.sh ${INSTALL_ROOT}/run_under_qemu_mips32
+}
+######################################################################
+# Main
+######################################################################
+
+if [[ $# -eq 0 ]] ; then
+ echo "you must specify a mode on the commandline:"
+ echo
+ Usage
+ exit -1
+
+elif [[ $1 == "trusted_sdk" ]]; then
+ mkdir -p ${TMP}
+ SanityCheck
+ ClearInstallDir
+ DownloadOrCopyAndInstallCodeSourceryTarball
+ PruneDirs
+ GeneratePackageLists
+ InstallMissingHeaders
+ InstallMissingLibraries
+ MissingSharedLibCleanup
+ InstallTrustedLinkerScript
+ BuildAndInstallQemu
+ CreateTarBall $1
+
+else
+ Usage
+ exit -1
+
+fi
+
« no previous file with comments | « tools/trusted_cross_toolchains/qemu_tool_mips32.sh ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698