Enable Native Client build of V8.
These changes implement make targets nacl_ia32.check, nacl_x64.check, and related debug/release targets. BUG=2614 Review URL: https://codereview.chromium.org/13841011 Patch from Brad Chen <bradchen@google.com>. git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@14299 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
f4e563d391
commit
41d2b14d1b
45
Makefile
45
Makefile
@ -36,6 +36,7 @@ TESTFLAGS ?=
|
|||||||
ANDROID_NDK_ROOT ?=
|
ANDROID_NDK_ROOT ?=
|
||||||
ANDROID_TOOLCHAIN ?=
|
ANDROID_TOOLCHAIN ?=
|
||||||
ANDROID_V8 ?= /data/local/v8
|
ANDROID_V8 ?= /data/local/v8
|
||||||
|
NACL_SDK_ROOT ?=
|
||||||
|
|
||||||
# Special build flags. Use them like this: "make library=shared"
|
# Special build flags. Use them like this: "make library=shared"
|
||||||
|
|
||||||
@ -185,6 +186,7 @@ endif
|
|||||||
# - "native": current host's architecture, release mode
|
# - "native": current host's architecture, release mode
|
||||||
# - any of the above with .check appended, e.g. "ia32.release.check"
|
# - any of the above with .check appended, e.g. "ia32.release.check"
|
||||||
# - "android": cross-compile for Android/ARM
|
# - "android": cross-compile for Android/ARM
|
||||||
|
# - "nacl" : cross-compile for Native Client (ia32 and x64)
|
||||||
# - default (no target specified): build all DEFAULT_ARCHES and MODES
|
# - default (no target specified): build all DEFAULT_ARCHES and MODES
|
||||||
# - "check": build all targets and run all tests
|
# - "check": build all targets and run all tests
|
||||||
# - "<arch>.clean" for any <arch> in ARCHES
|
# - "<arch>.clean" for any <arch> in ARCHES
|
||||||
@ -198,6 +200,7 @@ ARCHES = ia32 x64 arm mipsel
|
|||||||
DEFAULT_ARCHES = ia32 x64 arm
|
DEFAULT_ARCHES = ia32 x64 arm
|
||||||
MODES = release debug
|
MODES = release debug
|
||||||
ANDROID_ARCHES = android_ia32 android_arm android_mipsel
|
ANDROID_ARCHES = android_ia32 android_arm android_mipsel
|
||||||
|
NACL_ARCHES = nacl_ia32 nacl_x64
|
||||||
|
|
||||||
# List of files that trigger Makefile regeneration:
|
# List of files that trigger Makefile regeneration:
|
||||||
GYPFILES = build/all.gyp build/common.gypi build/standalone.gypi \
|
GYPFILES = build/all.gyp build/common.gypi build/standalone.gypi \
|
||||||
@ -212,9 +215,12 @@ endif
|
|||||||
BUILDS = $(foreach mode,$(MODES),$(addsuffix .$(mode),$(ARCHES)))
|
BUILDS = $(foreach mode,$(MODES),$(addsuffix .$(mode),$(ARCHES)))
|
||||||
ANDROID_BUILDS = $(foreach mode,$(MODES), \
|
ANDROID_BUILDS = $(foreach mode,$(MODES), \
|
||||||
$(addsuffix .$(mode),$(ANDROID_ARCHES)))
|
$(addsuffix .$(mode),$(ANDROID_ARCHES)))
|
||||||
|
NACL_BUILDS = $(foreach mode,$(MODES), \
|
||||||
|
$(addsuffix .$(mode),$(NACL_ARCHES)))
|
||||||
# Generates corresponding test targets, e.g. "ia32.release.check".
|
# Generates corresponding test targets, e.g. "ia32.release.check".
|
||||||
CHECKS = $(addsuffix .check,$(BUILDS))
|
CHECKS = $(addsuffix .check,$(BUILDS))
|
||||||
ANDROID_CHECKS = $(addsuffix .check,$(ANDROID_BUILDS))
|
ANDROID_CHECKS = $(addsuffix .check,$(ANDROID_BUILDS))
|
||||||
|
NACL_CHECKS = $(addsuffix .check,$(NACL_BUILDS))
|
||||||
# File where previously used GYPFLAGS are stored.
|
# File where previously used GYPFLAGS are stored.
|
||||||
ENVFILE = $(OUTDIR)/environment
|
ENVFILE = $(OUTDIR)/environment
|
||||||
|
|
||||||
@ -222,7 +228,9 @@ ENVFILE = $(OUTDIR)/environment
|
|||||||
$(ARCHES) $(MODES) $(BUILDS) $(CHECKS) $(addsuffix .clean,$(ARCHES)) \
|
$(ARCHES) $(MODES) $(BUILDS) $(CHECKS) $(addsuffix .clean,$(ARCHES)) \
|
||||||
$(addsuffix .check,$(MODES)) $(addsuffix .check,$(ARCHES)) \
|
$(addsuffix .check,$(MODES)) $(addsuffix .check,$(ARCHES)) \
|
||||||
$(ANDROID_ARCHES) $(ANDROID_BUILDS) $(ANDROID_CHECKS) \
|
$(ANDROID_ARCHES) $(ANDROID_BUILDS) $(ANDROID_CHECKS) \
|
||||||
must-set-ANDROID_NDK_ROOT_OR_TOOLCHAIN
|
must-set-ANDROID_NDK_ROOT_OR_TOOLCHAIN \
|
||||||
|
$(NACL_ARCHES) $(NACL_BUILDS) $(NACL_CHECKS) \
|
||||||
|
must-set-NACL_SDK_ROOT
|
||||||
|
|
||||||
# Target definitions. "all" is the default.
|
# Target definitions. "all" is the default.
|
||||||
all: $(MODES)
|
all: $(MODES)
|
||||||
@ -266,6 +274,16 @@ $(ANDROID_BUILDS): $(GYPFILES) $(ENVFILE) build/android.gypi \
|
|||||||
OUTDIR="$(OUTDIR)" \
|
OUTDIR="$(OUTDIR)" \
|
||||||
GYPFLAGS="$(GYPFLAGS)"
|
GYPFLAGS="$(GYPFLAGS)"
|
||||||
|
|
||||||
|
$(NACL_ARCHES): $(addprefix $$@.,$(MODES))
|
||||||
|
|
||||||
|
$(NACL_BUILDS): $(GYPFILES) $(ENVFILE) \
|
||||||
|
Makefile.nacl must-set-NACL_SDK_ROOT
|
||||||
|
@$(MAKE) -f Makefile.nacl $@ \
|
||||||
|
ARCH="$(basename $@)" \
|
||||||
|
MODE="$(subst .,,$(suffix $@))" \
|
||||||
|
OUTDIR="$(OUTDIR)" \
|
||||||
|
GYPFLAGS="$(GYPFLAGS)"
|
||||||
|
|
||||||
# Test targets.
|
# Test targets.
|
||||||
check: all
|
check: all
|
||||||
@tools/run-tests.py $(TESTJOBS) --outdir=$(OUTDIR) \
|
@tools/run-tests.py $(TESTJOBS) --outdir=$(OUTDIR) \
|
||||||
@ -297,12 +315,21 @@ $(addsuffix .check, $(ANDROID_BUILDS)): $$(basename $$@).sync
|
|||||||
$(addsuffix .check, $(ANDROID_ARCHES)): \
|
$(addsuffix .check, $(ANDROID_ARCHES)): \
|
||||||
$(addprefix $$(basename $$@).,$(MODES)).check
|
$(addprefix $$(basename $$@).,$(MODES)).check
|
||||||
|
|
||||||
|
$(addsuffix .check, $(NACL_BUILDS)): $$(basename $$@)
|
||||||
|
@tools/run-tests.py $(TESTJOBS) --outdir=$(OUTDIR) \
|
||||||
|
--arch-and-mode=$(basename $@) \
|
||||||
|
--timeout=600 --nopresubmit \
|
||||||
|
--command-prefix="tools/nacl-run.py"
|
||||||
|
|
||||||
|
$(addsuffix .check, $(NACL_ARCHES)): \
|
||||||
|
$(addprefix $$(basename $$@).,$(MODES)).check
|
||||||
|
|
||||||
native.check: native
|
native.check: native
|
||||||
@tools/run-tests.py $(TESTJOBS) --outdir=$(OUTDIR)/native \
|
@tools/run-tests.py $(TESTJOBS) --outdir=$(OUTDIR)/native \
|
||||||
--arch-and-mode=. $(TESTFLAGS)
|
--arch-and-mode=. $(TESTFLAGS)
|
||||||
|
|
||||||
# Clean targets. You can clean each architecture individually, or everything.
|
# Clean targets. You can clean each architecture individually, or everything.
|
||||||
$(addsuffix .clean, $(ARCHES) $(ANDROID_ARCHES)):
|
$(addsuffix .clean, $(ARCHES) $(ANDROID_ARCHES) $(NACL_ARCHES)):
|
||||||
rm -f $(OUTDIR)/Makefile.$(basename $@)
|
rm -f $(OUTDIR)/Makefile.$(basename $@)
|
||||||
rm -rf $(OUTDIR)/$(basename $@).release
|
rm -rf $(OUTDIR)/$(basename $@).release
|
||||||
rm -rf $(OUTDIR)/$(basename $@).debug
|
rm -rf $(OUTDIR)/$(basename $@).debug
|
||||||
@ -313,7 +340,7 @@ native.clean:
|
|||||||
rm -rf $(OUTDIR)/native
|
rm -rf $(OUTDIR)/native
|
||||||
find $(OUTDIR) -regex '.*\(host\|target\).native\.mk' -delete
|
find $(OUTDIR) -regex '.*\(host\|target\).native\.mk' -delete
|
||||||
|
|
||||||
clean: $(addsuffix .clean, $(ARCHES) $(ANDROID_ARCHES)) native.clean
|
clean: $(addsuffix .clean, $(ARCHES) $(ANDROID_ARCHES) $(NACL_ARCHES)) native.clean
|
||||||
|
|
||||||
# GYP file generation targets.
|
# GYP file generation targets.
|
||||||
OUT_MAKEFILES = $(addprefix $(OUTDIR)/Makefile.,$(ARCHES))
|
OUT_MAKEFILES = $(addprefix $(OUTDIR)/Makefile.,$(ARCHES))
|
||||||
@ -336,6 +363,18 @@ ifndef ANDROID_TOOLCHAIN
|
|||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
# Note that NACL_SDK_ROOT must be set to point to an appropriate
|
||||||
|
# Native Client SDK before using this makefile. You can download
|
||||||
|
# an SDK here:
|
||||||
|
# https://developers.google.com/native-client/sdk/download
|
||||||
|
# The path indicated by NACL_SDK_ROOT will typically end with
|
||||||
|
# a folder for a pepper version such as "pepper_25" that should
|
||||||
|
# have "tools" and "toolchain" subdirectories.
|
||||||
|
must-set-NACL_SDK_ROOT:
|
||||||
|
ifndef NACL_SDK_ROOT
|
||||||
|
$(error NACL_SDK_ROOT must be set)
|
||||||
|
endif
|
||||||
|
|
||||||
# Replaces the old with the new environment file if they're different, which
|
# Replaces the old with the new environment file if they're different, which
|
||||||
# will trigger GYP to regenerate Makefiles.
|
# will trigger GYP to regenerate Makefiles.
|
||||||
$(ENVFILE): $(ENVFILE).new
|
$(ENVFILE): $(ENVFILE).new
|
||||||
|
@ -35,6 +35,13 @@
|
|||||||
'CXX%': '${CXX:-$(which g++)}', # Used to assemble a shell command.
|
'CXX%': '${CXX:-$(which g++)}', # Used to assemble a shell command.
|
||||||
'v8_compress_startup_data%': 'off',
|
'v8_compress_startup_data%': 'off',
|
||||||
'v8_target_arch%': '<(target_arch)',
|
'v8_target_arch%': '<(target_arch)',
|
||||||
|
# Native Client builds currently use the V8 ARM JIT and
|
||||||
|
# arm/simulator-arm.cc to defer the significant effort required
|
||||||
|
# for NaCl JIT support. The nacl_target_arch variable provides
|
||||||
|
# the 'true' target arch for places in this file that need it.
|
||||||
|
# TODO(bradchen): get rid of nacl_target_arch when someday
|
||||||
|
# NaCl V8 builds stop using the ARM simulator
|
||||||
|
'nacl_target_arch%': 'none', # must be set externally
|
||||||
|
|
||||||
# Setting 'v8_can_use_unaligned_accesses' to 'true' will allow the code
|
# Setting 'v8_can_use_unaligned_accesses' to 'true' will allow the code
|
||||||
# generated by V8 to do unaligned memory access, and setting it to 'false'
|
# generated by V8 to do unaligned memory access, and setting it to 'false'
|
||||||
@ -357,7 +364,8 @@
|
|||||||
'clang%': 0,
|
'clang%': 0,
|
||||||
},
|
},
|
||||||
'conditions': [
|
'conditions': [
|
||||||
['OS!="android" or clang==1', {
|
['(OS!="android" or clang==1) and \
|
||||||
|
nacl_target_arch!="nacl_x64"', {
|
||||||
'cflags': [ '<(m32flag)' ],
|
'cflags': [ '<(m32flag)' ],
|
||||||
'ldflags': [ '<(m32flag)' ],
|
'ldflags': [ '<(m32flag)' ],
|
||||||
}],
|
}],
|
||||||
|
@ -67,9 +67,21 @@ namespace internal {
|
|||||||
// http://www.agner.org/optimize/calling_conventions.pdf
|
// http://www.agner.org/optimize/calling_conventions.pdf
|
||||||
// or with gcc, run: "echo | gcc -E -dM -"
|
// or with gcc, run: "echo | gcc -E -dM -"
|
||||||
#if defined(_M_X64) || defined(__x86_64__)
|
#if defined(_M_X64) || defined(__x86_64__)
|
||||||
|
#if defined(__native_client__)
|
||||||
|
// For Native Client builds of V8, use V8_TARGET_ARCH_ARM, so that V8
|
||||||
|
// generates ARM machine code, together with a portable ARM simulator
|
||||||
|
// compiled for the host architecture in question.
|
||||||
|
//
|
||||||
|
// Since Native Client is ILP-32 on all architectures we use
|
||||||
|
// V8_HOST_ARCH_IA32 on both 32- and 64-bit x86.
|
||||||
|
#define V8_HOST_ARCH_IA32 1
|
||||||
|
#define V8_HOST_ARCH_32_BIT 1
|
||||||
|
#define V8_HOST_CAN_READ_UNALIGNED 1
|
||||||
|
#else
|
||||||
#define V8_HOST_ARCH_X64 1
|
#define V8_HOST_ARCH_X64 1
|
||||||
#define V8_HOST_ARCH_64_BIT 1
|
#define V8_HOST_ARCH_64_BIT 1
|
||||||
#define V8_HOST_CAN_READ_UNALIGNED 1
|
#define V8_HOST_CAN_READ_UNALIGNED 1
|
||||||
|
#endif // __native_client__
|
||||||
#elif defined(_M_IX86) || defined(__i386__)
|
#elif defined(_M_IX86) || defined(__i386__)
|
||||||
#define V8_HOST_ARCH_IA32 1
|
#define V8_HOST_ARCH_IA32 1
|
||||||
#define V8_HOST_ARCH_32_BIT 1
|
#define V8_HOST_ARCH_32_BIT 1
|
||||||
|
Loading…
Reference in New Issue
Block a user