From 4e7e76fe5a19996ad02f7260ef81c780b41f1a99 Mon Sep 17 00:00:00 2001 From: Justin Yun Date: Fri, 20 Dec 2019 18:55:27 +0900 Subject: [PATCH] Linktype check for native:product Similar to native:vendor, native:product can use VNDK libs but not vndk_private. It is activated when PRODUCT_PRODUCT_VNDK_VERSION is set. Bug: 146620523 Test: build with PRODUCT_PRODUCT_VNDK_VERSION := current Change-Id: Icfd94dfc30e77581991799d9e2f408f57da22cea --- core/base_rules.mk | 32 +++++++++++-------- core/binary.mk | 52 +++++++++++++++++++++---------- core/cc_prebuilt_internal.mk | 16 ++++++++-- core/install_jni_libs_internal.mk | 4 ++- core/local_vndk.mk | 10 ++++-- core/soong_cc_prebuilt.mk | 7 ++++- 6 files changed, 85 insertions(+), 36 deletions(-) diff --git a/core/base_rules.mk b/core/base_rules.mk index 6b80a1580d..9984533647 100644 --- a/core/base_rules.mk +++ b/core/base_rules.mk @@ -800,22 +800,28 @@ ifdef LOCAL_IS_HOST_MODULE my_required_modules += $(LOCAL_REQUIRED_MODULES_$($(my_prefix)OS)) endif -############################################################################### -## When compiling against the VNDK, add the .vendor suffix to required modules. -############################################################################### +########################################################################## +## When compiling against the VNDK, add the .vendor or .product suffix to +## required modules. +########################################################################## ifneq ($(LOCAL_USE_VNDK),) - #################################################### - ## Soong modules may be built twice, once for /system - ## and once for /vendor. If we're using the VNDK, - ## switch all soong libraries over to the /vendor - ## variant. - #################################################### + ##################################################### + ## Soong modules may be built three times, once for + ## /system, once for /vendor and once for /product. + ## If we're using the VNDK, switch all soong + ## libraries over to the /vendor or /product variant. + ##################################################### ifneq ($(LOCAL_MODULE_MAKEFILE),$(SOONG_ANDROID_MK)) # We don't do this renaming for soong-defined modules since they already - # have correct names (with .vendor suffix when necessary) in their - # LOCAL_*_LIBRARIES. - my_required_modules := $(foreach l,$(my_required_modules),\ - $(if $(SPLIT_VENDOR.SHARED_LIBRARIES.$(l)),$(l).vendor,$(l))) + # have correct names (with .vendor or .product suffix when necessary) in + # their LOCAL_*_LIBRARIES. + ifeq ($(LOCAL_PRODUCT_MODULE),true) + my_required_modules := $(foreach l,$(my_required_modules),\ + $(if $(SPLIT_PRODUCT.SHARED_LIBRARIES.$(l)),$(l).product,$(l))) + else + my_required_modules := $(foreach l,$(my_required_modules),\ + $(if $(SPLIT_VENDOR.SHARED_LIBRARIES.$(l)),$(l).vendor,$(l))) + endif endif endif diff --git a/core/binary.mk b/core/binary.mk index 560fff7535..d6cdf463bf 100644 --- a/core/binary.mk +++ b/core/binary.mk @@ -1145,22 +1145,35 @@ endif ## When compiling against the VNDK, use LL-NDK libraries ########################################################### ifneq ($(LOCAL_USE_VNDK),) - #################################################### - ## Soong modules may be built twice, once for /system - ## and once for /vendor. If we're using the VNDK, - ## switch all soong libraries over to the /vendor - ## variant. - #################################################### - my_whole_static_libraries := $(foreach l,$(my_whole_static_libraries),\ - $(if $(SPLIT_VENDOR.STATIC_LIBRARIES.$(l)),$(l).vendor,$(l))) - my_static_libraries := $(foreach l,$(my_static_libraries),\ - $(if $(SPLIT_VENDOR.STATIC_LIBRARIES.$(l)),$(l).vendor,$(l))) - my_shared_libraries := $(foreach l,$(my_shared_libraries),\ - $(if $(SPLIT_VENDOR.SHARED_LIBRARIES.$(l)),$(l).vendor,$(l))) - my_system_shared_libraries := $(foreach l,$(my_system_shared_libraries),\ - $(if $(SPLIT_VENDOR.SHARED_LIBRARIES.$(l)),$(l).vendor,$(l))) - my_header_libraries := $(foreach l,$(my_header_libraries),\ - $(if $(SPLIT_VENDOR.HEADER_LIBRARIES.$(l)),$(l).vendor,$(l))) + ##################################################### + ## Soong modules may be built three times, once for + ## /system, once for /vendor and once for /product. + ## If we're using the VNDK, switch all soong + ## libraries over to the /vendor or /product variant. + ##################################################### + ifeq ($(LOCAL_PRODUCT_MODULE),true) + my_whole_static_libraries := $(foreach l,$(my_whole_static_libraries),\ + $(if $(SPLIT_PRODUCT.STATIC_LIBRARIES.$(l)),$(l).product,$(l))) + my_static_libraries := $(foreach l,$(my_static_libraries),\ + $(if $(SPLIT_PRODUCT.STATIC_LIBRARIES.$(l)),$(l).product,$(l))) + my_shared_libraries := $(foreach l,$(my_shared_libraries),\ + $(if $(SPLIT_PRODUCT.SHARED_LIBRARIES.$(l)),$(l).product,$(l))) + my_system_shared_libraries := $(foreach l,$(my_system_shared_libraries),\ + $(if $(SPLIT_PRODUCT.SHARED_LIBRARIES.$(l)),$(l).product,$(l))) + my_header_libraries := $(foreach l,$(my_header_libraries),\ + $(if $(SPLIT_PRODUCT.HEADER_LIBRARIES.$(l)),$(l).product,$(l))) + else + my_whole_static_libraries := $(foreach l,$(my_whole_static_libraries),\ + $(if $(SPLIT_VENDOR.STATIC_LIBRARIES.$(l)),$(l).vendor,$(l))) + my_static_libraries := $(foreach l,$(my_static_libraries),\ + $(if $(SPLIT_VENDOR.STATIC_LIBRARIES.$(l)),$(l).vendor,$(l))) + my_shared_libraries := $(foreach l,$(my_shared_libraries),\ + $(if $(SPLIT_VENDOR.SHARED_LIBRARIES.$(l)),$(l).vendor,$(l))) + my_system_shared_libraries := $(foreach l,$(my_system_shared_libraries),\ + $(if $(SPLIT_VENDOR.SHARED_LIBRARIES.$(l)),$(l).vendor,$(l))) + my_header_libraries := $(foreach l,$(my_header_libraries),\ + $(if $(SPLIT_VENDOR.HEADER_LIBRARIES.$(l)),$(l).vendor,$(l))) + endif endif # Platform can use vendor public libraries. If a required shared lib is one of @@ -1207,6 +1220,7 @@ my_warn_types := $(my_warn_ndk_types) my_allowed_types := $(my_allowed_ndk_types) else ifdef LOCAL_USE_VNDK _name := $(patsubst %.vendor,%,$(LOCAL_MODULE)) + _name := $(patsubst %.product,%,$(LOCAL_MODULE)) ifneq ($(filter $(_name),$(VNDK_CORE_LIBRARIES) $(VNDK_SAMEPROCESS_LIBRARIES) $(LLNDK_LIBRARIES)),) ifeq ($(filter $(_name),$(VNDK_PRIVATE_LIBRARIES)),) my_link_type := native:vndk @@ -1215,6 +1229,12 @@ else ifdef LOCAL_USE_VNDK endif my_warn_types := my_allowed_types := native:vndk native:vndk_private + else ifeq ($(LOCAL_PRODUCT_MODULE),true) + # Modules installed to /product cannot directly depend on modules marked + # with vendor_available: false + my_link_type := native:product + my_warn_types := + my_allowed_types := native:product native:vndk native:platform_vndk else # Modules installed to /vendor cannot directly depend on modules marked # with vendor_available: false diff --git a/core/cc_prebuilt_internal.mk b/core/cc_prebuilt_internal.mk index 6313019eb5..378483b63c 100644 --- a/core/cc_prebuilt_internal.mk +++ b/core/cc_prebuilt_internal.mk @@ -85,6 +85,7 @@ ifdef LOCAL_SDK_VERSION my_link_type := native:ndk:$(my_ndk_stl_family):$(my_ndk_stl_link_type) else ifdef LOCAL_USE_VNDK _name := $(patsubst %.vendor,%,$(LOCAL_MODULE)) + _name := $(patsubst %.product,%,$(LOCAL_MODULE)) ifneq ($(filter $(_name),$(VNDK_CORE_LIBRARIES) $(VNDK_SAMEPROCESS_LIBRARIES) $(LLNDK_LIBRARIES)),) ifeq ($(filter $(_name),$(VNDK_PRIVATE_LIBRARIES)),) my_link_type := native:vndk @@ -92,7 +93,11 @@ else ifdef LOCAL_USE_VNDK my_link_type := native:vndk_private endif else - my_link_type := native:vendor + ifeq ($(LOCAL_PRODUCT_MODULE),true) + my_link_type := native:product + else + my_link_type := native:vendor + endif endif else ifneq ($(filter $(TARGET_RECOVERY_OUT)/%,$(LOCAL_MODULE_PATH)),) my_link_type := native:recovery @@ -136,8 +141,13 @@ include $(BUILD_SYSTEM)/cxx_stl_setup.mk ifdef my_shared_libraries ifdef LOCAL_USE_VNDK - my_shared_libraries := $(foreach l,$(my_shared_libraries),\ - $(if $(SPLIT_VENDOR.SHARED_LIBRARIES.$(l)),$(l).vendor,$(l))) + ifeq ($(LOCAL_PRODUCT_MODULE),true) + my_shared_libraries := $(foreach l,$(my_shared_libraries),\ + $(if $(SPLIT_PRODUCT.SHARED_LIBRARIES.$(l)),$(l).product,$(l))) + else + my_shared_libraries := $(foreach l,$(my_shared_libraries),\ + $(if $(SPLIT_VENDOR.SHARED_LIBRARIES.$(l)),$(l).vendor,$(l))) + endif endif $(LOCAL_2ND_ARCH_VAR_PREFIX)$(my_prefix)DEPENDENCIES_ON_SHARED_LIBRARIES += \ $(my_register_name):$(LOCAL_INSTALLED_MODULE):$(subst $(space),$(comma),$(my_shared_libraries)) diff --git a/core/install_jni_libs_internal.mk b/core/install_jni_libs_internal.mk index 25a16a373f..d87513bd0e 100644 --- a/core/install_jni_libs_internal.mk +++ b/core/install_jni_libs_internal.mk @@ -106,11 +106,13 @@ ifneq ($(strip $(LOCAL_JNI_SHARED_LIBRARIES)),) my_allowed_types := $(my_allowed_ndk_types) ifneq (,$(filter true,$(LOCAL_VENDOR_MODULE) $(LOCAL_ODM_MODULE) $(LOCAL_PROPRIETARY_MODULE))) my_allowed_types += native:vendor native:vndk native:platform_vndk + else ifeq ($(LOCAL_PRODUCT_MODULE),true) + my_allowed_types += native:product native:vndk native:platform_vndk endif else my_link_type := app:platform my_warn_types := $(my_warn_ndk_types) - my_allowed_types := $(my_allowed_ndk_types) native:platform native:vendor native:vndk native:vndk_private native:platform_vndk + my_allowed_types := $(my_allowed_ndk_types) native:platform native:product native:vendor native:vndk native:vndk_private native:platform_vndk endif my_link_deps := $(addprefix SHARED_LIBRARIES:,$(LOCAL_JNI_SHARED_LIBRARIES)) diff --git a/core/local_vndk.mk b/core/local_vndk.mk index 198e3615bd..91b5eb4424 100644 --- a/core/local_vndk.mk +++ b/core/local_vndk.mk @@ -1,9 +1,9 @@ -#Set LOCAL_USE_VNDK for modules going into vendor or odm partition, except for host modules +#Set LOCAL_USE_VNDK for modules going into product, vendor or odm partition, except for host modules #If LOCAL_SDK_VERSION is set, thats a more restrictive set, so they dont need LOCAL_USE_VNDK ifndef LOCAL_IS_HOST_MODULE ifndef LOCAL_SDK_VERSION - ifneq (,$(filter true,$(LOCAL_VENDOR_MODULE) $(LOCAL_ODM_MODULE) $(LOCAL_OEM_MODULE) $(LOCAL_PROPRIETARY_MODULE))) + ifneq (,$(filter true,$(LOCAL_VENDOR_MODULE) $(LOCAL_ODM_MODULE) $(LOCAL_OEM_MODULE) $(LOCAL_PROPRIETARY_MODULE) $(LOCAL_PRODUCT_MODULE))) LOCAL_USE_VNDK:=true # Note: no need to check LOCAL_MODULE_PATH* since LOCAL_[VENDOR|ODM|OEM]_MODULE is already # set correctly before this is included. @@ -34,5 +34,11 @@ ifdef LOCAL_USE_VNDK ifndef BOARD_VNDK_VERSION LOCAL_USE_VNDK:= endif + + ifndef PRODUCT_PRODUCT_VNDK_VERSION + ifneq (,$(filter true,$(LOCAL_PRODUCT_MODULE))) + LOCAL_USE_VNDK := + endif + endif endif diff --git a/core/soong_cc_prebuilt.mk b/core/soong_cc_prebuilt.mk index b095b7c388..8ea1e5067d 100644 --- a/core/soong_cc_prebuilt.mk +++ b/core/soong_cc_prebuilt.mk @@ -75,8 +75,13 @@ endif ifdef LOCAL_USE_VNDK ifneq ($(LOCAL_VNDK_DEPEND_ON_CORE_VARIANT),true) name_without_suffix := $(patsubst %.vendor,%,$(LOCAL_MODULE)) - ifneq ($(name_without_suffix),$(LOCAL_MODULE) + ifneq ($(name_without_suffix),$(LOCAL_MODULE)) SPLIT_VENDOR.$(LOCAL_MODULE_CLASS).$(name_without_suffix) := 1 + else + name_without_suffix := $(patsubst %.product,%,$(LOCAL_MODULE)) + ifneq ($(name_without_suffix),$(LOCAL_MODULE)) + SPLIT_PRODUCT.$(LOCAL_MODULE_CLASS).$(name_without_suffix) := 1 + endif endif name_without_suffix := endif