# The following variables will likely need to be modified, depending on where
# and how you built LLVM & Clang. They can be overridden in a command-line
# invocation of make, like:
#
#   make LLVM_SRC_PATH=<path> LIBCXX_INSTALL_PATH=<path> CLANG_PATH=<path> \
#        PNACL_BIN_PATH=<path> ...
#

# LLVM_SRC_PATH is the path to the root of the checked out source code. This
# directory should contain the configure script, the include/ and lib/
# directories of LLVM, Clang in tools/clang/, etc.
# Alternatively, if you're building vs. a binary download of LLVM, then
# LLVM_SRC_PATH can point to the main untarred directory.
LLVM_SRC_PATH ?= ../llvm

# The x86-32-specific sandboxed translator directory.
# It holds sandboxed versions of libraries and binaries.
SB_LLVM_PATH ?= $(shell readlink -e \
  ../../out/sandboxed_translators_work/translator-i686/llvm-sb/Release)

# NACL_ROOT is the root of the native client repository.
NACL_ROOT ?= $(shell python -c "import sys; sys.path.insert(0, 'pydir'); \
  import utils; print utils.FindBaseNaCl()")

# TOOLCHAIN_ROOT is the location of NaCl/PNaCl toolchains and other
# tools like qemu.
TOOLCHAIN_ROOT ?= $(shell readlink -e $(NACL_ROOT)/toolchain/linux_x86)

# PNACL_TOOLCHAIN_ROOT is the location of the PNaCl toolchain.
# This is used as the default root for finding binutils, libcxx, etc.
PNACL_TOOLCHAIN_ROOT ?= $(shell readlink -e $(TOOLCHAIN_ROOT)/pnacl_newlib_raw)

# The location of PNaCl tools (e.g., binutils objdump, pnacl-clang++, etc.).
PNACL_BIN_PATH ?= $(shell readlink -e $(PNACL_TOOLCHAIN_ROOT)/bin)

# Allow tests to be overridden, e.g.:
#   make -f Makefile.standalone check-lit \
#     CHECK_LIT_TESTS="tests_lit/llvm2ice_tests/{alloc,arith}.ll"
#   make -f Makefile.standalone check-xtest \
#     CHECK_XTEST_TESTS=crosstest/Output/simple_loop_x8632_native_O2_sse2.xtest
CHECK_LIT_TESTS ?= tests_lit
CHECK_XTEST_TESTS ?= crosstest/Output

# Hack to auto-detect autoconf versus cmake build of LLVM.  If the LLVM tools
# were dynamically linked with something like libLLVM-3.7svn.so, it is an
# autoconf build, otherwise it is a cmake build.  AUTOCONF is set to 0 for
# cmake, nonzero for autoconf.
AUTOCONF ?= $(shell ldd $(PNACL_BIN_PATH)/opt | grep -c libLLVM-)

# CLANG_PATH is the location of the clang compiler to use for building
# the host binaries.
CLANG_PATH ?= $(shell readlink -e \
  $(NACL_ROOT)/../third_party/llvm-build/Release+Asserts/bin)

# LIBCXX_INSTALL_PATH is the directory where libc++ is located. It should
# contain header files and corresponding libraries. This is used for
# building the host binaries in conjuction with clang.
LIBCXX_INSTALL_PATH ?= $(PNACL_TOOLCHAIN_ROOT)
STDLIB_FLAGS := -stdlib=libc++ -I$(LIBCXX_INSTALL_PATH)/include/c++/v1

HOST_ARCH ?= x86_64
ifeq ($(HOST_ARCH),x86_64)
  HOST_FLAGS = -m64
else
  ifeq ($(HOST_ARCH),x86)
    HOST_FLAGS = -m32
  endif
endif

ifdef DEBUG
  OBJDIR = build/Debug
  OPTLEVEL = -O0
  LINKOPTLEVEL = -O0
else
  OBJDIR = build/Release
  OPTLEVEL = -O2 -ffunction-sections -fdata-sections
  LINKOPTLEVEL = -O2
endif

# The list of CXX defines that are dependent on build parameters.
BASE_CXX_DEFINES =
CXX_EXTRA =
LD_EXTRA =

ifdef MINIMAL
  NOASSERT = 1
  NODUMP = 1
  OBJDIR := $(OBJDIR)+Min
  BASE_CXX_DEFINES += -DALLOW_LLVM_CL=0 -DALLOW_LLVM_IR=0 \
    -DALLOW_LLVM_IR_AS_INPUT=0 -DALLOW_TIMERS=0 -DALLOW_MINIMAL_BUILD=1
else
  BASE_CXX_DEFINES += -DALLOW_LLVM_CL=1 -DALLOW_LLVM_IR=1 \
    -DALLOW_LLVM_IR_AS_INPUT=1 -DALLOW_TIMERS=1 -DALLOW_MINIMAL_BUILD=0
endif

ifdef NODUMP
  OBJDIR := $(OBJDIR)+NoDump
  BASE_CXX_DEFINES += -DALLOW_DUMP=0
