# 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> LLVM_BIN_PATH=<path> \
#        LIBCXX_INSTALL_PATH=<path> CLANG_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

# LLVM_BIN_PATH is the directory where binaries are placed by the LLVM build
# process. It should contain the tools like opt, llc and clang. The default
# reflects a debug build with autotools (configure & make).
LLVM_BIN_PATH ?= $(shell readlink -e \
	../../out/llvm_i686_linux_work/Release+Asserts/bin)

# LIBCXX_INSTALL_PATH is the directory where libc++ is located. It should
# contain header files and corresponding libraries
LIBCXX_INSTALL_PATH ?= $(shell readlink -e \
	../../../toolchain/linux_x86/pnacl_newlib/host_x86_32)

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

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

$(info -----------------------------------------------)
$(info Using LLVM_SRC_PATH = $(LLVM_SRC_PATH))
$(info Using LLVM_BIN_PATH = $(LLVM_BIN_PATH))
$(info Using LIBCXX_INSTALL_PATH = $(LIBCXX_INSTALL_PATH))
$(info Using CLANG_PATH = $(CLANG_PATH))
$(info Using HOST_ARCH     = $(HOST_ARCH))
$(info -----------------------------------------------)

LLVM_CXXFLAGS := `$(LLVM_BIN_PATH)/llvm-config --cxxflags`
LLVM_LDFLAGS := `$(LLVM_BIN_PATH)/llvm-config --libs` \
                `$(LLVM_BIN_PATH)/llvm-config --ldflags`

# It's recommended that CXX matches the compiler you used to build LLVM itself.
OPTLEVEL := -O0
CCACHE := `command -v ccache`
CXX := CCACHE_CPP2=yes $(CCACHE) $(CLANG_PATH)/clang++

CXXFLAGS := $(LLVM_CXXFLAGS) -Wall -Wextra -Werror -fno-rtti \
	-fno-exceptions $(OPTLEVEL) -g $(HOST_FLAGS) \
	-Wno-error=unused-parameter -I$(LIBCXX_INSTALL_PATH)/include/c++/v1
LDFLAGS := $(HOST_FLAGS) -L$(LIBCXX_INSTALL_PATH)/lib

SRCS= \
	IceCfg.cpp \
	IceCfgNode.cpp \
	IceConverter.cpp \
	IceGlobalContext.cpp \
	IceInst.cpp \
	IceInstX8632.cpp \
	IceIntrinsics.cpp \
	IceLiveness.cpp \
	IceOperand.cpp \
	IceRegAlloc.cpp \
        IceRNG.cpp \
	IceTargetLowering.cpp \
	IceTargetLoweringX8632.cpp \
	IceTranslator.cpp \
	IceTypeConverter.cpp \
	IceTypes.cpp \
	llvm2ice.cpp \
	PNaClTranslator.cpp

OBJS=$(patsubst %.cpp, build/%.o, $(SRCS))

# Keep all the first target so it's the default.
all: llvm2ice

.PHONY: all

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

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

$(OBJS): | build

build:
	@mkdir -p $@

check-lit: llvm2ice
	LLVM_BIN_PATH=$(LLVM_BIN_PATH) \
	$(LLVM_SRC_PATH)/utils/lit/lit.py -sv tests_lit

check: check-lit
	(cd crosstest; ./runtests.sh)

# TODO: Fix the use of wildcards.
# Assumes clang-format is within $PATH.
format:
	clang-format -style=LLVM -i src/*.h src/*.cpp

# Assumes clang-format-diff.py is within $PATH, and that the
# clang-format it calls is also within $PATH.  This may require adding
# a component to $PATH, or creating symlinks within some existing
# $PATH component.  Uses the one in /usr/lib/clang-format/ if it
# exists.
ifeq (,$(wildcard /usr/lib/clang-format/clang-format-diff.py))
  CLANG_FORMAT_DIFF = clang-format-diff.py
else
  CLANG_FORMAT_DIFF = /usr/lib/clang-format/clang-format-diff.py
endif
format-diff:
	git diff -U0 `git merge-base HEAD master` | \
	$(CLANG_FORMAT_DIFF) -p1 -style=LLVM -i

clean:
	rm -rf llvm2ice *.o build/
