Makefile 17.3 KB
Newer Older
1
# Copyright 2012 the V8 project authors. All rights reserved.
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
# 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.


# Variable default definitions. Override them by exporting them in your shell.
30 31
CXX ?= g++
LINK ?= g++
32
OUTDIR ?= out
33
TESTJOBS ?=
34
GYPFLAGS ?=
35
TESTFLAGS ?=
36
ANDROID_NDK_ROOT ?=
37
ANDROID_NDK_HOST_ARCH ?=
38
ANDROID_TOOLCHAIN ?=
39
ANDROID_V8 ?= /data/local/tmp/v8
40
NACL_SDK_ROOT ?=
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58

# Special build flags. Use them like this: "make library=shared"

# library=shared || component=shared_library
ifeq ($(library), shared)
  GYPFLAGS += -Dcomponent=shared_library
endif
ifdef component
  GYPFLAGS += -Dcomponent=$(component)
endif
# console=readline
ifdef console
  GYPFLAGS += -Dconsole=$(console)
endif
# disassembler=on
ifeq ($(disassembler), on)
  GYPFLAGS += -Dv8_enable_disassembler=1
endif
59 60 61 62
# objectprint=on
ifeq ($(objectprint), on)
  GYPFLAGS += -Dv8_object_print=1
endif
63 64 65 66
# verifyheap=on
ifeq ($(verifyheap), on)
  GYPFLAGS += -Dv8_enable_verify_heap=1
endif
67 68 69 70 71 72
# backtrace=off
ifeq ($(backtrace), off)
  GYPFLAGS += -Dv8_enable_backtrace=0
else
  GYPFLAGS += -Dv8_enable_backtrace=1
endif
73 74 75 76
# verifypredictable=on
ifeq ($(verifypredictable), on)
  GYPFLAGS += -Dv8_enable_verify_predictable=1
endif
77 78 79 80
# snapshot=off
ifeq ($(snapshot), off)
  GYPFLAGS += -Dv8_use_snapshot='false'
endif
81 82
# extrachecks=on/off
ifeq ($(extrachecks), on)
83
  GYPFLAGS += -Dv8_enable_extra_checks=1 -Dv8_enable_handle_zapping=1
84 85
endif
ifeq ($(extrachecks), off)
86
  GYPFLAGS += -Dv8_enable_extra_checks=0 -Dv8_enable_handle_zapping=0
87
endif
88
# gdbjit=on/off
89 90 91
ifeq ($(gdbjit), on)
  GYPFLAGS += -Dv8_enable_gdbjit=1
endif
92 93 94
ifeq ($(gdbjit), off)
  GYPFLAGS += -Dv8_enable_gdbjit=0
endif
95 96 97 98
# vtunejit=on
ifeq ($(vtunejit), on)
  GYPFLAGS += -Dv8_enable_vtunejit=1
endif
99 100
# optdebug=on
ifeq ($(optdebug), on)
101
  GYPFLAGS += -Dv8_optimized_debug=2
102
endif
103 104 105 106
# unalignedaccess=on
ifeq ($(unalignedaccess), on)
  GYPFLAGS += -Dv8_can_use_unaligned_accesses=true
endif
107 108 109 110
# randomseed=12345, disable random seed via randomseed=0
ifdef randomseed
  GYPFLAGS += -Dv8_random_seed=$(randomseed)
endif
111 112 113 114
# soname_version=1.2.3
ifdef soname_version
  GYPFLAGS += -Dsoname_version=$(soname_version)
endif
115 116 117 118 119 120 121 122
# werror=no
ifeq ($(werror), no)
  GYPFLAGS += -Dwerror=''
endif
# presubmit=no
ifeq ($(presubmit), no)
  TESTFLAGS += --no-presubmit
endif
123 124 125 126
# strictaliasing=off (workaround for GCC-4.5)
ifeq ($(strictaliasing), off)
  GYPFLAGS += -Dv8_no_strict_aliasing=1