else
  BASE_CXX_DEFINES += -DALLOW_DUMP=1
endif

# Restrict to a single supported target.  Current options:
#   SZTARGET=ARM32
#   SZTARGET=MIPS32
#   SZTARGET=X8632
#   SZTARGET=X8664
ifdef SZTARGET
  OBJDIR := $(OBJDIR)+T_$(SZTARGET)
  BASE_CXX_DEFINES += -DSZTARGET=$(SZTARGET)
endif

BASE_CXX_DEFINES += -DPNACL_LLVM
BASE_CXX_DEFINES += -DSUBZERO_REVISION=$(shell git rev-parse HEAD)

CXX_DEFINES := $(BASE_CXX_DEFINES) -DPNACL_BROWSER_TRANSLATOR=0

ifdef NOASSERT
  ASSERTIONS = -DNDEBUG
else
  ASSERTIONS =
  OBJDIR := $(OBJDIR)+Asserts
endif

ifdef UBSAN
  OBJDIR := $(OBJDIR)+UBSan
  CXX_EXTRA += -fsanitize=undefined -fno-sanitize=vptr \
               -fno-sanitize=nonnull-attribute
  LD_EXTRA += -fsanitize=undefined
endif

ifdef UBSAN_TRAP
  OBJDIR := $(OBJDIR)+UBSan_Trap
  CXX_EXTRA += -fsanitize=undefined-trap -fsanitize-undefined-trap-on-error \
               -fno-sanitize=vptr -fno-sanitize=nonnull-attribute
  LD_EXTRA += -fsanitize=undefined-trap
endif

ifdef TSAN
  OBJDIR := $(OBJDIR)+TSan
  CXX_EXTRA += -fsanitize=thread
  LD_EXTRA += -fsanitize=thread
endif

ifdef ASAN
  OBJDIR := $(OBJDIR)+ASan
  CXX_EXTRA += -fsanitize=address
  LD_EXTRA += -fsanitize=address
endif

ifdef MSAN
  # TODO(ascull): this has an as yet undiagnosed uninitialized memory access
  OBJDIR := $(OBJDIR)+MSan
  CXX_EXTRA += -fsanitize=memory
  LD_EXTRA += -fsanitize=memory
endif

ifdef FORCEASM
  FORCEASM_FLAG = --filetype=asm
  # With --filetype=asm and --sandbox, the llvm-mc assembler emits the lock and
  # 16-bit prefixes in the "wrong" order, causing the validator to reject the
  # resulting nexe.  So we just disable those tests for now.
  FORCEASM_XTEST_EXCLUDES = -e x8632,sandbox,test_sync_atomic
  FORCEASM_LIT_PARAM = --param=FORCEASM
  # x86 sandboxing lit tests are disabled because filetype=asm does not
  # handle bundle_lock pad-to-end correctly.
  # TODO(jpp): fix this.
  FORCEASM_LIT_TEST_EXCLUDES = --filter='^(?!.*/x86/sandboxing.ll).*'
else
  FORCEASM_FLAG =
  FORCEASM_XTEST_EXCLUDES =
  FORCEASM_LIT_PARAM =
  FORCEASM_LIT_TEST_EXCLUDES =
endif

ifdef LINUX_MALLOC_PROFILE
  OBJDIR := $(OBJDIR)+MalProf
  CXX_EXTRA += -DALLOW_LINUX_MALLOC_PROFILE=1
  LD_EXTRA += -Wl,--export-dynamic
endif

SB_OBJDIR := $(OBJDIR)+Sandboxed
SBB_OBJDIR := $(OBJDIR)+SandboxedBrowser

V8_DIR = $(NACL_ROOT)/../v8
V8_CXXFLAGS := -I$(V8_DIR)

$(info -----------------------------------------------)
$(info Using LLVM_SRC_PATH = $(LLVM_SRC_PATH))
$(info Using SB_LLVM_PATH = $(SB_LLVM_PATH))
$(info Using NACL_ROOT = $(NACL_ROOT))
$(info Using TOOLCHAIN_ROOT = $(TOOLCHAIN_ROOT))
$(info Using PNACL_TOOLCHAIN_ROOT = $(PNACL_TOOLCHAIN_ROOT))
$(info Using PNACL_BIN_PATH = $(PNACL_BIN_PATH))
$(info Using CLANG_PATH = $(CLANG_PATH))
$(info Using LIBCXX_INSTALL_PATH = $(LIBCXX_INSTALL_PATH))
$(info Using HOST_ARCH     = $(HOST_ARCH))
$(info -----------------------------------------------)

LLVM_CXXFLAGS := `$(PNACL_BIN_PATH)/llvm-config --cxxflags`
SB_LLVM_CXXFLAGS := $(LLVM_CXXFLAGS)

# Listing specific libraries that are needed for pnacl-sz
# and the unittests, since we build "tools-only" for the
# sandboxed_translators (which doesn't include every library
# listed by llvm-config).

