#!/bin/bash # Copyright (c) 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. # Script assumed to be run in native_client/ if [[ ${PWD} != */native_client ]]; then echo "ERROR: must be run in native_client!" exit 1 fi set -x set -e set -u # Transitionally, even though our new toolchain location is under # toolchain/linux_x86/nacl_x86_glibc we have to keep the old format # inside of the tar (toolchain/linux_x86) so that the untar toolchain script # is backwards compatible and can untar old tars. Eventually this will be # unnecessary with the new package_version scheme since how to untar the # tar file will be embedded inside of the package file so they can differ # between revisions. export TOOLCHAINLOC=toolchain export TOOLCHAINNAME=linux_x86 # This is where we want the toolchain when moving to native_client/toolchain. OUT_TOOLCHAINLOC=toolchain/linux_x86 OUT_TOOLCHAINNAME=nacl_x86_glibc CORE_SDK=core_sdk CORE_SDK_WORK=core_sdk_work TOOL_TOOLCHAIN="${TOOLCHAINLOC}/${TOOLCHAINNAME}" OUT_TOOLCHAIN="${OUT_TOOLCHAINLOC}/${OUT_TOOLCHAINNAME}" echo @@@BUILD_STEP gclient_runhooks@@@ gclient runhooks --force echo @@@BUILD_STEP clobber_toolchain@@@ rm -rf scons-out tools/SRC/*.patch* tools/BUILD/* tools/out tools/toolchain \ tools/glibc tools/glibc.tar tools/toolchain.t* "${OUT_TOOLCHAIN}" \ tools/${CORE_SDK} tools/${CORE_SDK_WORK} .tmp || echo already_clean echo @@@BUILD_STEP clean_sources@@@ tools/update_all_repos_to_latest.sh if [[ "${BUILDBOT_SLAVE_TYPE:-Trybot}" == "Trybot" ]]; then echo @@@BUILD_STEP setup source@@@ (cd tools; ./buildbot_patch-toolchain-tries.sh) fi echo @@@BUILD_STEP compile_toolchain@@@ ( cd tools make -j8 buildbot-build-with-glibc if [[ "${BUILDBOT_SLAVE_TYPE:-Trybot}" != "Trybot" ]]; then make install-glibc INST_GLIBC_PREFIX="$PWD" fi mkdir -p SRC/newlib/newlib/libc/sys/nacl/include cp -aiv ../src/untrusted/pthread/{pthread.h,semaphore.h} \ SRC/newlib/newlib/libc/sys/nacl/include find SRC/newlib/newlib/libc/sys/nacl -name .svn -print0 | xargs -0 rm -rf -- ( cd SRC/newlib/newlib/libc/sys ; git add nacl ) for file in SRC/gcc/gcc/configure.ac SRC/gcc/gcc/configure ; do cp -aiv $file $file.orig sed -e s"|\(CROSS_SYSTEM_HEADER_DIR='\)\(\\\$(gcc_tooldir)/sys-include'\)|\1\$(DESTDIR)\2|" \ < $file.orig > $file touch -r $file.orig $file rm $file.orig ( cd SRC/gcc/gcc ; git add $(basename $file) ) done make patches for patchname in SRC/*.patch ; do xz -k -9 "$patchname" bzip2 -k -9 "$patchname" gzip -9 "$patchname" zcat "$patchname".gz > "$patchname" done mkdir linux cp -aiv {SRC/linux-headers-for-nacl/include/,}linux/getcpu.h cp -aiv {../src/untrusted/include/machine/,}_default_types.h cp -aiv ../LICENSE LICENSE mv Makefile Makefile.orig . REVISIONS sed -e s"|^\\(CANNED_REVISION = \\)no$|\\1$BUILDBOT_GOT_REVISION|" \ -e s'|^\(SRCDIR =\).*$|\1|' \ -e s'|\(GCC_CC = \)gcc -m$(HOST_TOOLCHAIN_BITS)|\1gcc|' \ -e s'|\(GLIBC_CC =.*\)|\1 -I$(abspath $(dir $(THISMAKEFILE)))|' \ -e s'|\(LINUX_HEADERS = \).*|\1/usr/include|' \ -e s"|\\(export NACL_FAKE_SONAME\\).*|\\1 = ${NACL_GLIBC_COMMIT:0:8}|" \ < Makefile.orig > Makefile tar czSvpf nacltoolchain-buildscripts-r${BUILDBOT_GOT_REVISION}.tar.gz \ LICENSE Makefile download_SRC.sh \ _default_types.h linux newlib-libc-script \ create_redirector{,s,s_cygwin}.sh redirector.exe redirect_table.txt \ redirector/redirector{.c,.h} redirector/redirector_table.txt rm Makefile mv Makefile.orig Makefile rm linux/getcpu.h _default_types.h LICENSE rmdir linux ) if [[ "${BUILDBOT_SLAVE_TYPE:-Trybot}" != "Trybot" ]]; then echo @@@BUILD_STEP tar_glibc@@@ ( cd tools cp --archive --sparse=always glibc glibc_sparse rm -rf glibc mv glibc_sparse glibc cd glibc tar zScf ../glibc.tgz ./* chmod a+r ../glibc.tgz ) echo @@@BUILD_STEP archive_glibc@@@ rev="$(tools/glibc_revision.sh)" wget https://gsdview.appspot.com/nativeclient-archive2/between_builders/x86_glibc/r"$rev"/glibc_x86.tar.gz -O /dev/null || $GSUTIL cp -a public-read \ tools/glibc.tgz \ gs://nativeclient-archive2/between_builders/x86_glibc/r"$rev"/glibc_x86.tar.gz echo @@@STEP_LINK@download@http://gsdview.appspot.com/nativeclient-archive2/between_builders/x86_glibc/r"$rev"/@@@ fi ( cd tools echo @@@BUILD_STEP sparsify_toolchain@@@ cp --archive --sparse=always "${TOOL_TOOLCHAIN}" "${TOOL_TOOLCHAIN}_sparse" rm -rf "${TOOL_TOOLCHAIN}" mv "${TOOL_TOOLCHAIN}_sparse" "${TOOL_TOOLCHAIN}" ) echo @@@BUILD_STEP build_core_sdk@@@ # Use scons to generate the SDK headers and libraries. python scons.py --nacl_glibc MODE=nacl naclsdk_validate=0 \ nacl_glibc_dir="tools/${TOOL_TOOLCHAIN}" \ DESTINATION_ROOT="tools/${CORE_SDK_WORK}" \ includedir="tools/${CORE_SDK}/x86_64-nacl/include" \ install_headers python scons.py --nacl_glibc MODE=nacl naclsdk_validate=0 \ platform=x86-32 \ nacl_glibc_dir="tools/${TOOL_TOOLCHAIN}" \ DESTINATION_ROOT="tools/${CORE_SDK_WORK}" \ libdir="tools/${CORE_SDK}/x86_64-nacl/lib32" \ install_lib python scons.py --nacl_glibc MODE=nacl naclsdk_validate=0 \ platform=x86-64 \ nacl_glibc_dir="tools/${TOOL_TOOLCHAIN}" \ DESTINATION_ROOT="tools/${CORE_SDK_WORK}" \ libdir="tools/${CORE_SDK}/x86_64-nacl/lib" \ install_lib if [[ "${BUILDBOT_SLAVE_TYPE:-Trybot}" != "Trybot" ]]; then GSD_BUCKET=nativeclient-archive2 UPLOAD_REV=${BUILDBOT_GOT_REVISION} UPLOAD_LOC=x86_toolchain/r${UPLOAD_REV} else GSD_BUCKET=nativeclient-trybot/packages UPLOAD_REV=${BUILDBOT_BUILDERNAME}/${BUILDBOT_BUILDNUMBER} UPLOAD_LOC=x86_toolchain/${UPLOAD_REV} fi ( cd tools echo @@@BUILD_STEP canonicalize timestamps@@@ ./canonicalize_timestamps.sh "${TOOL_TOOLCHAIN}" ./canonicalize_timestamps.sh "${CORE_SDK}" echo @@@BUILD_STEP tar_toolchain@@@ tar Scf toolchain.tar "${TOOL_TOOLCHAIN}" xz -k -9 toolchain.tar bzip2 -k -9 toolchain.tar gzip -n -9 toolchain.tar echo @@@BUILD_STEP tar_core_sdk@@@ tar Scf core_sdk.tar "${CORE_SDK}" xz -k -9 core_sdk.tar bzip2 -k -9 core_sdk.tar gzip -n -9 core_sdk.tar ) echo @@@BUILD_STEP archive_build@@@ for suffix in gz bz2 xz ; do $GSUTIL cp -a public-read \ tools/toolchain.tar.$suffix \ gs://${GSD_BUCKET}/${UPLOAD_LOC}/toolchain_linux_x86.tar.$suffix $GSUTIL cp -a public-read \ tools/core_sdk.tar.$suffix \ gs://${GSD_BUCKET}/${UPLOAD_LOC}/core_sdk_linux_x86.tar.$suffix done for patch in \ tools/nacltoolchain-buildscripts-r${BUILDBOT_GOT_REVISION}.tar.gz \ tools/SRC/*.patch* ; do filename="${patch#tools/}" filename="${filename#SRC/}" $GSUTIL cp -a public-read \ $patch \ gs://${GSD_BUCKET}/${UPLOAD_LOC}/$filename done echo @@@STEP_LINK@download@http://gsdview.appspot.com/${GSD_BUCKET}/${UPLOAD_LOC}/@@@ echo @@@BUILD_STEP archive_extract_packages@@@ python build/package_version/package_version.py \ archive --archive-package=${TOOLCHAINNAME}/nacl_x86_glibc --extract \ --extra-archive gdb_i686_linux.tgz \ tools/toolchain.tar.bz2,${TOOL_TOOLCHAIN}@https://storage.googleapis.com/${GSD_BUCKET}/${UPLOAD_LOC}/toolchain_linux_x86.tar.bz2 \ tools/core_sdk.tar.bz2,${CORE_SDK}@https://storage.googleapis.com/${GSD_BUCKET}/${UPLOAD_LOC}/core_sdk_linux_x86.tar.bz2 python build/package_version/package_version.py \ archive --archive-package=${TOOLCHAINNAME}/nacl_x86_glibc_raw --extract \ --extra-archive gdb_i686_linux.tgz \ tools/toolchain.tar.bz2,${TOOL_TOOLCHAIN}@https://storage.googleapis.com/${GSD_BUCKET}/${UPLOAD_LOC}/toolchain_linux_x86.tar.bz2 echo @@@BUILD_STEP upload_package_info@@@ python build/package_version/package_version.py \ --cloud-bucket=${GSD_BUCKET} --annotate \ upload --skip-missing \ --upload-package=${TOOLCHAINNAME}/nacl_x86_glibc --revision=${UPLOAD_REV} python build/package_version/package_version.py \ --cloud-bucket=${GSD_BUCKET} --annotate \ upload --skip-missing \ --upload-package=${TOOLCHAINNAME}/nacl_x86_glibc_raw --revision=${UPLOAD_REV} echo @@@BUILD_STEP glibc_tests64@@@ ( cd tools make glibc-check ) # The script should exit nonzero if any test run fails. # But that should not short-circuit the script due to the 'set -e' behavior. exit_status=0 fail() { exit_status=1 return 0 } # Before we start testing, put in dummy mock archives so gyp can still untar # the entire package. python build/package_version/package_version.py fillemptytars \ --fill-package nacl_x86_glibc # First run 32bit tests, then 64bit tests. Both should succeed. export INSIDE_TOOLCHAIN=1 python buildbot/buildbot_standard.py --scons-args='no_gdb_tests=1' \ --step-suffix=' (32)' opt 32 glibc || fail python buildbot/buildbot_standard.py --scons-args='no_gdb_tests=1' \ --step-suffix=' (64)' opt 64 glibc || fail # sync_backports is obsolete and should probably be removed. # if [[ "${BUILD_COMPATIBLE_TOOLCHAINS:-yes}" != "no" ]]; then # echo @@@BUILD_STEP sync backports@@@ # rm -rf tools/BACKPORTS/ppapi* # tools/BACKPORTS/build_backports.sh VERSIONS linux glibc # fi exit $exit_status