Reputation: 2385
I mean, I know that it's supposed to default everything that isn't explicitly exported as "default" as hidden, but when I try to use it (on a debug build) and compare builds of the shared library with it and without it, the output of
readelf -Ws --dyn-syms libLibrary.so
is exactly the same, with everything having default visibility. What can I be missing?
This option comes with GenerateExternalHeader module from its example but I don't want to just mindlessly set flags because the (often incorrect) documentation tells me to. And in this case I cannot understand what this option even does if anything.
Upvotes: 1
Views: 3988
Reputation: 141493
Adds -fvisibility=hidden
to command line arguments of GCC and clang.
Adds here: https://gitlab.kitware.com/cmake/cmake/-/blob/master/Source/cmLocalGenerator.cxx#L2200 .
Option comes from CMAKE_${LANG}_COMPILE_OPTIONS_VISIBILITY
property:
/usr/share/cmake $ ag _COMPILE_OPTIONS_VISIBILITY
Modules/Compiler/AppleClang-CXX.cmake
15: set(CMAKE_CXX_COMPILE_OPTIONS_VISIBILITY_INLINES_HIDDEN "-fvisibility-inlines-hidden")
Modules/Compiler/AppleClang-OBJCXX.cmake
13:set(CMAKE_OBJCXX_COMPILE_OPTIONS_VISIBILITY_INLINES_HIDDEN "-fvisibility-inlines-hidden")
Modules/Compiler/Clang-CXX.cmake
15: set(CMAKE_CXX_COMPILE_OPTIONS_VISIBILITY_INLINES_HIDDEN "-fvisibility-inlines-hidden")
Modules/Compiler/Clang-HIP.cmake
9: set(CMAKE_HIP_COMPILE_OPTIONS_VISIBILITY_INLINES_HIDDEN "-fvisibility-inlines-hidden")
Modules/Compiler/Clang.cmake
36: set(CMAKE_${lang}_COMPILE_OPTIONS_VISIBILITY "-fvisibility=")
Modules/Compiler/GNU-CXX.cmake
17: set(CMAKE_CXX_COMPILE_OPTIONS_VISIBILITY_INLINES_HIDDEN "-fno-keep-inline-dllexport")
21: set(CMAKE_CXX_COMPILE_OPTIONS_VISIBILITY_INLINES_HIDDEN "-fvisibility-inlines-hidden")
Modules/Compiler/GNU-OBJCXX.cmake
14: set(CMAKE_OBJCXX_COMPILE_OPTIONS_VISIBILITY_INLINES_HIDDEN "-fvisibility-inlines-hidden")
Modules/Compiler/GNU.cmake
32: set(CMAKE_${lang}_COMPILE_OPTIONS_VISIBILITY "-fvisibility=")
Modules/Compiler/IntelLLVM-CXX.cmake
23: set(CMAKE_CXX_COMPILE_OPTIONS_VISIBILITY_INLINES_HIDDEN "-fvisibility-inlines-hidden")
Modules/Compiler/IntelLLVM.cmake
54: set(CMAKE_${lang}_COMPILE_OPTIONS_VISIBILITY "-fvisibility=")
Modules/Compiler/NVIDIA-CUDA.cmake
48: set(CMAKE_CUDA_COMPILE_OPTIONS_VISIBILITY -Xcompiler=-fvisibility=)
Modules/Compiler/QCC-CXX.cmake
15:set(CMAKE_CXX_COMPILE_OPTIONS_VISIBILITY_INLINES_HIDDEN "-fvisibility-inlines-hidden")
Modules/Platform/AIX-GNU-CXX.cmake
3:unset(CMAKE_CXX_COMPILE_OPTIONS_VISIBILITY_INLINES_HIDDEN)
Modules/Platform/AIX-GNU.cmake
20: unset(CMAKE_${lang}_COMPILE_OPTIONS_VISIBILITY)
Modules/Platform/Apple-Intel.cmake
17: set(CMAKE_${lang}_COMPILE_OPTIONS_VISIBILITY "-fvisibility=")
Modules/Platform/Apple-IntelLLVM.cmake
16: set(CMAKE_${lang}_COMPILE_OPTIONS_VISIBILITY "-fvisibility=")
Modules/Platform/HP-UX-GNU-CXX.cmake
3:unset(CMAKE_CXX_COMPILE_OPTIONS_VISIBILITY_INLINES_HIDDEN)
Modules/Platform/HP-UX-GNU.cmake
19: unset(CMAKE_${lang}_COMPILE_OPTIONS_VISIBILITY)
Modules/Platform/Linux-Fujitsu.cmake
14: set(CMAKE_${lang}_COMPILE_OPTIONS_VISIBILITY "-fvisibility=")
Modules/Platform/Linux-Intel.cmake
57: set(CMAKE_${lang}_COMPILE_OPTIONS_VISIBILITY "-fvisibility=")
Modules/Platform/Linux-IntelLLVM.cmake
54: set(CMAKE_${lang}_COMPILE_OPTIONS_VISIBILITY "-fvisibility=")
Upvotes: 1