diff --git a/deps/sanitizers.mk b/deps/sanitizers.mk index 2d0f0988a39b9b..4d1bfa548232e4 100644 --- a/deps/sanitizers.mk +++ b/deps/sanitizers.mk @@ -1,18 +1,19 @@ # Interrogate the compiler about where it is keeping its sanitizer libraries ifeq ($(USECLANG),1) -SANITIZER_LIB_PATH := $(shell LANG=C $(CC) -print-runtime-dir) +SANITIZER_LIB_PATH := $(shell LANG=C $(CC) -print-runtime-dir)\:$(subst $(eval ) ,:,$(abspath $(wildcard $(shell LANG=C $(CC) -print-resource-dir)/lib/*/))) else SANITIZER_LIB_PATH := $(dir $(shell LANG=C $(CC) -print-file-name=libasan.so)) endif # Given a colon-separated list of paths in $(2), find the location of the library given in $(1) define pathsearch_all -$(wildcard $(addsuffix /$(1),$(subst :, ,$(2)))) +$(eval _result := $(firstword $(wildcard $(addsuffix /$(1),$(subst :, ,$(2)))))) +$(if $(_result),$(_result),$(error No matches found for '$(1)' in $(2))) endef define copy_sanitizer_lib install-sanitizers: $$(addprefix $$(build_libdir)/, $$(notdir $$(call pathsearch_all,$(1),$$(SANITIZER_LIB_PATH)))) | $$(build_shlibdir) -$$(addprefix $$(build_shlibdir)/,$(2)): $$(addprefix $$(SANITIZER_LIB_PATH)/,$(2)) | $$(build_shlibdir) +$$(addprefix $$(build_shlibdir)/,$(2)): $$(addprefix $$(dir $$(call pathsearch_all,$(1),$$(SANITIZER_LIB_PATH))),$(2)) | $$(build_shlibdir) -cp $$< $$@ $(if $(filter $(OS), Linux), \ -$(PATCHELF) $(PATCHELF_SET_RPATH_ARG) '$$$$ORIGIN' $$@ , 0)