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