Relanding 148377 - [Android] Upstream additional changes from envsetup.

Now requires you to specifically change the GYP_GENERATORS to specify Ninja. The original change broke because gyp ran for both make and ninja and the webkit bot determines whether to use ninja by the presence of build.ninja (thanks to Peter for figuring this out)

BUG=137569,136693


Review URL: https://chromiumcodereview.appspot.com/10827073

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@148790 0039d316-1c4b-4281-b951-d872f2087c98
parent 35f7e539
#!/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.
#
# A collection of functions useful for maintaining android devices
# Run an adb command on all connected device in parallel.
# Usage: adb_all command line to eval. Quoting is optional.
#
# Examples:
# adb_all install Chrome.apk
# adb_all 'shell cat /path/to/file'
#
adb_all() {
if [[ $# == 0 ]]; then
echo "Usage: adb_all <adb command>. Quoting is optional."
echo "Example: adb_all install Chrome.apk"
return 1
fi
local DEVICES=$(adb_blocking_get_devices)
local NUM_DEVICES=$(echo $DEVICES | wc -w)
if (( $NUM_DEVICES > 1 )); then
echo "Looping over $NUM_DEVICES devices"
fi
_adb_multi "$DEVICES" "$*"
}
# Run a command on each connected device. Quoting the command is suggested but
# not required. The script setups up variable DEVICE to correspond to the
# current serial number. Intended for complex one_liners that don't work in
# adb_all
# Usage: adb_device_loop 'command line to eval'
adb_device_loop() {
if [[ $# == 0 ]]; then
echo "Intended for more complex one-liners that cannot be done with" \
"adb_all."
echo 'Usage: adb_device_loop "echo $DEVICE: $(adb root &&' \
'adb shell cat /data/local.prop)"'
return 1
fi
local DEVICES=$(adb_blocking_get_devices)
# Do not change DEVICE variable name - part of api
for DEVICE in $DEVICES; do
DEV_TYPE=$(adb -s $DEVICE shell getprop ro.product.device | sed 's/\r//')
echo "Running on $DEVICE ($DEV_TYPE)"
ANDROID_SERIAL=$DEVICE eval "$*"
done
}
# Erases data from any devices visible on adb. To preserve a device,
# disconnect it or:
# 1) Reboot it into fastboot with 'adb reboot bootloader'
# 2) Run wipe_all_devices to wipe remaining devices
# 3) Restore device it with 'fastboot reboot'
#
# Usage: wipe_all_devices [-f]
#
wipe_all_devices() {
if [[ -z $(which adb) || -z $(which fastboot) ]]; then
echo "aborting: adb and fastboot not in path"
return 1
elif ! $(groups | grep -q 'plugdev'); then
echo "If fastboot fails, run: 'sudo adduser $(whoami) plugdev'"
fi
local DEVICES=$(adb_blocking_get_devices)
if [[ $1 != '-f' ]]; then
echo "This will ERASE ALL DATA from $(echo $DEVICES | wc -w) device."
read -p "Hit enter to continue"
fi
_adb_multi "$DEVICES" "root"
_adb_multi "$DEVICES" "wait-for-device"
_adb_multi "$DEVICES" "reboot bootloader"
for DEVICE in $DEVICES; do
fastboot_erase $DEVICE
done
# Reboot devices together
for DEVICE in $DEVICES; do
fastboot -s $DEVICE reboot
done
}
# Wipe a device in fastboot.
# Usage fastboot_erase [serial]
fastboot_erase() {
if [[ -n $1 ]]; then
echo "Wiping $1"
local SERIAL="-s $1"
else
if [ -z $(fastboot devices) ]; then
echo "No devices in fastboot, aborting."
echo "Check out wipe_all_devices to see if sufficient"
echo "You can put a device in fastboot using adb reboot bootloader"
return 1
fi
local SERIAL=""
fi
fastboot $SERIAL erase cache
fastboot $SERIAL erase userdata
}
# Block until adb detects a device, then return list of serials
adb_blocking_get_devices() {
local DEVICES="$(adb devices | grep 'device$')"
if [[ -z $DEVICES ]]; then
echo '- waiting for device -' >&2
local DEVICES="$(adb wait-for-device devices | grep 'device$')"
fi
echo "$DEVICES" | awk -vORS=' ' '{print $1}' | sed 's/ $/\n/'
}
###################################################
## HELPER FUNCTIONS
###################################################
# Run an adb command in parallel over a device list
_adb_multi() {
local DEVICES=$1
local ADB_ARGS=$2
(
for DEVICE in $DEVICES; do
adb -s $DEVICE $ADB_ARGS &
done
wait
)
}
......@@ -4,31 +4,25 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
# Sets up environment for building Chromium on Android. Only Android NDK,
# Revision 6b on Linux or Mac is offically supported.
#
# To run this script, the system environment ANDROID_NDK_ROOT must be set
# to Android NDK's root path.
#
# TODO(michaelbai): Develop a standard for NDK/SDK integration.
#
# If current path isn't the Chrome's src directory, CHROME_SRC must be set
# to the Chrome's src directory.
if [ ! -d "${ANDROID_NDK_ROOT}" ]; then
echo "ANDROID_NDK_ROOT must be set to the path of Android NDK, Revision 6b." \
>& 2
echo "which could be installed by" >& 2
echo "<chromium_tree>/src/build/install-build-deps-android-sdk.sh" >& 2
return 1
fi
if [ ! -d "${ANDROID_SDK_ROOT}" ]; then
echo "ANDROID_SDK_ROOT must be set to the path of Android SDK, Android 3.2." \
>& 2
echo "which could be installed by" >& 2
echo "<chromium_tree>/src/build/install-build-deps-android-sdk.sh" >& 2
return 1
# Sets up environment for building Chromium on Android. It can either be
# compiled with the Android tree or using the Android SDK/NDK. To build with
# NDK/SDK: ". build/android/envsetup.sh --sdk". Environment variable
# ANDROID_SDK_BUILD=1 will then be defined and used in the rest of the setup to
# specifiy build type.
# NOTE(yfriedman): This looks unnecessary but downstream the default value
# should be 0 until all builds switch to SDK/NDK.
export ANDROID_SDK_BUILD=1
# Loop over args in case we add more arguments in the future.
while [ "$1" != "" ]; do
case $1 in
-s | --sdk ) export ANDROID_SDK_BUILD=1 ; shift ;;
* ) shift ; break ;;
esac
done
if [[ "${ANDROID_SDK_BUILD}" -eq 1 ]]; then
echo "Using SDK build"
fi
host_os=$(uname -s | sed -e 's/Linux/linux/;s/Darwin/mac/')
......@@ -45,53 +39,7 @@ case "${host_os}" in
return 1
esac
# The following defines will affect ARM code generation of both C/C++ compiler
# and V8 mksnapshot.
case "${TARGET_PRODUCT-full}" in
"full")
DEFINES=" target_arch=arm"
DEFINES+=" arm_neon=0 armv7=1 arm_thumb=1 arm_fpu=vfpv3-d16"
toolchain_arch="arm-linux-androideabi-4.4.3"
;;
*x86*)
DEFINES=" target_arch=ia32 use_libffmpeg=0"
toolchain_arch="x86-4.4.3"
;;
*)
echo "TARGET_PRODUCT: ${TARGET_PRODUCT} is not supported." >& 2
return 1
esac
# If we are building NDK/SDK, and in the upstream (open source) tree,
# define a special variable for bringup purposes.
case "${ANDROID_BUILD_TOP-undefined}" in
"undefined")
DEFINES+=" android_upstream_bringup=1"
;;
esac
toolchain_path="${ANDROID_NDK_ROOT}/toolchains/${toolchain_arch}/prebuilt/"
export ANDROID_TOOLCHAIN="${toolchain_path}/${toolchain_dir}/bin/"
if [ ! -d "${ANDROID_TOOLCHAIN}" ]; then
echo "Can not find Android toolchain in ${ANDROID_TOOLCHAIN}." >& 2
echo "The NDK version might be wrong." >& 2
return 1
fi
export ANDROID_SDK_VERSION="15"
# Needed by android antfiles when creating apks.
export ANDROID_SDK_HOME=${ANDROID_SDK_ROOT}
# Add Android SDK/NDK tools to system path.
export PATH=$PATH:${ANDROID_NDK_ROOT}
export PATH=$PATH:${ANDROID_SDK_ROOT}/tools
export PATH=$PATH:${ANDROID_SDK_ROOT}/platform-tools
# Must have tools like arm-linux-androideabi-gcc on the path for ninja
export PATH=$PATH:${ANDROID_TOOLCHAIN}
CURRENT_DIR="$(readlink -f ${PWD})"
CURRENT_DIR="$(readlink -f "$(dirname $BASH_SOURCE)/../../")"
if [ -z "${CHROME_SRC}" ]; then
# If $CHROME_SRC was not set, assume current directory is CHROME_SRC.
export CHROME_SRC="${CURRENT_DIR}"
......@@ -107,14 +55,36 @@ the one you want."
echo "${CHROME_SRC}"
fi
if [ ! -d "${CHROME_SRC}" ]; then
echo "CHROME_SRC must be set to the path of Chrome source code." >& 2
# Source functions script. The file is in the same directory as this script.
. "$(dirname $BASH_SOURCE)"/envsetup_functions.sh
if [ "${ANDROID_SDK_BUILD}" -eq 1 ]; then
sdk_build_init
# Sets up environment for building Chromium for Android with source. Expects
# android environment setup and lunch.
elif [ -z "$ANDROID_BUILD_TOP" -o -z "$ANDROID_TOOLCHAIN" -o \
-z "$ANDROID_PRODUCT_OUT" ]; then
echo "Android build environment variables must be set."
echo "Please cd to the root of your Android tree and do: "
echo " . build/envsetup.sh"
echo " lunch"
echo "Then try this again."
echo "Or did you mean NDK/SDK build. Run envsetup.sh with --sdk argument."
return 1
else
non_sdk_build_init
fi
# Add Chromium Android development scripts to system path.
# Must be after CHROME_SRC is set.
export PATH=$PATH:${CHROME_SRC}/build/android
# Workaround for valgrind build
if [ -n "$CHROME_ANDROID_VALGRIND_BUILD" ]; then
# arm_thumb=0 is a workaround for https://bugs.kde.org/show_bug.cgi?id=270709
DEFINES+=" arm_thumb=0 release_extra_cflags='-fno-inline\
-fno-omit-frame-pointer -fno-builtin' release_valgrind_build=1\
release_optimize=1"
fi
# Source a bunch of helper functions
. ${CHROME_SRC}/build/android/adb_device_functions.sh
ANDROID_GOMA_WRAPPER=""
if [[ -d $GOMA_DIR ]]; then
......@@ -130,38 +100,13 @@ export AR_target=$(basename ${ANDROID_TOOLCHAIN}/*-ar)
# Performs a gyp_chromium run to convert gyp->Makefile for android code.
android_gyp() {
echo "GYP_GENERATORS set to '$GYP_GENERATORS'"
"${CHROME_SRC}/build/gyp_chromium" --depth="${CHROME_SRC}" "$@"
if [[ $GYP_DEFINES =~ "clang=1" ]]; then
echo -n "NOTE: You have \`clang=1' in \$GYP_DEFINES; "
echo "did you mean to run \`android_clang_gyp'?"
fi
"${CHROME_SRC}/build/gyp_chromium" --depth="${CHROME_SRC}" --check "$@"
}
export OBJCOPY=$(echo ${ANDROID_TOOLCHAIN}/*-objcopy)
export STRIP=$(echo ${ANDROID_TOOLCHAIN}/*-strip)
# The set of GYP_DEFINES to pass to gyp. Use 'readlink -e' on directories
# to canonicalize them (remove double '/', remove trailing '/', etc).
DEFINES+=" OS=android"
DEFINES+=" android_build_type=0"
DEFINES+=" host_os=${host_os}"
DEFINES+=" linux_fpic=1"
DEFINES+=" release_optimize=s"
DEFINES+=" linux_use_tcmalloc=0"
DEFINES+=" disable_nacl=1"
DEFINES+=" remoting=0"
DEFINES+=" p2p_apis=0"
DEFINES+=" enable_touch_events=1"
DEFINES+=" build_ffmpegsumo=0"
DEFINES+=" gtest_target_type=shared_library"
DEFINES+=" branding=Chromium"
DEFINES+=\
" android_sdk=${ANDROID_SDK_ROOT}/platforms/android-${ANDROID_SDK_VERSION}"
DEFINES+=" android_sdk_tools=${ANDROID_SDK_ROOT}/platform-tools"
export GYP_DEFINES="${DEFINES}"
# Use the "android" flavor of the Makefile generator for both Linux and OS X.
export GYP_GENERATORS="make-android"
# Use our All target as the default
export GYP_GENERATOR_FLAGS="${GYP_GENERATOR_FLAGS} default_target=All"
# We want to use our version of "all" targets.
export CHROMIUM_GYP_FILE="${CHROME_SRC}/build/all_android.gyp"
# FLOCK needs to be null on system that has no flock
which flock > /dev/null || export FLOCK=
This diff is collapsed.
......@@ -70,6 +70,11 @@
'android_upstream_bringup%': '<(android_upstream_bringup)',
'buildtype%': '<(buildtype)',
# Sets whether we're building with the Android SDK/NDK (and hence with
# Ant, value 0), or as part of the Android system (and hence with the
# Android build system, value 1).
'android_build_type%': 0,
# Compute the architecture that we're building on.
'conditions': [
['OS=="win" or OS=="mac" or OS=="ios"', {
......@@ -130,6 +135,7 @@
'enable_hidpi%': '<(enable_hidpi)',
'enable_touch_ui%': '<(enable_touch_ui)',
'android_upstream_bringup%': '<(android_upstream_bringup)',
'android_build_type%': '<(android_build_type)',
# We used to provide a variable for changing how libraries were built.
# This variable remains until we can clean up all the users.
......@@ -599,6 +605,7 @@
'wix_path%': '<(wix_path)',
'android_upstream_bringup%': '<(android_upstream_bringup)',
'use_system_libjpeg%': '<(use_system_libjpeg)',
'android_build_type%': '<(android_build_type)',
# Use system yasm instead of bundled one.
'use_system_yasm%': 0,
......@@ -906,15 +913,9 @@
'android_app_abi%': 'armeabi-v7a',
}],
],
# Sets whether we're building with the Android SDK/NDK (and hence
# with Ant, value 0), or as part of the Android system (and hence
# with the Android build system, value 1).
'android_build_type%': 0,
},
'android_ndk_root%': '<(android_ndk_root)',
'android_ndk_sysroot%': '<(android_ndk_root)/platforms/android-9/arch-<(target_arch)',
'android_build_type%': '<(android_build_type)',
'android_app_abi%': '<(android_app_abi)',
},
'android_ndk_root%': '<(android_ndk_root)',
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment