1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
|
commit df9206778fe9ff1bdd56d975c29c43dfe1e66de7
Author: Christopher James Halse Rogers <christopher.halse.rogers@canonical.com>
Date: Fri Nov 23 15:26:53 2018 +1100
Export only YAML_CPP_API-tagged symbols on Linux.
This marks classes tagged with YAML_CPP_API with visibility("default"), to
explicitly export them, and then makes the default visibility "hidden" via
-fvisibility=hidden.
This reduces the number of exported symbols by more than 50%, which has
a small application start-up time and memory useage benefit. It also
makes it more feasible to audit the set of exported symbols in automated
ABI compatibility systems.
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -43,6 +43,14 @@
set(not-msvc $<NOT:$<CXX_COMPILER_ID:MSVC>>)
set(msvc-shared_rt $<BOOL:${YAML_MSVC_SHARED_RT}>)
+if(CMAKE_SYSTEM_NAME MATCHES "Linux")
+ set(CMAKE_CXX_VISIBILITY_PRESET hidden)
+ if (POLICY CMP0063)
+ cmake_policy(SET CMP0063 NEW)
+ endif()
+ add_definitions(-DYAML_CPP_USE_VISIBILITY)
+endif()
+
if (NOT DEFINED CMAKE_MSVC_RUNTIME_LIBRARY)
set(CMAKE_MSVC_RUNTIME_LIBRARY
MultiThreaded$<$<CONFIG:Debug>:Debug>$<${msvc-shared_rt}:DLL>)
--- a/include/yaml-cpp/dll.h
+++ b/include/yaml-cpp/dll.h
@@ -27,7 +27,11 @@
#define YAML_CPP_API __declspec(dllimport)
#endif // yaml_cpp_EXPORTS
#else // YAML_CPP_DLL
+#ifdef YAML_CPP_USE_VISIBILITY
+#define YAML_CPP_API __attribute__ ((visibility("default")))
+#else
#define YAML_CPP_API
+#endif // YAML_CPP_USE_VISIBILITY
#endif // YAML_CPP_DLL
#endif // DLL_H_62B23520_7C8E_11DE_8A39_0800200C9A66
|