diff options
Diffstat (limited to 'cmake_export_symbol.cmake')
-rw-r--r-- | cmake_export_symbol.cmake | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/cmake_export_symbol.cmake b/cmake_export_symbol.cmake new file mode 100644 index 0000000..7dde938 --- /dev/null +++ b/cmake_export_symbol.cmake | |||
@@ -0,0 +1,41 @@ | |||
1 | macro(export_symbol TARGET FILENAME) | ||
2 | |||
3 | set(FLAG "") | ||
4 | |||
5 | if(WIN32) | ||
6 | string(REPLACE ".sym" ".def" DEF_FILENAME ${FILENAME}) | ||
7 | target_sources(${TARGET} PRIVATE ${DEF_FILENAME}) | ||
8 | |||
9 | elseif(APPLE) | ||
10 | set(FLAG "-exported_symbols_list ${FILENAME}") | ||
11 | set_target_properties(${TARGET} PROPERTIES LINK_FLAGS ${FLAG}) | ||
12 | |||
13 | elseif(CMAKE_SYSTEM_NAME MATCHES "HP-UX") | ||
14 | file(READ ${FILENAME} SYMBOLS) | ||
15 | string(REGEX REPLACE "\n$" "" SYMBOLS ${SYMBOLS}) | ||
16 | string(REPLACE "\n" "\n+e " SYMBOLS ${SYMBOLS}) | ||
17 | string(REPLACE ".sym" ".opt" OPT_FILENAME ${FILENAME}) | ||
18 | file(WRITE ${OPT_FILENAME} "+e ${SYMBOLS}") | ||
19 | set(FLAG "-Wl,-c,${OPT_FILENAME}") | ||
20 | set_target_properties(${TARGET} PROPERTIES LINK_FLAGS ${FLAG}) | ||
21 | |||
22 | elseif(CMAKE_SYSTEM_NAME MATCHES "SunOS") | ||
23 | file(READ ${FILENAME} SYMBOLS) | ||
24 | string(REPLACE "\n" ";\n" SYMBOLS ${SYMBOLS}) | ||
25 | string(REPLACE ".sym" ".ver" VER_FILENAME ${FILENAME}) | ||
26 | file(WRITE ${VER_FILENAME} | ||
27 | "{\nglobal:\n${SYMBOLS}\nlocal:\n*;\n};\n") | ||
28 | set(FLAG "-Wl,-M${VER_FILENAME}") | ||
29 | set_target_properties(${TARGET} PROPERTIES LINK_FLAGS ${FLAG}) | ||
30 | |||
31 | elseif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang") | ||
32 | file(READ ${FILENAME} SYMBOLS) | ||
33 | string(REPLACE "\n" ";\n" SYMBOLS ${SYMBOLS}) | ||
34 | string(REPLACE ".sym" ".ver" VER_FILENAME ${FILENAME}) | ||
35 | file(WRITE ${VER_FILENAME} | ||
36 | "{\nglobal:\n${SYMBOLS}\nlocal:\n*;\n};\n") | ||
37 | set(FLAG "-Wl,--version-script,\"${VER_FILENAME}\"") | ||
38 | set_target_properties(${TARGET} PROPERTIES LINK_FLAGS ${FLAG}) | ||
39 | endif() | ||
40 | |||
41 | endmacro() | ||