# 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
  OBJDIR := $(OBJDIR)+Min
  BASE_CXX_DEFINES += -DALLOW_DUMP=0 -DALLOW_LLVM_CL=0 -DALLOW_LLVM_IR=0 \
    -DALLOW_LLVM_IR_AS_INPUT=0 -DALLOW_MINIMAL_BUILD=1
else
  BASE_CXX_DEFINES += -DALLOW_DUMP=1 -DALLOW_LLVM_CL=1 -DALLOW_LLVM_IR=1 \
    -DALLOW_LLVM_IR_AS_INPUT=1 -DALLOW_MINIMAL_BUILD=0
endif

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

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

$(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
  CLANG_FORMAT_PATH ?= ../../out/llvm_x86_64_linux_work/Release+Asserts/bin
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 -Werror -fno-rtti \
  -fno-exceptions $(OPTLEVEL) $(ASSERTIONS) -g -pedantic \
  $(LLVM_EXTRA_WARNINGS) $(CXX_EXTRA)

CXXFLAGS := $(LLVM_CXXFLAGS) $(BASE_CXXFLAGS) $(CXX_DEFINES) $(HOST_FLAGS) \
  $(STDLIB_FLAGS)
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 \
  IceRegAlloc.cpp \
  IceRNG.cpp \
  IceSwitchLowering.cpp \
  IceThreading.cpp \
  IceTimerTree.cpp \
  IceTranslator.cpp \
  IceTypes.cpp \
  main.cpp \
  PNaClTranslator.cpp

ifndef MINIMAL
  SRCS += \
    IceConverter.cpp \
    IceTypeConverter.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

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

ifdef TSAN
sb:
	@echo "Skipping pnacl-sz.*.nexe: TSAN isn't supported under NaCl."
else
sb: $(NEXES) sb_make_symlink
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

compile_only: $(OBJS)

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

$(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 $< > $@

# TODO(stichnot): Be more precise than "*.h" here and elsewhere.
$(OBJS): $(OBJDIR)/%.o: src/%.cpp src/*.h src/*.def
	$(CXX) -c $(CXXFLAGS) $< -o $@

$(SB_OBJS): $(SB_OBJDIR)/%.o: src/%.cpp src/*.h src/*.def
	$(SB_CXX) -c $(SB_CXXFLAGS) -DPNACL_BROWSER_TRANSLATOR=0 $< -o $@

$(SBB_OBJS): $(SBB_OBJDIR)/%.o: src/%.cpp src/*.h src/*.def
	$(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)

$(UNITTEST_OBJS): $(OBJDIR)/unittest/%.o: unittest/%.cpp unittest/*.h \
                  src/*.h src/*.def
	$(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
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

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
	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: $(OBJDIR)/pnacl-sz make_symlink runtime
	@echo "Crosstests disabled, minimal build"
else
check-xtest: $(OBJDIR)/pnacl-sz make_symlink runtime
       # 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)
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
SPECBUILDONLY := false
%.spec2k: % $(OBJDIR)/pnacl-sz make_symlink runtime
	./pydir/szbuild_spec2k.py -v \
          $(SPECFLAGS) --target=$(TARGETFLAG) $(SPEC) $<
	$(SPECBUILDONLY) || ( cd ../../../tests/spec2k; \
	 ./run_all.sh RunTimedBenchmarks $(SETUP) train $< )

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

check: check-lit check-unit check-xtest

check-presubmit presubmit:
# 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
# Build spec2k under -Om1/x86-32, to check for liveness errors.
	+make -f Makefile.standalone \
          SPECFLAGS='-Om1' SPECBUILDONLY=true check-spec
# Build spec2k under -Om1/x86-64, to check for liveness errors.
	+make -f Makefile.standalone \
          SPECFLAGS='-Om1' TARGET=x8664 SPECBUILDONLY=true 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 SPECBUILDONLY=true check-spec
# Build spec2k under -Om1/arm32.
	+make -f Makefile.standalone \
          TARGET=arm32 SPECFLAGS='-Om1' SPECBUILDONLY=true 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

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:
	$(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/
