summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Snopek <dsnopek@gmail.com>2024-09-13 17:49:28 -0500
committerGitHub <noreply@github.com>2024-09-13 17:49:28 -0500
commit4131b7f95f5a4ec660484431b175e15d95aed8db (patch)
tree127fd62c778f44175172c0adeeaec9e46f908ff0
parentaed9b5c7df48a6563e30f6ed78570e6fe03dc6c9 (diff)
parent02bdc6665af45777b4d57120690a829d1c4445fc (diff)
downloadredot-cpp-4131b7f95f5a4ec660484431b175e15d95aed8db.tar.gz
Merge pull request #1579 from enetheru/visibility-hidden
add SYMBOL_VISIBILITY cache variable to match scons interface.
-rw-r--r--CMakeLists.txt14
1 files changed, 13 insertions, 1 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index fba65b3..d86a07b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -49,6 +49,18 @@ option(GENERATE_TEMPLATE_GET_NODE "Generate a template version of the Node class
option(GODOT_CPP_SYSTEM_HEADERS "Expose headers as SYSTEM." ON)
option(GODOT_CPP_WARNING_AS_ERROR "Treat warnings as errors" OFF)
+set( GODOT_SYMBOL_VISIBILITY "hidden" CACHE STRING "Symbols visibility on GNU platforms. Use 'auto' to apply the default value. (auto|visible|hidden)")
+set_property( CACHE GODOT_SYMBOL_VISIBILITY PROPERTY STRINGS "auto;visible;hidden" )
+
+# CXX_VISIBILITY_PRESET supported values are: default, hidden, protected, and internal
+# which is inline with the gcc -fvisibility=
+# https://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html
+# To match the scons options we need to change the text to match the -fvisibility flag
+# it is probably worth another PR which changes both to use the flag options
+if( ${GODOT_SYMBOL_VISIBILITY} STREQUAL "auto" OR ${GODOT_SYMBOL_VISIBILITY} STREQUAL "visible" )
+ set( GODOT_SYMBOL_VISIBILITY "default" )
+endif ()
+
# Add path to modules
list( APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/" )
@@ -226,7 +238,7 @@ set_target_properties(${PROJECT_NAME}
PROPERTIES
CXX_EXTENSIONS OFF
POSITION_INDEPENDENT_CODE ON
- CXX_VISIBILITY_PRESET hidden
+ CXX_VISIBILITY_PRESET ${GODOT_SYMBOL_VISIBILITY}
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bin"
LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bin"
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bin"