LLVM_LIBS_LIST := -lLLVMIRReader -lLLVMBitReader -lLLVMNaClBitTestUtils \
    -lLLVMNaClBitReader -lLLVMNaClBitAnalysis -lLLVMNaClBitWriter \
    -lLLVMAsmParser -lLLVMNaClAnalysis -lLLVMCore -lLLVMSupport

ifeq ($(AUTOCONF), 0)
  # LLVM cmake build
  LLVM_LIBS := $(LLVM_LIBS_LIST)
  # For the cmake build, the gtest libs end up in the same place as the LLVM
  # libs, so no "-L..." arg is needed.
  GTEST_LIB_PATH ?=
  CLANG_FORMAT_PATH ?= $(PNACL_BIN_PATH)
else
  # LLVM autoconf build
  LLVM_LIBS := -lLLVM-3.7svn
  GTEST_LIB_PATH ?= -L../../out/llvm_x86_64_linux_work/Release+Asserts/lib
  ifneq ($(wildcard \
           ../../out/llvm_x86_64_linux_work/Release+Asserts/bin/clang-format),)
    CLANG_FORMAT_PATH ?= ../../out/llvm_x86_64_linux_work/Release+Asserts/bin
  else
    CLANG_FORMAT_PATH ?= \
                     ../../out/llvm_x86_64_linux_debug_work/Debug+Asserts/bin
  endif
endif

LLVM_LDFLAGS := $(LLVM_LIBS) \
                `$(PNACL_BIN_PATH)/llvm-config --ldflags` \
                `$(PNACL_BIN_PATH)/llvm-config --system-libs`
SB_LLVM_LDFLAGS := -Wl,--start-group $(LLVM_LIBS_LIST) -Wl,--end-group \
                   -L$(SB_LLVM_PATH)/lib

CCACHE := `command -v ccache`
CXX := CCACHE_CPP2=yes $(CCACHE) $(CLANG_PATH)/clang++
SB_CXX := CCACHE_CPP2=yes $(CCACHE) $(PNACL_BIN_PATH)/pnacl-clang++
SB_TRANSLATE := $(PNACL_BIN_PATH)/pnacl-translate
SB_FINALIZE := $(PNACL_BIN_PATH)/pnacl-finalize --no-strip-syms

# Extra warnings that LLVM's build system adds in addition to -Wall.
LLVM_EXTRA_WARNINGS := -Wcovered-switch-default

# Use g++ to compile, to check for errors/warnings that clang++ might have
# missed.  It's unlikely to link, unless LLVM was also built with g++, so the
# compile_only target should be used.  Note: This ifdef section is deliberately
# placed here instead of with the other ifdef sections, so that its redefinition
# of CXX/STDLIB_FLAGS/LLVM_EXTRA_WARNINGS follows their normal definitions.
ifdef GPLUSPLUS
  CXX := CCACHE_CPP2=yes $(CCACHE) g++
  STDLIB_FLAGS :=
  LLVM_EXTRA_WARNINGS := \
    -Wcast-qual \
    -Wno-comment \
    -Wno-long-long \
    -Wno-maybe-uninitialized \
    -Wno-missing-field-initializers \
    -Wno-unused-parameter \
    -Wwrite-strings
  OBJDIR := $(OBJDIR)+Gplusplus
endif

BASE_CXXFLAGS := -std=gnu++11 -Wall -Wextra -fno-rtti \
  -fno-exceptions $(OPTLEVEL) $(ASSERTIONS) -g -pedantic \
  $(LLVM_EXTRA_WARNINGS) $(CXX_EXTRA) -MP -MD -Werror

ifdef WASM
  BASE_CXXFLAGS := $(BASE_CXXFLAGS) $(V8_CXXFLAGS) -DALLOW_WASM=1
  OBJDIR := $(OBJDIR)+Wasm
else
  BASE_CXXFLAGS := $(BASE_CXXFLAGS) -DALLOW_WASM=0
endif

# TODO(stichnot,jpp): Restructure static fields in template classes to avoid
# needing -Wno-undefined-var-template .
CXXFLAGS := $(LLVM_CXXFLAGS) $(BASE_CXXFLAGS) $(CXX_DEFINES) $(HOST_FLAGS) \
  $(STDLIB_FLAGS) -Wno-undefined-var-template
SB_CXXFLAGS := $(SB_LLVM_CXXFLAGS) $(BASE_CXXFLAGS) $(BASE_CXX_DEFINES) \
               -Wno-unknown-pragmas -I$(NACL_ROOT) -I$(NACL_ROOT)/..

LDFLAGS := $(HOST_FLAGS) -L$(LIBCXX_INSTALL_PATH)/lib -Wl,--gc-sections \
  $(LD_EXTRA) $(STDLIB_FLAGS)
# Not specifying -Wl,--gc-sections but instead doing bitcode linking GC w/ LTO.
SB_LDFLAGS := $(LINKOPTLEVEL) $(LD_EXTRA)

