cmake: link with -latomic for clang

otherwise clang build fails with

../cryptonote_core/libcryptonote_core.a(miner.cpp.o): In function
`std::__atomic_base<unsigned long long>::load(std::memory_order) const':
/usr/bin/../lib/gcc/i686-pc-linux-gnu/6.1.1/../../../../include/c++/6.1.1/bits/atomic_base.h:396:
undefined reference to `__atomic_load_8'

This has no effect on the gcc build.

The one strange thing is that test code like

std::atomic<int> x;
int main() { return x; }

compiles and links without errors with clang, without -latomic.  This
alone would suggest that this patch is unnecessary, but that is not the
case. It's not clear exactly why, though. The bitmonero code is
including the same header, but it must be doing something more complex
than in this test code snippet that causes the failure at link time
pasted above. In any case, passing -latomic fixes the problem and
seems safe.

.
This commit is contained in:
redfish 2016-07-10 21:05:52 -04:00
parent f4b35aeafd
commit f3e09f36d3
1 changed files with 5 additions and 0 deletions

View File

@ -457,6 +457,11 @@ endif()
list(APPEND EXTRA_LIBRARIES ${CMAKE_DL_LIBS}) list(APPEND EXTRA_LIBRARIES ${CMAKE_DL_LIBS})
if(NOT MINGW)
find_library(ATOMIC atomic)
list(APPEND EXTRA_LIBRARIES ${ATOMIC})
endif()
include(version.cmake) include(version.cmake)
add_subdirectory(contrib) add_subdirectory(contrib)