From 34c9bba7ce2196c59eba9b655802f9028f33051a Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Wed, 18 Oct 2017 09:43:48 -0700 Subject: [PATCH] Use hidden visibility by default --- CMakeLists.txt | 36 ++++++++++++++++++++++++++++++++---- include/AL/alure2.h | 24 +++++++++++------------- 2 files changed, 43 insertions(+), 17 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4c05884..c3fecf1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -43,6 +43,32 @@ else() endif() endif() +unset(EXPORT_DECL) +set(VISIBILITY_FLAGS ) +if(WIN32) + set(EXPORT_DECL "__declspec(dllexport)") +else() + set(OLD_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}") + # Yes GCC, really don't accept visibility modes you don't support + set(CMAKE_REQUIRED_FLAGS "${OLD_REQUIRED_FLAGS} -Wattributes -Werror") + + check_cxx_source_compiles("int foo() __attribute__((visibility(\"default\"))); + int main() {return 0;}" HAVE_GCC_DEFAULT_VISIBILITY) + if(HAVE_GCC_DEFAULT_VISIBILITY) + set(EXPORT_DECL "__attribute__((visibility(\"default\")))") + endif() + + if(HAVE_GCC_DEFAULT_VISIBILITY) + check_cxx_compiler_flag(-fvisibility=hidden HAVE_VISIBILITY_HIDDEN_SWITCH) + if(HAVE_VISIBILITY_HIDDEN_SWITCH) + set(VISIBILITY_FLAGS ${VISIBILITY_FLAGS} -fvisibility=hidden) + endif() + endif() + + set(CMAKE_REQUIRED_FLAGS "${OLD_REQUIRED_FLAGS}") +endif() + + set(LINKER_OPTS ) if(ALURE_STATIC_GCCRT) set(OLD_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES}) @@ -130,23 +156,25 @@ CONFIGURE_FILE( add_library(alure2 SHARED ${alure_srcs}) -target_compile_definitions(alure2 PRIVATE ALURE_BUILD_DLL) +if(EXPORT_DECL) + target_compile_definitions(alure2 PRIVATE ALURE_API=${EXPORT_DECL}) +endif() target_include_directories(alure2 PUBLIC ${alure_SOURCE_DIR}/include/AL ${OPENAL_INCLUDE_DIR} PRIVATE ${alure_SOURCE_DIR}/include ${alure_SOURCE_DIR}/src ${alure_BINARY_DIR} ${decoder_incls} ) -target_compile_options(alure2 PRIVATE ${CXX_FLAGS}) +target_compile_options(alure2 PRIVATE ${CXX_FLAGS} ${VISIBILITY_FLAGS}) target_link_libraries(alure2 PUBLIC ${alure_libs} PRIVATE ${LINKER_OPTS}) add_library(alure2_s STATIC ${alure_srcs}) -target_compile_definitions(alure2_s PUBLIC ALURE_STATIC_LIB PRIVATE ALURE_BUILD_STATIC) +target_compile_definitions(alure2_s PUBLIC ALURE_STATIC_LIB) target_include_directories(alure2_s PUBLIC ${alure_SOURCE_DIR}/include/AL ${OPENAL_INCLUDE_DIR} PRIVATE ${alure_SOURCE_DIR}/include ${alure_SOURCE_DIR}/src ${alure_BINARY_DIR} ${decoder_incls} ) -target_compile_options(alure2_s PRIVATE ${CXX_FLAGS}) +target_compile_options(alure2_s PRIVATE ${CXX_FLAGS} ${VISIBILITY_FLAGS}) target_link_libraries(alure2_s PUBLIC ${alure_libs}) diff --git a/include/AL/alure2.h b/include/AL/alure2.h index a890e91..6be40d5 100644 --- a/include/AL/alure2.h +++ b/include/AL/alure2.h @@ -14,19 +14,17 @@ #include "alc.h" #include "al.h" -#ifdef _WIN32 -#if defined(ALURE_BUILD_STATIC) || defined(ALURE_STATIC_LIB) -#define ALURE_API -#elif defined(ALURE_BUILD_DLL) -#define ALURE_API __declspec(dllexport) -#else -#define ALURE_API __declspec(dllimport) -#endif - -#else - -#define ALURE_API -#endif +#ifndef ALURE_API + #if defined(ALURE_STATIC_LIB) + #define ALURE_API + #elif defined(_WIN32) + #define ALURE_API __declspec(dllimport) + #elif defined(__GNUC__) || (defined(__has_attribute) && __has_attribute(visibility)) + #define ALURE_API __attribute__((visibility("default"))) + #else + #define ALURE_API + #endif +#endif /* ALURE_API */ #ifndef EFXEAXREVERBPROPERTIES_DEFINED #define EFXEAXREVERBPROPERTIES_DEFINED -- 2.11.4.GIT