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