Rewrite Makefile rules for Android to allow parallel execution
BUG=v8:2257 Review URL: https://chromiumcodereview.appspot.com/10824039 Patch from Haitao Feng <haitao.feng@intel.com>. git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@12211 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
b58cfd485e
commit
49400e22b6
13
Makefile
13
Makefile
@ -178,9 +178,12 @@ native: $(OUTDIR)/Makefile.native
|
||||
$(ANDROID_ARCHES): $(addprefix $$@.,$(MODES))
|
||||
|
||||
$(ANDROID_BUILDS): $(GYPFILES) $(ENVFILE) build/android.gypi \
|
||||
must-set-ANDROID_NDK_ROOT
|
||||
@tools/android-build.sh $(basename $@) $(subst .,,$(suffix $@)) \
|
||||
$(OUTDIR) $(GYPFLAGS)
|
||||
must-set-ANDROID_NDK_ROOT Makefile.android
|
||||
@$(MAKE) -f Makefile.android $@ \
|
||||
ARCH="$(basename $@)" \
|
||||
MODE="$(subst .,,$(suffix $@))" \
|
||||
OUTDIR="$(OUTDIR)" \
|
||||
GYPFLAGS="$(GYPFLAGS)"
|
||||
|
||||
# Test targets.
|
||||
check: all
|
||||
@ -231,8 +234,8 @@ native.clean:
|
||||
clean: $(addsuffix .clean, $(ARCHES) $(ANDROID_ARCHES)) native.clean
|
||||
|
||||
# GYP file generation targets.
|
||||
MAKEFILES = $(addprefix $(OUTDIR)/Makefile.,$(ARCHES))
|
||||
$(MAKEFILES): $(GYPFILES) $(ENVFILE)
|
||||
OUT_MAKEFILES = $(addprefix $(OUTDIR)/Makefile.,$(ARCHES))
|
||||
$(OUT_MAKEFILES): $(GYPFILES) $(ENVFILE)
|
||||
GYP_GENERATORS=make \
|
||||
build/gyp/gyp --generator-output="$(OUTDIR)" build/all.gyp \
|
||||
-Ibuild/standalone.gypi --depth=. \
|
||||
|
92
Makefile.android
Normal file
92
Makefile.android
Normal file
@ -0,0 +1,92 @@
|
||||
# Copyright 2012 the V8 project authors. All rights reserved.
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met:
|
||||
#
|
||||
# * Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
# * Redistributions in binary form must reproduce the above
|
||||
# copyright notice, this list of conditions and the following
|
||||
# disclaimer in the documentation and/or other materials provided
|
||||
# with the distribution.
|
||||
# * Neither the name of Google Inc. nor the names of its
|
||||
# contributors may be used to endorse or promote products derived
|
||||
# from this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
# Those definitions should be consistent with the main Makefile
|
||||
ANDROID_ARCHES = android_ia32 android_arm
|
||||
MODES = release debug
|
||||
|
||||
# Generates all combinations of ANDROID ARCHES and MODES,
|
||||
# e.g. "android_ia32.release" or "android_arm.release"
|
||||
ANDROID_BUILDS = $(foreach mode,$(MODES), \
|
||||
$(addsuffix .$(mode),$(ANDROID_ARCHES)))
|
||||
|
||||
HOST_OS = $(shell uname -s | sed -e 's/Linux/linux/;s/Darwin/mac/')
|
||||
ifeq ($(HOST_OS), linux)
|
||||
TOOLCHAIN_DIR = linux-x86
|
||||
else
|
||||
ifeq ($(HOST_OS), mac)
|
||||
TOOLCHAIN_DIR = darwin-x86
|
||||
else
|
||||
$(error Host platform "${HOST_OS}" is not supported)
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH), android_arm)
|
||||
DEFINES = target_arch=arm v8_target_arch=arm android_target_arch=arm
|
||||
DEFINES += arm_neon=0 armv7=1
|
||||
TOOLCHAIN_ARCH = arm-linux-androideabi-4.4.3
|
||||
else
|
||||
ifeq ($(ARCH), android_ia32)
|
||||
DEFINES = target_arch=ia32 v8_target_arch=ia32 android_target_arch=x86
|
||||
TOOLCHAIN_ARCH = x86-4.4.3
|
||||
else
|
||||
$(error Target architecture "${ARCH}" is not supported)
|
||||
endif
|
||||
endif
|
||||
|
||||
TOOLCHAIN_PATH = ${ANDROID_NDK_ROOT}/toolchains/${TOOLCHAIN_ARCH}/prebuilt
|
||||
ANDROID_TOOLCHAIN = ${TOOLCHAIN_PATH}/${TOOLCHAIN_DIR}/bin
|
||||
ifeq ($(wildcard $(ANDROID_TOOLCHAIN)),)
|
||||
$(error Cannot find Android toolchain in "${ANDROID_TOOLCHAIN}")
|
||||
endif
|
||||
|
||||
# For mksnapshot host generation.
|
||||
DEFINES += host_os=${HOST_OS}
|
||||
|
||||
.SECONDEXPANSION:
|
||||
$(ANDROID_BUILDS): $(OUTDIR)/Makefile.$$(basename $$@)
|
||||
@$(MAKE) -C "$(OUTDIR)" -f Makefile.$(basename $@) \
|
||||
CXX="$(ANDROID_TOOLCHAIN)/*-g++" \
|
||||
AR="$(ANDROID_TOOLCHAIN)/*-ar" \
|
||||
RANLIB="$(ANDROID_TOOLCHAIN)/*-ranlib" \
|
||||
CC="$(ANDROID_TOOLCHAIN)/*-gcc" \
|
||||
LD="$(ANDROID_TOOLCHAIN)/*-ld" \
|
||||
LINK="$(ANDROID_TOOLCHAIN)/*-g++" \
|
||||
BUILDTYPE=$(shell echo $(subst .,,$(suffix $@)) | \
|
||||
python -c "print raw_input().capitalize()") \
|
||||
builddir="$(shell pwd)/$(OUTDIR)/$@"
|
||||
|
||||
# Android GYP file generation targets.
|
||||
ANDROID_MAKEFILES = $(addprefix $(OUTDIR)/Makefile.,$(ANDROID_ARCHES))
|
||||
$(ANDROID_MAKEFILES):
|
||||
@GYP_GENERATORS=make-android \
|
||||
GYP_DEFINES="${DEFINES}" \
|
||||
CC="${ANDROID_TOOLCHAIN}/*-gcc" \
|
||||
CXX="${ANDROID_TOOLCHAIN}/*-g++" \
|
||||
build/gyp/gyp --generator-output="${OUTDIR}" build/all.gyp \
|
||||
-Ibuild/standalone.gypi --depth=. -Ibuild/android.gypi \
|
||||
-S.${ARCH} ${GYPFLAGS}
|
@ -1,97 +0,0 @@
|
||||
#!/bin/bash
|
||||
# Copyright 2012 the V8 project authors. All rights reserved.
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met:
|
||||
#
|
||||
# * Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
# * Redistributions in binary form must reproduce the above
|
||||
# copyright notice, this list of conditions and the following
|
||||
# disclaimer in the documentation and/or other materials provided
|
||||
# with the distribution.
|
||||
# * Neither the name of Google Inc. nor the names of its
|
||||
# contributors may be used to endorse or promote products derived
|
||||
# from this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
if [ ${#@} -lt 4 ] ; then
|
||||
echo "$0: Error: needs 4 arguments."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
ARCH=$1
|
||||
MODE=$2
|
||||
OUTDIR=$3
|
||||
GYPFLAGS=$4
|
||||
|
||||
host_os=$(uname -s | sed -e 's/Linux/linux/;s/Darwin/mac/')
|
||||
|
||||
case "${host_os}" in
|
||||
"linux")
|
||||
toolchain_dir="linux-x86"
|
||||
;;
|
||||
"mac")
|
||||
toolchain_dir="darwin-x86"
|
||||
;;
|
||||
*)
|
||||
echo "$0: Host platform ${host_os} is not supported" >& 2
|
||||
exit 1
|
||||
esac
|
||||
|
||||
case "${ARCH}" in
|
||||
"android_arm")
|
||||
DEFINES=" target_arch=arm v8_target_arch=arm android_target_arch=arm"
|
||||
DEFINES+=" arm_neon=0 armv7=1"
|
||||
toolchain_arch="arm-linux-androideabi-4.4.3"
|
||||
;;
|
||||
"android_ia32")
|
||||
DEFINES=" target_arch=ia32 v8_target_arch=ia32 android_target_arch=x86"
|
||||
toolchain_arch="x86-4.4.3"
|
||||
;;
|
||||
*)
|
||||
echo "$0: Target architecture ${ARCH} is not supported." >& 2
|
||||
echo "$0: Current supported architectures: android_arm|android_ia32." >& 2
|
||||
exit 1
|
||||
esac
|
||||
|
||||
toolchain_path="${ANDROID_NDK_ROOT}/toolchains/${toolchain_arch}/prebuilt/"
|
||||
ANDROID_TOOLCHAIN="${toolchain_path}/${toolchain_dir}/bin"
|
||||
if [ ! -d "${ANDROID_TOOLCHAIN}" ]; then
|
||||
echo "$0: Cannot find Android toolchain in ${ANDROID_TOOLCHAIN}." >& 2
|
||||
echo "$0: The NDK version might be wrong." >& 2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# For mksnapshot host generation.
|
||||
DEFINES+=" host_os=${host_os}"
|
||||
|
||||
# The set of GYP_DEFINES to pass to gyp.
|
||||
export GYP_DEFINES="${DEFINES}"
|
||||
|
||||
# Use the "android" flavor of the Makefile generator for both Linux and OS X.
|
||||
export GYP_GENERATORS=make-android
|
||||
export CC=${ANDROID_TOOLCHAIN}/*-gcc
|
||||
export CXX=${ANDROID_TOOLCHAIN}/*-g++
|
||||
build/gyp/gyp --generator-output="${OUTDIR}" build/all.gyp \
|
||||
-Ibuild/standalone.gypi --depth=. -Ibuild/android.gypi \
|
||||
-S.${ARCH} ${GYPFLAGS}
|
||||
|
||||
export AR=${ANDROID_TOOLCHAIN}/*-ar
|
||||
export RANLIB=${ANDROID_TOOLCHAIN}/*-ranlib
|
||||
export LD=${ANDROID_TOOLCHAIN}/*-ld
|
||||
export LINK=${ANDROID_TOOLCHAIN}/*-g++
|
||||
export BUILDTYPE=$(echo ${MODE} | python -c "print raw_input().capitalize()")
|
||||
export builddir=${PWD}/${OUTDIR}/${ARCH}.${MODE}
|
||||
make -C "${OUTDIR}" -f Makefile.${ARCH}
|
Loading…
Reference in New Issue
Block a user