From 41850deb43082533a55e127f9a7cb673f25add92 Mon Sep 17 00:00:00 2001 From: iphydf Date: Sun, 4 Jun 2017 12:20:35 +0000 Subject: [PATCH] Factor out strict_abi cmake code into a separate module. --- CMakeLists.txt | 40 +--------------------------------------- cmake/StrictAbi.cmake | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 39 deletions(-) create mode 100644 cmake/StrictAbi.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 30cc0fed65..03851643d0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -43,6 +43,7 @@ include(CheckCCompilerFlag) include(CheckCXXCompilerFlag) include(CTest) include(MacRpath) +include(StrictAbi) set(CMAKE_MACOSX_RPATH ON) @@ -575,45 +576,6 @@ if(BUILD_TOXAV) DESTINATION "include/tox") endif() -################################################################################ -# -# :: Strict ABI -# -# Enabling the STRICT_ABI flag will generate and use an LD version script. -# It ensures that the dynamic libraries (libtoxcore.so, libtoxav.so) only -# export the symbols that are defined in their public API (tox.h and toxav.h, -# respectively). -# -################################################################################ - -function(make_version_script header ns lib) - execute_process( - COMMAND ${SHELL} -c "egrep '^\\w' ${header} | grep '${ns}_[a-z0-9_]*(' | grep -v '^typedef' | grep -o '${ns}_[a-z0-9_]*(' | egrep -o '\\w+' | sort -u" - OUTPUT_VARIABLE ${lib}_SYMS - OUTPUT_STRIP_TRAILING_WHITESPACE) - string(REPLACE "\n" ";" ${lib}_SYMS ${${lib}_SYMS}) - - set(${lib}_VERSION_SCRIPT "${CMAKE_BINARY_DIR}/${lib}.ld") - - file(WRITE ${${lib}_VERSION_SCRIPT} - "{ global:\n") - foreach(sym ${${lib}_SYMS}) - file(APPEND ${${lib}_VERSION_SCRIPT} - "${sym};\n") - endforeach(sym) - file(APPEND ${${lib}_VERSION_SCRIPT} - "local: *; };\n") - - set_target_properties(${lib}_shared PROPERTIES - LINK_FLAGS -Wl,--version-script,${${lib}_VERSION_SCRIPT}) -endfunction() - -option(STRICT_ABI "Enforce strict ABI export in dynamic libraries" OFF) -if(WIN32 OR APPLE) - # Windows and OSX don't have this linker functionality. - set(STRICT_ABI OFF) -endif() - if(STRICT_ABI AND SHELL AND ENABLE_SHARED) if(BUILD_TOXAV) make_version_script(${toxcore_SOURCE_DIR}/toxav/toxav.h toxav toxav) diff --git a/cmake/StrictAbi.cmake b/cmake/StrictAbi.cmake new file mode 100644 index 0000000000..fdf3664b09 --- /dev/null +++ b/cmake/StrictAbi.cmake @@ -0,0 +1,38 @@ +################################################################################ +# +# :: Strict ABI +# +# Enabling the STRICT_ABI flag will generate and use an LD version script. +# It ensures that the dynamic libraries (libtoxcore.so, libtoxav.so) only +# export the symbols that are defined in their public API (tox.h and toxav.h, +# respectively). +# +################################################################################ + +function(make_version_script header ns lib) + execute_process( + COMMAND ${SHELL} -c "egrep '^\\w' ${header} | grep '${ns}_[a-z0-9_]*(' | grep -v '^typedef' | grep -o '${ns}_[a-z0-9_]*(' | egrep -o '\\w+' | sort -u" + OUTPUT_VARIABLE ${lib}_SYMS + OUTPUT_STRIP_TRAILING_WHITESPACE) + string(REPLACE "\n" ";" ${lib}_SYMS ${${lib}_SYMS}) + + set(${lib}_VERSION_SCRIPT "${CMAKE_BINARY_DIR}/${lib}.ld") + + file(WRITE ${${lib}_VERSION_SCRIPT} + "{ global:\n") + foreach(sym ${${lib}_SYMS}) + file(APPEND ${${lib}_VERSION_SCRIPT} + "${sym};\n") + endforeach(sym) + file(APPEND ${${lib}_VERSION_SCRIPT} + "local: *; };\n") + + set_target_properties(${lib}_shared PROPERTIES + LINK_FLAGS -Wl,--version-script,${${lib}_VERSION_SCRIPT}) +endfunction() + +option(STRICT_ABI "Enforce strict ABI export in dynamic libraries" OFF) +if(WIN32 OR APPLE) + # Windows and OSX don't have this linker functionality. + set(STRICT_ABI OFF) +endif()