endif
127 128 129 130
# regexp=interpreted
ifeq ($(regexp), interpreted)
  GYPFLAGS += -Dv8_interpreted_regexp=1
endif
131 132 133 134
# i18nsupport=off
ifeq ($(i18nsupport), off)
  GYPFLAGS += -Dv8_enable_i18n_support=0
  TESTFLAGS += --noi18n
135
endif
136 137 138
# deprecation_warnings=on
ifeq ($(deprecationwarnings), on)
  GYPFLAGS += -Dv8_deprecation_warnings=1
139 140 141 142
endif
# asan=/path/to/clang++
ifneq ($(strip $(asan)),)
  GYPFLAGS += -Dasan=1
143 144 145
  export CXX=$(asan)
  export CXX_host=$(asan)
  export LINK=$(asan)
146 147
  export ASAN_SYMBOLIZER_PATH="$(dir $(asan))llvm-symbolizer"
endif
148

149
# arm specific flags.
150 151 152 153 154
# arm_version=<number | "default">
ifneq ($(strip $(arm_version)),)
  GYPFLAGS += -Darm_version=$(arm_version)
else
# Deprecated (use arm_version instead): armv7=false/true
155
ifeq ($(armv7), false)
156
  GYPFLAGS += -Darm_version=6
157 158
else
ifeq ($(armv7), true)
159 160
  GYPFLAGS += -Darm_version=7
endif
161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193
endif
endif
# hardfp=on/off. Deprecated, use armfloatabi
ifeq ($(hardfp),on)
  GYPFLAGS += -Darm_float_abi=hard
else
ifeq ($(hardfp),off)
  GYPFLAGS += -Darm_float_abi=softfp
endif
endif
# fpu: armfpu=xxx
# xxx: vfp, vfpv3-d16, vfpv3, neon.
ifeq ($(armfpu),)
  GYPFLAGS += -Darm_fpu=default
else
  GYPFLAGS += -Darm_fpu=$(armfpu)
endif
# float abi: armfloatabi=softfp/hard
ifeq ($(armfloatabi),)
ifeq ($(hardfp),)
  GYPFLAGS += -Darm_float_abi=default
endif
else
  GYPFLAGS += -Darm_float_abi=$(armfloatabi)
endif
# armthumb=on/off
ifeq ($(armthumb), off)
  GYPFLAGS += -Darm_thumb=0
else
ifeq ($(armthumb), on)
  GYPFLAGS += -Darm_thumb=1
endif
endif
194
# arm_test_noprobe=on
195 196
# With this flag set, by default v8 will only use features implied
# by the compiler (no probe). This is done by modifying the default
197
# values of enable_armv7, enable_vfp3, enable_32dregs and enable_neon.
198 199
# Modifying these flags when launching v8 will enable the probing for
# the specified values.
200 201
ifeq ($(arm_test_noprobe), on)
  GYPFLAGS += -Darm_test_noprobe=on
202
endif
203 204

# ----------------- available targets: --------------------
205 206
# - "builddeps": pulls in external dependencies for building
# - "dependencies": pulls in all external dependencies
207
# - "grokdump": rebuilds heap constants lists used by grokdump
208 209 210
# - any arch listed in ARCHES (see below)
# - any mode listed in MODES
# - every combination <arch>.<mode>, e.g. "ia32.release"
211
# - "native": current host's architecture, release mode
212
# - any of the above with .check appended, e.g. "ia32.release.check"
213
# - "android": cross-compile for Android/ARM
214
# - "nacl" : cross-compile for Native Client (ia32 and x64)
215
# - default (no target specified): build all DEFAULT_ARCHES and MODES
216 217 218 219 220 221 222 223
# - "check": build all targets and run all tests
# - "<arch>.clean" for any <arch> in ARCHES
# - "clean": clean all ARCHES

# ----------------- internal stuff ------------------------

# Architectures and modes to be compiled. Consider these to be internal
# variables, don't override them (use the targets instead).
224
ARCHES = ia32 x64 x32 arm arm64 mips mipsel x87
225
DEFAULT_ARCHES = ia32 x64 arm
226 227
MODES = release debug optdebug
DEFAULT_MODES = release debug
danno@chromium.org's avatar
danno@chromium.org committed
228
ANDROID_ARCHES = android_ia32 android_arm android_arm64 android_mipsel android_x87
229
NACL_ARCHES = nacl_ia32 nacl_x64
230 231

# List of files that trigger Makefile regeneration:
232
GYPFILES = build/all.gyp build/features.gypi build/standalone.gypi \
233 234
           build/toolchain.gypi samples/samples.gyp src/d8.gyp \
           test/cctest/cctest.gyp tools/gyp/v8.gyp
235

236 237 238 239
# If vtunejit=on, the v8vtune.gyp will be appended.
ifeq ($(vtunejit), on)
  GYPFILES += src/third_party/vtune/v8vtune.gyp
endif
240 241
# Generates all combinations of ARCHES and MODES, e.g. "ia32.release".
BUILDS = $(foreach mode,$(MODES),$(addsuffix .$(mode),$(ARCHES)))
242 243
ANDROID_BUILDS = $(foreach mode,$(MODES), \
                   $(addsuffix .$(mode),$(ANDROID_ARCHES)))
244 245
NACL_BUILDS = $(foreach mode,$(MODES), \
                   $(addsuffix .$(mode),$(NACL_ARCHES)))
246
# Generates corresponding test targets, e.g. "ia32.release.check".
247
CHECKS = $(addsuffix .check,$(BUILDS))
248
QUICKCHECKS = $(addsuffix .quickcheck,$(BUILDS))
249
ANDROID_CHECKS = $(addsuffix .check,$(ANDROID_BUILDS))
250
NACL_CHECKS = $(addsuffix .check,$(NACL_BUILDS))
251 252
# File where previously used GYPFLAGS are stored.
ENVFILE = $(OUTDIR)/environment
253

254
.PHONY: all check clean builddeps dependencies $(ENVFILE).new native \
255 256
        qc quickcheck $(QUICKCHECKS) \
        $(addsuffix .quickcheck,$(MODES)) $(addsuffix .quickcheck,$(ARCHES)) \
257
        $(ARCHES) $(MODES) $(BUILDS) $(CHECKS) $(addsuffix .clean,$(ARCHES)) \
258
        $(addsuffix .check,$(MODES)) $(addsuffix .check,$(ARCHES)) \
259
        $(ANDROID_ARCHES) $(ANDROID_BUILDS) $(ANDROID_CHECKS) \
260 261 262
        must-set-ANDROID_NDK_ROOT_OR_TOOLCHAIN \
        $(NACL_ARCHES) $(NACL_BUILDS) $(NACL_CHECKS) \
        must-set-NACL_SDK_ROOT
263

264
# Target definitions. "all" is the default.
265
all: $(DEFAULT_MODES)
266

267 268 269 270 271 272
# Special target for the buildbots to use. Depends on $(OUTDIR)/Makefile
# having been created before.
buildbot:
	$(MAKE) -C "$(OUTDIR)" BUILDTYPE=$(BUILDTYPE) \
	        builddir="$(abspath $(OUTDIR))/$(BUILDTYPE)"

273 274
# Compile targets. MODES and ARCHES are convenience targets.
.SECONDEXPANSION:
275
$(MODES): $(addsuffix .$$@,$(DEFAULT_ARCHES))
276

277
$(ARCHES): $(addprefix $$@.,$(DEFAULT_MODES))
278

279
# Defines how to build a particular target (e.g. ia32.release).
280 281
$(BUILDS): $(OUTDIR)/Makefile.$$@
	@$(MAKE) -C "$(OUTDIR)" -f Makefile.$@ \
282 283
	         CXX="$(CXX)" LINK="$(LINK)" \
	         BUILDTYPE=$(shell echo $(subst .,,$(suffix $@)) | \
284 285
	                     python -c "print \
	                     raw_input().replace('opt', '').capitalize()") \
