diff options
author | kinichiro <kinichiro.inoguchi@gmail.com> | 2017-01-17 21:27:41 +0900 |
---|---|---|
committer | kinichiro <kinichiro.inoguchi@gmail.com> | 2017-01-18 00:34:20 +0900 |
commit | 3b8cf47307c65f6adfe20e13e85e074a8e5cc044 (patch) | |
tree | 67d179a13a60379c02b4ea3a52d29dbaa8a706e3 /cmake_export_symbol.cmake | |
parent | 3b2560feb355e708a59ecfb224932810687a75ad (diff) | |
download | portable-3b8cf47307c65f6adfe20e13e85e074a8e5cc044.tar.gz portable-3b8cf47307c65f6adfe20e13e85e074a8e5cc044.tar.bz2 portable-3b8cf47307c65f6adfe20e13e85e074a8e5cc044.zip |
Add export symbol support to CMake
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() | ||