HardenedBSD/lib/libcxxrt/Makefile
Brooks Davis 1062db3070 libcxxrt: allow build with gcc13 and --no-undefined-version
GCC 13 supports _Float16 and __int128 on fewer architectures than clang
and thus libcxxrt compiled with gcc13 is sometimes missing related
symbols.  Hack around this by explicitly appending --undefined-version
to LDFLAGS in problematic cases.

Reviewed by:	theraven, dim
Differential Revision:	https://reviews.freebsd.org/D45233
2024-05-17 21:50:57 +01:00

55 lines
1.2 KiB
Makefile

PACKAGE= clibs
SHLIBDIR?= /lib
.include <src.opts.mk>
SRCDIR= ${SRCTOP}/contrib/libcxxrt
SHLIB_MAJOR= 1
.PATH: ${SRCDIR}
LIB= cxxrt
SRCS+= auxhelper.cc
SRCS+= dynamic_cast.cc
SRCS+= exception.cc
SRCS+= guard.cc
SRCS+= libelftc_dem_gnu3.c
SRCS+= memory.cc
SRCS+= stdexcept.cc
SRCS+= terminate.cc
SRCS+= typeinfo.cc
WARNS?= 0
CFLAGS+= -isystem ${SRCDIR} -nostdinc++
CXXSTD?= c++14
.if exists(Version.map.${MACHINE})
VERSION_MAP= ${.CURDIR}/Version.map.${MACHINE}
.else
.if ${MACHINE_ABI:Mlong32}
VERSION_MAP= Version-32.map
.else
VERSION_MAP= Version-64.map
.endif
Version-32.map: Version.map
sed 's/%%NEW_DELETE_TYPE%%/int/' ${.ALLSRC} > ${.TARGET}
Version-64.map: Version.map
sed 's/%%NEW_DELETE_TYPE%%/long/' ${.ALLSRC} > ${.TARGET}
.endif
.include <bsd.lib.mk>
# gcc13 doesn't support _Float16 on riscv, powerpc64, and x86 or __int128
# on i386. Disable checks for missing symbols to allow this to link.
#
# XXX: This is a hack that hides an ABI divergence between clang and gcc.
.if ${COMPILER_TYPE} == "gcc" && \
(${MACHINE_ARCH} == "amd64" || ${MACHINE_ARCH} == "i386" || \
${MACHINE_ARCH:Mpowerpc64*} || ${MACHINE_ARCH} == "riscv64")
LDFLAGS+= -Wl,--undefined-version
.endif