diff options
| author | Chia-I Wu <olvaffe@gmail.com> | 2014-08-04 08:03:57 +0800 |
|---|---|---|
| committer | Chia-I Wu <olvaffe@gmail.com> | 2014-08-04 08:23:11 +0800 |
| commit | a3fd91dcd922abf0703068f7fb2489318c1786af (patch) | |
| tree | 7214355a9ab617ec69cbd29f609554d886004169 | |
| parent | 2d37bf70ff10cf42c1fc4ef4cce39c66289aed02 (diff) | |
| download | usermoji-a3fd91dcd922abf0703068f7fb2489318c1786af.tar.xz | |
add and deal with -fvisibility=hidden everywhere
| -rw-r--r-- | CMakeLists.txt | 7 | ||||
| -rw-r--r-- | icd/common/icd.c | 6 | ||||
| -rw-r--r-- | icd/common/icd.h | 8 | ||||
| -rw-r--r-- | loader/loader.c | 11 | ||||
| -rw-r--r-- | loader/loader.h | 39 | ||||
| -rwxr-xr-x | xgl-generate.py | 28 |
6 files changed, 71 insertions, 28 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 453cc61f..3945440b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -23,7 +23,12 @@ if (NOT LIBDRM_FOUND) message(FATAL_ERROR "libdrm not found") endif() -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99 -Werror -Wall -Wextra -Wno-sign-compare -Wno-unused-parameter") +if (CMAKE_COMPILER_IS_GNUCC) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99 -Werror -Wall -Wextra -Wno-sign-compare -Wno-unused-parameter") + if (UNIX) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden") + endif() +endif() set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/cmake") include(GetGitRevisionDescription) diff --git a/icd/common/icd.c b/icd/common/icd.c index 3ec751cf..7dd8103a 100644 --- a/icd/common/icd.c +++ b/icd/common/icd.c @@ -150,7 +150,7 @@ void icd_clear_msg_callbacks(void) icd.msg_callbacks = NULL; } -XGL_RESULT XGLAPI xglDbgRegisterMsgCallback(XGL_DBG_MSG_CALLBACK_FUNCTION pfnMsgCallback, XGL_VOID* pUserData) +ICD_EXPORT XGL_RESULT XGLAPI xglDbgRegisterMsgCallback(XGL_DBG_MSG_CALLBACK_FUNCTION pfnMsgCallback, XGL_VOID* pUserData) { struct icd_msg_callback *cb; @@ -167,7 +167,7 @@ XGL_RESULT XGLAPI xglDbgRegisterMsgCallback(XGL_DBG_MSG_CALLBACK_FUNCTION pfnMsg return XGL_SUCCESS; } -XGL_RESULT XGLAPI xglDbgUnregisterMsgCallback(XGL_DBG_MSG_CALLBACK_FUNCTION pfnMsgCallback) +ICD_EXPORT XGL_RESULT XGLAPI xglDbgUnregisterMsgCallback(XGL_DBG_MSG_CALLBACK_FUNCTION pfnMsgCallback) { struct icd_msg_callback *cb = icd.msg_callbacks; @@ -192,7 +192,7 @@ XGL_RESULT XGLAPI xglDbgUnregisterMsgCallback(XGL_DBG_MSG_CALLBACK_FUNCTION pfnM return XGL_SUCCESS; } -XGL_RESULT XGLAPI xglDbgSetGlobalOption(XGL_DBG_GLOBAL_OPTION dbgOption, XGL_SIZE dataSize, const XGL_VOID* pData) +ICD_EXPORT XGL_RESULT XGLAPI xglDbgSetGlobalOption(XGL_DBG_GLOBAL_OPTION dbgOption, XGL_SIZE dataSize, const XGL_VOID* pData) { XGL_RESULT res = XGL_SUCCESS; diff --git a/icd/common/icd.h b/icd/common/icd.h index 18b47573..323d9561 100644 --- a/icd/common/icd.h +++ b/icd/common/icd.h @@ -32,6 +32,14 @@ #include "icd-dispatch-table.h" +#if defined(__GNUC__) && __GNUC__ >= 4 +# define ICD_EXPORT __attribute__((visibility("default"))) +#elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590) +# define ICD_EXPORT __attribute__((visibility("default"))) +#else +# define ICD_EXPORT +#endif + void icd_msg(XGL_DBG_MSG_TYPE msg_type, XGL_VALIDATION_LEVEL validation_level, XGL_BASE_OBJECT src_object, diff --git a/loader/loader.c b/loader/loader.c index 860ffb9d..a90d6560 100644 --- a/loader/loader.c +++ b/loader/loader.c @@ -35,8 +35,7 @@ #include <dlfcn.h> #include <pthread.h> -#include <xgl.h> -#include <xglDbg.h> +#include "loader.h" typedef XGL_RESULT (XGLAPI *InitAndEnumerateGpusT)(const XGL_APPLICATION_INFO* pAppInfo, const XGL_ALLOC_CALLBACKS* pAllocCb, XGL_UINT maxGpus, XGL_UINT* pGpuCount, XGL_PHYSICAL_GPU* pGpus); typedef XGL_RESULT (XGLAPI *DbgRegisterMsgCallbackT)(XGL_DBG_MSG_CALLBACK_FUNCTION pfnMsgCallback, XGL_VOID* pUserData); @@ -337,7 +336,7 @@ static void loader_icd_scan(void) loader.scanned = true; } -XGL_RESULT XGLAPI xglInitAndEnumerateGpus(const XGL_APPLICATION_INFO* pAppInfo, const XGL_ALLOC_CALLBACKS* pAllocCb, XGL_UINT maxGpus, XGL_UINT* pGpuCount, XGL_PHYSICAL_GPU* pGpus) +LOADER_EXPORT XGL_RESULT XGLAPI xglInitAndEnumerateGpus(const XGL_APPLICATION_INFO* pAppInfo, const XGL_ALLOC_CALLBACKS* pAllocCb, XGL_UINT maxGpus, XGL_UINT* pGpuCount, XGL_PHYSICAL_GPU* pGpus) { static pthread_once_t once = PTHREAD_ONCE_INIT; const struct loader_icd *icd; @@ -376,7 +375,7 @@ XGL_RESULT XGLAPI xglInitAndEnumerateGpus(const XGL_APPLICATION_INFO* pAppInfo, return (count > 0) ? XGL_SUCCESS : res; } -XGL_RESULT XGLAPI xglDbgRegisterMsgCallback(XGL_DBG_MSG_CALLBACK_FUNCTION pfnMsgCallback, XGL_VOID* pUserData) +LOADER_EXPORT XGL_RESULT XGLAPI xglDbgRegisterMsgCallback(XGL_DBG_MSG_CALLBACK_FUNCTION pfnMsgCallback, XGL_VOID* pUserData) { const struct loader_icd *icd = loader.icds; XGL_RESULT res; @@ -409,7 +408,7 @@ XGL_RESULT XGLAPI xglDbgRegisterMsgCallback(XGL_DBG_MSG_CALLBACK_FUNCTION pfnMsg return XGL_SUCCESS; } -XGL_RESULT XGLAPI xglDbgUnregisterMsgCallback(XGL_DBG_MSG_CALLBACK_FUNCTION pfnMsgCallback) +LOADER_EXPORT XGL_RESULT XGLAPI xglDbgUnregisterMsgCallback(XGL_DBG_MSG_CALLBACK_FUNCTION pfnMsgCallback) { const struct loader_icd *icd = loader.icds; XGL_RESULT res = XGL_SUCCESS; @@ -429,7 +428,7 @@ XGL_RESULT XGLAPI xglDbgUnregisterMsgCallback(XGL_DBG_MSG_CALLBACK_FUNCTION pfnM return res; } -XGL_RESULT XGLAPI xglDbgSetGlobalOption(XGL_DBG_GLOBAL_OPTION dbgOption, XGL_SIZE dataSize, const XGL_VOID* pData) +LOADER_EXPORT XGL_RESULT XGLAPI xglDbgSetGlobalOption(XGL_DBG_GLOBAL_OPTION dbgOption, XGL_SIZE dataSize, const XGL_VOID* pData) { const struct loader_icd *icd = loader.icds; XGL_RESULT res = XGL_SUCCESS; diff --git a/loader/loader.h b/loader/loader.h new file mode 100644 index 00000000..19aba3f5 --- /dev/null +++ b/loader/loader.h @@ -0,0 +1,39 @@ +/* + * XGL + * + * Copyright (C) 2014 LunarG, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +#ifndef LOADER_H +#define LOADER_H + +#include <xgl.h> +#include <xglDbg.h> + +#if defined(__GNUC__) && __GNUC__ >= 4 +# define LOADER_EXPORT __attribute__((visibility("default"))) +#elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590) +# define LOADER_EXPORT __attribute__((visibility("default"))) +#else +# define LOADER_EXPORT +#endif + +#endif /* LOADER_H */ diff --git a/xgl-generate.py b/xgl-generate.py index 5ffa583f..865f7a68 100755 --- a/xgl-generate.py +++ b/xgl-generate.py @@ -81,7 +81,10 @@ class Subcommand(object): %s; };""" % ";\n ".join(entries) - def _generate_icd_dispatch_entrypoints(self): + def _generate_icd_dispatch_entrypoints(self, qual=""): + if qual: + qual += " " + funcs = [] for proto in self.protos: if not xgl.is_dispatchable(proto): @@ -92,12 +95,12 @@ class Subcommand(object): if proto.ret != "XGL_VOID": stmt = "return " + stmt - funcs.append("%s\n" + funcs.append("%s%s\n" "{\n" " const struct icd_dispatch_table * const *disp =\n" " (const struct icd_dispatch_table * const *) %s;\n" " %s;\n" - "}" % (decl, proto.params[0].name, stmt)) + "}" % (qual, decl, proto.params[0].name, stmt)) return "\n\n".join(funcs) @@ -135,13 +138,11 @@ class PrettyDummySubcommand(Subcommand): class LoaderSubcommand(Subcommand): def generate_header(self): - return "\n".join([ - "#include <xgl.h>", - "#include <xglDbg.h>"]) + return "#include \"loader.h\"" def generate_body(self): body = [self._generate_icd_dispatch_table(), - self._generate_icd_dispatch_entrypoints()] + self._generate_icd_dispatch_entrypoints("LOADER_EXPORT")] return "\n\n".join(body) @@ -164,20 +165,11 @@ class IcdDispatchTableSubcommand(Subcommand): return self._generate_icd_dispatch_table() class IcdDispatchEntrypointsSubcommand(Subcommand): - def run(self): - if len(self.argv) != 1: - print("IcdDispatchEntrypointsSubcommand requires a header to include") - return - super().run() - def generate_header(self): - return "\n".join([ - "#include <xgl.h>", - "#include <xglDbg.h>", - "#include \"%s\"" % self.argv[0]]) + return "#include \"icd.h\"" def generate_body(self): - return self._generate_icd_dispatch_entrypoints() + return self._generate_icd_dispatch_entrypoints("ICD_EXPORT") def main(): subcommands = { |
