Skip to content

Commit

Permalink
[core] Fixed 'atomic' linking for iOS target (#2137)
Browse files Browse the repository at this point in the history

Co-authored-by: Jose Santiago <jsantiago@haivision.com>
  • Loading branch information
maxsharabayko and jlsantiago0 committed Sep 28, 2021
1 parent d8127a8 commit 60891f3
Show file tree
Hide file tree
Showing 5 changed files with 30 additions and 82 deletions.
20 changes: 11 additions & 9 deletions CMakeLists.txt
Expand Up @@ -418,8 +418,6 @@ endif()
# HAVE_LIBATOMIC
# HAVE_GCCATOMIC_INTRINSICS
# HAVE_GCCATOMIC_INTRINSICS_REQUIRES_LIBATOMIC
# HAVE_GCCATOMIC_INTRINSICS_STATIC
# HAVE_GCCATOMIC_INTRINSICS_STATIC_REQUIRES_LIBATOMIC
include(CheckGCCAtomicIntrinsics)
CheckGCCAtomicIntrinsics()
# HAVE_CXX_ATOMIC
Expand Down Expand Up @@ -887,7 +885,7 @@ if (srt_libspec_shared)
endif()
if (MICROSOFT)
target_link_libraries(${TARGET_srt}_shared PRIVATE ws2_32.lib)
if (OPENSSL_USE_STATIC_LIBS)
if (OPENSSL_USE_STATIC_LIBS)
target_link_libraries(${TARGET_srt}_shared PRIVATE crypt32.lib)
else()
set_target_properties(${TARGET_srt}_shared PROPERTIES LINK_FLAGS "/DELAYLOAD:libeay32.dll")
Expand Down Expand Up @@ -925,7 +923,7 @@ if (srt_libspec_static)
endif()
if (MICROSOFT)
target_link_libraries(${TARGET_srt}_static PRIVATE ws2_32.lib)
if (OPENSSL_USE_STATIC_LIBS)
if (OPENSSL_USE_STATIC_LIBS)
target_link_libraries(${TARGET_srt}_static PRIVATE crypt32.lib)
endif()
elseif (MINGW)
Expand All @@ -938,8 +936,8 @@ endif()

target_include_directories(srt_virtual PRIVATE ${SSL_INCLUDE_DIRS})

if (MICROSOFT)
if (OPENSSL_USE_STATIC_LIBS)
if (MICROSOFT)
if (OPENSSL_USE_STATIC_LIBS)
set (SRT_LIBS_PRIVATE ${SRT_LIBS_PRIVATE} ws2_32.lib crypt32.lib)
else()
set (SRT_LIBS_PRIVATE ${SRT_LIBS_PRIVATE} ws2_32.lib)
Expand Down Expand Up @@ -983,9 +981,13 @@ endif()

# Required by some toolchains when statically linking this library if the
# GCC Atomic Intrinsics are being used.
if (HAVE_GCCATOMIC_INTRINSICS
AND HAVE_LIBATOMIC)
target_link_libraries(${TARGET_srt}_static PUBLIC atomic)
if (HAVE_GCCATOMIC_INTRINSICS_REQUIRES_LIBATOMIC AND HAVE_LIBATOMIC)
if (srt_libspec_static)
target_link_libraries(${TARGET_srt}_static PUBLIC atomic)
endif()
if (srt_libspec_shared)
target_link_libraries(${TARGET_srt}_shared PUBLIC atomic)
endif()
endif()

# Cygwin installs the *.dll libraries in bin directory and uses PATH.
Expand Down
12 changes: 8 additions & 4 deletions scripts/CheckCXXAtomic.cmake
Expand Up @@ -15,12 +15,11 @@

include(CheckCXXSourceCompiles)
include(CheckLibraryExists)
include(UnSetVariableFull)

function(CheckCXXAtomic)

UnSetVariableFull(HAVE_CXX_ATOMIC)
UnSetVariableFull(HAVE_CXX_ATOMIC_STATIC)
unset(HAVE_CXX_ATOMIC CACHE)
unset(HAVE_CXX_ATOMIC_STATIC CACHE)

unset(CMAKE_REQUIRED_FLAGS)
unset(CMAKE_REQUIRED_LIBRARIES)
Expand All @@ -45,7 +44,12 @@ function(CheckCXXAtomic)
HAVE_CXX_ATOMIC)

