blob: b765f586ec1cd68d7d99452507f8ba189dec7af3 [file] [log] [blame]
# Copyright (c) 2012 The Native Client Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
######################################################################
# CONFIG
######################################################################
# NOTE: we assume you have a symlink "CLIENT" in this directory pointing
# to your .../native_client directory
ifndef SCONS_BUILD_PLATFORM
SCONS_BUILD_PLATFORM="scons_build_platform_undefined"
endif
ifndef BUILD_ARCH_SHORT
BUILD_ARCH_SHORT="build_arch_short_undefined"
endif
TC_ROOT=../../../toolchain
TOOLCHAIN_BASE=$(TC_ROOT)/$(SCONS_BUILD_PLATFORM)_$(BUILD_ARCH_SHORT)
NNACL_GLIBC_ROOT=$(TOOLCHAIN_BASE)/nacl_$(BUILD_ARCH_SHORT)_glibc
NNACL_NEWLIB_ROOT=$(TOOLCHAIN_BASE)/nacl_$(BUILD_ARCH_SHORT)_newlib
NNACL_NEWLIB_SDK32=../../../scons-out/nacl-x86-32
NNACL_NEWLIB_SDK64=../../../scons-out/nacl-x86-64
PNACL_ROOT=$(TOOLCHAIN_BASE)/pnacl_newlib
PNACL_TRANSLATOR_ROOT=$(TOOLCHAIN_BASE)/pnacl_translator
ARM_ROOT=$(TOOLCHAIN_BASE)/arm_trusted
CFLAGS = $(CFLAGS_EXTRA)
######################################################################
.PHONY = clean
.SUFFIXES : .c .cc .o .bc
######################################################################
# Measurement tools
######################################################################
# Enable timing and size measurements by invoking the makefile with:
# measureit=1, PERF_LOGGER=<script_path>, COMPILE_REPEATER=<script_path>
######################################################################
ifeq ($(measureit),1)
REPETITIONS ?= 1
# Times how long it took to translate to a file, and repeats N times
# writing the result to $@.compile_time. Note $@ corresponds to $@ from
# whichever Make rule that this is embedded into.
TIME_TRANSLATE=$(COMPILE_REPEATER) $(REPETITIONS) $@
# Calculate user+sys time for generating executable $(1) for benchmark $(2)
# Assumes the following format for name of $(1): $(2)."setup_identifier"
# examples of "setup_identifier": nacl.opt.x8664, pnacl_translator.x8664, ...
# Assumes time is logged to a file with name $(1).compile_time
LOG_TRANSLATE_TIME=(TIME_FILE="$(1).compile_time" && \
FILE_TYPE=$(subst $(2).,,$(1)) && \
$(PERF_LOGGER) LogRealTime $$TIME_FILE "compiletime" $(2) $$FILE_TYPE)
else
# Set the various operations to nops
TIME_TRANSLATE=
LOG_TRANSLATE_TIME=true
endif
ifeq ($(measureit),1)
# Check gzipped size of file $(1) for benchmark $(2)
# Assumes the following format for name of $(1): $(2)."setup_identifier"
# examples of "setup_identifier": nacl.opt.x8664, opt.prelinked.bc, ...
LOG_ZIP_SIZE=(FILE_TYPE=$(subst $(2).,,$(1)) && \
$(PERF_LOGGER) LogGzippedSize $(1) "transfersize" $(2) $$FILE_TYPE)
else
LOG_ZIP_SIZE=true
endif
ifeq ($(measureit),1)
# Measure both translation time and size of resulting file.
LOG_TIME_AND_SIZE=$(call LOG_TRANSLATE_TIME,$(1),$(2)) && \
$(call LOG_ZIP_SIZE,$(1),$(2))
else
LOG_TIME_AND_SIZE=true
endif
######################################################################
clean:
rm -f -- *.pexe *.bc *.o *.s *.x86 *.arm *.c~ .h~ \
*.html *.data \
$(IT) $(IT).* *.out src/*bc $(EXTRA_CLEAN)
pnacl_bin: $(IT).pnacl.arm $(IT).pnacl.opt.arm \
$(IT).pnacl.x8632 $(IT).pnacl.opt.x8632 \
$(IT).pnacl.x8664 $(IT).pnacl.opt.x8664
nacl_bin: $(IT).nacl.x8632 $(IT).nacl.opt.x8632 \
$(IT).nacl.x8664 $(IT).nacl.opt.x8664
nosfi_bin: $(IT).gcc.x8632 $(IT).gcc.opt.x8632 \
$(IT).gcc.arm $(IT).gcc.opt.arm
nosfillvm_bin: $(IT).llvm.x8632 $(IT).llvm.opt.x8632 \
$(IT).llvm.hw.arm $(IT).llvm.opt.hw.arm
all: pnacl_bin nacl_bin nosfi_bin nosfillvm_bin
######################################################################
## NON-SANDBOXING GCC TOOLCHAINS
######################################################################
LOCAL_GCC=/usr/bin/gcc
EMCCFLAGS=-s ASM_JS=1 -s TOTAL_MEMORY=268435456 $(CFLAGS_EXTRA)
# Note: emcc should be in $PATH, or LOCAL_EMCC can be set to
# the location of emcc.
LOCAL_EMCC=emcc
# straight x86-32 gcc
$(IT).gcc.x8632: $(SRC) $(CPPSRC)
$(LOCAL_GCC) -O0 -m32 $(CFLAGS) $^ -static -lstdc++ -lm -o $@
@$(call LOG_ZIP_SIZE,$@,$(IT))
# optimized x86-32 gcc
$(IT).gcc.opt.x8632: $(SRC) $(CPPSRC)
$(LOCAL_GCC) -O3 -m32 $(CFLAGS) $^ -static -lstdc++ -lm -o $@
@$(call LOG_ZIP_SIZE,$@,$(IT))
# straight x86-64 gcc
$(IT).gcc.x8664: $(SRC) $(CPPSRC)
$(LOCAL_GCC) -O0 -m64 -DSPEC_CPU2000_LP64 $(CFLAGS) \
$^ -static -lstdc++ -lm -o $@
@$(call LOG_ZIP_SIZE,$@,$(IT))
# optimized x86-64 gcc
$(IT).gcc.opt.x8664: $(SRC) $(CPPSRC)
$(LOCAL_GCC) -O3 -m64 -DSPEC_CPU2000_LP64 $(CFLAGS) \
$^ -static -lstdc++ -lm -o $@
@$(call LOG_ZIP_SIZE,$@,$(IT))
# Emscripten javascript/html generation for Asm.js
# Sadly, we have to build two versions -- one for "ref" and one for "train" --
# due to the way Emscripten packages data files.
# It will actually create .emcc.ref.html and .emcc.train.html files
$(IT).emcc.html: $(SRC) $(CPPSRC)
../prepare_input.py -v --config $(SPEC_COMPONENT) train
$(LOCAL_EMCC) -O2 -m32 $(CFLAGS) \
$(EMCCFLAGS) $(EMCCFLAGS_EXTRA_TRAIN) $^ \
-static -lstdc++ -lm -o $@.train.html
../fixup_asmjs.py $@.train.html
../prepare_input.py -v --config $(SPEC_COMPONENT) ref
$(LOCAL_EMCC) -O2 -m32 $(CFLAGS) \
$(EMCCFLAGS) $(EMCCFLAGS_EXTRA_REF) $^ \
-static -lstdc++ -lm -o $@.ref.html
../fixup_asmjs.py $@.ref.html
touch $@
######################################################################
## NON-SANDBOXING LLVM TOOLCHAINS
######################################################################
LOCAL_LLVM=clang++
# straight x86-32 llvm
$(IT).llvm.x8632: $(SRC) $(CPPSRC)
$(LOCAL_LLVM) -O0 -m32 $(CFLAGS) $^ -static -o $@
@$(call LOG_ZIP_SIZE,$@,$(IT))
# optimized x86-32 llvm
$(IT).llvm.opt.x8632: $(SRC) $(CPPSRC)
$(LOCAL_LLVM) -O3 -m32 $(CFLAGS) $^ -static -o $@
@$(call LOG_ZIP_SIZE,$@,$(IT))
# straight x86-64 llvm
$(IT).llvm.x8664: $(SRC) $(CPPSRC)
$(LOCAL_LLVM) -O0 -m64 -DSPEC_CPU2000_LP64 $(CFLAGS) \
$^ -static -o $@
@$(call LOG_ZIP_SIZE,$@,$(IT))
# optimized x86-64 llvm
$(IT).llvm.opt.x8664: $(SRC) $(CPPSRC)
$(LOCAL_LLVM) -O3 -m64 -DSPEC_CPU2000_LP64 $(CFLAGS) \
$^ -static -o $@
@$(call LOG_ZIP_SIZE,$@,$(IT))
# straight ARM llvm
$(IT).llvm.hw.arm: $(SRC) $(CPPSRC)
$(LOCAL_LLVM) -O0 $(CFLAGS) \
$^ -static -o $@
@$(call LOG_ZIP_SIZE,$@,$(IT))
# optimized ARM llvm
$(IT).llvm.opt.hw.arm: $(SRC) $(CPPSRC)
$(LOCAL_LLVM) -O3 $(CFLAGS) \
$^ -static -o $@
@$(call LOG_ZIP_SIZE,$@,$(IT))
######################################################################
# EXPERIMENTAL
# this is only for testing within an artificial CrOS hook for ARM/thumb2
# BUG=http://code.google.com/p/chromium/issues/detail?id=61695
# BUG=http://code.google.com/p/chromium/issues/detail?id=38909
# BUG=http://code.google.com/p/nativeclient/issues/detail?id=135
#########################################################################
ifndef ARM_GCC
ARM_GCC = arm-linux-gnueabi-gcc
endif
ifndef ARM_ARCH_FLAGS
ARM_ARCH_FLAGS = -march=armv7-a -mcpu=cortex-a9 -mfpu=neon -marm
endif
ifndef ARM_LINK_FLAGS
ARM_LINK_FLAGS = -lstdc++ -lm -static
endif
# straight arm gcc
$(IT).gcc.arm: $(SRC) $(CPPSRC)
$(ARM_GCC) -O0 $(CFLAGS) $^ $(ARM_ARCH_FLAGS) $(ARM_LINK_FLAGS) -o $@
@$(call LOG_ZIP_SIZE,$@,$(IT))
# optimized arm gcc
$(IT).gcc.opt.arm: $(SRC) $(CPPSRC)
$(ARM_GCC) -O3 $(CFLAGS) $^ $(ARM_ARCH_FLAGS) $(ARM_LINK_FLAGS) -o $@
@$(call LOG_ZIP_SIZE,$@,$(IT))
######################################################################
## NACL-GCC TOOLCHAINS
######################################################################
NACL_GCC=$(NNACL_GLIBC_ROOT)/bin/x86_64-nacl-gcc
NACL_GCC_NEWLIB32=$(NNACL_NEWLIB_ROOT)/bin/x86_64-nacl-gcc \
-B $(NNACL_NEWLIB_SDK32)/lib \
-I $(NNACL_NEWLIB_SDK32)/include
NACL_GCC_NEWLIB64=$(NNACL_NEWLIB_ROOT)/bin/x86_64-nacl-gcc \
-B $(NNACL_NEWLIB_SDK64)/lib \
-I $(NNACL_NEWLIB_SDK64)/include
# nacl x86 gcc
$(IT).nacl.x8632: $(SRC) $(CPPSRC)
$(NACL_GCC_NEWLIB32) -O0 -m32 $(CFLAGS) $^ -static -lstdc++ -lm -o $@
@$(call LOG_ZIP_SIZE,$@,$(IT))
# nacl optimized x86 gcc
$(IT).nacl.opt.x8632: $(SRC) $(CPPSRC)
$(NACL_GCC_NEWLIB32) -O3 -m32 $(CFLAGS) $^ -static -lstdc++ -lm -o $@
@$(call LOG_ZIP_SIZE,$@,$(IT))
# nacl x86 gcc, dynamic
$(IT).nacl.dyn.x8632: $(SRC) $(CPPSRC)
$(NACL_GCC) -O0 -m32 $(CFLAGS) -fPIC -g $^ -lstdc++ -lm -o $@
@$(call LOG_ZIP_SIZE,$@,$(IT))
# nacl optimized x86 gcc, dynamic
$(IT).nacl.dyn.opt.x8632: $(SRC) $(CPPSRC)
$(NACL_GCC) -O3 -m32 $(CFLAGS) -fPIC -g $^ -lstdc++ -lm -o $@
@$(call LOG_ZIP_SIZE,$@,$(IT))
# nacl x86-64 gcc
$(IT).nacl.x8664: $(SRC) $(CPPSRC)
$(NACL_GCC_NEWLIB64) -O0 -m64 $(CFLAGS) $^ -static -lstdc++ -lm -o $@
@$(call LOG_ZIP_SIZE,$@,$(IT))
# nacl optimized x86-64 gcc
$(IT).nacl.opt.x8664: $(SRC) $(CPPSRC)
$(NACL_GCC_NEWLIB64) -O3 -m64 $(CFLAGS) $^ -static -lstdc++ -lm -o $@
@$(call LOG_ZIP_SIZE,$@,$(IT))
# nacl x86-64 gcc, dynamic
$(IT).nacl.dyn.x8664: $(SRC) $(CPPSRC)
$(NACL_GCC) -O0 -m64 $(CFLAGS) -fPIC -g $^ -lstdc++ -lm -o $@
@$(call LOG_ZIP_SIZE,$@,$(IT))
# nacl optimized x86-64 gcc, dynamic
$(IT).nacl.dyn.opt.x8664: $(SRC) $(CPPSRC)
$(NACL_GCC) -O3 -m64 $(CFLAGS) -fPIC -g $^ -lstdc++ -lm -o $@
@$(call LOG_ZIP_SIZE,$@,$(IT))
######################################################################
## BITCODE TOOLCHAINS
######################################################################
# BITCODE - FRONTEND
ifdef NACL_ENABLE_INSECURE_ZERO_BASED_SANDBOX
EXTRA_TRANSLATOR_FLAGS=-sfi-zero-based-sandbox
else
EXTRA_TRANSLATOR_FLAGS=
endif
PNACL_TRANSLATOR_FLAGS_FAST=-translate-fast
PNACL_SZ_FLAGS=--use-sz -O2
PNACL_BIN=$(PNACL_ROOT)/bin
# Sandboxed translation uses the standalone translator install (which only
# supports sandboxed translation). This allows it to run on the arm hardware
# bots, which have no native toolchain build.
PNACL_TRANSLATOR=$(TIME_TRANSLATE) $(PNACL_BIN)/pnacl-translate \
$(EXTRA_TRANSLATOR_FLAGS)
PNACL_TRANSLATOR_SB=$(TIME_TRANSLATE) \
$(PNACL_TRANSLATOR_ROOT)/bin/pnacl-translate --pnacl-sb
PNACL_TRANSLATOR_SB_EMU=$(PNACL_TRANSLATOR_SB) --pnacl-use-emulator \
$(EXTRA_TRANSLATOR_FLAGS)
PNACL_CC=$(PNACL_BIN)/pnacl-clang
PNACL_CXX=$(PNACL_BIN)/pnacl-clang++
PNACL_FINALIZE=$(PNACL_BIN)/pnacl-finalize
PNACL_FLAGS=--pnacl-driver-verbose
PNACL_FLAGS_COMMON=$(PNACL_FLAGS) $(CFLAGS)
%.bc: %.c
$(PNACL_CC) -O0 $(PNACL_FLAGS_COMMON) $< -c -o $@
%.bc: %.cc
$(PNACL_CXX) -O0 $(PNACL_FLAGS_COMMON) $< -c -o $@
%.o3.bc: %.c
$(PNACL_CC) -O3 $(PNACL_FLAGS_COMMON) $< -c -o $@
%.o3.bc: %.cc
$(PNACL_CXX) -O3 $(PNACL_FLAGS_COMMON) $< -c -o $@
$(IT).unopt.pexe: $(SRC:%.c=%.bc) $(CPPSRC:%.cc=%.bc)
$(PNACL_CXX) -O0 $(PNACL_FLAGS_COMMON) $^ -static -lm -o $@
@$(call LOG_ZIP_SIZE,$@,$(IT))
$(IT).unopt.stripped.pexe: $(IT).unopt.pexe
$(PNACL_FINALIZE) $^ -o $@
@$(call LOG_ZIP_SIZE,$@,$(IT))
$(IT).opt.pexe: $(SRC:%.c=%.o3.bc) $(CPPSRC:%.cc=%.o3.bc)
$(PNACL_CXX) -O3 $(PNACL_FLAGS_COMMON) $^ -static -lm -o $@
@$(call LOG_ZIP_SIZE,$@,$(IT))
$(IT).opt.stripped.pexe: $(IT).opt.pexe
$(PNACL_FINALIZE) $^ -o $@
@$(call LOG_ZIP_SIZE,$@,$(IT))
######################################################################
# BITCODE - BACKEND - ARM (sandboxed and non-sandboxed translators)
$(IT).pnacl.arm: $(IT).unopt.stripped.pexe
$(PNACL_TRANSLATOR) $(PNACL_FLAGS) $^ -o $@ -arch arm
@$(call LOG_TIME_AND_SIZE,$@,$(IT))
$(IT).pnacl.opt.arm: $(IT).opt.stripped.pexe
$(PNACL_TRANSLATOR) $(PNACL_FLAGS) $^ -o $@ -arch arm
@$(call LOG_TIME_AND_SIZE,$@,$(IT))
$(IT).pnacl_translator.arm: $(IT).unopt.stripped.pexe
$(PNACL_TRANSLATOR_SB_EMU) $(PNACL_FLAGS) $^ -o $@ -arch arm
@$(call LOG_TIME_AND_SIZE,$@,$(IT))
$(IT).pnacl_translator.opt.arm: $(IT).opt.stripped.pexe
$(PNACL_TRANSLATOR_SB_EMU) $(PNACL_FLAGS) $^ -o $@ -arch arm
@$(call LOG_TIME_AND_SIZE,$@,$(IT))
$(IT).pnacl_translator_fast.opt.arm: $(IT).opt.stripped.pexe
$(PNACL_TRANSLATOR_SB_EMU) $(PNACL_FLAGS) \
$(PNACL_TRANSLATOR_FLAGS_FAST) $^ -o $@ -arch arm
@$(call LOG_TIME_AND_SIZE,$@,$(IT))
# For arm translator testing, the pexes are built on x86 and copied to the
# arm boards, but the intermediate .bc files are removed to keep the transfer
# small. To keep make from trying to rebuild the pexe, use a phony target
# with no dependencies
$(IT).pnacl_translator.hw.arm:
$(PNACL_TRANSLATOR_SB) $(PNACL_FLAGS) $(IT).unopt.stripped.pexe \
-o $@ -arch arm
@$(call LOG_TIME_AND_SIZE,$@,$(IT))
$(IT).pnacl_translator.opt.hw.arm:
$(PNACL_TRANSLATOR_SB) $(PNACL_FLAGS) $(IT).opt.stripped.pexe \
-o $@ -arch arm
@$(call LOG_TIME_AND_SIZE,$@,$(IT))
$(IT).pnacl_translator_fast.opt.hw.arm:
$(PNACL_TRANSLATOR_SB) $(PNACL_FLAGS) $(IT).opt.stripped.pexe \
$(PNACL_TRANSLATOR_FLAGS_FAST) -o $@ -arch arm
@$(call LOG_TIME_AND_SIZE,$@,$(IT))
$(IT).pnacl_translator_1thread.opt.hw.arm:
$(PNACL_TRANSLATOR_SB) $(PNACL_FLAGS) $(IT).opt.stripped.pexe \
-o $@ -arch arm -threads=seq
@$(call LOG_TIME_AND_SIZE,$@,$(IT))
$(IT).pnacl_translator_fast_1thread.opt.hw.arm:
$(PNACL_TRANSLATOR_SB) $(PNACL_FLAGS) $(IT).opt.stripped.pexe \
$(PNACL_TRANSLATOR_FLAGS_FAST) -o $@ -arch arm -threads=seq
@$(call LOG_TIME_AND_SIZE,$@,$(IT))
.PHONY: $(IT).pnacl_translator.hw.arm
.PHONY: $(IT).pnacl_translator.opt.hw.arm
.PHONY: $(IT).pnacl_translator_fast.opt.hw.arm
.PHONY: $(IT).pnacl_translator_1thread.opt.hw.arm
.PHONY: $(IT).pnacl_translator_fast_1thread.opt.hw.arm
######################################################################
# BITCODE - BACKEND - X8632 (sandboxed and non-sandboxed translators)
$(IT).pnacl.x8632: $(IT).unopt.stripped.pexe
$(PNACL_TRANSLATOR) $(PNACL_FLAGS) $^ -o $@ -arch x86-32
@$(call LOG_TIME_AND_SIZE,$@,$(IT))
$(IT).pnacl.opt.x8632: $(IT).opt.stripped.pexe
$(PNACL_TRANSLATOR) $(PNACL_FLAGS) $^ -o $@ -arch x86-32
@$(call LOG_TIME_AND_SIZE,$@,$(IT))
$(IT).pnacl.opt.sz.x8632: $(IT).opt.stripped.pexe
$(PNACL_TRANSLATOR) $(PNACL_FLAGS) $(PNACL_SZ_FLAGS) $^ \
-o $@ -arch x86-32
@$(call LOG_TIME_AND_SIZE,$@,$(IT))
$(IT).pnacl_translator.x8632: $(IT).unopt.stripped.pexe
$(PNACL_TRANSLATOR_SB) $(PNACL_FLAGS) $^ -o $@ -arch x86-32
@$(call LOG_TIME_AND_SIZE,$@,$(IT))
$(IT).pnacl_translator.opt.x8632: $(IT).opt.stripped.pexe
$(PNACL_TRANSLATOR_SB) $(PNACL_FLAGS) $^ -o $@ -arch x86-32
@$(call LOG_TIME_AND_SIZE,$@,$(IT))
$(IT).pnacl_translator_fast.opt.x8632: $(IT).opt.stripped.pexe
$(PNACL_TRANSLATOR_SB) $(PNACL_FLAGS) $(PNACL_TRANSLATOR_FLAGS_FAST) \
$^ -o $@ -arch x86-32
@$(call LOG_TIME_AND_SIZE,$@,$(IT))
$(IT).pnacl_translator_fast.opt.sz.x8632: $(IT).opt.stripped.pexe
$(PNACL_TRANSLATOR_SB) $(PNACL_FLAGS) $(PNACL_TRANSLATOR_FLAGS_FAST) \
$(PNACL_SZ_FLAGS) $^ -o $@ -arch x86-32
@$(call LOG_TIME_AND_SIZE,$@,$(IT))
$(IT).pnacl_translator_1thread.opt.x8632: $(IT).opt.stripped.pexe
$(PNACL_TRANSLATOR_SB) $(PNACL_FLAGS) $^ -o $@ -arch x86-32 \
-threads=seq
@$(call LOG_TIME_AND_SIZE,$@,$(IT))
$(IT).pnacl_translator_fast_1thread.opt.x8632: $(IT).opt.stripped.pexe
$(PNACL_TRANSLATOR_SB) $(PNACL_FLAGS) $(PNACL_TRANSLATOR_FLAGS_FAST) \
$^ -o $@ -arch x86-32 -threads=seq
@$(call LOG_TIME_AND_SIZE,$@,$(IT))
$(IT).pnacl_translator_fast_1thread.opt.sz.x8632: $(IT).opt.stripped.pexe
$(PNACL_TRANSLATOR_SB) $(PNACL_FLAGS) $(PNACL_SZ_FLAGS) \
$^ -o $@ -arch x86-32 -threads=seq
@$(call LOG_TIME_AND_SIZE,$@,$(IT))
######################################################################
# BITCODE - BACKEND - X8664 (sandboxed and non-sandboxed translators)
$(IT).pnacl.x8664: $(IT).unopt.stripped.pexe
$(PNACL_TRANSLATOR) $(PNACL_FLAGS) $^ -o $@ -arch x86-64
@$(call LOG_TIME_AND_SIZE,$@,$(IT))
$(IT).pnacl.opt.x8664: $(IT).opt.stripped.pexe
$(PNACL_TRANSLATOR) $(PNACL_FLAGS) $^ -o $@ -arch x86-64
@$(call LOG_TIME_AND_SIZE,$@,$(IT))
$(IT).pnacl.opt.sz.x8664: $(IT).opt.stripped.pexe
$(PNACL_TRANSLATOR) $(PNACL_FLAGS) $(PNACL_SZ_FLAGS) $^ \
-o $@ -arch x86-64
@$(call LOG_TIME_AND_SIZE,$@,$(IT))
$(IT).pnacl_translator.x8664: $(IT).unopt.stripped.pexe
$(PNACL_TRANSLATOR_SB) $(PNACL_FLAGS) $^ -o $@ -arch x86-64
@$(call LOG_TIME_AND_SIZE,$@,$(IT))
$(IT).pnacl_translator.opt.x8664: $(IT).opt.stripped.pexe
$(PNACL_TRANSLATOR_SB) $(PNACL_FLAGS) $^ -o $@ -arch x86-64
@$(call LOG_TIME_AND_SIZE,$@,$(IT))
$(IT).pnacl_translator_fast.opt.x8664: $(IT).opt.stripped.pexe
$(PNACL_TRANSLATOR_SB) $(PNACL_FLAGS) $(PNACL_TRANSLATOR_FLAGS_FAST) \
$^ -o $@ -arch x86-64
@$(call LOG_TIME_AND_SIZE,$@,$(IT))
$(IT).pnacl_translator_fast.opt.sz.x8664: $(IT).opt.stripped.pexe
$(PNACL_TRANSLATOR_SB) $(PNACL_FLAGS) $(PNACL_TRANSLATOR_FLAGS_FAST) \
$(PNACL_SZ_FLAGS) $^ -o $@ -arch x86-64
@$(call LOG_TIME_AND_SIZE,$@,$(IT))
$(IT).pnacl_translator_1thread.opt.x8664: $(IT).opt.stripped.pexe
$(PNACL_TRANSLATOR_SB) $(PNACL_FLAGS) $^ -o $@ -arch x86-64 \
-threads=seq
@$(call LOG_TIME_AND_SIZE,$@,$(IT))
$(IT).pnacl_translator_fast_1thread.opt.x8664: $(IT).opt.stripped.pexe
$(PNACL_TRANSLATOR_SB) $(PNACL_FLAGS) $(PNACL_TRANSLATOR_FLAGS_FAST) \
$^ -o $@ -arch x86-64 -threads=seq
@$(call LOG_TIME_AND_SIZE,$@,$(IT))
$(IT).pnacl_translator_fast_1thread.opt.sz.x8664: $(IT).opt.stripped.pexe
$(PNACL_TRANSLATOR_SB) $(PNACL_FLAGS) $(PNACL_SZ_FLAGS) \
$^ -o $@ -arch x86-64 -threads=seq
@$(call LOG_TIME_AND_SIZE,$@,$(IT))