Files
android_external_libcxx/Android.mk
Dan Albert 0f81d7634f Add support for LIT to Android.mk.
Now that test/lit.cfg can handle running tests on Android devices, we
can move testing over to LIT so that it's easier to stay in sync with
upstream (no longer have to run test/makemake.py to regenerate makefiles
for each test). Also, we can now actually run all of the xfail tests
(tests that are considered passing if compilation fails).

The libc++ tests can be run with:

    $ mm test-libcxx        # run all tests
    $ mm test-libcxx-host   # host only
    $ mm test-libcxx-device # device only (uses current lunch target)

Actually generating the cppflags and ldflags is done in test/device.cfg.
It's a little ugly, but it does a decent job of approximating our build
system while still allowing us to finish a test run in less than 7
hours. Additional devices can be added to the config as needed.

Change-Id: Ieba38912a213c43e54e03ab9b8c4e25f019b0305
2014-07-25 17:39:44 +00:00

138 lines
3.7 KiB
Makefile

#
# 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.
#
# Don't build for unbundled branches
ifeq (,$(TARGET_BUILD_APPS))
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++
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 libcompiler_rt
LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
include $(BUILD_STATIC_LIBRARY)
# target dynamic lib
include $(CLEAR_VARS)
LOCAL_MODULE := libc++
LOCAL_CLANG := true
LOCAL_WHOLE_STATIC_LIBRARIES := libc++
LOCAL_SHARED_LIBRARIES := libdl
LOCAL_SYSTEM_SHARED_LIBRARIES := libc libm
ifneq ($(TARGET_ARCH),arm)
LOCAL_SHARED_LIBRARIES += libdl
endif
LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
include $(BUILD_SHARED_LIBRARY)
# host static lib
include $(CLEAR_VARS)
LOCAL_MODULE := libc++
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
ifneq ($(HOST_OS), darwin)
LOCAL_WHOLE_STATIC_LIBRARIES += libcompiler_rt
endif
LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
include $(BUILD_HOST_STATIC_LIBRARY)
# host dynamic lib
include $(CLEAR_VARS)
LOCAL_MODULE := libc++
LOCAL_CLANG := true
LOCAL_LDFLAGS := -nodefaultlibs
LOCAL_LDLIBS := -lc
LOCAL_WHOLE_STATIC_LIBRARIES := libc++
LOCAL_MULTILIB := both
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 -lm
endif
LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
include $(BUILD_HOST_SHARED_LIBRARY)
LIT := $(ANDROID_BUILD_TOP)/external/llvm/utils/lit/lit.py
test-libcxx-host: libc++
LIT=$(LIT) LIT_MODE=host make -f $(ANDROID_BUILD_TOP)/external/libcxx/test.mk
test-libcxx-target: libc++
LIT=$(LIT) LIT_MODE=device make -f $(ANDROID_BUILD_TOP)/external/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++
LIT=$(LIT) LIT_MODE=host make -f $(ANDROID_BUILD_TOP)/external/libcxx/test.mk
LIT=$(LIT) LIT_MODE=device make -f $(ANDROID_BUILD_TOP)/external/libcxx/test.mk
endif # TARGET_BUILD_APPS