Control exported symbols on osx for cmake

This commit is contained in:
Andrew Noyes 2020-02-12 19:35:12 -08:00
parent b1b57aae05
commit f1357fd482
2 changed files with 24 additions and 1 deletions

View File

@ -38,7 +38,21 @@ else()
endif()
add_dependencies(fdb_c fdb_c_generated fdb_c_options)
target_link_libraries(fdb_c PUBLIC $<BUILD_INTERFACE:fdbclient>)
target_link_options(fdb_c PRIVATE -Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/fdb_c.map -Wl,-z,nodelete)
if(APPLE)
set(symbols ${CMAKE_CURRENT_BINARY_DIR}/fdb_c.symbols)
add_custom_command(OUTPUT ${symbols}
COMMAND $<TARGET_FILE:Python::Interpreter> ${CMAKE_CURRENT_SOURCE_DIR}/symbolify.py
${CMAKE_CURRENT_SOURCE_DIR}/foundationdb/fdb_c.h
${symbols}
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/symbolify.py ${CMAKE_CURRENT_SOURCE_DIR}/foundationdb/fdb_c.h
COMMENT "Generate exported_symbols_list")
add_custom_target(exported_symbols_list DEPENDS ${symbols})
add_dependencies(fdb_c exported_symbols_list)
target_link_options(fdb_c PRIVATE -Xlinker -exported_symbols_list -Xlinker ${symbols})
elseif(WIN32)
else()
target_link_options(fdb_c PRIVATE -Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/fdb_c.map -Wl,-z,nodelete)
endif()
target_include_directories(fdb_c PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>

9
bindings/c/symbolify.py Normal file
View File

@ -0,0 +1,9 @@
if __name__ == '__main__':
import re
import sys
r = re.compile('DLLEXPORT[^(]*(fdb_[^(]*)[(]')
(fdb_c_h, symbols_file) = sys.argv[1:]
with open(fdb_c_h, 'r') as f:
symbols = sorted(set('_' + m.group(1) for m in r.finditer(f.read())))
with open(symbols_file, 'w') as f:
print('\n'.join(symbols), file=f)