# 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> ...
#

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

$(info -----------------------------------------------)
$(info Using LLVM_SRC_PATH = $(LLVM_SRC_PATH))
$(info Using LLVM_BIN_PATH = $(LLVM_BIN_PATH))
$(info -----------------------------------------------)

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

# It's recommended that CXX matches the compiler you used to build LLVM itself.
OPTLEVEL := -O0
CXX := g++
CXXFLAGS := -Wall -Wextra -Werror -fno-rtti -fno-exceptions \
	$(OPTLEVEL) -g $(LLVM_CXXFLAGS) -m32
LDFLAGS := -m32

SRCS= \
	IceCfg.cpp \
	IceCfgNode.cpp \
	IceGlobalContext.cpp \
	IceInst.cpp \
	IceInstX8632.cpp \
	IceIntrinsics.cpp \
	IceLiveness.cpp \
	IceOperand.cpp \
	IceRegAlloc.cpp \
	IceTargetLowering.cpp \
	IceTargetLoweringX8632.cpp \
	IceTypes.cpp \
	llvm2ice.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

# 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: llvm2ice
	LLVM_BIN_PATH=$(LLVM_BIN_PATH) \
	$(LLVM_SRC_PATH)/utils/lit/lit.py -sv tests_lit
	(cd crosstest; LLVM_BIN_PATH=$(LLVM_BIN_PATH) ./runtests.sh)

# TODO: Fix the use of wildcards.
format:
	$(LLVM_BIN_PATH)/clang-format -style=LLVM -i \
	src/Ice*.h src/Ice*.cpp src/llvm2ice.cpp

clean:
	rm -rf llvm2ice *.o build/
