summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--native_client_sdk/src/build_tools/nacl-mono-builder.py57
-rwxr-xr-xnative_client_sdk/src/build_tools/nacl-mono-runtime.sh88
-rwxr-xr-xnative_client_sdk/src/build_tools/nacl_interp_loader_mono.sh52
3 files changed, 170 insertions, 27 deletions
diff --git a/native_client_sdk/src/build_tools/nacl-mono-builder.py b/native_client_sdk/src/build_tools/nacl-mono-builder.py
index 7087afb..f7774e5c 100644
--- a/native_client_sdk/src/build_tools/nacl-mono-builder.py
+++ b/native_client_sdk/src/build_tools/nacl-mono-builder.py
@@ -10,6 +10,9 @@ import tarfile
import buildbot_common
+SDK_BUILD_DIR = buildbot_common.SCRIPT_DIR
+MONO_BUILD_DIR = os.path.join(SDK_BUILD_DIR, 'mono_build')
+MONO_DIR = os.path.join(MONO_BUILD_DIR, 'nacl-mono')
def main(args):
parser = optparse.OptionParser()
@@ -29,9 +32,8 @@ def main(args):
buildbot_revision = os.environ.get('BUILDBOT_REVISION', '')
buildbot_common.BuildStep('Clean Old SDK')
- buildbot_common.MakeDir('mono_build')
- os.chdir('mono_build')
- buildbot_common.RemoveDir('pepper_*')
+ buildbot_common.MakeDir(MONO_BUILD_DIR)
+ buildbot_common.RemoveDir(os.path.join(MONO_BUILD_DIR, 'pepper_*'))
buildbot_common.BuildStep('Setup New SDK')
sdk_dir = None
@@ -41,13 +43,14 @@ def main(args):
sdk_revision = buildbot_revision.split(':')[0]
url = 'gs://nativeclient-mirror/nacl/nacl_sdk/'\
'trunk.%s/naclsdk_linux.bz2' % sdk_revision
- buildbot_common.Run([buildbot_common.GetGsutil(), 'cp', url, '.'])
+ buildbot_common.Run([buildbot_common.GetGsutil(), 'cp', url, '.'],
+ cwd=MONO_BUILD_DIR)
tar_file = None
try:
- tar_file = tarfile.open('naclsdk_linux.bz2')
+ tar_file = tarfile.open(os.path.join(MONO_BUILD_DIR, 'naclsdk_linux.bz2'))
pepper_dir = os.path.commonprefix(tar_file.getnames())
- tar_file.extractall()
- sdk_dir = os.path.join(os.getcwd(), pepper_dir)
+ tar_file.extractall(path=MONO_BUILD_DIR)
+ sdk_dir = os.path.join(MONO_BUILD_DIR, pepper_dir)
finally:
if tar_file:
tar_file.close()
@@ -61,18 +64,16 @@ def main(args):
# TODO(elijahtaylor): Get git URL from master/trigger to make this
# more flexible for building from upstream and release branches.
git_url = 'git://github.com/elijahtaylor/mono.git'
- git_dir = 'nacl-mono'
git_rev = None
if buildbot_revision:
git_rev = buildbot_revision.split(':')[1]
- if not os.path.exists(git_dir):
- buildbot_common.Run(['git', 'clone', git_url, git_dir])
- os.chdir(git_dir)
+ if not os.path.exists(MONO_DIR):
+ buildbot_common.MakeDir(MONO_DIR)
+ buildbot_common.Run(['git', 'clone', git_url, MONO_DIR])
else:
- os.chdir(git_dir)
- buildbot_common.Run(['git', 'fetch'])
+ buildbot_common.Run(['git', 'fetch'], cwd=MONO_DIR)
if git_rev:
- buildbot_common.Run(['git', 'checkout', git_rev])
+ buildbot_common.Run(['git', 'checkout', git_rev], cwd=MONO_DIR)
arch_to_bitsize = {'x86-32': '32',
'x86-64': '64'}
@@ -84,30 +85,32 @@ def main(args):
buildbot_common.BuildStep('Configure Mono')
os.environ['NACL_SDK_ROOT'] = sdk_dir
os.environ['TARGET_BITSIZE'] = arch_to_bitsize[options.arch]
- buildbot_common.Run(['./autogen.sh'])
- buildbot_common.Run(['make', 'distclean'])
+ buildbot_common.Run(['./autogen.sh'], cwd=MONO_DIR)
+ buildbot_common.Run(['make', 'distclean'], cwd=MONO_DIR)
- buildbot_common.BuildStep('Build/Install Mono')
- # TODO(elijahtaylor): This script only exists in my fork.
- # This script should live in the SDK's build_tools/
- os.chdir('nacl')
+ buildbot_common.BuildStep('Build and Install Mono')
buildbot_common.RemoveDir(arch_to_install_folder[options.arch])
- nacl_interp_script = os.path.join(os.getcwd(), 'nacl_interp_loader_sdk.sh')
+ nacl_interp_script = os.path.join(SDK_BUILD_DIR, 'nacl_interp_loader_mono.sh')
os.environ['NACL_INTERP_LOADER'] = nacl_interp_script
- buildbot_common.Run(['./nacl-runtime-mono.sh'])
+ buildbot_common.Run(['./nacl-mono-runtime.sh',
+ MONO_DIR, # Mono directory with 'configure'
+ arch_to_output_folder[options.arch], # Build dir
+ arch_to_install_folder[options.arch]],
+ cwd=SDK_BUILD_DIR)
buildbot_common.BuildStep('Test Mono')
- os.chdir(arch_to_output_folder[options.arch])
- buildbot_common.Run(['make', 'check', '-j8'])
- os.chdir('..')
+ buildbot_common.Run(['make', 'check', '-j8'],
+ cwd=os.path.join(SDK_BUILD_DIR, arch_to_output_folder[options.arch]))
buildbot_common.BuildStep('Archive Build')
tar_file = None
- tar_path = arch_to_install_folder[options.arch] + '.bz2'
+ tar_path = os.path.join(SDK_BUILD_DIR,
+ arch_to_install_folder[options.arch] + '.bz2')
buildbot_common.RemoveFile(tar_path)
try:
tar_file = tarfile.open(tar_path, mode='w:bz2')
- tar_file.add(arch_to_install_folder[options.arch])
+ tar_file.add(os.path.join(SDK_BUILD_DIR,
+ arch_to_install_folder[options.arch]))
finally:
if tar_file:
tar_file.close()
diff --git a/native_client_sdk/src/build_tools/nacl-mono-runtime.sh b/native_client_sdk/src/build_tools/nacl-mono-runtime.sh
new file mode 100755
index 0000000..7e156795
--- /dev/null
+++ b/native_client_sdk/src/build_tools/nacl-mono-runtime.sh
@@ -0,0 +1,88 @@
+#!/bin/bash
+# Copyright (c) 2012 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+set -o nounset
+set -o errexit
+
+if [[ $# -ne 3 ]]; then
+ echo "Usage: $0 [path_to_mono] [build_dir] [install_dir]"
+ exit -1
+fi
+
+readonly MONO_DIR=$(readlink -f $1)
+readonly BUILD_DIR=$(readlink -f $2)
+readonly INSTALL_DIR=$(readlink -f $3)
+readonly ORIGINAL_CWD=$(pwd)
+
+set +e
+if [ -f ${BUILD_DIR}/Makefile ]; then
+ cd ${BUILD_DIR}
+ make distclean
+fi
+set -e
+cd $ORIGINAL_CWD
+
+if [ $TARGET_BITSIZE == "32" ]; then
+ readonly NACL_CROSS_PREFIX_DASH=i686-nacl-
+ readonly CONFIG_OPTS="--host=i686-pc-linux-gnu \
+ --build=i686-pc-linux-gnu \
+ --target=i686-pc-linux-gnu"
+else
+ readonly NACL_CROSS_PREFIX_DASH=x86_64-nacl-
+ readonly CONFIG_OPTS="--host=x86_64-pc-linux-gnu \
+ --build=x86_64-pc-linux-gnu \
+ --target=x86_64-pc-linux-gnu"
+ fi
+
+# UGLY hack to allow dynamic linking
+sed -i -e s/elf_i386/elf_nacl/ -e s/elf_x86_64/elf64_nacl/ \
+ ${MONO_DIR}/configure
+sed -i -e s/elf_i386/elf_nacl/ -e s/elf_x86_64/elf64_nacl/ \
+ ${MONO_DIR}/libgc/configure
+sed -i -e s/elf_i386/elf_nacl/ -e s/elf_x86_64/elf64_nacl/ \
+ ${MONO_DIR}/eglib/configure
+
+rm -rf ${BUILD_DIR}
+mkdir -p ${BUILD_DIR}
+cd ${BUILD_DIR}
+
+rm -rf ${INSTALL_DIR}
+mkdir -p ${INSTALL_DIR}
+
+readonly NACL_BIN_PATH=${NACL_SDK_ROOT}/toolchain/linux_x86_glibc/bin
+readonly NACLCC=${NACL_BIN_PATH}/${NACL_CROSS_PREFIX_DASH}gcc
+readonly NACLCXX=${NACL_BIN_PATH}/${NACL_CROSS_PREFIX_DASH}g++
+readonly NACLAR=${NACL_BIN_PATH}/${NACL_CROSS_PREFIX_DASH}ar
+readonly NACLRANLIB=${NACL_BIN_PATH}/${NACL_CROSS_PREFIX_DASH}ranlib
+readonly NACLLD=${NACL_BIN_PATH}/${NACL_CROSS_PREFIX_DASH}ld
+
+CC=${NACLCC} CXX=${NACLCXX} AR=${NACLAR} RANLIB=${NACLRANLIB} LD=${NACLLD} \
+PKG_CONFIG_LIBDIR= \
+PATH=${NACL_BIN_PATH}:${PATH} \
+LIBS="-lnacl_dyncode -lc -lg -lnosys -lnacl" \
+CFLAGS="-g -O2 -D_POSIX_PATH_MAX=256 -DPATH_MAX=256" \
+${MONO_DIR}/configure ${CONFIG_OPTS} \
+ --exec-prefix=${INSTALL_DIR} \
+ --libdir=${INSTALL_DIR}/lib \
+ --prefix=${INSTALL_DIR} \
+ --program-prefix="" \
+ --oldincludedir=${INSTALL_DIR}/include \
+ --with-glib=embedded \
+ --with-tls=pthread \
+ --enable-threads=posix \
+ --without-sigaltstack \
+ --without-mmap \
+ --with-gc=included \
+ --enable-nacl-gc \
+ --with-sgen=no \
+ --enable-nls=no \
+ --enable-nacl-codegen \
+ --disable-system-aot \
+ --enable-shared \
+ --disable-parallel-mark \
+ --with-static-mono=no
+
+make
+make install
diff --git a/native_client_sdk/src/build_tools/nacl_interp_loader_mono.sh b/native_client_sdk/src/build_tools/nacl_interp_loader_mono.sh
new file mode 100755
index 0000000..2f0256e
--- /dev/null
+++ b/native_client_sdk/src/build_tools/nacl_interp_loader_mono.sh
@@ -0,0 +1,52 @@
+#!/bin/bash
+# Copyright (c) 2012 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+#
+# Usage: nacl_interp_loader.sh PLATFORM NEXE ARGS...
+
+case "$1" in
+i?86)
+ arch=x86_32
+ libdir=lib32
+ ;;
+x86_64)
+ arch=x86_64
+ libdir=lib64
+ ;;
+arm|v7l)
+ arch=arm
+ libdir=lib32
+ ;;
+*)
+ echo >&2 "$0: Do not recognize architecture \"$1\""
+ exit 127
+ ;;
+esac
+
+shift
+
+case "${NACL_SDK_ROOT}" in
+*pepper_15* | *pepper_16* | *pepper_17*)
+ SEL_LDR="$NACL_SDK_ROOT/toolchain/linux_x86/bin/sel_ldr_${arch}"
+ IRT="$NACL_SDK_ROOT/toolchain/linux_x86/runtime/irt_core_${arch}.nexe"
+ RTLD="$NACL_SDK_ROOT/toolchain/linux_x86/x86_64-nacl/${libdir}/runnable-ld.so"
+ LIBDIR="$NACL_SDK_ROOT/toolchain/linux_x86/x86_64-nacl/${libdir}"
+ ;;
+*)
+ SEL_LDR="$NACL_SDK_ROOT/tools/sel_ldr_${arch}"
+ IRT="$NACL_SDK_ROOT/tools/irt_core_${arch}.nexe"
+ RTLD="$NACL_SDK_ROOT/toolchain/linux_x86_glibc/x86_64-nacl/${libdir}/runnable-ld.so"
+ LIBDIR="$NACL_SDK_ROOT/toolchain/linux_x86_glibc/x86_64-nacl/${libdir}"
+ ;;
+esac
+
+IGNORE_VALIDATOR_ARG=""
+if [ x"$NACL_IGNORE_VALIDATOR" == x"1" ]; then
+ IGNORE_VALIDATOR_ARG="-c"
+fi
+
+exec "$SEL_LDR" -E "NACL_PWD=`pwd`" -E "MONO_PATH=$MONO_PATH" \
+ -E "MONO_CFG_DIR=$MONO_CFG_DIR" -E "MONO_SHARED_DIR=$MONO_SHARED_DIR" \
+ -a $IGNORE_VALIDATOR_ARG -S -B "$IRT" -l /dev/null -- "$RTLD" \
+ --library-path $LIBDIR "$@"