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