LLVM_CXXFLAGS=`llvm-config-2.8 --cppflags core jit native codegen ipo`
LLVM_LDFLAGS=`llvm-config-2.8 --ldflags --libs core jit native codegen ipo`
#LLVM_CXXFLAGS=`llvm-config-2.8 --cppflags all`
#LLVM_LDFLAGS=`llvm-config-2.8 --ldflags --libs all`

COMMON_FLAGS=-fPIC
COMMON_FLAGS+=-Wall -Wextra -Wno-unused-parameter
COMMON_FLAGS+=-O0 -g
#COMMON_FLAGS+=-O2 -march=nocona -fomit-frame-pointer

CFLAGS=$(COMMON_FLAGS) -std=c99
CXXFLAGS=$(COMMON_FLAGS) -ansi
LDFLAGS=-rdynamic -lm -ldl

# Test coverage
#COMMON_FLAGS+=-fprofile-arcs -ftest-coverage
#LDFLAGS+=-lgcov

CC=gcc
CXX=g++

all: builddir build/resp

builddir:
	mkdir -p build

#build/c.o

OBJECTS = \
	build/compile.o \
	build/constrain.o \
	build/cps.o \
	build/expand.o \
	build/flatten.o \
	build/gc.o \
	build/lift.o \
	build/parse.o \
	build/pprint.o \
	build/repl.o \
	build/resp.o \
	build/simplify.o \
	build/tlsf.o \
	build/unify.o

LLVM_OBJECTS = build/llvm.o

build/resp: $(OBJECTS) $(LLVM_OBJECTS)
	$(CXX) -o $@ $(OBJECTS) $(LLVM_OBJECTS) $(LDFLAGS) $(LLVM_LDFLAGS)

build/%.o: src/%.cpp src/resp.hpp
	$(CXX) $(CXXFLAGS) -o $@ -c $<

build/tlsf.o: src/tlsf.c src/tlsf.h
	$(CC) $(CFLAGS) -o $@ -c $<

build/llvm.o: src/llvm.cpp src/resp.hpp
	$(CXX) $(CXXFLAGS) $(LLVM_CXXFLAGS) -o $@ -c src/llvm.cpp

build/%.so: src/%.cpp src/resp.hpp
	$(CXX) -shared $(CXXFLAGS) -o $@ $^

clean:
	rm -rf build

check:
	./test.sh

doc:
	doxygen ./resp.dox

install-support:
	install -d ~/.vim/indent ~/.vim/syntax
	install -m 644 ./support/vim/indent/resp.vim ~/.vim/indent/resp.vim
	install -m 644 ./support/vim/syntax/resp.vim ~/.vim/syntax/resp.vim