LLVM_CXXFLAGS=`llvm-config-2.7 --cppflags core jit native`
LLVM_LDFLAGS=`llvm-config-2.7 --ldflags --libs core jit native`
#LLVM_CXXFLAGS=`llvm-config-2.7 --cppflags all`
#LLVM_LDFLAGS=`llvm-config-2.7 --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

all: builddir build/resp

builddir:
	mkdir -p build

OBJECTS = \
	build/c.o \
	build/compile.o \
	build/constrain.o \
	build/gc.o \
	build/lex.o \
	build/lift.o \
	build/parse.o \
	build/pprint.o \
	build/repl.o \
	build/resp.o \
	build/resp_gc.o \
	build/tlsf.o \
	build/unify.o

LLVM_OBJECTS = build/llvm.o

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

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

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

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

build/%.so: src/%.cpp src/resp.hpp
	g++ -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