1e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org# 2e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org# Copyright 2013 the V8 project authors. All rights reserved. 3e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org# Redistribution and use in source and binary forms, with or without 4e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org# modification, are permitted provided that the following conditions are 5e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org# met: 6e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org# 7e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org# * Redistributions of source code must retain the above copyright 8e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org# notice, this list of conditions and the following disclaimer. 9e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org# * Redistributions in binary form must reproduce the above 10e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org# copyright notice, this list of conditions and the following 11e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org# disclaimer in the documentation and/or other materials provided 12e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org# with the distribution. 13e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org# * Neither the name of Google Inc. nor the names of its 14e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org# contributors may be used to endorse or promote products derived 15e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org# from this software without specific prior written permission. 16e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org# 17e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 18e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 19e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 20e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 21e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 22e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 23e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 24e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 29e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org# Those definitions should be consistent with the main Makefile 30e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgNACL_ARCHES = nacl_ia32 nacl_x64 31e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgMODES = release debug 32e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 33e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org# Generates all combinations of NACL ARCHES and MODES, 34e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org# e.g. "nacl_ia32.release" or "nacl_x64.release" 35e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgNACL_BUILDS = $(foreach mode,$(MODES), \ 36e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org $(addsuffix .$(mode),$(NACL_ARCHES))) 37e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 38e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgHOST_OS = $(shell uname -s | sed -e 's/Linux/linux/;s/Darwin/mac/') 39e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgifeq ($(HOST_OS), linux) 40e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org TOOLCHAIN_DIR = linux_x86_glibc 41e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgelse 42e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org ifeq ($(HOST_OS), mac) 43e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org TOOLCHAIN_DIR = mac_x86_glibc 44e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org else 45e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org $(error Host platform "${HOST_OS}" is not supported) 46e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org endif 47e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgendif 48e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 49c118402c43ae44cf9255d36608a44886c98537c5jkummerow@chromium.orgTOOLCHAIN_PATH = $(realpath ${NACL_SDK_ROOT}/toolchain) 50e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgNACL_TOOLCHAIN ?= ${TOOLCHAIN_PATH}/${TOOLCHAIN_DIR} 51e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 52e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgifeq ($(ARCH), nacl_ia32) 53e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org GYPENV = nacl_target_arch=nacl_ia32 v8_target_arch=arm v8_host_arch=ia32 54e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org TOOLCHAIN_ARCH = x86-4.4 55e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org NACL_CC = "$(NACL_TOOLCHAIN)/bin/i686-nacl-gcc" 56e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org NACL_CXX = "$(NACL_TOOLCHAIN)/bin/i686-nacl-g++" 57e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org NACL_LINK = "$(NACL_TOOLCHAIN)/bin/i686-nacl-g++" 58e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgelse 59e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org ifeq ($(ARCH), nacl_x64) 60e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org GYPENV = nacl_target_arch=nacl_x64 v8_target_arch=arm v8_host_arch=ia32 61e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org TOOLCHAIN_ARCH = x86-4.4 62e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org NACL_CC = "$(NACL_TOOLCHAIN)/bin/x86_64-nacl-gcc" 63e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org NACL_CXX = "$(NACL_TOOLCHAIN)/bin/x86_64-nacl-g++" 64e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org NACL_LINK = "$(NACL_TOOLCHAIN)/bin/x86_64-nacl-g++" 65e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org else 66e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org $(error Target architecture "${ARCH}" is not supported) 67e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org endif 68e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgendif 69e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 70e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgifeq ($(wildcard $(NACL_TOOLCHAIN)),) 71e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org $(error Cannot find Native Client toolchain in "${NACL_TOOLCHAIN}") 72e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgendif 73e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 74e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org# For mksnapshot host generation. 75e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgGYPENV += host_os=${HOST_OS} 76e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 77528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org# ICU doesn't support NaCl. 78528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.orgGYPENV += v8_enable_i18n_support=0 79528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org 808496027a525ad457b6d5729faf41f29100a27264machenbach@chromium.org# Disable strict aliasing - v8 code often relies on undefined behavior of C++. 818496027a525ad457b6d5729faf41f29100a27264machenbach@chromium.orgGYPENV += v8_no_strict_aliasing=1 828496027a525ad457b6d5729faf41f29100a27264machenbach@chromium.org 8380108f7c5afc50b5289595a9384e7d2f085cb679hpayer@chromium.orgNACL_MAKEFILES = $(addprefix $(OUTDIR)/Makefile.,$(NACL_BUILDS)) 84e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org.SECONDEXPANSION: 85e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org# For some reason the $$(basename $$@) expansion didn't work here... 86e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org$(NACL_BUILDS): $(NACL_MAKEFILES) 8780108f7c5afc50b5289595a9384e7d2f085cb679hpayer@chromium.org @$(MAKE) -C "$(OUTDIR)" -f Makefile.$@ \ 88e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CXX=${NACL_CXX} \ 89e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org LINK=${NACL_LINK} \ 90e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org BUILDTYPE=$(shell echo $(subst .,,$(suffix $@)) | \ 91e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org python -c "print raw_input().capitalize()") \ 92e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org builddir="$(shell pwd)/$(OUTDIR)/$@" 93e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 94e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org# NACL GYP file generation targets. 95e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org$(NACL_MAKEFILES): 9680108f7c5afc50b5289595a9384e7d2f085cb679hpayer@chromium.org GYP_GENERATORS=make \ 97e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org GYP_DEFINES="${GYPENV}" \ 98e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CC=${NACL_CC} \ 99e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CXX=${NACL_CXX} \ 10008e7569a10f8edbb47b8fe70a6e160a4e0c9cd30machenbach@chromium.org PYTHONPATH="$(shell pwd)/tools/generate_shim_headers:$(shell pwd)/build:$(PYTHONPATH)" \ 101e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org build/gyp/gyp --generator-output="${OUTDIR}" build/all.gyp \ 102e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org -Ibuild/standalone.gypi --depth=. \ 10380108f7c5afc50b5289595a9384e7d2f085cb679hpayer@chromium.org -S$(suffix $(basename $@))$(suffix $@) $(GYPFLAGS) \ 104169691d93a961c8b511f8ac8fd8ee33d081ca10fdanno@chromium.org -Dwno_array_bounds=-Wno-array-bounds 105