# List the target-specific source files first, which generally take longer to
# compile, in the hope of improving parallel build time.
SRCS = \
  IceAssemblerARM32.cpp \
  IceInstARM32.cpp \
  IceInstMIPS32.cpp \
  IceInstX8632.cpp \
  IceInstX8664.cpp \
  IceTargetLowering.cpp \
  IceTargetLoweringARM32.cpp \
  IceTargetLoweringMIPS32.cpp \
  IceTargetLoweringX86.cpp \
  IceTargetLoweringX8632.cpp \
  IceTargetLoweringX8664.cpp \
  IceAssembler.cpp \
  IceBrowserCompileServer.cpp \
  IceCfg.cpp \
  IceCfgNode.cpp \
  IceClFlags.cpp \
  IceCompiler.cpp \
  IceCompileServer.cpp \
  IceELFObjectWriter.cpp \
  IceELFSection.cpp \
  IceFixups.cpp \
  IceGlobalContext.cpp \
  IceGlobalInits.cpp \
  IceInst.cpp \
  IceIntrinsics.cpp \
  IceLiveness.cpp \
  IceLoopAnalyzer.cpp \
  IceMangling.cpp \
  IceMemory.cpp \
  IceOperand.cpp \
  IceRangeSpec.cpp \
  IceRegAlloc.cpp \
  IceRevision.cpp \
  IceRNG.cpp \
  IceSwitchLowering.cpp \
  IceThreading.cpp \
  IceTimerTree.cpp \
  IceTranslator.cpp \
  IceTypes.cpp \
  IceVariableSplitting.cpp \
  LinuxMallocProfiling.cpp \
  main.cpp \
  PNaClTranslator.cpp

ifndef MINIMAL
  SRCS += \
    IceASanInstrumentation.cpp \
    IceConverter.cpp \
    IceInstrumentation.cpp \
    IceTypeConverter.cpp
endif

ifdef WASM
  SRCS += \
    WasmTranslator.cpp
endif

OBJS=$(patsubst %.cpp, $(OBJDIR)/%.o, $(SRCS))
SB_OBJS=$(patsubst %.cpp, $(SB_OBJDIR)/%.o, $(SRCS))
SBB_OBJS=$(patsubst %.cpp, $(SBB_OBJDIR)/%.o, $(SRCS))

UNITTEST_SRCS = \
  BitcodeMunge.cpp \
  IceELFSectionTest.cpp \
  IceParseInstsTest.cpp

# The X86 assembler tests take too long to compile. Given how infrequently the
# assembler will change, we disable them.
ifdef CHECK_X86_ASM
  ifndef DEBUG
  $(error Run check-unit with DEBUG=1 lest your machine perish)
  endif
  UNITTEST_SRCS += AssemblerX8632/LowLevel.cpp \
    AssemblerX8632/DataMov.cpp \
    AssemblerX8632/Locked.cpp \
    AssemblerX8632/GPRArith.cpp \
    AssemblerX8632/XmmArith.cpp \
    AssemblerX8632/ControlFlow.cpp \
    AssemblerX8632/Other.cpp \
    AssemblerX8632/X87.cpp \
    AssemblerX8664/LowLevel.cpp \
    AssemblerX8664/DataMov.cpp \
    AssemblerX8664/Locked.cpp \
    AssemblerX8664/GPRArith.cpp \
    AssemblerX8664/XmmArith.cpp \
    AssemblerX8664/ControlFlow.cpp \
    AssemblerX8664/Other.cpp
endif

UNITTEST_OBJS = $(patsubst %.cpp, $(OBJDIR)/unittest/%.o, $(UNITTEST_SRCS))
UNITTEST_LIB_OBJS = $(filter-out $(OBJDIR)/main.o,$(OBJS))

NEXES = $(SB_OBJDIR)/pnacl-sz.x8632.nexe \
        $(SB_OBJDIR)/pnacl-sz.x8664.nexe \
        $(SBB_OBJDIR)/pnacl_public_x86_32_pnacl_sz_nexe \
        $(SBB_OBJDIR)/pnacl_public_x86_64_pnacl_sz_nexe
NEXES_LITE = $(SB_OBJDIR)/pnacl-sz.x8664.nexe

# Keep all the first target so it's the default.
all: $(OBJDIR)/pnacl-sz make_symlink runtime

ifdef TSAN
sb sb-lite:
	@echo "Skipping pnacl-sz.*.nexe: TSAN isn't supported under NaCl."
else
sb: $(NEXES) sb_make_symlink exists-sbtc
sb-lite: $(NEXES_LITE) exists-sbtc
endif

# SHOW_BUILD_ATTS is an executable that is run to show what build
# attributes were used to build pnacl-sz.
SHOW_BUILD_ATTS = $(OBJDIR)/pnacl-sz --build-atts

# Creates symbolic link so that testing is easier. Also runs
# pnacl-sz to verify that the defines flags have valid values,
# as well as describe the corresponding build attributes.
make_symlink: $(OBJDIR)/pnacl-sz
	rm -rf pnacl-sz
	ln -s $(OBJDIR)/pnacl-sz
	@echo "Build Attributes:"
	@$(SHOW_BUILD_ATTS)

sb_make_symlink: $(NEXES)
	$(foreach nexe,$(NEXES),rm -rf $(notdir $(nexe)); ln -s $(nexe);)

