Permalink
Browse files

added a build script for building v8 against our patch / the NDK, and…

… bundling

into a tarball for use by titanium_mobile. created a script for
reversing our patch, and updating v8 to the latest on trunk
  • Loading branch information...
1 parent 3ec4104 commit c8b09b2f2ad897803a1cf2d074f31ba259f49638 @marshall marshall committed Sep 10, 2011
Showing with 187 additions and 0 deletions.
  1. +1 −0 .gitignore
  2. +144 −0 build_v8.sh
  3. +26 −0 patches/ndk_v8.patch
  4. +16 −0 update_v8.sh
View
@@ -0,0 +1 @@
+build
View
@@ -0,0 +1,144 @@
+#!/bin/sh
+#
+# Appcelerator Titanium Mobile
+# Copyright (c) 2011 by Appcelerator, Inc. All Rights Reserved.
+# Licensed under the terms of the Apache Public License
+# Please see the LICENSE included with this distribution for details.
+#
+# Build and bundling script for v8 / NDK toolchain
+
+# set this to the where the NDK is installed
+
+usage()
+{
+cat <<EOF
+Usage: $0 options
+
+This script builds v8 against the Android NDK.
+Options:
+ -h Show this help message and exit
+ -n <ndk_dir> The path to the Android NDK. Alternatively, you may set the ANDROID_NDK environment variable
+ -j <num-cpus> The number of processors to use in building (passed on to scons)
+ -m <mode> The v8 build mode (release, debug. default: release)
+ -t Build a thirdparty tarball for uploading
+EOF
+}
+
+NUM_CPUS=1
+MODE=release
+while getopts "htn:j:m:" OPTION; do
+ case $OPTION in
+ h)
+ usage
+ exit
+ ;;
+ n)
+ NDK_DIR=$OPTARG
+ ;;
+ m)
+ MODE=$OPTARG
+ ;;
+ j)
+ NUM_CPUS=$OPTARG
+ ;;
+ t)
+ THIRDPARTY=1
+ ;;
+ ?)
+ usage
+ exit
+ ;;
+ esac
+done
+
+if [ "$NDK_DIR" = "" ]; then
+ NDK_DIR=$ANDROID_NDK
+fi
+
+if [ "$NDK_DIR" = "" ]; then
+ echo "Error: No Android NDK directory was specified, supply '-n </path/to/ndk>' or set ANDROID_NDK"
+ usage
+ exit 1
+fi
+
+echo "Building against Android NDK: $NDK_DIR"
+
+THIS_DIR=$(cd "$(dirname "$0")"; pwd)
+BUILD_DIR=$THIS_DIR/build
+
+if [ ! -d "$BUILD_DIR" ]; then
+ mkdir $BUILD_DIR
+fi
+
+V8_DIR=$THIS_DIR/v8
+TOOLCHAIN_DIR=$BUILD_DIR/ndk_toolchain
+PLATFORM_VERSION=android-8
+
+buildToolchain()
+{
+ # remove the previous toolchain
+ rm -rf ${TOOLCHAIN_DIR}
+
+ # create stand alone toolchain
+ ${NDK_DIR}/build/tools/make-standalone-toolchain.sh --platform=${PLATFORM_VERSION} --ndk-dir=${NDK_DIR} --install-dir=${TOOLCHAIN_DIR}
+}
+
+applyPatch()
+{
+ # we assume that errors are just an existing applied patch, so we remove rejects..
+ patch -p0 -N -i patches/ndk_v8.patch || find v8 -name '*.rej' -exec rm \{\} \;
+}
+
+buildV8()
+{
+ AR=${TOOLCHAIN_DIR}/bin/arm-linux-androideabi-ar
+ CXX="${TOOLCHAIN_DIR}/bin/arm-linux-androideabi-g++ -DANDROID=1 -D__STDC_INT64__=1"
+ RANLIB=${TOOLCHAIN_DIR}/bin/arm-linux-androideabi-ranlib
+
+ cd ${V8_DIR}
+ AR=${AR} CXX=${CXX} RANLIB=${RANLIB} \
+ scons -j $NUM_CPUS mode=$MODE snapshot=off library=static arch=arm os=linux
+}
+
+buildThirdparty()
+{
+ # Copied from v8/tools/push-to-trunk.sh
+ VERSION_FILE=$V8_DIR/src/version.cc
+ MAJOR=$(grep "#define MAJOR_VERSION" "$VERSION_FILE" | awk '{print $NF}')
+ MINOR=$(grep "#define MINOR_VERSION" "$VERSION_FILE" | awk '{print $NF}')
+ BUILD=$(grep "#define BUILD_NUMBER" "$VERSION_FILE" | awk '{print $NF}')
+
+ V8_VERSION="$MAJOR.$MINOR.$BUILD"
+ cd $V8_DIR
+ V8_GIT_REVISION=$(git rev-parse HEAD)
+ V8_GIT_BRANCH=$(git status -s -b | grep \#\# | sed 's/\#\# //')
+ V8_SVN_REVISION=$(git log -n 1 | grep git-svn-id | perl -ne 's/\s+git-svn-id: [^@]+@([^\s]+) .+/\1/; print')
+
+ DATE=$(date '+%Y-%m-%d %H:%M:%S')
+cat <<EOF > $BUILD_DIR/libv8.json
+{
+ "version": "$V8_VERSION",
+ "git_revision": "$V8_GIT_REVISION",
+ "git_branch": "$V8_GIT_BRANCH",
+ "svn_revision": "$V8_SVN_REVISION",
+ "timestamp": "$DATE"
+}
+EOF
+
+ cp $V8_DIR/libv8.a $BUILD_DIR
+ cd $BUILD_DIR
+
+ echo "Building libv8-$V8_VERSION.tar.bz2..."
+ tar -cvj -f libv8-$V8_VERSION.tar.bz2 libv8.json libv8.a
+}
+
+if [ ! -d "$TOOLCHAIN_DIR" ]; then
+ buildToolchain
+fi
+
+applyPatch
+buildV8
+
+if [ "$THIRDPARTY" = "1" ]; then
+ buildThirdparty
+fi
View
@@ -0,0 +1,26 @@
+unchanged:
+--- v8_orig/src/platform-linux.cc 2011-09-09 19:48:25.536842403 -0500
++++ v8/src/platform-linux.cc 2011-09-09 14:05:42.845135548 -0500
+@@ -1085,7 +1085,7 @@
+ if (result != 0 && errno != EINTR) {
+ fprintf(stderr,
+ "SignalSender usleep error; interval = %u, errno = %d\n",
+- interval,
++ (unsigned int)interval,
+ errno);
+ ASSERT(result == 0 || errno == EINTR);
+ }
+only in patch2:
+unchanged:
+--- v8_orig/src/platform-posix.cc 2011-09-09 19:48:25.540842403 -0500
++++ v8/src/platform-posix.cc 2011-09-09 19:55:02.772842683 -0500
+@@ -48,7 +48,8 @@
+
+ #if defined(ANDROID)
+ #define LOG_TAG "v8"
+-#include <utils/Log.h> // LOG_PRI_VA
++#include <android/log.h>
++#define LOG_PRI_VA __android_log_print
+ #endif
+
+ #include "v8.h"
View
@@ -0,0 +1,16 @@
+#!/bin/sh
+#
+# Appcelerator Titanium Mobile
+# Copyright (c) 2011 by Appcelerator, Inc. All Rights Reserved.
+# Licensed under the terms of the Apache Public License
+# Please see the LICENSE included with this distribution for details.
+#
+# Reverse our patches, and update (and index) the v8 submodule to the latest from trunk
+
+patch -p0 --reverse -i patches/ndk_v8.patch
+
+cd v8
+git pull
+
+cd ..
+git add v8

0 comments on commit c8b09b2

Please sign in to comment.