mirror of
https://github.com/rdkit/rdkit.git
synced 2026-06-03 21:44:30 +08:00
PgSQL: preserve toolchain LDFLAGS on macOS (#9285)
The previous `set(CMAKE_EXE_LINKER_FLAGS ...)` replaced the variable
wholesale, which clobbers any toolchain-supplied linker flags. In
particular, conda-forge's clang_osx-64 / clangxx_osx-64 packages set
`-stdlib=libc++ -L${PREFIX}/lib -Wl,-rpath,${PREFIX}/lib` via
`CMAKE_EXE_LINKER_FLAGS`. Losing those flags causes the postgres
extension link to pick up the wrong libc++ and fail to resolve
ABI-tagged symbols on libc++ 19+:
[ 94%] Linking CXX executable rdkit.dylib
Undefined symbols for architecture x86_64:
"VTT for std::__1::basic_stringstream<...>"
"vtable for std::__1::basic_stringbuf<...>"
"vtable for std::__1::basic_stringstream<...>"
"vtable for std::__1::basic_istringstream<...>"
ld: symbol(s) not found for architecture x86_64
The missing symbols carry the `[abi:ne190107]` ABI tag introduced by
libc++ 19+ — references that only resolve against the conda-forge
libc++, not the system one the link was falling back to.
Append to `CMAKE_EXE_LINKER_FLAGS` instead so the toolchain flags
survive. The other rdkit `.dylib`s in the same build are linked via
the standard cmake toolchain path and were never affected.
Verified by building rdkit-postgresql on osx-64 + osx-arm64 via the
conda-forge feedstock (https://github.com/conda-forge/rdkit-feedstock)
with this fix applied as a downstream patch.
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
committed by
greg landrum
parent
8120d418fb
commit
e8e9dc2a13
@@ -94,8 +94,13 @@ if(MSVC)
|
||||
endif()
|
||||
endif(MSVC)
|
||||
if(APPLE)
|
||||
set(CMAKE_EXE_LINKER_FLAGS "-bundle -multiply_defined suppress"
|
||||
"-Wl,-dead_strip_dylibs -bundle_loader ${PG_BINDIR}/postgres")
|
||||
# Append (rather than replace) so any toolchain-provided flags survive --
|
||||
# in particular `-stdlib=libc++ -L${PREFIX}/lib -Wl,-rpath,${PREFIX}/lib`
|
||||
# from conda-forge's clang_osx-64 / clangxx_osx-64 packages. Without these,
|
||||
# the link picks up the wrong libc++ and fails to resolve ABI-tagged symbols
|
||||
# (e.g. `vtable for std::__1::basic_stringstream` with `[abi:ne190107]`)
|
||||
# on libc++ 19+ toolchains.
|
||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -bundle -multiply_defined suppress -Wl,-dead_strip_dylibs -bundle_loader ${PG_BINDIR}/postgres")
|
||||
add_executable("${EXTENSION}${EXTENSION_SUFFIX}"
|
||||
adapter.cpp bfp_op.c cache.c guc.c low_gist.c mol_op.c
|
||||
rdkit_gist.c bfp_gist.c bfp_gin.c bitstring.c rdkit_io.c rxn_op.c sfp_op.c)
|
||||
|
||||
Reference in New Issue
Block a user