286 287
	         builddir="$(shell pwd)/$(OUTDIR)/$@"

288 289
native: $(OUTDIR)/Makefile.native
	@$(MAKE) -C "$(OUTDIR)" -f Makefile.native \
290 291 292
	         CXX="$(CXX)" LINK="$(LINK)" BUILDTYPE=Release \
	         builddir="$(shell pwd)/$(OUTDIR)/$@"

293
$(ANDROID_ARCHES): $(addprefix $$@.,$(MODES))
294

295
$(ANDROID_BUILDS): $(GYPFILES) $(ENVFILE) build/android.gypi \
296
                   must-set-ANDROID_NDK_ROOT_OR_TOOLCHAIN Makefile.android
297 298 299 300 301
	@$(MAKE) -f Makefile.android $@ \
	        ARCH="$(basename $@)" \
	        MODE="$(subst .,,$(suffix $@))" \
	        OUTDIR="$(OUTDIR)" \
	        GYPFLAGS="$(GYPFLAGS)"
302

303 304 305 306 307 308 309 310 311 312
$(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)"

313 314
# Test targets.
check: all
315
	@tools/run-tests.py $(TESTJOBS) --outdir=$(OUTDIR) \
316
	    --arch=$(shell echo $(DEFAULT_ARCHES) | sed -e 's/ /,/g') \
317
	    $(TESTFLAGS)
318

319
$(addsuffix .check,$(MODES)): $$(basename $$@)
320
	@tools/run-tests.py $(TESTJOBS) --outdir=$(OUTDIR) \
321
	    --mode=$(basename $@) $(TESTFLAGS)
322 323

$(addsuffix .check,$(ARCHES)): $$(basename $$@)
324
	@tools/run-tests.py $(TESTJOBS) --outdir=$(OUTDIR) \
325
	    --arch=$(basename $@) $(TESTFLAGS)
326 327

$(CHECKS): $$(basename $$@)
328
	@tools/run-tests.py $(TESTJOBS) --outdir=$(OUTDIR) \
329
	    --arch-and-mode=$(basename $@) $(TESTFLAGS)
330

331 332 333 334 335 336 337 338 339 340 341 342
$(addsuffix .quickcheck,$(MODES)): $$(basename $$@)
	@tools/run-tests.py $(TESTJOBS) --outdir=$(OUTDIR) \
	    --mode=$(basename $@) $(TESTFLAGS) --quickcheck

$(addsuffix .quickcheck,$(ARCHES)): $$(basename $$@)
	@tools/run-tests.py $(TESTJOBS) --outdir=$(OUTDIR) \
	    --arch=$(basename $@) $(TESTFLAGS) --quickcheck

$(QUICKCHECKS): $$(basename $$@)
	@tools/run-tests.py $(TESTJOBS) --outdir=$(OUTDIR) \
	    --arch-and-mode=$(basename $@) $(TESTFLAGS) --quickcheck

343
$(addsuffix .sync, $(ANDROID_BUILDS)): $$(basename $$@)
344 345 346
	@tools/android-sync.sh $(basename $@) $(OUTDIR) \
	                       $(shell pwd) $(ANDROID_V8)

347
$(addsuffix .check, $(ANDROID_BUILDS)): $$(basename $$@).sync
348
	@tools/run-tests.py $(TESTJOBS) --outdir=$(OUTDIR) \
349
	     --arch-and-mode=$(basename $@) \
350
	     --timeout=600 \
351
	     --command-prefix="tools/android-run.py" $(TESTFLAGS)
352

353 354
$(addsuffix .check, $(ANDROID_ARCHES)): \
                $(addprefix $$(basename $$@).,$(MODES)).check
355

356 357 358
$(addsuffix .check, $(NACL_BUILDS)): $$(basename $$@)
	@tools/run-tests.py $(TESTJOBS) --outdir=$(OUTDIR) \
	     --arch-and-mode=$(basename $@) \
359
	     --timeout=600 --nopresubmit --noi18n \
