summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Zern <jzern@google.com>2023-05-08 16:58:59 -0700
committerJames Zern <jzern@google.com>2023-05-12 10:20:54 -0700
commit2a9b810d3df62ff3c527ce3895f6b80d9d6f6296 (patch)
treecf6fd4496a6bc7dc1cdc21bc294d09565530fdbb
parent894262fb8fe137401d56586b7998711cf49ebe24 (diff)
downloadlibvpx-2a9b810d3df62ff3c527ce3895f6b80d9d6f6296.tar.gz
Don't use -Wl,-z,defs with Clang's sanitizers
This avoids link errors related to the sanitizers: https://clang.llvm.org/docs/AddressSanitizer.html#usage "When linking shared libraries, the AddressSanitizer run-time is not linked, so -Wl,-z,defs may cause link errors ..." See also: https://crbug.com/aomedia/3438 Bug: webm:1801 Fixed: webm:1801 Change-Id: Ie212318005a5f7222e5486775175534025306367
-rw-r--r--build/make/Makefile16
1 files changed, 15 insertions, 1 deletions
diff --git a/build/make/Makefile b/build/make/Makefile
index 5c38c18e5..65ac2290c 100644
--- a/build/make/Makefile
+++ b/build/make/Makefile
@@ -304,6 +304,19 @@ $(1):
$(qexec)$$(AR) $$(ARFLAGS) $$@ $$^
endef
+# Don't use -Wl,-z,defs with Clang's sanitizers.
+#
+# Clang's AddressSanitizer documentation says "When linking shared libraries,
+# the AddressSanitizer run-time is not linked, so -Wl,-z,defs may cause link
+# errors (don't use it with AddressSanitizer)." See
+# https://clang.llvm.org/docs/AddressSanitizer.html#usage.
+NO_UNDEFINED := -Wl,-z,defs
+ifeq ($(findstring clang,$(CC)),clang)
+ ifneq ($(filter -fsanitize=%,$(LDFLAGS)),)
+ NO_UNDEFINED :=
+ endif
+endif
+
define so_template
# Not using a pattern rule here because we don't want to generate empty
# archives when they are listed as a dependency in files not responsible
@@ -313,7 +326,8 @@ define so_template
$(1):
$(if $(quiet),@echo " [LD] $$@")
$(qexec)$$(LD) -shared $$(LDFLAGS) \
- -Wl,--no-undefined -Wl,-soname,$$(SONAME) \
+ $(NO_UNDEFINED) \
+ -Wl,-soname,$$(SONAME) \
-Wl,--version-script,$$(EXPORTS_FILE) -o $$@ \
$$(filter %.o,$$^) $$(extralibs)
endef