1# 2# Copyright (C) 2014 The Android Open Source Project 3# 4# Licensed under the Apache License, Version 2.0 (the "License"); 5# you may not use this file except in compliance with the License. 6# You may obtain a copy of the License at 7# 8# http://www.apache.org/licenses/LICENSE-2.0 9# 10# Unless required by applicable law or agreed to in writing, software 11# distributed under the License is distributed on an "AS IS" BASIS, 12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13# See the License for the specific language governing permissions and 14# limitations under the License. 15# 16 17LOCAL_PATH := $(call my-dir) 18 19LIBCXX_SRC_FILES := \ 20 src/algorithm.cpp \ 21 src/bind.cpp \ 22 src/chrono.cpp \ 23 src/condition_variable.cpp \ 24 src/debug.cpp \ 25 src/exception.cpp \ 26 src/future.cpp \ 27 src/hash.cpp \ 28 src/ios.cpp \ 29 src/iostream.cpp \ 30 src/locale.cpp \ 31 src/memory.cpp \ 32 src/mutex.cpp \ 33 src/new.cpp \ 34 src/optional.cpp \ 35 src/random.cpp \ 36 src/regex.cpp \ 37 src/shared_mutex.cpp \ 38 src/stdexcept.cpp \ 39 src/string.cpp \ 40 src/strstream.cpp \ 41 src/system_error.cpp \ 42 src/thread.cpp \ 43 src/typeinfo.cpp \ 44 src/utility.cpp \ 45 src/valarray.cpp \ 46 47LIBCXX_C_INCLUDES := \ 48 $(LOCAL_PATH)/include/ \ 49 external/libcxxabi/include \ 50 51LIBCXX_CPPFLAGS := \ 52 -std=c++11 \ 53 -nostdinc++ \ 54 -fexceptions \ 55 56# target static lib 57include $(CLEAR_VARS) 58LOCAL_MODULE := libc++_static 59LOCAL_CLANG := true 60LOCAL_SRC_FILES := $(LIBCXX_SRC_FILES) 61LOCAL_C_INCLUDES := $(LIBCXX_C_INCLUDES) 62LOCAL_CPPFLAGS := $(LIBCXX_CPPFLAGS) 63LOCAL_RTTI_FLAG := -frtti 64LOCAL_WHOLE_STATIC_LIBRARIES := libc++abi 65LOCAL_CXX_STL := none 66include $(BUILD_STATIC_LIBRARY) 67 68# target dynamic lib 69include $(CLEAR_VARS) 70LOCAL_MODULE := libc++ 71LOCAL_CLANG := true 72LOCAL_WHOLE_STATIC_LIBRARIES := libc++_static 73LOCAL_SHARED_LIBRARIES := libdl 74LOCAL_CXX_STL := none 75LOCAL_STATIC_LIBRARIES_arm := libunwind_llvm 76LOCAL_LDFLAGS_arm := -Wl,--exclude-libs,libunwind_llvm.a 77include $(BUILD_SHARED_LIBRARY) 78 79# host static lib 80include $(CLEAR_VARS) 81LOCAL_MODULE := libc++_static 82LOCAL_CLANG := true 83LOCAL_SRC_FILES := $(LIBCXX_SRC_FILES) 84LOCAL_C_INCLUDES := $(LIBCXX_C_INCLUDES) 85LOCAL_CPPFLAGS := $(LIBCXX_CPPFLAGS) 86LOCAL_RTTI_FLAG := -frtti 87LOCAL_WHOLE_STATIC_LIBRARIES := libc++abi 88LOCAL_MULTILIB := both 89LOCAL_CXX_STL := none 90include $(BUILD_HOST_STATIC_LIBRARY) 91 92# Don't build for unbundled branches 93ifeq (,$(TARGET_BUILD_APPS)) 94 95# host dynamic lib 96include $(CLEAR_VARS) 97LOCAL_MODULE := libc++ 98LOCAL_CLANG := true 99LOCAL_LDFLAGS := -nodefaultlibs 100LOCAL_WHOLE_STATIC_LIBRARIES := libc++_static 101LOCAL_MULTILIB := both 102LOCAL_CXX_STL := none 103 104ifeq ($(HOST_OS), darwin) 105LOCAL_LDFLAGS += \ 106 -Wl,-unexported_symbols_list,external/libcxx/lib/libc++unexp.exp \ 107 -Wl,-force_symbols_not_weak_list,external/libcxx/lib/notweak.exp \ 108 -Wl,-force_symbols_weak_list,external/libcxx/lib/weak.exp 109else 110LOCAL_LDLIBS += -lrt -lpthread -ldl 111endif 112 113include $(BUILD_HOST_SHARED_LIBRARY) 114 115LIT := $(ANDROID_BUILD_TOP)/external/llvm/utils/lit/lit.py 116LIBCXX_CONFIGTESTS := $(ANDROID_BUILD_TOP)/external/libcxx/buildcmds/configtests.py 117LIBCXX_TEST_MK := $(ANDROID_BUILD_TOP)/external/libcxx/test.mk 118 119test-libcxx-target: test-libcxx-target-clang 120test-libcxx-host: test-libcxx-host-clang 121 122test-libcxx-target-clang: libc++ 123 python $(LIBCXX_CONFIGTESTS) --compiler=clang 124 LIT=$(LIT) LIT_MODE=device make -f $(LIBCXX_TEST_MK) 125test-libcxx-target-gcc: libc++ 126 python $(LIBCXX_CONFIGTESTS) --compiler=gcc 127 LIT=$(LIT) LIT_MODE=device make -f $(LIBCXX_TEST_MK) 128test-libcxx-target-clang-32: libc++ 129 python $(LIBCXX_CONFIGTESTS) --bitness=32 --compiler=clang 130 LIT=$(LIT) LIT_MODE=device make -f $(LIBCXX_TEST_MK) 131test-libcxx-target-gcc-32: libc++ 132 python $(LIBCXX_CONFIGTESTS) --bitness=32 --compiler=gcc 133 LIT=$(LIT) LIT_MODE=device make -f $(LIBCXX_TEST_MK) 134test-libcxx-target-clang-64: libc++ 135 python $(LIBCXX_CONFIGTESTS) --bitness=64 --compiler=clang 136 LIT=$(LIT) LIT_MODE=device make -f $(LIBCXX_TEST_MK) 137test-libcxx-target-gcc-64: libc++ 138 python $(LIBCXX_CONFIGTESTS) --bitness=64 --compiler=gcc 139 LIT=$(LIT) LIT_MODE=device make -f $(LIBCXX_TEST_MK) 140 141test-libcxx-host-clang: libc++ 142 python $(LIBCXX_CONFIGTESTS) --compiler=clang --host 143 LIT=$(LIT) LIT_MODE=host make -f $(LIBCXX_TEST_MK) 144test-libcxx-host-gcc: libc++ 145 python $(LIBCXX_CONFIGTESTS) --compiler=gcc --host 146 LIT=$(LIT) LIT_MODE=host make -f $(LIBCXX_TEST_MK) 147test-libcxx-host-clang-32: libc++ 148 python $(LIBCXX_CONFIGTESTS) --bitness=32 --compiler=clang --host 149 LIT=$(LIT) LIT_MODE=host make -f $(LIBCXX_TEST_MK) 150test-libcxx-host-gcc-32: libc++ 151 python $(LIBCXX_CONFIGTESTS) --bitness=32 --compiler=gcc --host 152 LIT=$(LIT) LIT_MODE=host make -f $(LIBCXX_TEST_MK) 153test-libcxx-host-clang-64: libc++ 154 python $(LIBCXX_CONFIGTESTS) --bitness=64 --compiler=clang --host 155 LIT=$(LIT) LIT_MODE=host make -f $(LIBCXX_TEST_MK) 156test-libcxx-host-gcc-64: libc++ 157 python $(LIBCXX_CONFIGTESTS) --bitness=64 --compiler=gcc --host 158 LIT=$(LIT) LIT_MODE=host make -f $(LIBCXX_TEST_MK) 159 160# Don't want to just make test-libcxx-(host|target) dependencies of this because 161# the two families can't be run concurrently. 162test-libcxx: libc++ 163 python buildcmds/configtests.py --host 164 LIT=$(LIT) LIT_MODE=host make -f $(ANDROID_BUILD_TOP)/external/libcxx/test.mk 165 python buildcmds/configtests.py 166 LIT=$(LIT) LIT_MODE=device make -f $(ANDROID_BUILD_TOP)/external/libcxx/test.mk 167 168endif # TARGET_BUILD_APPS 169