%.pexe : %.nonfinal.pexe
	$(SB_FINALIZE) -o $@ $<

.PHONY: all compile_only make_symlink runtime bloat sb docs help \
  help-check-lit help-check-xtest exists-nonsfi-x8632 \
  exists-nonsfi-arm32 exists-sbtc exists-spec

compile_only: $(OBJS)

V8_LIBDIR=$(V8_DIR)/out/native/lib.target

ifdef WASM
  V8_LIBS := \
    $(V8_LIBDIR)/libv8.so \
    $(V8_LIBDIR)/libicuuc.so \
    $(V8_LIBDIR)/libicui18n.so
endif

$(OBJDIR)/pnacl-sz: $(OBJS)
	$(CXX) $(LDFLAGS) -o $@ $^ $(LLVM_LDFLAGS) \
          -Wl,-rpath=$(abspath $(LIBCXX_INSTALL_PATH)/lib) $(V8_LIBS)

$(SB_OBJDIR)/pnacl-sz.nonfinal.pexe: $(SB_OBJS)
	$(SB_CXX) $(SB_LDFLAGS) -o $@ $^ $(SB_LLVM_LDFLAGS)

$(SBB_OBJDIR)/pnacl-sz.nonfinal.pexe: $(SBB_OBJS)
	$(SB_CXX) $(SB_LDFLAGS) -o $@ $^ $(SB_LLVM_LDFLAGS) \
          --pnacl-disable-abi-check

$(SB_OBJDIR)/pnacl-sz.x8632.nexe: $(SB_OBJDIR)/pnacl-sz.pexe
	$(SB_TRANSLATE) -arch x86-32 $^ -o $@

$(SB_OBJDIR)/pnacl-sz.x8664.nexe: $(SB_OBJDIR)/pnacl-sz.pexe
	$(SB_TRANSLATE) -arch x86-64 $^ -o $@

$(SBB_OBJDIR)/pnacl_public_x86_32_pnacl_sz_nexe: $(SBB_OBJDIR)/pnacl-sz.pexe
	$(SB_TRANSLATE) -arch x86-32 $^ -o $@

$(SBB_OBJDIR)/pnacl_public_x86_64_pnacl_sz_nexe: $(SBB_OBJDIR)/pnacl-sz.pexe
	$(SB_TRANSLATE) -arch x86-64 $^ -o $@

src/IceRegistersARM32.def: pydir/gen_arm32_reg_tables.py
	python $< > $@

-include $(foreach dep,$(SRCS:.cpp=.d),$(OBJDIR)/$(dep))
$(OBJS): $(OBJDIR)/%.o: src/%.cpp
	$(CXX) -c $(CXXFLAGS) $< -o $@

-include $(foreach dep,$(SRCS:.cpp=.d),$(SB_OBJDIR)/$(dep))
$(SB_OBJS): $(SB_OBJDIR)/%.o: src/%.cpp
	$(SB_CXX) -c $(SB_CXXFLAGS) -DPNACL_BROWSER_TRANSLATOR=0 $< -o $@

-include $(foreach dep,$(SRCS:.cpp=.d),$(SBB_OBJDIR)/$(dep))
$(SBB_OBJS): $(SBB_OBJDIR)/%.o: src/%.cpp
	$(SB_CXX) -c $(SB_CXXFLAGS) -DPNACL_BROWSER_TRANSLATOR=1 $< -o $@

$(OBJDIR)/run_unittests: $(UNITTEST_OBJS) $(UNITTEST_LIB_OBJS)
	$(CXX) $(GTEST_LIB_PATH) $(LDFLAGS) -o $@ $^ $(LLVM_LDFLAGS) \
          -lgtest -lgtest_main -ldl \
          -Wl,-rpath=$(abspath $(LIBCXX_INSTALL_PATH)/lib)

-include $(foreach dep,$(UNITTEST_SRCS:.cpp=.d),$(OBJDIR)/unittest/$(dep))
$(UNITTEST_OBJS): $(OBJDIR)/unittest/%.o: unittest/%.cpp
	$(CXX) -c $(CXXFLAGS) \
          -Isrc/ \
          -Iunittest/ \
          -I$(LLVM_SRC_PATH)/utils/unittest/googletest/include \
          -I$(LLVM_SRC_PATH) \
          -DGTEST_HAS_RTTI=0 -DGTEST_USE_OWN_TR1_TUPLE \
          -Wno-expansion-to-defined \
          $< -o $@

$(OBJS): | $(OBJDIR)
$(SB_OBJS): | $(SB_OBJDIR)
$(SBB_OBJS): | $(SBB_OBJDIR)

$(UNITTEST_OBJS): | $(OBJDIR)/unittest $(OBJDIR)/unittest/AssemblerX8632 \
                    $(OBJDIR)/unittest/AssemblerX8664

$(OBJDIR):
	@mkdir -p $@
$(SB_OBJDIR):
	@mkdir -p $@
$(SBB_OBJDIR):
	@mkdir -p $@

$(OBJDIR)/unittest: $(OBJDIR)
	@mkdir -p $@