if(HAVE_CXX_ATOMIC)
set(CMAKE_REQUIRED_LINK_OPTIONS "-static")
# CMAKE_REQUIRED_LINK_OPTIONS was introduced in CMake 3.14.
if(CMAKE_VERSION VERSION_LESS "3.14")
set(CMAKE_REQUIRED_LINK_OPTIONS "-static")
else()
set(CMAKE_REQUIRED_FLAGS "-std=c++11 -static")
endif()
check_cxx_source_compiles(
"${CheckCXXAtomic_CODE}"
HAVE_CXX_ATOMIC_STATIC)
Expand Down
40 changes: 5 additions & 35 deletions scripts/CheckGCCAtomicIntrinsics.cmake
Expand Up @@ -13,24 +13,19 @@
# HAVE_LIBATOMIC
# HAVE_GCCATOMIC_INTRINSICS
# HAVE_GCCATOMIC_INTRINSICS_REQUIRES_LIBATOMIC
# HAVE_GCCATOMIC_INTRINSICS_STATIC
# HAVE_GCCATOMIC_INTRINSICS_STATIC_REQUIRES_LIBATOMIC
#
# See
# https://gcc.gnu.org/onlinedocs/gcc/_005f_005fatomic-Builtins.html
# https://gcc.gnu.org/wiki/Atomic/GCCMM/AtomicSync

include(CheckCSourceCompiles)
include(CheckLibraryExists)
include(UnSetVariableFull)

function(CheckGCCAtomicIntrinsics)

UnSetVariableFull(HAVE_LIBATOMIC)
UnSetVariableFull(HAVE_GCCATOMIC_INTRINSICS)
UnSetVariableFull(HAVE_GCCATOMIC_INTRINSICS_REQUIRES_LIBATOMIC)
UnSetVariableFull(HAVE_GCCATOMIC_INTRINSICS_STATIC)
UnSetVariableFull(HAVE_GCCATOMIC_INTRINSICS_STATIC_REQUIRES_LIBATOMIC)
unset(HAVE_LIBATOMIC CACHE)
unset(HAVE_GCCATOMIC_INTRINSICS CACHE)
unset(HAVE_GCCATOMIC_INTRINSICS_REQUIRES_LIBATOMIC CACHE)

unset(CMAKE_REQUIRED_FLAGS)
unset(CMAKE_REQUIRED_LIBRARIES)
Expand All @@ -54,12 +49,12 @@ function(CheckGCCAtomicIntrinsics)
check_library_exists(
atomic __atomic_fetch_add_8 "" HAVE_LIBATOMIC)

set(CMAKE_TRY_COMPILE_TARGET_TYPE EXECUTABLE) # CMake 3.6
check_c_source_compiles(
"${CheckGCCAtomicIntrinsics_CODE}"
HAVE_GCCATOMIC_INTRINSICS)

