Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 #!/bin/bash | |
| 2 # Copyright 2012 The Native Client Authors. All rights reserved. | |
| 3 # Use of this source code is governed by a BSD-style license that can | |
| 4 # be found in the LICENSE file. | |
| 5 # | |
| 6 #@ This script creates the mips trusted SDK. | |
| 7 #@ It must be run from the native_client directory. | |
| 8 | |
| 9 ###################################################################### | |
| 10 # Config | |
| 11 ###################################################################### | |
| 12 | |
| 13 set -o nounset | |
| 14 set -o errexit | |
| 15 | |
| 16 readonly CS_URL=https://sourcery.mentor.com/sgpp/lite/mips/portal/package9761/pu blic/mips-linux-gnu/mips-2011.09-75-mips-linux-gnu-i686-pc-linux-gnu.tar.bz2 | |
| 17 | |
| 18 export INSTALL_ROOT=$(pwd)/toolchain/linux_mips-trusted | |
| 19 | |
| 20 export TMP=$(pwd)/toolchain/tmp/crosstool-trusted | |
|
robertm
2012/08/03 20:06:10
do these have to be "export"
can they be "readonly
| |
| 21 | |
| 22 export CS_ROOT=${INSTALL_ROOT}/mips-release | |
| 23 | |
| 24 readonly JAIL_MIPS32=${CS_ROOT}/mips-linux-gnu/libc/el | |
| 25 | |
| 26 readonly MAKE_OPTS="-j8" | |
| 27 # These are simple compiler wrappers to force 32bit builds | |
| 28 readonly CC32=$(readlink -f pnacl/scripts/mygcc32) | |
| 29 readonly CXX32=$(readlink -f pnacl/scripts/myg++32) | |
| 30 ###################################################################### | |
| 31 # Helper | |
| 32 ###################################################################### | |
| 33 | |
| 34 Banner() { | |
| 35 echo "######################################################################" | |
| 36 echo $* | |
| 37 echo "######################################################################" | |
| 38 } | |
| 39 | |
| 40 SubBanner() { | |
| 41 echo "......................................................................" | |
| 42 echo $* | |
| 43 echo "...................................................................." | |
| 44 } | |
| 45 | |
| 46 Usage() { | |
| 47 echo | |
| 48 echo "$0 trusted_sdk" | |
| 49 echo | |
| 50 echo "trusted_sdk - Build everything and package it" | |
| 51 echo | |
| 52 } | |
| 53 | |
| 54 DownloadOrCopy() { | |
| 55 if [[ -f "$2" ]] ; then | |
| 56 echo "$2 already in place" | |
| 57 elif [[ $1 =~ 'http://' || $1 =~ 'https://' ]] ; then | |
| 58 SubBanner "downloading from $1 -> $2" | |
| 59 wget $1 -O $2 | |
| 60 else | |
| 61 SubBanner "copying from $1" | |
| 62 cp $1 $2 | |
| 63 fi | |
| 64 } | |
| 65 | |
| 66 ###################################################################### | |
| 67 # | |
| 68 ###################################################################### | |
| 69 | |
| 70 # some sanity checks to make sure this script is run from the right place | |
| 71 # with the right tools | |
| 72 SanityCheck() { | |
| 73 Banner "Sanity Checks" | |
| 74 if [[ $(basename $(pwd)) != "native_client" ]] ; then | |
| 75 echo "ERROR: run this script from the native_client/ dir" | |
| 76 exit -1 | |
| 77 fi | |
| 78 | |
| 79 if ! mkdir -p "${INSTALL_ROOT}" ; then | |
| 80 echo "ERROR: ${INSTALL_ROOT} can't be created." | |
| 81 exit -1 | |
| 82 fi | |
| 83 | |
| 84 for tool in cleanlinks wget ; do | |
| 85 if ! which ${tool} ; then | |
| 86 echo "Required binary $tool not found." | |
| 87 echo "Exiting." | |
| 88 exit 1 | |
| 89 fi | |
| 90 done | |
| 91 } | |
| 92 | |
| 93 | |
| 94 ClearInstallDir() { | |
| 95 Banner "clearing dirs in ${INSTALL_ROOT}" | |
| 96 rm -rf ${INSTALL_ROOT}/* | |
| 97 } | |
| 98 | |
| 99 | |
| 100 CreateTarBall() { | |
| 101 local tarball=$1 | |
| 102 Banner "creating tar ball ${tarball}" | |
| 103 tar cfz ${tarball}-mips.tgz -C ${INSTALL_ROOT} . | |
| 104 } | |
| 105 | |
| 106 | |
| 107 # try to keep the tarball small | |
| 108 PruneDirs() { | |
| 109 Banner "pruning code sourcery tree" | |
| 110 SubBanner "Size before: $(du -msc ${CS_ROOT})" | |
| 111 rm -rf ${CS_ROOT}/share | |
| 112 rm -rf ${CS_ROOT}/mips-linux-gnu/lib/uclibc | |
| 113 rm -rf ${CS_ROOT}/mips-linux-gnu/lib/soft-float | |
| 114 rm -rf ${CS_ROOT}/mips-linux-gnu/lib/micromips | |
| 115 | |
| 116 rm -rf ${CS_ROOT}/mips-linux-gnu/libc/uclibc | |
| 117 rm -rf ${CS_ROOT}/mips-linux-gnu/libc/soft-float | |
| 118 rm -rf ${CS_ROOT}/mips-linux-gnu/libc/micromips | |
| 119 | |
| 120 rm -rf ${CS_ROOT}/lib/gcc/mips-linux-gnu/4.4.1/uclibc | |
| 121 rm -rf ${CS_ROOT}/lib/gcc/mips-linux-gnu/4.4.1/soft-float | |
| 122 rm -rf ${CS_ROOT}/lib/gcc/mips-linux-gnu/4.4.1/micromips | |
| 123 | |
| 124 rm -rf ${CS_ROOT}/mips-linux-gnu/include/c++/4.4.1/mips-linux-gnu/uclibc | |
| 125 rm -rf ${CS_ROOT}/mips-linux-gnu/include/c++/4.4.1/mips-linux-gnu/soft-float | |
| 126 rm -rf ${CS_ROOT}/mips-linux-gnu/include/c++/4.4.1/mips-linux-gnu/micromips | |
| 127 | |
| 128 SubBanner "Size after: $(du -msc ${CS_ROOT})" | |
| 129 } | |
| 130 | |
| 131 | |
| 132 # Download the codesourcery tarball or use a local copy when available. | |
| 133 DownloadOrCopyAndInstallCodeSourceryTarball() { | |
| 134 Banner "Installing Codesourcery Toolchain" | |
| 135 local tarball="${TMP}/${CS_URL##*/}" | |
| 136 DownloadOrCopy ${CS_URL} ${tarball} | |
| 137 | |
| 138 SubBanner "Untaring ${INSTALL_ROOT}/${tarball}" | |
| 139 tar jxf ${tarball} -C ${INSTALL_ROOT} | |
| 140 | |
| 141 save=$(pwd) | |
|
robertm
2012/08/03 20:06:10
use pushd/ popd
| |
| 142 cd ${INSTALL_ROOT} | |
| 143 mv mips-* mips-release | |
| 144 cd ${save} | |
| 145 } | |
| 146 | |
| 147 | |
| 148 InstallTrustedLinkerScript() { | |
| 149 local trusted_ld_script=${INSTALL_ROOT}/ld_script_mips_trusted | |
| 150 # We are using the output of "ld --verbose" which contains | |
| 151 # the linker script delimited by "=========". | |
| 152 # We are changing the image start address to 70000000 | |
| 153 # to move the sel_ldr and other images "out of the way" | |
| 154 Banner "installing trusted linker script to ${trusted_ld_script}" | |
| 155 | |
| 156 ${CS_ROOT}/bin/mips-linux-gnu-ld --verbose |\ | |
| 157 grep -A 10000 "=======" |\ | |
| 158 grep -v "=======" |\ | |
| 159 sed -e 's/0400000/70000000/g' > ${trusted_ld_script} | |
| 160 } | |
| 161 | |
| 162 | |
| 163 InstallMissingHeaders() { | |
| 164 Banner "installing openssl headers from local system" | |
| 165 cp -r /usr/include/openssl ${JAIL_MIPS32}/usr/include/ | |
| 166 } | |
| 167 | |
| 168 | |
| 169 MissingSharedLibCleanup() { | |
| 170 Banner "Cleanup dangling symlinks" | |
| 171 } | |
| 172 | |
| 173 # ---------------------------------------------------------------------- | |
| 174 # mips32 deb files to complete our code sourcery jail | |
| 175 # ---------------------------------------------------------------------- | |
| 176 | |
| 177 readonly REPO=http://ftp.debian.org/debian | |
|
robertm
2012/08/03 20:06:10
REPO is very generic - can this be made more speci
| |
| 178 readonly MIPS32_PACKAGES=${REPO}/dists/squeeze/main/binary-mipsel/Packages.bz2 | |
| 179 | |
| 180 readonly TMP_PACKAGELIST_MIPS32=${TMP}/../packagelist_mipsel.tmp | |
| 181 | |
| 182 # These are good enough for native client | |
| 183 readonly BASE_PACKAGES="\ | |
| 184 libssl0.9.8 \ | |
| 185 libssl-dev \ | |
| 186 libx11-6 \ | |
| 187 libx11-dev \ | |
| 188 x11proto-core-dev \ | |
| 189 libxt6 \ | |
| 190 libxt-dev \ | |
| 191 zlib1g \ | |
| 192 zlib1g-dev \ | |
| 193 libasound2 \ | |
| 194 libasound2-dev \ | |
| 195 libaa1 \ | |
| 196 libaa1-dev \ | |
| 197 libxau-dev \ | |
| 198 libxau6 \ | |
| 199 libxcb1 \ | |
| 200 libxcb1-dev \ | |
| 201 libxcb-render0 \ | |
| 202 libxcb-render0-dev \ | |
| 203 libxcb-render-util0 \ | |
| 204 libxcb-render-util0-dev \ | |
| 205 libxcb-shm0 \ | |
| 206 libxcb-shm0-dev \ | |
| 207 libxdmcp6 \ | |
| 208 libxdmcp-dev \ | |
| 209 libxss1 \ | |
| 210 libxss-dev" | |
| 211 | |
| 212 GeneratePackageLists() { | |
| 213 Banner "generating package lists for mips32" | |
| 214 echo -n > ${TMP_PACKAGELIST_MIPS32} | |
| 215 DownloadOrCopy ${MIPS32_PACKAGES} ${TMP}/../Packages_mipsel.bz2 | |
| 216 bzcat ${TMP}/../Packages_mipsel.bz2 | egrep '^(Package:|Filename:)' > ${TMP}/. ./Packages_mipsel | |
| 217 for pkg in ${BASE_PACKAGES} ; do | |
| 218 grep -A 1 "${pkg}\$" ${TMP}/../Packages_mipsel | egrep -o "pool/.*" >> ${TM P_PACKAGELIST_MIPS32} | |
| 219 done | |
| 220 } | |
| 221 | |
| 222 InstallMissingLibraries() { | |
| 223 readonly DEP_FILES_NEEDED_MIPS32=$(cat ${TMP_PACKAGELIST_MIPS32}) | |
| 224 for file in ${DEP_FILES_NEEDED_MIPS32} ; do | |
| 225 local package="${TMP}/${file##*/}" | |
| 226 Banner "installing ${file}" | |
| 227 DownloadOrCopy ${REPO}/${file} ${package} | |
| 228 SubBanner "extracting to ${JAIL_MIPS32}" | |
| 229 dpkg --fsys-tarfile ${package}\ | |
| 230 | tar -xvf - --exclude=./usr/share -C ${JAIL_MIPS32} | |
| 231 done | |
| 232 | |
| 233 Banner "some cleanup" | |
| 234 | |
| 235 save=$(pwd) | |
|
robertm
2012/08/03 20:06:10
use pushd / popd
| |
| 236 cd ${JAIL_MIPS32}/usr/lib/ | |
| 237 cleanlinks > /dev/null 2> /dev/null | |
| 238 FixLibs | |
| 239 cd ${save} | |
| 240 } | |
| 241 | |
| 242 FixLibs() { | |
| 243 Banner "Fixing libraries" | |
| 244 | |
| 245 rm -f libbz2.so | |
| 246 ln -s ../../lib/libbz2.so.1 libbz2.so | |
| 247 | |
| 248 rm -f libm.so | |
| 249 ln -s ../../lib/libm.so.6 libm.so | |
| 250 | |
| 251 rm -f libdl.so | |
| 252 ln -s ../../lib/libdl.so.2 libdl.so | |
| 253 | |
| 254 rm -f librt.so | |
| 255 ln -s ../../lib/librt.so.1 librt.so | |
| 256 | |
| 257 rm -f libpcre.so | |
| 258 ln -s ../../lib/libpcre.so.3 libpcre.so | |
| 259 | |
| 260 rm -f libresolv.so | |
| 261 ln -s ../../lib/libresolv.so.2 libresolv.so | |
| 262 | |
| 263 echo "OUTPUT_FORMAT(elf32-tradlittlemips)" > libc.so | |
| 264 echo "GROUP ( libc.so.6 libc_nonshared.a AS_NEEDED ( ld.so.1 ) )" >> libc.so | |
| 265 | |
| 266 echo "OUTPUT_FORMAT(elf32-tradlittlemips)" > libpthread.so | |
| 267 echo "GROUP ( libpthread.so.0 libpthread_nonshared.a )" >> libpthread.so | |
| 268 } | |
| 269 | |
| 270 BuildAndInstallQemu() { | |
| 271 local saved_dir=$(pwd) | |
| 272 local tmpdir="${TMP}/qemu-mips.nacl" | |
| 273 local patch_mips32=$(readlink -f ../third_party/qemu/qemu-0.12.5-mips.patch) | |
| 274 local tarball="qemu-0.12.5.tar.gz" | |
| 275 local download="http://download.savannah.gnu.org/releases/qemu/qemu-0.12.5.tar .gz" | |
|
robertm
2012/08/03 20:06:10
make download and patch_mips32 toplevel readonlys
| |
| 276 Banner "Building qemu in ${tmpdir}" | |
| 277 rm -rf ${tmpdir} | |
| 278 mkdir ${tmpdir} | |
| 279 cd ${tmpdir} | |
| 280 SubBanner "Downloading" | |
| 281 wget -c ${download} | |
| 282 SubBanner "Untaring" | |
| 283 tar zxf ${tarball} | |
| 284 cd qemu-0.12.5 | |
| 285 SubBanner "Patching" | |
| 286 patch -p1 < ${patch_mips32} | |
| 287 | |
| 288 echo | |
| 289 echo "NOTE: on 64 bit systems you will need to the following 32bit libs:" | |
| 290 echo "lib32z1-dev" | |
| 291 echo | |
| 292 | |
| 293 SubBanner "Configuring" | |
| 294 env -i PATH=/usr/bin/:/bin \ | |
| 295 ./configure \ | |
| 296 --cc=${CC32} \ | |
| 297 --disable-system \ | |
| 298 --enable-linux-user \ | |
| 299 --disable-darwin-user \ | |
| 300 --disable-bsd-user \ | |
| 301 --target-list=mipsel-linux-user \ | |
| 302 --disable-sdl \ | |
| 303 --disable-linux-aio \ | |
| 304 --static | |
| 305 | |
| 306 SubBanner "Make" | |
| 307 env -i PATH=/usr/bin/:/bin \ | |
| 308 make MAKE_OPTS=${MAKE_OPTS} | |
| 309 | |
| 310 SubBanner "Install" | |
| 311 cp mipsel-linux-user/qemu-mipsel ${INSTALL_ROOT}/qemu-mips32 | |
| 312 cd ${saved_dir} | |
| 313 cp tools/trusted_cross_toolchains/qemu_tool_mips32.sh ${INSTALL_ROOT} | |
| 314 ln -sf qemu_tool_mips32.sh ${INSTALL_ROOT}/run_under_qemu_mips32 | |
| 315 } | |
| 316 ###################################################################### | |
| 317 # Main | |
| 318 ###################################################################### | |
| 319 | |
| 320 if [[ $# -eq 0 ]] ; then | |
| 321 echo "you must specify a mode on the commandline:" | |
| 322 echo | |
| 323 Usage | |
| 324 exit -1 | |
| 325 | |
| 326 elif [[ $1 == "trusted_sdk" ]]; then | |
| 327 mkdir -p ${TMP} | |
| 328 SanityCheck | |
| 329 ClearInstallDir | |
| 330 DownloadOrCopyAndInstallCodeSourceryTarball | |
| 331 PruneDirs | |
| 332 GeneratePackageLists | |
| 333 InstallMissingHeaders | |
| 334 InstallMissingLibraries | |
| 335 MissingSharedLibCleanup | |
| 336 InstallTrustedLinkerScript | |
| 337 BuildAndInstallQemu | |
| 338 CreateTarBall $1 | |
| 339 | |
| 340 else | |
| 341 Usage | |
| 342 exit -1 | |
| 343 | |
| 344 fi | |
| 345 | |
| OLD | NEW |