$(OBJDIR)/unittest/AssemblerX8632: $(OBJDIR)/unittest
	@mkdir -p $@
$(OBJDIR)/unittest/AssemblerX8664: $(OBJDIR)/unittest
	@mkdir -p $@

RT_SRC := runtime/szrt.c runtime/szrt_ll.ll runtime/szrt_profiler.c \
          runtime/szrt_asm_x8632.s runtime/szrt_asm_x8664.s \
          runtime/szrt_asm_arm32.s runtime/szrt_asan.c
RT_OBJ := build/runtime/szrt_native_x8632.o build/runtime/szrt_sb_x8632.o \
          build/runtime/szrt_nonsfi_x8632.o \
          build/runtime/szrt_native_x8664.o build/runtime/szrt_sb_x8664.o \
          build/runtime/szrt_nonsfi_x8664.o \
          build/runtime/szrt_native_arm32.o build/runtime/szrt_sb_arm32.o \
          build/runtime/szrt_nonsfi_arm32.o \
          build/runtime/szrt_asan_x8632.o build/runtime/szrt_asan_x8664.o \
          build/runtime/szrt_asan_arm32.o

runtime: $(RT_OBJ)

# Use runtime.is.built so that build-runtime.py is invoked only once
# even in a parallel build.
.INTERMEDIATE: runtime.is.built
$(RT_OBJ): runtime.is.built
runtime.is.built: $(RT_SRC) pydir/build-runtime.py
	@echo ================ Building Subzero runtime ================
	./pydir/build-runtime.py -v --pnacl-root $(PNACL_TOOLCHAIN_ROOT)

check-lit: $(OBJDIR)/pnacl-sz make_symlink runtime
	PNACL_BIN_PATH=$(PNACL_BIN_PATH) \
	$(LLVM_SRC_PATH)/utils/lit/lit.py -sv $(CHECK_LIT_TESTS) \
            $(FORCEASM_LIT_TEST_EXCLUDES) $(FORCEASM_LIT_PARAM)

ifdef MINIMAL
check-xtest check-xtest-lite: $(OBJDIR)/pnacl-sz make_symlink runtime
	@echo "Crosstests disabled, minimal build"
else
check-xtest: $(OBJDIR)/pnacl-sz make_symlink runtime \
  exists-nonsfi-x8632 exists-nonsfi-arm32 crosstest/test_arith_ll.ll
       # Do all native/sse2 tests, but only test_vector_ops for native/sse4.1.
       # For (slow) sandboxed tests, limit to Om1/sse4.1.
       # run.py (used to run the sandboxed xtests) does not support
       # specifying -cpu cortex-a15 to qemu, hence we disable the
       # hwdiv-arm tests.
	./pydir/crosstest_generator.py -v --lit \
          --toolchain-root $(TOOLCHAIN_ROOT) \
          $(FORCEASM_FLAG) \
          $(FORCEASM_XTEST_EXCLUDES) \
          -i x8632,native,sse2 \
          -i x8632,native,sse4.1,test_vector_ops \
          -i x8632,sandbox,sse4.1,Om1 \
          -i x8632,nonsfi,sse2,O2 \
          -i x8664,native,sse2 \
          -i x8664,native,sse4.1,test_vector_ops \
          -i x8664,sandbox,sse4.1,Om1 \
          -i arm32 \
          -e arm32,sandbox,hwdiv-arm
	PNACL_BIN_PATH=$(PNACL_BIN_PATH) \
	$(LLVM_SRC_PATH)/utils/lit/lit.py -sv $(CHECK_XTEST_TESTS)
check-xtest-lite: $(OBJDIR)/pnacl-sz make_symlink runtime \
  exists-nonsfi-x8632 exists-nonsfi-arm32 crosstest/test_arith_ll.ll
       # Do all native/sse2/neon tests, which are relatively fast.
       # Limit to test_global+mem_intrin for sandbox+nonsfi because sandbox and
       # nonsfi builds are slow, and test_global and mem_intrin are the most
       # common sources of problems.
	./pydir/crosstest_generator.py -v --lit \
          --toolchain-root $(TOOLCHAIN_ROOT) \
          $(FORCEASM_FLAG) \
          $(FORCEASM_XTEST_EXCLUDES) \
          -i x8632,native,sse2,O2 \
          -i x8664,native,sse2,O2 \
          -i arm32,native,neon,O2 \
	  -i x8632,sse2,O2,test_global \
	  -i x8632,sse2,O2,mem_intrin \
	  -i x8664,sse2,O2,test_global \
	  -i x8664,sse2,O2,mem_intrin \
	  -i arm32,neon,O2,test_global \
	  -i arm32,neon,O2,mem_intrin \
          -e x8664,nonsfi
	PNACL_BIN_PATH=$(PNACL_BIN_PATH) \
	$(LLVM_SRC_PATH)/utils/lit/lit.py -sv $(CHECK_XTEST_TESTS)
crosstest/test_arith_ll.ll: pydir/gen_test_arith_ll.py
	python $< > $@