if (NOT HAVE_GCCATOMIC_INTRINSICS
AND HAVE_LIBATOMIC)
if (NOT HAVE_GCCATOMIC_INTRINSICS AND HAVE_LIBATOMIC)
set(CMAKE_REQUIRED_LIBRARIES "atomic")
check_c_source_compiles(
"${CheckGCCAtomicIntrinsics_CODE}"
Expand All @@ -69,29 +64,4 @@ function(CheckGCCAtomicIntrinsics)
endif()
endif()

unset(CMAKE_REQUIRED_FLAGS)
unset(CMAKE_REQUIRED_LIBRARIES)
unset(CMAKE_REQUIRED_LINK_OPTIONS)

if (HAVE_GCCATOMIC_INTRINSICS)
set(CMAKE_REQUIRED_LINK_OPTIONS "-static")
check_c_source_compiles(
"${CheckGCCAtomicIntrinsics_CODE}"
HAVE_GCCATOMIC_INTRINSICS_STATIC)
if (NOT HAVE_GCCATOMIC_INTRINSICS_STATIC
AND HAVE_LIBATOMIC)
set(CMAKE_REQUIRED_LIBRARIES "atomic")
check_c_source_compiles(
"${CheckGCCAtomicIntrinsics_CODE}"
HAVE_GCCATOMIC_INTRINSICS_STATIC)
if (HAVE_GCCATOMIC_INTRINSICS_STATIC)
set(HAVE_GCCATOMIC_INTRINSICS_STATIC_REQUIRES_LIBATOMIC TRUE PARENT_SCOPE)
endif()
endif()
endif()

unset(CMAKE_REQUIRED_FLAGS)
unset(CMAKE_REQUIRED_LIBRARIES)
unset(CMAKE_REQUIRED_LINK_OPTIONS)

endfunction(CheckGCCAtomicIntrinsics)
13 changes: 6 additions & 7 deletions scripts/FindPThreadGetSetName.cmake
Expand Up @@ -27,14 +27,13 @@
# add_definitions(-DHAVE_PTHREAD_SETNAME_NP=1)

include(CheckSymbolExists)
include(UnSetVariableFull)

function(FindPThreadGetSetName)

UnSetVariableFull(HAVE_PTHREAD_GETNAME_NP_IN_PTHREAD_NP_H)
UnSetVariableFull(HAVE_PTHREAD_SETNAME_NP_IN_PTHREAD_NP_H)
UnSetVariableFull(HAVE_PTHREAD_GETNAME_NP)
UnSetVariableFull(HAVE_PTHREAD_SETNAME_NP)
unset(HAVE_PTHREAD_GETNAME_NP_IN_PTHREAD_NP_H CACHE)
unset(HAVE_PTHREAD_SETNAME_NP_IN_PTHREAD_NP_H CACHE)
unset(HAVE_PTHREAD_GETNAME_NP CACHE)
unset(HAVE_PTHREAD_SETNAME_NP CACHE)

set(CMAKE_REQUIRED_DEFINITIONS
-D_GNU_SOURCE -D_DARWIN_C_SOURCE -D_POSIX_SOURCE=1)
Expand All @@ -55,11 +54,11 @@ function(FindPThreadGetSetName)
message(STATUS "Checking for pthread_(g/s)etname_np in 'pthread.h':")
check_symbol_exists(pthread_getname_np "pthread.h" HAVE_PTHREAD_GETNAME_NP)
if (HAVE_PTHREAD_GETNAME_NP_IN_PTHREAD_NP_H)
set(HAVE_PTHREAD_GETNAME_NP TRUE PARENT_SCOPE)
set(HAVE_PTHREAD_GETNAME_NP 1 CACHE INTERNAL "" FORCE)
endif()
check_symbol_exists(pthread_setname_np "pthread.h" HAVE_PTHREAD_SETNAME_NP)
if (HAVE_PTHREAD_SETNAME_NP_IN_PTHREAD_NP_H)
set(HAVE_PTHREAD_SETNAME_NP TRUE PARENT_SCOPE)
set(HAVE_PTHREAD_SETNAME_NP 1 CACHE INTERNAL "" FORCE)
endif()
if (HAVE_PTHREAD_GETNAME_NP)
add_definitions(-DHAVE_PTHREAD_GETNAME_NP=1)
Expand Down
27 changes: 0 additions & 27 deletions scripts/UnSetVariableFull.cmake

This file was deleted.

0 comments on commit 60891f3

Please sign in to comment.