Revert "Revert "Use sdk variant of Soong modules when LOCAL_SDK_..."
Revert^2 "Add sdk mutator for native modules"
f8e80229fedb47302e9cfd32990859a6308020cf
Change-Id: Ib686b52339ae5031434a2fb6a0e7f5b0c0dc5641
diff --git a/core/binary.mk b/core/binary.mk
index e021b7d..0582920 100644
--- a/core/binary.mk
+++ b/core/binary.mk
@@ -1136,6 +1136,18 @@
$(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 3499da9..1ee6610 100644
--- a/core/definitions.mk
+++ b/core/definitions.mk
@@ -3321,3 +3321,9 @@
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 d87513b..b482eb5 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 @@
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 77fb8d4..721a034 100644
--- a/core/notice_files.mk
+++ b/core/notice_files.mk
@@ -82,6 +82,10 @@
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