# 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

SB_CXX_DEFINES := $(BASE_CXX_DEFINES) -DPNACL_BROWSER_TRANSLATOR=1
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

$(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 := $(LLVM_LIBS_LIST) \
                   -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

# 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) $(SB_CXX_DEFINES)

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 \
  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))

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))

# 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: $(SB_OBJDIR)/pnacl-sz.x86-32.nexe
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)

.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.x86-32.nexe: $(SB_OBJS)
	$(eval PNACL_SZ_BASE := $(patsubst %.nexe, %, $@))
	$(SB_CXX) $(SB_LDFLAGS) -o $(PNACL_SZ_BASE).nonfinal.pexe $^ \
          $(SB_LLVM_LDFLAGS)
	$(SB_TRANSLATE) -arch x86-32 $(PNACL_SZ_BASE).nonfinal.pexe -o $@ \
          --allow-llvm-bitcode-input

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) $< -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 \
          $< -o $@

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

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

$(OBJDIR):
	@mkdir -p $@
$(SB_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.
	./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,neon \
          -e arm32,nonsfi \
          -e arm32,neon,test_vector_ops \
          -e arm32,neon,test_select
	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 := -O2 --filetype=obj
endif
ifeq ($(TARGET),x8664)
  TARGETFLAG=x8664
  SETUP=SetupGccX8664Opt
  SPEC := -O2 --filetype=obj
endif
ifeq ($(TARGET),arm32)
  TARGETFLAG=arm32
  SETUP=SetupGccArmOpt
  SPEC := -O2 --filetype=obj
endif
SPECFLAGS :=
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
# 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='--sz=--phi-edge-split=0' check-spec
# Run spec2k for x86-64 without advanced phi lowering.
	+make -f Makefile.standalone \
          SPECFLAGS='--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

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 $(OBJDIR) $(SB_OBJDIR) build/pnacl-sz.bloat.json

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