plugins: example plugin: Make all functions invisible except for the explicitly exported ones

* Add target parameters to compile all symbols invisible to the outside by default.
* Edit FUNC_DECL() macro to set attribute that exports the function
This commit is contained in:
Mario Hüttel 2019-11-18 21:56:22 +01:00
parent 3651296c3a
commit 374e3b54c0
2 changed files with 11 additions and 3 deletions

View File

@ -13,6 +13,11 @@
* @{ * @{
*/ */
/**
* @brief This define is used to export a function from a shared object
*/
#define EXPORT_FUNC __attribute__((visibility("default")))
/** /**
* @brief Function name expected to be found in external library for rendering. * @brief Function name expected to be found in external library for rendering.
* *
@ -37,14 +42,15 @@
* *
* The pure presence of this symbol name causes forking. The content of this variable is don't care. * The pure presence of this symbol name causes forking. The content of this variable is don't care.
* @note Use this if you mess with the internal structures of gds-render * @note Use this if you mess with the internal structures of gds-render
*
*/ */
#define EXTERNAL_LIBRARY_FORK_REQUEST exported_fork_request #define EXTERNAL_LIBRARY_FORK_REQUEST exported_fork_request
/** /**
* @brief Define for declaring the exported functions * @brief Define for declaring the exported functions.
*
* This not only helps with the declaration but also makes the symbols visible, so they can be called form outside the library
*/ */
#define FUNC_DECL(FUNC) FUNC #define FUNC_DECL(FUNC) EXPORT_FUNC FUNC
/** @} */ /** @} */

View File

@ -10,3 +10,5 @@ link_libraries(${PYTHON_LDFLAGS} version)
add_library(${PROJECT_NAME} SHARED EXCLUDE_FROM_ALL ${SOURCES}) add_library(${PROJECT_NAME} SHARED EXCLUDE_FROM_ALL ${SOURCES})
add_dependencies(${PROJECT_NAME} version) add_dependencies(${PROJECT_NAME} version)
set_target_properties(${PROJECT_NAME} PROPERTIES C_VISIBILITY_PRESET hidden)
set_target_properties(${PROJECT_NAME} PROPERTIES CXX_VISIBILITY_PRESET hidden)