# "lib/Makefile.darwin" -- for libcxxabi

.SUFFIXES: .cpp .o
VPATH = ../src
SRCDIR = ../src
CCACHE = ccache
CLANG_BUILDDIR = /Volumes/Isolde/builds/LLVM/gcc40-cmake-build
CLANG_PATH = ${CLANG_BUILDDIR}/bin
TRIPLE = powerpc-apple-darwin8
CXX = ${CCACHE} ${CLANG_PATH}/clang++
CC = ${CCACHE} ${CLANG_PATH}/clang
CXXLD = ${CXX}
RC_ProjectSourceVersion ?= 1
PREFIX = /usr/local/experimental/llvm
LIBDIR = ${PREFIX}/lib
PKGINCLUDEDIR = ${PREFIX}/include/libcxxabi
PKGLIBDIR = ${LIBDIR}/libcxxabi
SOEXT = dylib

# CXXLIB_ROOT = /usr/include/c++/4.0.0
# CXXLIB_INCLUDES = -I${CXXLIB_ROOT} -I${CXXLIB_ROOT}/${TRIPLE}
UNWIND_INCLUDES = -I/usr/lib/gcc/${TRIPLE}/4.0.1/include

CXXLIB_ROOT = /Users/fang/local/src/LLVM-svn/libcxx.git/include
# libcxx's include/__config defines _NOEXCEPT
CXXLIB_INCLUDES = -I${CXXLIB_ROOT}
# UNWIND_INCLUDES = -I/usr/local/experimental/llvm/lib/clang/3.3/include

CXXCPPFLAGS = -I../include ${CXXLIB_INCLUDES} ${UNWIND_INCLUDES}
CXXFLAGS = -std=c++0x -stdlib=libc++ -fstrict-aliasing -Wstrict-aliasing=2 \
	-Wsign-conversion -Wshadow -Wconversion -Wunused-variable \
	-Wmissing-field-initializers -Wchar-subscripts -Wmismatched-tags \
	-Wmissing-braces -Wshorten-64-to-32 -Wsign-compare \
	-Wstrict-aliasing=2 -Wstrict-overflow=4 -Wunused-parameter \
	-Wnewline-eof
CXXFLAGS += -fPIC -fno-common
CXXFLAGS += -no-integrated-as
# CXXFLAGS += -isysroot ${SDKROOT}
# CXXFLAGS += -save-temps -triple ${TRIPLE}

# ARCHS = -arch i386 -arch x86_64
# ARCHS = -arch ppc

OFLAGS = -gdwarf2 -O0
# OFLAGS = -g -O3

LDFLAGS = \
	-dynamiclib -nodefaultlibs  \
	-current_version ${RC_ProjectSourceVersion} \
	-compatibility_version 1 \
	-lSystem \
	-lgcc_s.10.4
#	-install_name ${PKGLIBDIR}/$@

#	if [ -f "${SDKROOT}/usr/local/lib/libCrashReporterClient.a" ]
#	then
#		LDFLAGS+=" -lCrashReporterClient"
#	fi

TARGET = libc++abi.${RC_ProjectSourceVersion}.${SOEXT}
all: ${TARGET}

.cpp.o:
	${CXX} ${OFLAGS} ${ARCHS} ${CXXFLAGS} ${CXXCPPFLAGS} -c $< -o $@

OBJS = \
	abort_message.o \
	cxa_aux_runtime.o \
	cxa_default_handlers.o \
	cxa_demangle.o \
	cxa_exception.o \
	cxa_exception_storage.o \
	cxa_guard.o \
	cxa_handlers.o \
	cxa_new_delete.o \
	cxa_personality.o \
	cxa_unexpected.o \
	cxa_vector.o \
	cxa_virtual.o \
	exception.o \
	private_typeinfo.o \
	stdexcept.o \
	typeinfo.o

${TARGET}: ${OBJS}
	${CXXLD} ${ARCHS} ${LDFLAGS} ${OBJS} -o $@

install-headers:
	mkdir -p ${PKGINCLUDEDIR} && \
	cp ../include/*.h ${PKGINCLUDEDIR}
install-exec:
	mkdir -p ${PKGLIBDIR} && \
	cp ${TARGET} ${PKGLIBDIR} && \
	pushd ${PKGLIBDIR} && \
	install_name_tool -id ${PKGLIBDIR}/${TARGET} ${TARGET} && \
	ln -f -s ${TARGET} libc++abi.dylib && \
	popd
# alternatively, run install_name_tool after installation
install: install-headers install-exec

clean:
	rm -f *.o
	rm -f *.dylib