endif

check-unit: $(OBJDIR)/run_unittests
	$(OBJDIR)/run_unittests

# List the spec2k components in roughly reverse order of runtime, to help with
# parallel execution speed.
ALLSPEC := 253.perlbmk 177.mesa 188.ammp 256.bzip2 164.gzip 179.art 183.equake \
           175.vpr 176.gcc 181.mcf 186.crafty 197.parser 254.gap 255.vortex \
           300.twolf 252.eon
.PHONY: $(ALLSPEC)

TARGET := x8632
ifeq ($(TARGET),x8632)
  TARGETFLAG=x8632
  SETUP=SetupGccX8632Opt
  SPEC := --filetype=obj
endif
ifeq ($(TARGET),x8664)
  TARGETFLAG=x8664
  SETUP=SetupGccX8664Opt
  SPEC := --filetype=obj
endif
ifeq ($(TARGET),arm32)
  TARGETFLAG=arm32
  SETUP=SetupGccArmOpt
  SPEC := --filetype=obj
endif
SPECFLAGS := -O2
SPECRUN := --run
%.spec2k: % $(OBJDIR)/pnacl-sz make_symlink runtime
	./pydir/szbuild_spec2k.py -v \
          $(SPECFLAGS) --target=$(TARGETFLAG) $(SPEC) $< $(SPECRUN)

check-spec: exists-spec $(ALLSPEC:=.spec2k)

check: check-lit check-unit check-xtest

NONSFI_LOADER_X8632 = \
  $(NACL_ROOT)/scons-out/opt-linux-x86-32/obj/src/nonsfi/loader/nonsfi_loader
NONSFI_LOADER_ARM32 = \
  $(NACL_ROOT)/scons-out/opt-linux-arm/obj/src/nonsfi/loader/nonsfi_loader
SBTC_LIBFILE = $(SB_LLVM_PATH)/lib/libLLVMSupport.a
SPEC_SAMPLE_PEXE = $(NACL_ROOT)/tests/spec2k/176.gcc/gcc.opt.stripped.pexe

exists-nonsfi-x8632:
	@if [ ! -f $(NONSFI_LOADER_X8632) ] ; then \
          echo "Missing file $(NONSFI_LOADER_X8632)"; \
          echo "Consider running './scons nonsfi_loader'" \
               "in the native_client directory."; \
          exit 1 ; \
        fi

exists-nonsfi-arm32:
	@if [ ! -f $(NONSFI_LOADER_ARM32) ] ; then \
          echo "Missing file $(NONSFI_LOADER_ARM32)"; \
          echo "Consider running './scons platform=arm nonsfi_loader'" \
               "in the native_client directory."; \
          exit 1 ; \
        fi

exists-sbtc:
	@if [ ! -f $(SBTC_LIBFILE) ] ; then \
          echo "Missing file $(SBTC_LIBFILE)"; \
          echo "Consider running 'toolchain_build_pnacl.py --build-sbtc'."; \
          exit 1 ; \
        fi

exists-spec:
	@if [ ! -f $(SPEC_SAMPLE_PEXE) ] ; then \
          echo "Missing file $(SPEC_SAMPLE_PEXE)"; \
          echo "Consider running" \
               "'./run_all.sh BuildBenchmarks 0 SetupPnaclX8632Opt'" \
               "in the native_client/tests/spec2k directory."; \
          exit 1 ; \
        fi

check-presubmit presubmit: exists-nonsfi-x8632 exists-nonsfi-arm32 \
  exists-sbtc exists-spec
# Make sure clang-format gets run.
	+make -f Makefile.standalone format
# Verify MINIMAL build, plus proper usage of REQUIRES in lit tests.
	+make -f Makefile.standalone \
          MINIMAL=1 check
# Check that there are no g++ build errors or warnings.
	+make -f Makefile.standalone \
	  GPLUSPLUS=1 compile_only
# Check the x86 assembler unit tests.
	+make -f Makefile.standalone \
          DEBUG=1 CHECK_X86_ASM=1 check-unit sb
# Run lit tests, cross tests, unit tests, and spec2k/x86-32.
	+make -f Makefile.standalone \
          check check-spec
# Run spec2k/x86-64.
	+make -f Makefile.standalone \
          TARGET=x8664 check-spec
# Run spec2k/x86-64 with sandboxing.
	+make -f Makefile.standalone \
          SPECFLAGS='-O2 --sandbox' TARGET=x8664 check-spec
# Build spec2k under -Om1/x86-32, to check for liveness errors.
	+make -f Makefile.standalone \
          SPECFLAGS='-Om1' SPECRUN= check-spec
# Build spec2k under -Om1/x86-64, to check for liveness errors.
	+make -f Makefile.standalone \
          SPECFLAGS='-Om1' TARGET=x8664 SPECRUN= check-spec
# Run spec2k for x86-32 without advanced phi lowering.
	+make -f Makefile.standalone \
          SPECFLAGS='-O2 --sz=--phi-edge-split=0' check-spec
