aboutsummaryrefslogtreecommitdiff
path: root/cmake_export_symbol.cmake
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--cmake_export_symbol.cmake44
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 @@
1macro(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
44endmacro()