Commit: 0302ab4e02973b15c8815e1b1d5fe3c987bd6e7b
Author: Brecht Van Lommel
Date: Fri Dec 2 18:00:32 2022 +0100
Branches: master
https://developer.blender.org/rB0302ab4e02973b15c8815e1b1d5fe3c987bd6e7b
Fix link error on Linux + Clang due to missing atomic symbols
The new atomic disjoint set uses additional atomics which are not supported
as intrinsics on all architectures and require linking to libatomic.
Now always link to libatomic on Linux when it is available, instead of only
checking if atomic add for int64_t requires linking to this library.
Thanks to Sergey for the help fixing this.
===================================================================
M build_files/cmake/platform/platform_unix.cmake
===================================================================
diff --git a/build_files/cmake/platform/platform_unix.cmake
b/build_files/cmake/platform/platform_unix.cmake
index 3a75fda35a4..6f23b55d78d 100644
--- a/build_files/cmake/platform/platform_unix.cmake
+++ b/build_files/cmake/platform/platform_unix.cmake
@@ -970,16 +970,9 @@ if(WITH_COMPILER_CCACHE)
endif()
endif()
-# On some platforms certain atomic operations are not possible with assembly
and/or intrinsics and
-# they are emulated in software with locks. For example, on armel there is no
intrinsics to grant
-# 64 bit atomic operations and STL library uses libatomic to offload software
emulation of atomics
-# to.
-# This function will check whether libatomic is required and if so will
configure linker flags.
-# If atomic operations are possible without libatomic then linker flags are
left as-is.
-function(CONFIGURE_ATOMIC_LIB_IF_NEEDED)
- # Source which is used to enforce situation when software emulation of
atomics is required.
- # Assume that using 64bit integer gives a definitive answer (as in, if 64bit
atomic operations
- # are possible using assembly/intrinsics 8, 16, and 32 bit operations will
also be possible.
+# Always link with libatomic if available, as it is required for data types
+# which don't have intrinsics.
+function(configure_atomic_lib_if_needed)
set(_source
"#include <atomic>
#include <cstdint>
@@ -990,25 +983,12 @@ function(CONFIGURE_ATOMIC_LIB_IF_NEEDED)
)
include(CheckCXXSourceCompiles)
- check_cxx_source_compiles("${_source}" ATOMIC_OPS_WITHOUT_LIBATOMIC)
+ set(CMAKE_REQUIRED_LIBRARIES atomic)
+ check_cxx_source_compiles("${_source}" ATOMIC_OPS_WITH_LIBATOMIC)
+ unset(CMAKE_REQUIRED_LIBRARIES)
- if(NOT ATOMIC_OPS_WITHOUT_LIBATOMIC)
- # Compilation of the test program has failed.
- # Try it again with -latomic to see if this is what is needed, or whether
something else is
- # going on.
-
- set(CMAKE_REQUIRED_LIBRARIES atomic)
- check_cxx_source_compiles("${_source}" ATOMIC_OPS_WITH_LIBATOMIC)
- unset(CMAKE_REQUIRED_LIBRARIES)
-
- if(ATOMIC_OPS_WITH_LIBATOMIC)
- set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -latomic" PARENT_SCOPE)
- else()
- # Atomic operations are required part of Blender and it is not possible
to process forward.
- # We expect that either standard library or libatomic will make atomics
to work. If both
- # cases has failed something fishy o na bigger scope is going on.
- message(FATAL_ERROR "Failed to detect required configuration for atomic
operations")
- endif()
+ if(ATOMIC_OPS_WITH_LIBATOMIC)
+ set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -latomic" PARENT_SCOPE)
endif()
endfunction()
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs