#
# Copyright (C) 2014 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

LOCAL_PATH := $(call my-dir)

LIBCXX_SRC_FILES := \
	src/algorithm.cpp \
	src/bind.cpp \
	src/chrono.cpp \
	src/condition_variable.cpp \
	src/debug.cpp \
	src/exception.cpp \
	src/future.cpp \
	src/hash.cpp \
	src/ios.cpp \
	src/iostream.cpp \
	src/locale.cpp \
	src/memory.cpp \
	src/mutex.cpp \
	src/new.cpp \
	src/optional.cpp \
	src/random.cpp \
	src/regex.cpp \
	src/shared_mutex.cpp \
	src/stdexcept.cpp \
	src/string.cpp \
	src/strstream.cpp \
	src/system_error.cpp \
	src/thread.cpp \
	src/typeinfo.cpp \
	src/utility.cpp \
	src/valarray.cpp \

LIBCXX_C_INCLUDES := \
	$(LOCAL_PATH)/include/ \
	external/libcxxabi/include \

LIBCXX_CPPFLAGS := \
	-std=c++11 \
	-nostdinc++ \
	-fexceptions \

# target static lib
include $(CLEAR_VARS)
LOCAL_MODULE := libc++_static
LOCAL_CLANG := true
LOCAL_SRC_FILES := $(LIBCXX_SRC_FILES)
LOCAL_C_INCLUDES := $(LIBCXX_C_INCLUDES)
LOCAL_CPPFLAGS := $(LIBCXX_CPPFLAGS)
LOCAL_RTTI_FLAG := -frtti
LOCAL_WHOLE_STATIC_LIBRARIES := libc++abi
LOCAL_CXX_STL := none
include $(BUILD_STATIC_LIBRARY)

# target dynamic lib
include $(CLEAR_VARS)
LOCAL_MODULE := libc++
LOCAL_CLANG := true
LOCAL_WHOLE_STATIC_LIBRARIES := libc++_static
LOCAL_SHARED_LIBRARIES := libdl
LOCAL_CXX_STL := none
LOCAL_STATIC_LIBRARIES_arm := libunwind_llvm
LOCAL_LDFLAGS_arm := -Wl,--exclude-libs,libunwind_llvm.a
include $(BUILD_SHARED_LIBRARY)

# host static lib
include $(CLEAR_VARS)
LOCAL_MODULE := libc++_static
LOCAL_CLANG := true
LOCAL_SRC_FILES := $(LIBCXX_SRC_FILES)
LOCAL_C_INCLUDES := $(LIBCXX_C_INCLUDES)
LOCAL_CPPFLAGS := $(LIBCXX_CPPFLAGS)
LOCAL_RTTI_FLAG := -frtti
LOCAL_WHOLE_STATIC_LIBRARIES := libc++abi
LOCAL_MULTILIB := both
LOCAL_CXX_STL := none
include $(BUILD_HOST_STATIC_LIBRARY)

# Don't build for unbundled branches
ifeq (,$(TARGET_BUILD_APPS))

# host dynamic lib
include $(CLEAR_VARS)
LOCAL_MODULE := libc++
LOCAL_CLANG := true
LOCAL_LDFLAGS := -nodefaultlibs
LOCAL_WHOLE_STATIC_LIBRARIES := libc++_static
LOCAL_MULTILIB := both
LOCAL_CXX_STL := none

ifeq ($(HOST_OS), darwin)
LOCAL_LDFLAGS += \
            -Wl,-unexported_symbols_list,external/libcxx/lib/libc++unexp.exp  \
            -Wl,-force_symbols_not_weak_list,external/libcxx/lib/notweak.exp \
            -Wl,-force_symbols_weak_list,external/libcxx/lib/weak.exp
else
LOCAL_LDLIBS += -lrt -lpthread -ldl
endif

include $(BUILD_HOST_SHARED_LIBRARY)

LIT := $(ANDROID_BUILD_TOP)/external/llvm/utils/lit/lit.py
LIBCXX_CONFIGTESTS := $(ANDROID_BUILD_TOP)/external/libcxx/buildcmds/configtests.py
LIBCXX_TEST_MK := $(ANDROID_BUILD_TOP)/external/libcxx/test.mk

test-libcxx-target: test-libcxx-target-clang
test-libcxx-host: test-libcxx-host-clang

test-libcxx-target-clang: libc++
	python $(LIBCXX_CONFIGTESTS) --compiler=clang
	LIT=$(LIT) LIT_MODE=device make -f $(LIBCXX_TEST_MK)
test-libcxx-target-gcc: libc++
	python $(LIBCXX_CONFIGTESTS) --compiler=gcc
	LIT=$(LIT) LIT_MODE=device make -f $(LIBCXX_TEST_MK)
test-libcxx-target-clang-32: libc++
	python $(LIBCXX_CONFIGTESTS) --bitness=32 --compiler=clang
	LIT=$(LIT) LIT_MODE=device make -f $(LIBCXX_TEST_MK)
test-libcxx-target-gcc-32: libc++
	python $(LIBCXX_CONFIGTESTS) --bitness=32 --compiler=gcc
	LIT=$(LIT) LIT_MODE=device make -f $(LIBCXX_TEST_MK)
test-libcxx-target-clang-64: libc++
	python $(LIBCXX_CONFIGTESTS) --bitness=64 --compiler=clang
	LIT=$(LIT) LIT_MODE=device make -f $(LIBCXX_TEST_MK)
test-libcxx-target-gcc-64: libc++
	python $(LIBCXX_CONFIGTESTS) --bitness=64 --compiler=gcc
	LIT=$(LIT) LIT_MODE=device make -f $(LIBCXX_TEST_MK)

test-libcxx-host-clang: libc++
	python $(LIBCXX_CONFIGTESTS) --compiler=clang --host
	LIT=$(LIT) LIT_MODE=host make -f $(LIBCXX_TEST_MK)
test-libcxx-host-gcc: libc++
	python $(LIBCXX_CONFIGTESTS) --compiler=gcc --host
	LIT=$(LIT) LIT_MODE=host make -f $(LIBCXX_TEST_MK)
test-libcxx-host-clang-32: libc++
	python $(LIBCXX_CONFIGTESTS) --bitness=32 --compiler=clang --host
	LIT=$(LIT) LIT_MODE=host make -f $(LIBCXX_TEST_MK)
test-libcxx-host-gcc-32: libc++
	python $(LIBCXX_CONFIGTESTS) --bitness=32 --compiler=gcc --host
	LIT=$(LIT) LIT_MODE=host make -f $(LIBCXX_TEST_MK)
test-libcxx-host-clang-64: libc++
	python $(LIBCXX_CONFIGTESTS) --bitness=64 --compiler=clang --host
	LIT=$(LIT) LIT_MODE=host make -f $(LIBCXX_TEST_MK)
test-libcxx-host-gcc-64: libc++
	python $(LIBCXX_CONFIGTESTS) --bitness=64 --compiler=gcc --host
	LIT=$(LIT) LIT_MODE=host make -f $(LIBCXX_TEST_MK)

# Don't want to just make test-libcxx-(host|target) dependencies of this because
# the two families can't be run concurrently.
test-libcxx: libc++
	python buildcmds/configtests.py --host
	LIT=$(LIT) LIT_MODE=host make -f $(ANDROID_BUILD_TOP)/external/libcxx/test.mk
	python buildcmds/configtests.py
	LIT=$(LIT) LIT_MODE=device make -f $(ANDROID_BUILD_TOP)/external/libcxx/test.mk

endif  # TARGET_BUILD_APPS
