Preserve symlinks in the Soong prebuilt install steps for host binaries
and shared libs.
If a prebuilt module file is a symlink in the .intermediates tree it is
preserved when copied to the final install location. This preserves
symlinks to prebuilt binaries, so that they are run from their prebuilt
source location and can find libraries in relative paths from there.
Symlinks are converted to absolute, to not fail if they are relative in
the source tree.
Test: m clean && m droid dist checkbuild
with and without the change, then compare the lists of symlinks in
the out/ trees
Test: build/soong/soong_ui.bash --make-mode \
TARGET_PRODUCT=crosshatch_hwasan TARGET_BUILD_VARIANT=userdebug \
droid SANITIZE_TARGET=hwaddress \
continuous_instrumentation_tests_api_coverage \
continuous_native_tests device-tests platform_tests
check that libclang_rt.hwasan_static-aarch64-android.a isn't a
symlink in out/target/product/crosshatch/obj
Bug: 145934348
Change-Id: I7600e5b0754f8ea6cd0ffc8e1ba6d39153f182aa
diff --git a/core/base_rules.mk b/core/base_rules.mk
index 7397470..2bc7f08 100644
--- a/core/base_rules.mk
+++ b/core/base_rules.mk
@@ -515,7 +515,11 @@
$(LOCAL_INSTALLED_MODULE): PRIVATE_POST_INSTALL_CMD := $(LOCAL_POST_INSTALL_CMD)
$(LOCAL_INSTALLED_MODULE): $(LOCAL_BUILT_MODULE)
@echo "Install: $@"
+ifeq ($(LOCAL_MODULE_MAKEFILE),$(SOONG_ANDROID_MK))
+ $(copy-file-or-link-to-new-target)
+else
$(copy-file-to-new-target)
+endif
$(PRIVATE_POST_INSTALL_CMD)
endif