blob: 6942fea07c3ecc4bc8b61b7cc485d15e0a158543 [file] [log] [blame]
#!/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.
# This script builds the packages that will be bundled with the NaCl SDK.
set -o errexit
set -o nounset
SCRIPT_DIR="$(cd $(dirname $0) && pwd)"
source ${SCRIPT_DIR}/buildbot_common.sh
NACLPORTS_ROOT="$(cd ${SCRIPT_DIR}/.. && pwd)"
OUT_DIR=${NACLPORTS_ROOT}/out
PACKAGE_DIR=${OUT_DIR}/packages
OUT_BUNDLE_DIR=${OUT_DIR}/sdk_bundle
OUT_PORTS_DIR=${OUT_BUNDLE_DIR}/${PEPPER_DIR}/ports
ARCH_LIST="i686 x86_64 arm pnacl"
CleanAllToolchains() {
echo "@@@BUILD_STEP clean all@@@"
for TC in pnacl newlib glibc; do
CleanToolchain ${TC}
done
}
cd ${NACLPORTS_ROOT}
# Don't do a full clean of naclports when we're testing the buildbot scripts
# locally.
if [ -z "${TEST_BUILDBOT:-}" ]; then
CleanAllToolchains
fi
# Don't build lua with readline support. We don't want to include
# readline and ncurses in the SDK.
export LUA_NO_READLINE=1
PACKAGES=$(make sdklibs_list)
# Build a package in both Debug and Release configurations.
# $1 - name of package
# $2 - arch to build for
# $3 - toolchain ('glibc', 'newlib', 'pnacl')
CustomBuildPackage() {
PACKAGE=$1
export NACL_ARCH=$2
export TOOLCHAIN=$3
NACL_DEBUG=0 BuildPackage "${PACKAGE}" --no-deps
NACL_DEBUG=1 BuildPackage "${PACKAGE}" --no-deps
}
# Build a package for all architectures.
# $1 - name of package
# $2 - arch to build for
BuildPackageArchAll() {
local PACKAGE=$1
local NACL_ARCH=$2
if [ "${ARCH}" = "pnacl" ]; then
CustomBuildPackage "${PACKAGE}" "${NACL_ARCH}" pnacl
else
CustomBuildPackage "${PACKAGE}" "${NACL_ARCH}" newlib
if [ "${ARCH}" != "arm" ]; then
CustomBuildPackage "${PACKAGE}" "${NACL_ARCH}" glibc
fi
fi
}
# $1 - name of package
BuildPackageAll() {
local PACKAGE=$1
echo "@@@BUILD_STEP ${PACKAGE}@@@"
for ARCH in ${ARCH_LIST}; do
BuildPackageArchAll "${PACKAGE}" "${ARCH}"
done
if [[ ${RESULT} != 0 ]] ; then
echo "naclports Build FAILED ${PACKAGE}"
else
echo "naclports Build SUCCEEDED ${PACKAGE}"
fi
}
MoveLibs() {
local PACKAGE=$1
for ARCH in ${ARCH_LIST}; do
ARCH_PKG=${ARCH}
ARCH_DIR=${ARCH}
if [ "${ARCH}" = "i686" ]; then
ARCH_DIR=x86_32
fi
if [ "${ARCH}" = "x86_64" ]; then
ARCH_PKG="x86-64"
fi
if [ "${ARCH}" = "arm" -o "${ARCH}" = "pnacl" ]; then
LIBC_VARIANTS="newlib"
else
LIBC_VARIANTS="newlib glibc"
fi
TMP_DIR=out/tmp
for LIBC in ${LIBC_VARIANTS}; do
for CONFIG in Debug Release; do
PKG_SUFFIX="_${ARCH_PKG}"
if [ "${ARCH}" != "pnacl" ]; then
PKG_SUFFIX+="_${LIBC}"
fi
if [ "${CONFIG}" = "Debug" ]; then
PKG_SUFFIX+="_debug"
fi
PKG_SUFFIX+=".tar.bz2"
PKG_MATCH="${PACKAGE_DIR}/${PACKAGE}_*${PKG_SUFFIX}"
PKG_FILE=$(shopt -s nullglob; echo ${PKG_MATCH})
if [ -z "${PKG_FILE}" ]; then
echo "Missing package file: ${PKG_MATCH}"
exit 1
fi
rm -rf "${TMP_DIR}"
mkdir "${TMP_DIR}"
tar xf "${PKG_FILE}" -C "${TMP_DIR}"
# Copy build results to destination directories.
# copy includes
mkdir -p "${OUT_PORTS_DIR}"
SRC_DIR="${TMP_DIR}"/payload
cp -d -r "${SRC_DIR}"/include "${OUT_PORTS_DIR}"
# copy libs
ARCH_LIB_DIR="${OUT_PORTS_DIR}/lib/${LIBC}_${ARCH_DIR}/${CONFIG}"
mkdir -p "${ARCH_LIB_DIR}"
for FILE in ${SRC_DIR}/lib/* ; do
EXT="${FILE##*.}"
if [[ ( -f "${FILE}" || -L "${FILE}" ) && "${EXT}" != "la" ]]; then
cp -d -r "${FILE}" "${ARCH_LIB_DIR}"
fi
done
done
done
done
}
for package in ${PACKAGES}; do
BuildPackageAll "${package}"
done
echo "@@@BUILD_STEP copy to bundle@@@"
for package in ${PACKAGES}; do
MoveLibs "${package}"
done
if [ -z "${NACLPORTS_NO_UPLOAD:-}" ]; then
echo "@@@BUILD_STEP create archive@@@"
RunCmd tar -C "${OUT_BUNDLE_DIR}" "${PEPPER_DIR}" -jcf naclports.tar.bz2
echo "@@@BUILD_STEP upload archive@@@"
RunCmd ${GSUTIL} cp -a public-read naclports.tar.bz2 gs://${UPLOAD_PATH}/
URL="https://storage.googleapis.com/${UPLOAD_PATH}/naclports.tar.bz2"
echo "@@@STEP_LINK@download@${URL}@@@"
fi
echo "@@@BUILD_STEP summary@@@"
if [[ ${RESULT} != 0 ]] ; then
echo "@@@STEP_FAILURE@@@"
echo -e "${MESSAGES}"
fi
exit "${RESULT}"