From 2a691faf203b2a40e7c8b7e900da2e535344989e Mon Sep 17 00:00:00 2001 From: Simon Quigley Date: Sat, 13 Nov 2021 20:48:59 +0000 Subject: [PATCH] symbol-visibility commit df9206778fe9ff1bdd56d975c29c43dfe1e66de7 Author: Christopher James Halse Rogers 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. Gbp-Pq: Name symbol-visibility.patch --- CMakeLists.txt | 8 ++++++++ include/yaml-cpp/dll.h | 4 ++++ 2 files changed, 12 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index b230b9e..78f5221 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -43,6 +43,14 @@ set(build-windows-dll $,${build-shared}>) set(not-msvc $>) set(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$<$:Debug>$<${msvc-shared_rt}:DLL>) diff --git a/include/yaml-cpp/dll.h b/include/yaml-cpp/dll.h index a32c06b..5b8c905 100644 --- 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 -- 2.30.2