From 626d266e2705c94d346f8836d78ee853fd3bc1d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Thu, 25 Feb 2010 23:43:37 +0100 Subject: [PATCH] Added GCC visibility support --- library/CMakeLists.txt | 1 + library/Export.h | 3 +-- shmserver/CMakeLists.txt | 1 + shmserver/shms-linux.cpp | 16 +++++++++------- 4 files changed, 12 insertions(+), 9 deletions(-) diff --git a/library/CMakeLists.txt b/library/CMakeLists.txt index 66921f55d..0f172f0dd 100644 --- a/library/CMakeLists.txt +++ b/library/CMakeLists.txt @@ -86,6 +86,7 @@ IF(UNIX) add_definitions(-DUSE_CONFIG_H) find_library(X11_LIBRARY X11) SET(CMAKE_CXX_FLAGS_DEBUG "-g -Wall -pedantic") + SET(CMAKE_CXX_FLAGS "-fvisibility=hidden") SET(PROJECT_LIBS ${X11_LIBRARY} rt) ELSE(UNIX) diff --git a/library/Export.h b/library/Export.h index 98cac2e66..1e3834f3b 100644 --- a/library/Export.h +++ b/library/Export.h @@ -22,10 +22,9 @@ must not be misrepresented as being the original software. distribution. */ -/// TODO: add visibility for GCC? #ifdef LINUX_BUILD # ifndef DFHACK_EXPORT -# define DFHACK_EXPORT +# define DFHACK_EXPORT __attribute__ ((visibility("default"))) # endif #else # ifdef BUILD_DFHACK_LIB diff --git a/shmserver/CMakeLists.txt b/shmserver/CMakeLists.txt index e733b4e5a..b8a80e15b 100644 --- a/shmserver/CMakeLists.txt +++ b/shmserver/CMakeLists.txt @@ -38,6 +38,7 @@ LIST(APPEND PROJECT_SRCS ${PROJECT_HDRS}) IF(UNIX) add_definitions(-DLINUX_BUILD) SET(PROJECT_LIBS rt) + SET(CMAKE_CXX_FLAGS "-fvisibility=hidden") ADD_LIBRARY(dfconnect SHARED ${PROJECT_SRCS}) TARGET_LINK_LIBRARIES(dfconnect ${PROJECT_LIBS}) ELSE(UNIX) diff --git a/shmserver/shms-linux.cpp b/shmserver/shms-linux.cpp index c11850b89..f78bf7419 100644 --- a/shmserver/shms-linux.cpp +++ b/shmserver/shms-linux.cpp @@ -41,6 +41,8 @@ distribution. #include #include +#define DFhackCExport extern "C" __attribute__ ((visibility("default"))) + // various crud int counter = 0; int errorstate = 0; @@ -138,7 +140,7 @@ static int (*_SDL_Init)(uint32_t flags) = 0; static int (*_SDL_Flip)(void * some_ptr) = 0; // hook - called every tick in OpenGL mode of DF -extern "C" void SDL_GL_SwapBuffers(void) +DFhackCExport void SDL_GL_SwapBuffers(void) { if(_SDL_GL_SwapBuffers) { @@ -152,7 +154,7 @@ extern "C" void SDL_GL_SwapBuffers(void) } // hook - called every tick in the 2D mode of DF -extern "C" int SDL_Flip(void * some_ptr) +DFhackCExport int SDL_Flip(void * some_ptr) { if(_SDL_Flip) { @@ -167,7 +169,7 @@ extern "C" int SDL_Flip(void * some_ptr) } // hook - called at program exit -extern "C" void SDL_Quit(void) +DFhackCExport void SDL_Quit(void) { if(!errorstate) { @@ -180,7 +182,7 @@ extern "C" void SDL_Quit(void) } // hook - called at program start, initialize some stuffs we'll use later -extern "C" int SDL_Init(uint32_t flags) +DFhackCExport int SDL_Init(uint32_t flags) { // find real functions _SDL_GL_SwapBuffers = (void (*)( void )) dlsym(RTLD_NEXT, "SDL_GL_SwapBuffers"); @@ -210,7 +212,7 @@ extern "C" int SDL_Init(uint32_t flags) static int (*_refresh)(void) = 0; //extern NCURSES_EXPORT(int) refresh (void); -extern "C" int refresh (void) +DFhackCExport int refresh (void) { if(_refresh) { @@ -226,7 +228,7 @@ extern "C" int refresh (void) static int (*_endwin)(void) = 0; //extern NCURSES_EXPORT(int) endwin (void); -extern "C" int endwin (void) +DFhackCExport int endwin (void) { if(!errorstate) { @@ -241,7 +243,7 @@ extern "C" int endwin (void) typedef void WINDOW; //extern NCURSES_EXPORT(WINDOW *) initscr (void); static WINDOW * (*_initscr)(void) = 0; -extern "C" WINDOW * initscr (void) +DFhackCExport WINDOW * initscr (void) { // find real functions _refresh = (int (*)( void )) dlsym(RTLD_NEXT, "refresh");