360 361 362 363 364
	     --command-prefix="tools/nacl-run.py"

$(addsuffix .check, $(NACL_ARCHES)): \
                $(addprefix $$(basename $$@).,$(MODES)).check

365
native.check: native
366
	@tools/run-tests.py $(TESTJOBS) --outdir=$(OUTDIR)/native \
367
	    --arch-and-mode=. $(TESTFLAGS)
368

369
SUPERFASTTESTMODES = ia32.release
370 371
FASTTESTMODES = $(SUPERFASTTESTMODES),x64.release,ia32.optdebug,x64.optdebug,arm.optdebug,arm64.release
FASTCOMPILEMODES = $(FASTTESTMODES),arm64.optdebug
372

373 374 375
COMMA = ,
EMPTY =
SPACE = $(EMPTY) $(EMPTY)
376
quickcheck: $(subst $(COMMA),$(SPACE),$(FASTCOMPILEMODES))
377 378 379
	tools/run-tests.py $(TESTJOBS) --outdir=$(OUTDIR) \
	    --arch-and-mode=$(SUPERFASTTESTMODES) $(TESTFLAGS) --quickcheck \
	    --download-data mozilla webkit
380 381
	tools/run-tests.py $(TESTJOBS) --outdir=$(OUTDIR) \
	    --arch-and-mode=$(FASTTESTMODES) $(TESTFLAGS) --quickcheck
382 383
qc: quickcheck

384
# Clean targets. You can clean each architecture individually, or everything.
385
$(addsuffix .clean, $(ARCHES) $(ANDROID_ARCHES) $(NACL_ARCHES)):
386
	rm -f $(OUTDIR)/Makefile.$(basename $@)*
387 388
	rm -rf $(OUTDIR)/$(basename $@).release
	rm -rf $(OUTDIR)/$(basename $@).debug
389
	rm -rf $(OUTDIR)/$(basename $@).optdebug
390
	find $(OUTDIR) -regex '.*\(host\|target\)\.$(basename $@).*\.mk' -delete
391

392
native.clean:
393
	rm -f $(OUTDIR)/Makefile.native
394
	rm -rf $(OUTDIR)/native
395
	find $(OUTDIR) -regex '.*\(host\|target\)\.native\.mk' -delete
396

397
clean: $(addsuffix .clean, $(ARCHES) $(ANDROID_ARCHES) $(NACL_ARCHES)) native.clean gtags.clean
398 399

# GYP file generation targets.
400
OUT_MAKEFILES = $(addprefix $(OUTDIR)/Makefile.,$(BUILDS))
401
$(OUT_MAKEFILES): $(GYPFILES) $(ENVFILE)
402
	PYTHONPATH="$(shell pwd)/tools/generate_shim_headers:$(shell pwd)/build:$(PYTHONPATH):$(shell pwd)/build/gyp/pylib:$(PYTHONPATH)" \
403
	GYP_GENERATORS=make \
404
	build/gyp/gyp --generator-output="$(OUTDIR)" build/all.gyp \
405
	              -Ibuild/standalone.gypi --depth=. \
406
	              -Dv8_target_arch=$(subst .,,$(suffix $(basename $@))) \
407
	              $(if $(findstring optdebug,$@),-Dv8_optimized_debug=2,) \
408
	              -S$(suffix $(basename $@))$(suffix $@) $(GYPFLAGS)
409

410
$(OUTDIR)/Makefile.native: $(GYPFILES) $(ENVFILE)
411
	PYTHONPATH="$(shell pwd)/tools/generate_shim_headers:$(shell pwd)/build:$(PYTHONPATH):$(shell pwd)/build/gyp/pylib:$(PYTHONPATH)" \
412
	GYP_GENERATORS=make \
413
	build/gyp/gyp --generator-output="$(OUTDIR)" build/all.gyp \
414
	              -Ibuild/standalone.gypi --depth=. -S.native $(GYPFLAGS)
415

416
must-set-ANDROID_NDK_ROOT_OR_TOOLCHAIN:
417
ifndef ANDROID_NDK_ROOT
418 419 420
ifndef ANDROID_TOOLCHAIN
	  $(error ANDROID_NDK_ROOT or ANDROID_TOOLCHAIN must be set))
endif
421 422
endif

423 424 425 426 427 428 429 430 431 432 433 434
# 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

435 436 437
# Replaces the old with the new environment file if they're different, which
# will trigger GYP to regenerate Makefiles.
$(ENVFILE): $(ENVFILE).new
438
	@if test -r $(ENVFILE) && cmp $(ENVFILE).new $(ENVFILE) > /dev/null; \
439 440 441 442 443
	    then rm $(ENVFILE).new; \
	    else mv $(ENVFILE).new $(ENVFILE); fi

# Stores current GYPFLAGS in a file.
$(ENVFILE).new:
444 445
	@mkdir -p $(OUTDIR); echo "GYPFLAGS=$(GYPFLAGS)" > $(ENVFILE).new; \
	    echo "CXX=$(CXX)" >> $(ENVFILE).new
446

447 448 449 450 451 452
# Heap constants for grokdump.
DUMP_FILE = tools/v8heapconst.py
grokdump: ia32.release
	@cat $(DUMP_FILE).tmpl > $(DUMP_FILE)
	@$(OUTDIR)/ia32.release/d8 --dump-heap-constants >> $(DUMP_FILE)

453 454 455 456
# Support for the GNU GLOBAL Source Code Tag System.
gtags.files: $(GYPFILES) $(ENVFILE)
	@find include src test -name '*.h' -o -name '*.cc' -o -name '*.c' > $@

457 458
# We need to manually set the stack limit here, to work around bugs in
# gmake-3.81 and global-5.7.1 on recent 64-bit Linux systems.
459
GPATH GRTAGS GSYMS GTAGS: gtags.files $(shell cat gtags.files 2> /dev/null)
460
	@bash -c 'ulimit -s 10240 && GTAGSFORCECPP=yes gtags -i -q -f $<'
461 462

gtags.clean:
463
	rm -f gtags.files GPATH GRTAGS GSYMS GTAGS
464

465 466
# Dependencies. "builddeps" are dependencies required solely for building,
# "dependencies" includes also dependencies required for development.
467
# Remember to keep these in sync with the DEPS file.
468
builddeps:
469
	svn checkout --force http://gyp.googlecode.com/svn/trunk build/gyp \
jochen@chromium.org's avatar
jochen@chromium.org committed
470
	    --revision 1831
471 472
	svn checkout --force \
	    https://src.chromium.org/chrome/trunk/deps/third_party/icu46 \
473
	    third_party/icu --revision 258359
474 475

dependencies: builddeps
476 477
	# The spec is a copy of the hooks in v8's DEPS file.
	gclient sync -r fb782d4369d5ae04f17a2fceef7de5a63e50f07b --spec="solutions = [{u'managed': False, u'name': u'buildtools', u'url': u'https://chromium.googlesource.com/chromium/buildtools.git', u'custom_deps': {}, u'custom_hooks': [{u'name': u'clang_format_win',u'pattern': u'.',u'action': [u'download_from_google_storage',u'--no_resume',u'--platform=win32',u'--no_auth',u'--bucket',u'chromium-clang-format',u'-s',u'buildtools/win/clang-format.exe.sha1']},{u'name': u'clang_format_mac',u'pattern': u'.',u'action': [u'download_from_google_storage',u'--no_resume',u'--platform=darwin',u'--no_auth',u'--bucket',u'chromium-clang-format',u'-s',u'buildtools/mac/clang-format.sha1']},{u'name': u'clang_format_linux',u'pattern': u'.',u'action': [u'download_from_google_storage',u'--no_resume',u'--platform=linux*',u'--no_auth',u'--bucket',u'chromium-clang-format',u'-s',u'buildtools/linux64/clang-format.sha1']}],u'deps_file': u'.DEPS.git', u'safesync_url': u''}]"