# Run spec2k for x86-64 without advanced phi lowering.
	+make -f Makefile.standalone \
          SPECFLAGS='-O2 --sz=--phi-edge-split=0' TARGET=x8664 check-spec
# Run cross tests and lit tests to validate filetype=asm output.
	+make -f Makefile.standalone \
          FORCEASM=1 check-xtest check-lit
# Build spec2k for arm32.
	+make -f Makefile.standalone \
          TARGET=arm32 SPECRUN= check-spec
# Build spec2k under -Om1/arm32.
	+make -f Makefile.standalone \
          TARGET=arm32 SPECFLAGS='-Om1' SPECRUN= check-spec
# Run a few spec2k tests for arm32 using qemu. Keep the list sorted in
# roughly reverse order of runtime.
	+make -f Makefile.standalone \
          TARGET=arm32 ALLSPEC='252.eon 254.gap 176.gcc 181.mcf' check-spec
# Provide validation of user awesomeness!
	echo Success

presubmit-lite: exists-nonsfi-x8632 exists-nonsfi-arm32 \
  exists-sbtc exists-spec
# Make sure clang-format gets run.
	+make -f Makefile.standalone format
# Verify MINIMAL build, plus proper usage of REQUIRES in lit tests.
	+make -f Makefile.standalone \
          MINIMAL=1 check sb-lite
# Check that there are no g++ build errors or warnings.
	+make -f Makefile.standalone \
	  GPLUSPLUS=1 compile_only
# Run lit tests, cross tests, unit tests, and spec2k/x86-32.
	+make -f Makefile.standalone \
          check-lit check-unit check-spec
	+make -f Makefile.standalone \
          check-xtest-lite
# Run spec2k/x86-64.
	+make -f Makefile.standalone \
          TARGET=x8664 check-spec
# Build spec2k under -Om1/x86-32, to check for liveness errors.
	+make -f Makefile.standalone \
          SPECFLAGS='-Om1' SPECRUN= check-spec
# Build spec2k under -Om1/x86-64, to check for liveness errors.
	+make -f Makefile.standalone \
          SPECFLAGS='-Om1' TARGET=x8664 SPECRUN= check-spec
# Run cross tests and lit tests to validate filetype=asm output.
	+make -f Makefile.standalone \
          FORCEASM=1 check-lit
	+make -f Makefile.standalone \
          FORCEASM=1 check-xtest-lite
# Build spec2k under -Om1/arm32.
	+make -f Makefile.standalone \
          TARGET=arm32 SPECFLAGS='-Om1' SPECRUN= check-spec
# Run a few spec2k tests for arm32 using qemu. Keep the list sorted in
# roughly reverse order of runtime.
	+make -f Makefile.standalone \
          TARGET=arm32 ALLSPEC='254.gap 176.gcc 181.mcf' check-spec
# Provide validation of user awesomeness!
	echo Success

FORMAT_BLACKLIST =
# Add one of the following lines for each source file to ignore.
FORMAT_BLACKLIST += ! -name IceParseInstsTest.cpp
FORMAT_BLACKLIST += ! -name IceParseTypesTest.cpp
FORMAT_BLACKLIST += ! -name assembler_arm.h
FORMAT_BLACKLIST += ! -name assembler_arm.cc
FORMAT_BLACKLIST += ! -path "./wasm-install/*"
FORMAT_BLACKLIST += ! -path "./pnacl-llvm/*"
format:
	$(CLANG_FORMAT_PATH)/clang-format -style=LLVM -i \
          `find . -regex '.*\.\(c\|h\|cpp\)' $(FORMAT_BLACKLIST)`

format-diff:
	git diff -U0 `git merge-base HEAD master` | \
          PATH=$(PNACL_BIN_PATH):$(PATH) \
          $(LLVM_SRC_PATH)/../clang/tools/clang-format/clang-format-diff.py \
          -p1 -style=LLVM -i

bloat: make_symlink
	nm -C -S -l pnacl-sz | \
          bloat/bloat.py --nm-output=/dev/stdin syms > build/pnacl-sz.bloat.json
	@echo See Subzero size breakdown in bloat/pnacl-sz.bloat.html

bloat-sb: sb_make_symlink
	$(foreach nexe,$(NEXES),nm -C -S -l $(nexe) | bloat/bloat.py \
          --nm-output=/dev/stdin syms > build/$(notdir $(nexe)).bloat.json;)
	@echo "See Subzero size breakdown in:"
	@$(foreach nexe,$(NEXES),echo "  bloat/$(notdir $(nexe)).bloat.html";)

docs:
	make -C docs -f Makefile.standalone

help:
	@cat Makefile.standalone-help/help.txt

help-check-lit:
	@cat Makefile.standalone-help/check-lit.txt

help-check-xtest:
	@cat Makefile.standalone-help/check-xtest.txt

clean:
	rm -rf pnacl-sz *.o $(foreach nexe,$(NEXES),$(notdir $(nexe))) \
          $(OBJDIR) $(SB_OBJDIR) $(SBB_OBJDIR) build/*.bloat.json

clean-all: clean
	rm -rf build/ crosstest/Output/
