forked from openkylin/platform_build
Restrict NDK link type to matching STLs.
Test: make native Bug: None Change-Id: Ie9d9107fe0eeb425843ae2db197e1c60d14a59ca
This commit is contained in:
parent
b0f4677748
commit
975e303ad2
|
@ -0,0 +1,62 @@
|
|||
# Determines the types of NDK modules the current module is allowed to link to.
|
||||
# Input variables:
|
||||
# LOCAL_MODULE
|
||||
# LOCAL_MODULE_CLASS
|
||||
# LOCAL_NDK_STL_VARIANT
|
||||
# LOCAL_SDK_VERSION
|
||||
# Output variables:
|
||||
# my_ndk_stl_family: Family of the NDK STL.
|
||||
# my_allowed_ndk_types: Types of NDK modules that may be linked.
|
||||
# my_warn_ndk_types: Types of NDK modules that shouldn't be linked, but are.
|
||||
|
||||
my_allowed_ndk_types :=
|
||||
my_warn_ndk_types :=
|
||||
my_ndk_stl_family :=
|
||||
|
||||
ifdef LOCAL_SDK_VERSION
|
||||
ifeq ($(LOCAL_NDK_STL_VARIANT),)
|
||||
my_ndk_stl_family := system
|
||||
else ifeq ($(LOCAL_NDK_STL_VARIANT),system)
|
||||
my_ndk_stl_family := system
|
||||
else ifeq ($(LOCAL_NDK_STL_VARIANT),c++_shared)
|
||||
my_ndk_stl_family := libc++
|
||||
else ifeq ($(LOCAL_NDK_STL_VARIANT),c++_static)
|
||||
my_ndk_stl_family := libc++
|
||||
else ifeq ($(LOCAL_NDK_STL_VARIANT),gnustl_static)
|
||||
my_ndk_stl_family := gnustl
|
||||
else ifeq ($(LOCAL_NDK_STL_VARIANT),stlport_shared)
|
||||
my_ndk_stl_family := stlport
|
||||
else ifeq ($(LOCAL_NDK_STL_VARIANT),stlport_static)
|
||||
my_ndk_stl_family := stlport
|
||||
else ifeq ($(LOCAL_NDK_STL_VARIANT),none)
|
||||
my_ndk_stl_family := none
|
||||
else
|
||||
$(call pretty-error,invalid LOCAL_NDK_STL_VARIANT: $(LOCAL_NDK_STL_VARIANT))
|
||||
endif
|
||||
|
||||
# The system STL is only the C++ ABI layer, so it's compatible with any STL.
|
||||
my_allowed_ndk_types += native:ndk:system
|
||||
|
||||
# Libaries that don't use the STL can be linked to anything.
|
||||
my_allowed_ndk_types += native:ndk:none
|
||||
|
||||
# And it's okay to link your own STL type. Strictly speaking there are more
|
||||
# restrictions depending on static vs shared STL, but that will be a follow
|
||||
# up patch.
|
||||
my_allowed_ndk_types += native:ndk:$(my_ndk_stl_family)
|
||||
|
||||
ifeq ($(LOCAL_MODULE_CLASS),APPS)
|
||||
# For an app package, it's actually okay to depend on any set of STLs.
|
||||
# If any of the individual libraries depend on each other they've
|
||||
# already been checked for consistency, and if they don't they'll be
|
||||
# kept isolated by RTLD_LOCAL anyway.
|
||||
my_allowed_ndk_types += \
|
||||
native:ndk:gnustl native:ndk:libc++ native:ndk:stlport
|
||||
endif
|
||||
else
|
||||
my_allowed_ndk_types := native:ndk:none native:ndk:system
|
||||
ifeq ($(LOCAL_MODULE_CLASS),APPS)
|
||||
# CTS is bad and it should feel bad: http://b/13249737
|
||||
my_warn_ndk_types += native:ndk:libc++
|
||||
endif
|
||||
endif
|
|
@ -1404,10 +1404,12 @@ endif
|
|||
## other NDK-built libraries
|
||||
####################################################
|
||||
|
||||
include $(BUILD_SYSTEM)/allowed_ndk_types.mk
|
||||
|
||||
ifdef LOCAL_SDK_VERSION
|
||||
my_link_type := native:ndk
|
||||
my_warn_types :=
|
||||
my_allowed_types := native:ndk
|
||||
my_link_type := native:ndk:$(my_ndk_stl_family)
|
||||
my_warn_types := $(my_warn_ndk_types)
|
||||
my_allowed_types := $(my_allowed_ndk_types)
|
||||
else ifdef LOCAL_USE_VNDK
|
||||
_name := $(patsubst %.vendor,%,$(LOCAL_MODULE))
|
||||
ifneq ($(filter $(_name),$(VNDK_CORE_LIBRARIES) $(VNDK_SAMEPROCESS_LIBRARIES) $(LLNDK_LIBRARIES)),)
|
||||
|
@ -1427,8 +1429,8 @@ else ifdef LOCAL_USE_VNDK
|
|||
endif
|
||||
else
|
||||
my_link_type := native:platform
|
||||
my_warn_types :=
|
||||
my_allowed_types := native:ndk native:platform
|
||||
my_warn_types := $(my_warn_ndk_types)
|
||||
my_allowed_types := $(my_allowed_ndk_types) native:platform
|
||||
endif
|
||||
|
||||
my_link_deps := $(addprefix STATIC_LIBRARIES:,$(my_whole_static_libraries) $(my_static_libraries))
|
||||
|
|
|
@ -108,15 +108,16 @@ endif # inner my_prebuilt_jni_libs
|
|||
endif # outer my_prebuilt_jni_libs
|
||||
|
||||
# Verify that all included libraries are built against the NDK
|
||||
include $(BUILD_SYSTEM)/allowed_ndk_types.mk
|
||||
ifneq ($(strip $(LOCAL_JNI_SHARED_LIBRARIES)),)
|
||||
ifneq ($(LOCAL_SDK_VERSION),)
|
||||
my_link_type := app:sdk
|
||||
my_warn_types := native:platform
|
||||
my_allowed_types := native:ndk
|
||||
my_warn_types := native:platform $(my_warn_ndk_types)
|
||||
my_allowed_types := $(my_allowed_ndk_types)
|
||||
else
|
||||
my_link_type := app:platform
|
||||
my_warn_types :=
|
||||
my_allowed_types := native:ndk native:platform native:vendor native:vndk native:vndk_private
|
||||
my_warn_types := $(my_warn_ndk_types)
|
||||
my_allowed_types := $(my_allowed_ndk_types) native:platform native:vendor native:vndk native:vndk_private
|
||||
endif
|
||||
|
||||
my_link_deps := $(addprefix SHARED_LIBRARIES:,$(LOCAL_JNI_SHARED_LIBRARIES))
|
||||
|
|
|
@ -173,8 +173,10 @@ else
|
|||
endif
|
||||
export_cflags :=
|
||||
|
||||
include $(BUILD_SYSTEM)/allowed_ndk_types.mk
|
||||
|
||||
ifdef LOCAL_SDK_VERSION
|
||||
my_link_type := native:ndk
|
||||
my_link_type := native:ndk:$(my_ndk_stl_family)
|
||||
else ifdef LOCAL_USE_VNDK
|
||||
_name := $(patsubst %.vendor,%,$(LOCAL_MODULE))
|
||||
ifneq ($(filter $(_name),$(VNDK_CORE_LIBRARIES) $(VNDK_SAMEPROCESS_LIBRARIES) $(LLNDK_LIBRARIES)),)
|
||||
|
|
Loading…
Reference in New Issue