Fix compilation on Linux, glibc 2.34, and CentOS libraries

A continuation of previous fix for malloc hooks which got removed
from the new glibc library.

The pre-compiled jemalloc has definitions which interpose hooks
in glibc leading to linking errors with multiple hook definitions.

A simple fix is to skip doing the workaround when using jemalloc
from pre-compiled libraries.

This will likely be revisited in the future, but for now it is
important to fix compilation errors for developers.
This commit is contained in:
Sergey Sharybin 2022-09-13 10:34:41 +02:00 committed by Philipp Oeser
parent ec2938c71a
commit 6143b3ab38
Notes: blender-bot 2023-02-14 03:00:45 +01:00
Referenced by issue #100749, Blender LTS: Maintenance Task 3.3
3 changed files with 14 additions and 1 deletions

View File

@ -16,9 +16,16 @@ if(NOT DEFINED LIBDIR)
# Choose the best suitable libraries.
if(EXISTS ${LIBDIR_NATIVE_ABI})
set(LIBDIR ${LIBDIR_NATIVE_ABI})
set(WITH_LIBC_MALLOC_HOOK_WORKAROUND True)
elseif(EXISTS ${LIBDIR_CENTOS7_ABI})
set(LIBDIR ${LIBDIR_CENTOS7_ABI})
set(WITH_CXX11_ABI OFF)
if(WITH_MEM_JEMALLOC)
# jemalloc provides malloc hooks.
set(WITH_LIBC_MALLOC_HOOK_WORKAROUND False)
else()
set(WITH_LIBC_MALLOC_HOOK_WORKAROUND True)
endif()
if(CMAKE_COMPILER_IS_GNUCC AND
CMAKE_C_COMPILER_VERSION VERSION_LESS 9.3)

View File

@ -18,3 +18,9 @@ set(LIB
add_c_flag(-ffast-math)
blender_add_lib(bf_intern_libc_compat "${SRC}" "${INC}" "${INC_SYS}" "${LIB}")
if(WITH_LIBC_MALLOC_HOOK_WORKAROUND)
target_compile_definitions(bf_intern_libc_compat
PRIVATE WITH_LIBC_MALLOC_HOOK_WORKAROUND
)
endif()

View File

@ -116,7 +116,7 @@ float __powf_finite(float x, float y)
# endif /* __GLIBC_PREREQ(2, 31) */
# if __GLIBC_PREREQ(2, 34)
# if __GLIBC_PREREQ(2, 34) && defined(WITH_LIBC_MALLOC_HOOK_WORKAROUND)
extern void *(*__malloc_hook)(size_t __size, const void *);
extern void *(*__realloc_hook)(void *__ptr, size_t __size, const void *);