Build the unwinder as a separate library.
Since gcc_personality_v0.c from compiler-rt depends on having an
unwinder, but we don't want to pull in _all_ of libc++abi, build the
unwinder as a separate library, libllvmunwind.
This is going to be a part of a larger cleanup where we stop bundling
everything into libc++ and instead link libc++, libc++abi, the
compiler runtime library, and whatever unwinder as separate libraries.
This change probably won't happen until we can select all of these
libraries as the default.
Change-Id: I6140f001b2ab000dc748aea5fde695afc2e86a8e
diff --git a/Android.mk b/Android.mk
index 078ce26..f2deba6 100644
--- a/Android.mk
+++ b/Android.mk
@@ -20,67 +20,77 @@
LOCAL_PATH := $(call my-dir)
LIBCXXABI_SRC_FILES := \
- src/abort_message.cpp \
- src/cxa_aux_runtime.cpp \
- src/cxa_default_handlers.cpp \
- src/cxa_demangle.cpp \
- src/cxa_exception.cpp \
- src/cxa_exception_storage.cpp \
- src/cxa_guard.cpp \
- src/cxa_handlers.cpp \
- src/cxa_new_delete.cpp \
- src/cxa_personality.cpp \
- src/cxa_unexpected.cpp \
- src/cxa_vector.cpp \
- src/cxa_virtual.cpp \
- src/exception.cpp \
- src/fallback_malloc.ipp \
- src/private_typeinfo.cpp \
- src/stdexcept.cpp \
- src/typeinfo.cpp \
+ src/abort_message.cpp \
+ src/cxa_aux_runtime.cpp \
+ src/cxa_default_handlers.cpp \
+ src/cxa_demangle.cpp \
+ src/cxa_exception.cpp \
+ src/cxa_exception_storage.cpp \
+ src/cxa_guard.cpp \
+ src/cxa_handlers.cpp \
+ src/cxa_new_delete.cpp \
+ src/cxa_personality.cpp \
+ src/cxa_unexpected.cpp \
+ src/cxa_vector.cpp \
+ src/cxa_virtual.cpp \
+ src/exception.cpp \
+ src/fallback_malloc.ipp \
+ src/private_typeinfo.cpp \
+ src/stdexcept.cpp \
+ src/typeinfo.cpp \
LLVM_UNWIND_SRC_FILES := \
- src/Unwind/libunwind.cpp \
- src/Unwind/Unwind-EHABI.cpp \
- src/Unwind/Unwind-sjlj.c \
- src/Unwind/UnwindLevel1-gcc-ext.c \
- src/Unwind/UnwindLevel1.c \
- src/Unwind/UnwindRegistersSave.S \
- src/Unwind/UnwindRegistersRestore.S \
+ src/Unwind/libunwind.cpp \
+ src/Unwind/Unwind-EHABI.cpp \
+ src/Unwind/Unwind-sjlj.c \
+ src/Unwind/UnwindLevel1-gcc-ext.c \
+ src/Unwind/UnwindLevel1.c \
+ src/Unwind/UnwindRegistersSave.S \
+ src/Unwind/UnwindRegistersRestore.S \
-LIBCXXABI_CFLAGS := \
- -I$(LOCAL_PATH)/include/ \
+LIBCXXABI_INCLUDES := \
+ $(LOCAL_PATH)/include/ \
+ external/libcxx/include/ \
LIBCXXABI_RTTI_FLAG := -frtti
LIBCXXABI_CPPFLAGS := \
- -Iexternal/libcxx/include/ \
- -std=c++11 \
- -fexceptions \
+ -std=c++11 \
+ -fexceptions \
include $(CLEAR_VARS)
-LOCAL_MODULE := libc++abi
+LOCAL_MODULE := libunwind_llvm
LOCAL_CLANG := true
-LOCAL_SRC_FILES := $(LIBCXXABI_SRC_FILES)
LOCAL_SRC_FILES_arm := $(LLVM_UNWIND_SRC_FILES)
-LOCAL_CFLAGS := $(LIBCXXABI_CFLAGS)
+LOCAL_C_INCLUDES := $(LIBCXXABI_INCLUDES)
LOCAL_CPPFLAGS := $(LIBCXXABI_CPPFLAGS)
LOCAL_CXX_STL := none
-LOCAL_RTTI_FLAG := $(LIBCXXABI_RTTI_FLAG)
-LOCAL_WHOLE_STATIC_LIBRARIES_arm64 := libunwind
-LOCAL_WHOLE_STATIC_LIBRARIES_mips := libunwind
-LOCAL_WHOLE_STATIC_LIBRARIES_mips64 := libunwind
-LOCAL_WHOLE_STATIC_LIBRARIES_x86 := libunwind
-LOCAL_WHOLE_STATIC_LIBRARIES_x86_64 := libunwind
-LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
# src/Unwind/UnwindRegistersSave.S does not compile.
LOCAL_CLANG_ASFLAGS_arm += -no-integrated-as
+LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
include $(BUILD_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := libc++abi
LOCAL_CLANG := true
LOCAL_SRC_FILES := $(LIBCXXABI_SRC_FILES)
-LOCAL_CFLAGS := $(LIBCXXABI_CFLAGS)
+LOCAL_C_INCLUDES := $(LIBCXXABI_INCLUDES)
+LOCAL_CPPFLAGS := $(LIBCXXABI_CPPFLAGS)
+LOCAL_CXX_STL := none
+LOCAL_RTTI_FLAG := $(LIBCXXABI_RTTI_FLAG)
+LOCAL_WHOLE_STATIC_LIBRARIES_arm := libunwind_llvm
+LOCAL_WHOLE_STATIC_LIBRARIES_arm64 := libunwind
+LOCAL_WHOLE_STATIC_LIBRARIES_mips := libunwind
+LOCAL_WHOLE_STATIC_LIBRARIES_mips64 := libunwind
+LOCAL_WHOLE_STATIC_LIBRARIES_x86 := libunwind
+LOCAL_WHOLE_STATIC_LIBRARIES_x86_64 := libunwind
+LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
+include $(BUILD_STATIC_LIBRARY)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := libc++abi
+LOCAL_CLANG := true
+LOCAL_SRC_FILES := $(LIBCXXABI_SRC_FILES)
+LOCAL_C_INCLUDES := $(LIBCXXABI_INCLUDES)
LOCAL_CPPFLAGS := $(LIBCXXABI_CPPFLAGS)
LOCAL_CXX_STL := none