audio/openal-soft: fix build with lld 15 on i386

During an exp-run for llvm 15 (see bug 265425), it turned out that
audio/openal-soft failed to link with lld 15, on i386:

  : && /usr/bin/c++ -O2 -pipe -fstack-protector-strong -fno-strict-aliasing -O2 -pipe -fstack-protector-strong -fno-strict-aliasing   -DNDEBUG -Wl,--as-needed -fstack-protector-strong -Wl,-z,notext CMakeFiles/makemhr.dir/utils/makemhr/loaddef.cpp.o CMakeFiles/makemhr.dir/utils/makemhr/loadsofa.cpp.o CMakeFiles/makemhr.dir/utils/makemhr/makemhr.cpp.o -o makemhr  -Wl,-rpath,/usr/local/lib:  -pthread  libsofa-support.a  -pthread  libcommon.a  /usr/local/lib/libmysofa.so  /usr/lib/libz.so  -lm && :
  ld: error: makemhr:(.eh_frame+0x14cf): internal linker error: wrote incorrect addend value 0x3400 instead of 0x0 for dynamic relocation R_386_32 at offset 0x408417 against symbol __gxx_personality_v0

This is because lld 15 with assertions enabled (which is default on
-CURRENT) checks dynamic relocations more thoroughly, and in combination
with -z notext (which was added earlier for bug 242307) results in the
above diagnostic.

Work around it by disabling the dynamic relations checks on i386.

PR:		268495
Approved by:	maintainer timeout (2 weeks)
MFH:		2022Q4
This commit is contained in:
Dimitry Andric 2022-12-20 23:28:41 +01:00
parent ee691f844e
commit 145ca54873

View file

@ -23,6 +23,16 @@ CMAKE_ON= ALSOFT_BACKEND_WAVE
LDFLAGS+= -Wl,--as-needed
LDFLAGS_i386= -Wl,-z,notext
.include <bsd.port.pre.mk>
# The following is actually meant for lld 15.0 and later, but the ports
# framework does not support LINKER_TYPE and LINKER_VERSION yet.
.if ${COMPILER_TYPE} == "clang" && ${COMPILER_VERSION} >= 150
# Turn off checking of dynamic relocations, to avoid lld diagnostics about
# possibly incorrect addend values.
LDFLAGS_i386+= -Wl,--no-check-dynamic-relocations
.endif
PLIST_SUB= SOVERSION=${PORTVERSION}
OPTIONS_DEFINE= CONFIG EXAMPLES JACK OSS PORTAUDIO PULSEAUDIO \