Skip to content

Commit

Permalink
Factor out strict_abi cmake code into a separate module.
Browse files Browse the repository at this point in the history
  • Loading branch information
iphydf committed Jun 4, 2017
1 parent b782ef5 commit 41850de
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 39 deletions.
40 changes: 1 addition & 39 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ include(CheckCCompilerFlag)
include(CheckCXXCompilerFlag)
include(CTest)
include(MacRpath)
include(StrictAbi)

set(CMAKE_MACOSX_RPATH ON)

Expand Down Expand Up @@ -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)
Expand Down
38 changes: 38 additions & 0 deletions cmake/StrictAbi.cmake
Original file line number Diff line number Diff line change
@@ -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()

0 comments on commit 41850de

Please sign in to comment.