From e0c5e443605e88b1323c54bc8c123646f8a284d0 Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Tue, 7 Apr 2020 16:50:32 +0000 Subject: [PATCH] Revert "Revert "Use sdk variant of Soong modules when LOCAL_SDK_..." Revert^2 "Add sdk mutator for native modules" f8e80229fedb47302e9cfd32990859a6308020cf Change-Id: Ib686b52339ae5031434a2fb6a0e7f5b0c0dc5641 --- core/binary.mk | 12 ++++++++++++ core/definitions.mk | 6 ++++++ core/install_jni_libs_internal.mk | 26 +++++++++++++++++++++++--- core/notice_files.mk | 4 ++++ 4 files changed, 45 insertions(+), 3 deletions(-) diff --git a/core/binary.mk b/core/binary.mk index e021b7dc7..0582920c1 100644 --- a/core/binary.mk +++ b/core/binary.mk @@ -1136,6 +1136,18 @@ ifeq ($(LOCAL_USE_VNDK),) $(if $(filter $(l),$(VENDOR_PUBLIC_LIBRARIES)),$(l).vendorpublic,$(l))) endif +########################################################### +## When compiling against the NDK, use SDK variants of Soong libraries +########################################################### + +ifneq ($(LOCAL_SDK_VERSION),) + my_whole_static_libraries := $(call use_soong_sdk_libraries,$(my_whole_static_libraries)) + my_static_libraries := $(call use_soong_sdk_libraries,$(my_static_libraries)) + my_shared_libraries := $(call use_soong_sdk_libraries,$(my_shared_libraries)) + my_system_shared_libraries := $(call use_soong_sdk_libraries,$(my_system_shared_libraries)) + my_header_libraries := $(call use_soong_sdk_libraries,$(my_header_libraries)) +endif + ########################################################## ## Set up installed module dependency ## We cannot compute the full path of the LOCAL_SHARED_LIBRARIES for diff --git a/core/definitions.mk b/core/definitions.mk index 3499da932..1ee661098 100644 --- a/core/definitions.mk +++ b/core/definitions.mk @@ -3321,3 +3321,9 @@ $(hide) CLANG_BIN="$(LLVM_PREBUILTS_PATH)" \ XZ="$(XZ)" \ $(LIBRARY_IDENTITY_CHECK_SCRIPT) $(SOONG_STRIP_PATH) $(1) $(2) endef + +# Convert Soong libraries that have SDK variant +define use_soong_sdk_libraries + $(foreach l,$(1),$(if $(filter $(l),$(SOONG_SDK_VARIANT_MODULES)),\ + $(l).sdk,$(l))) +endef diff --git a/core/install_jni_libs_internal.mk b/core/install_jni_libs_internal.mk index d87513bd0..b482eb59b 100644 --- a/core/install_jni_libs_internal.mk +++ b/core/install_jni_libs_internal.mk @@ -12,9 +12,18 @@ # my_embedded_prebuilt_jni_libs, prebuilt jni libs embedded in prebuilt apk. # +my_sdk_variant = $(1) +ifneq (,$(and $(my_embed_jni),$(LOCAL_SDK_VERSION))) + # Soong produces $(lib).so in $(lib).sdk_intermediates so that the library + # has the correct name for embedding in an APK. Append .sdk to the name + # of the intermediates directory, but not the .so name. + my_sdk_variant = $(call use_soong_sdk_libraries,$(1)) +endif + my_jni_shared_libraries := $(strip \ - $(foreach lib,$(LOCAL_JNI_SHARED_LIBRARIES), \ - $(call intermediates-dir-for,SHARED_LIBRARIES,$(lib),,,$(my_2nd_arch_prefix))/$(lib).so)) + $(foreach lib,$(LOCAL_JNI_SHARED_LIBRARIES), \ + $(call intermediates-dir-for,SHARED_LIBRARIES,$(call my_sdk_variant,$(lib)),,,$(my_2nd_arch_prefix))/$(lib).so)) + # App-specific lib path. my_app_lib_path := $(dir $(LOCAL_INSTALLED_MODULE))lib/$(TARGET_$(my_2nd_arch_prefix)ARCH) @@ -115,7 +124,18 @@ ifneq ($(strip $(LOCAL_JNI_SHARED_LIBRARIES)),) 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)) + ifneq (,$(LOCAL_SDK_VERSION)) + ifeq ($(SOONG_ANDROID_MK),$(LOCAL_MODULE_MAKEFILE)) + # SOONG_SDK_VARIANT_MODULES isn't complete yet while parsing Soong modules, and Soong has + # already ensured that apps link against the correct SDK variants, rewrite all JNI libraries + # to the SDK variant. + my_link_deps := $(addprefix SHARED_LIBRARIES:,$(addsuffix .sdk,$(LOCAL_JNI_SHARED_LIBRARIES))) + else + my_link_deps := $(addprefix SHARED_LIBRARIES:,$(call use_soong_sdk_libraries,$(LOCAL_JNI_SHARED_LIBRARIES))) + endif + else + my_link_deps := $(addprefix SHARED_LIBRARIES:,$(LOCAL_JNI_SHARED_LIBRARIES)) + endif my_common := include $(BUILD_SYSTEM)/link_type.mk diff --git a/core/notice_files.mk b/core/notice_files.mk index 77fb8d461..721a03411 100644 --- a/core/notice_files.mk +++ b/core/notice_files.mk @@ -82,6 +82,10 @@ else else ifeq ($(LOCAL_MODULE_CLASS),ETC) # ETC modules may be uninstallable, yet still have a NOTICE file. e.g. apex components module_installed_filename := + else ifneq (,$(and $(filter %.sdk,$(LOCAL_MODULE)),$(filter $(patsubst %.sdk,%,$(LOCAL_MODULE)),$(SOONG_SDK_VARIANT_MODULES)))) + # Soong produces uninstallable *.sdk shared libraries for embedding in APKs. + module_installed_filename := \ + $(patsubst $(PRODUCT_OUT)/%,%,$($(LOCAL_2ND_ARCH_VAR_PREFIX)$(my_prefix)OUT_SHARED_LIBRARIES))/$(notdir $(LOCAL_BUILT_MODULE)) else $(error Cannot determine where to install NOTICE file for $(LOCAL_MODULE)) endif # JAVA_LIBRARIES