Merge "Preserve symlinks in the Soong prebuilt install steps for host binaries and shared libs."

This commit is contained in:
Martin Stjernholm 2020-09-01 10:32:49 +00:00 committed by Gerrit Code Review
commit a24c0fe655
4 changed files with 35 additions and 0 deletions

View file

@ -516,7 +516,11 @@ ifneq ($(LOCAL_INSTALLED_MODULE),$(my_default_test_module))
$(LOCAL_INSTALLED_MODULE): PRIVATE_POST_INSTALL_CMD := $(LOCAL_POST_INSTALL_CMD) $(LOCAL_INSTALLED_MODULE): PRIVATE_POST_INSTALL_CMD := $(LOCAL_POST_INSTALL_CMD)
$(LOCAL_INSTALLED_MODULE): $(LOCAL_BUILT_MODULE) $(LOCAL_INSTALLED_MODULE): $(LOCAL_BUILT_MODULE)
@echo "Install: $@" @echo "Install: $@"
ifeq ($(LOCAL_MODULE_MAKEFILE),$(SOONG_ANDROID_MK))
$(copy-file-or-link-to-new-target)
else
$(copy-file-to-new-target) $(copy-file-to-new-target)
endif
$(PRIVATE_POST_INSTALL_CMD) $(PRIVATE_POST_INSTALL_CMD)
endif endif

View file

@ -2554,6 +2554,18 @@ $(hide) rm -f $@
$(hide) cp $< $@ $(hide) cp $< $@
endef endef
# The same as copy-file-to-new-target, but preserve symlinks. Symlinks are
# converted to absolute to not break.
define copy-file-or-link-to-new-target
@mkdir -p $(dir $@)
$(hide) rm -f $@
$(hide) if [ -h $< ]; then \
ln -s $$(realpath $<) $@; \
else \
cp $< $@; \
fi
endef
# Copy a prebuilt file to a target location. # Copy a prebuilt file to a target location.
define transform-prebuilt-to-target define transform-prebuilt-to-target
@echo "$($(PRIVATE_PREFIX)DISPLAY) Prebuilt: $(PRIVATE_MODULE) ($@)" @echo "$($(PRIVATE_PREFIX)DISPLAY) Prebuilt: $(PRIVATE_MODULE) ($@)"
@ -2566,6 +2578,13 @@ define transform-prebuilt-to-target-strip-comments
$(copy-file-to-target-strip-comments) $(copy-file-to-target-strip-comments)
endef endef
# Copy a prebuilt file to a target location, but preserve symlinks rather than
# dereference them.
define copy-or-link-prebuilt-to-target
@echo "$($(PRIVATE_PREFIX)DISPLAY) Prebuilt: $(PRIVATE_MODULE) ($@)"
$(copy-file-or-link-to-new-target)
endef
# Copy a list of files/directories to target location, with sub dir structure preserved. # Copy a list of files/directories to target location, with sub dir structure preserved.
# For example $(HOST_OUT_EXECUTABLES)/aapt -> $(staging)/bin/aapt . # For example $(HOST_OUT_EXECUTABLES)/aapt -> $(staging)/bin/aapt .
# $(1): the source list of files/directories. # $(1): the source list of files/directories.

View file

@ -142,8 +142,16 @@ ifeq ($(my_check_same_vndk_variants),true)
$(LOCAL_BUILT_MODULE): $(same_vndk_variants_stamp) $(LOCAL_BUILT_MODULE): $(same_vndk_variants_stamp)
endif endif
# Use copy-or-link-prebuilt-to-target for host executables and shared libraries,
# to preserve symlinks to the source trees. They can then run directly from the
# prebuilt directories where the linker can load their dependencies using
# relative RUNPATHs.
$(LOCAL_BUILT_MODULE): $(LOCAL_PREBUILT_MODULE_FILE) $(LOCAL_BUILT_MODULE): $(LOCAL_PREBUILT_MODULE_FILE)
ifeq ($(LOCAL_IS_HOST_MODULE) $(if $(filter EXECUTABLES SHARED_LIBRARIES NATIVE_TESTS,$(LOCAL_MODULE_CLASS)),true,),true true)
$(copy-or-link-prebuilt-to-target)
else
$(transform-prebuilt-to-target) $(transform-prebuilt-to-target)
endif
ifneq ($(filter EXECUTABLES NATIVE_TESTS,$(LOCAL_MODULE_CLASS)),) ifneq ($(filter EXECUTABLES NATIVE_TESTS,$(LOCAL_MODULE_CLASS)),)
$(hide) chmod +x $@ $(hide) chmod +x $@
endif endif

View file

@ -57,7 +57,11 @@ ifdef LOCAL_INSTALLED_MODULE
endif endif
$(LOCAL_BUILT_MODULE): $(LOCAL_PREBUILT_MODULE_FILE) $(LOCAL_BUILT_MODULE): $(LOCAL_PREBUILT_MODULE_FILE)
ifeq ($(LOCAL_IS_HOST_MODULE) $(if $(filter EXECUTABLES SHARED_LIBRARIES NATIVE_TESTS,$(LOCAL_MODULE_CLASS)),true,),true true)
$(copy-or-link-prebuilt-to-target)
else
$(transform-prebuilt-to-target) $(transform-prebuilt-to-target)
endif
ifneq ($(filter EXECUTABLES NATIVE_TESTS,$(LOCAL_MODULE_CLASS)),) ifneq ($(filter EXECUTABLES NATIVE_TESTS,$(LOCAL_MODULE_CLASS)),)
$(hide) chmod +x $@ $(hide) chmod +x $@
endif endif