diff options
Diffstat (limited to 'cmake_export_symbol.cmake')
-rw-r--r-- | cmake_export_symbol.cmake | 40 |
1 files changed, 23 insertions, 17 deletions
diff --git a/cmake_export_symbol.cmake b/cmake_export_symbol.cmake index cbc65f2..0883001 100644 --- a/cmake_export_symbol.cmake +++ b/cmake_export_symbol.cmake | |||
@@ -1,49 +1,55 @@ | |||
1 | macro(export_symbol TARGET FILENAME) | 1 | macro(export_symbol TARGET SYMBOLS_PATH) |
2 | 2 | ||
3 | set(FLAG "") | 3 | set(FLAG "") |
4 | get_filename_component(FILENAME ${SYMBOLS_PATH} NAME) | ||
4 | 5 | ||
5 | if(WIN32) | 6 | if(WIN32) |
6 | string(REPLACE ".sym" ".def" DEF_FILENAME ${FILENAME}) | 7 | string(REPLACE ".sym" ".def" DEF_FILENAME ${FILENAME}) |
7 | file(WRITE ${DEF_FILENAME} "EXPORTS\n") | 8 | file(TO_CMAKE_PATH "${CMAKE_CURRENT_BINARY_DIR}/${DEF_FILENAME}" DEF_PATH) |
8 | file(READ ${FILENAME} SYMBOLS) | 9 | file(WRITE ${DEF_PATH} "EXPORTS\n") |
9 | file(APPEND ${DEF_FILENAME} "${SYMBOLS}") | 10 | file(READ ${SYMBOLS_PATH} SYMBOLS) |
10 | target_sources(${TARGET} PRIVATE ${DEF_FILENAME}) | 11 | file(APPEND ${DEF_PATH} "${SYMBOLS}") |
12 | target_sources(${TARGET} PRIVATE ${DEF_PATH}) | ||
11 | 13 | ||
12 | elseif(APPLE) | 14 | elseif(APPLE) |
13 | file(READ ${FILENAME} SYMBOLS) | 15 | file(READ ${SYMBOLS_PATH} SYMBOLS) |
14 | string(REGEX REPLACE "\n$" "" SYMBOLS ${SYMBOLS}) | 16 | string(REGEX REPLACE "\n$" "" SYMBOLS ${SYMBOLS}) |
15 | string(REPLACE "\n" "\n_" SYMBOLS ${SYMBOLS}) | 17 | string(REPLACE "\n" "\n_" SYMBOLS ${SYMBOLS}) |
16 | string(REGEX REPLACE "(.)$" "\\1\\n" SYMBOLS ${SYMBOLS}) | 18 | string(REGEX REPLACE "(.)$" "\\1\\n" SYMBOLS ${SYMBOLS}) |
17 | string(REPLACE ".sym" ".exp" EXP_FILENAME ${FILENAME}) | 19 | string(REPLACE ".sym" ".exp" EXP_FILENAME ${FILENAME}) |
18 | file(WRITE ${EXP_FILENAME} "_${SYMBOLS}") | 20 | file(TO_CMAKE_PATH "${CMAKE_CURRENT_BINARY_DIR}/${EXP_FILENAME}" EXP_PATH) |
19 | set(FLAG "-exported_symbols_list ${EXP_FILENAME}") | 21 | file(WRITE ${EXP_PATH} "_${SYMBOLS}") |
22 | set(FLAG "-exported_symbols_list ${EXP_PATH}") | ||
20 | set_target_properties(${TARGET} PROPERTIES LINK_FLAGS ${FLAG}) | 23 | set_target_properties(${TARGET} PROPERTIES LINK_FLAGS ${FLAG}) |
21 | 24 | ||
22 | elseif(CMAKE_SYSTEM_NAME MATCHES "HP-UX") | 25 | elseif(CMAKE_SYSTEM_NAME MATCHES "HP-UX") |
23 | file(READ ${FILENAME} SYMBOLS) | 26 | file(READ ${SYMBOLS_PATH} SYMBOLS) |
24 | string(REGEX REPLACE "\n$" "" SYMBOLS ${SYMBOLS}) | 27 | string(REGEX REPLACE "\n$" "" SYMBOLS ${SYMBOLS}) |
25 | string(REPLACE "\n" "\n+e " SYMBOLS ${SYMBOLS}) | 28 | string(REPLACE "\n" "\n+e " SYMBOLS ${SYMBOLS}) |
26 | string(REPLACE ".sym" ".opt" OPT_FILENAME ${FILENAME}) | 29 | string(REPLACE ".sym" ".opt" OPT_FILENAME ${FILENAME}) |
27 | file(WRITE ${OPT_FILENAME} "+e ${SYMBOLS}") | 30 | file(TO_CMAKE_PATH "${CMAKE_CURRENT_BINARY_DIR}/${OPT_FILENAME}" OPT_PATH) |
28 | set(FLAG "-Wl,-c,${OPT_FILENAME}") | 31 | file(WRITE ${OPT_PATH} "+e ${SYMBOLS}") |
32 | set(FLAG "-Wl,-c,${OPT_PATH}") | ||
29 | set_target_properties(${TARGET} PROPERTIES LINK_FLAGS ${FLAG}) | 33 | set_target_properties(${TARGET} PROPERTIES LINK_FLAGS ${FLAG}) |
30 | 34 | ||
31 | elseif(CMAKE_SYSTEM_NAME MATCHES "SunOS") | 35 | elseif(CMAKE_SYSTEM_NAME MATCHES "SunOS") |
32 | file(READ ${FILENAME} SYMBOLS) | 36 | file(READ ${SYMBOLS_PATH} SYMBOLS) |
33 | string(REPLACE "\n" ";\n" SYMBOLS ${SYMBOLS}) | 37 | string(REPLACE "\n" ";\n" SYMBOLS ${SYMBOLS}) |
34 | string(REPLACE ".sym" ".ver" VER_FILENAME ${FILENAME}) | 38 | string(REPLACE ".sym" ".ver" VER_FILENAME ${FILENAME}) |
35 | file(WRITE ${VER_FILENAME} | 39 | file(TO_CMAKE_PATH "${CMAKE_CURRENT_BINARY_DIR}/${VER_FILENAME}" VER_PATH) |
40 | file(WRITE ${VER_PATH} | ||
36 | "{\nglobal:\n${SYMBOLS}\nlocal:\n*;\n};\n") | 41 | "{\nglobal:\n${SYMBOLS}\nlocal:\n*;\n};\n") |
37 | set(FLAG "-Wl,-M${VER_FILENAME}") | 42 | set(FLAG "-Wl,-M${VER_PATH}") |
38 | set_target_properties(${TARGET} PROPERTIES LINK_FLAGS ${FLAG}) | 43 | set_target_properties(${TARGET} PROPERTIES LINK_FLAGS ${FLAG}) |
39 | 44 | ||
40 | elseif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang") | 45 | elseif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang") |
41 | file(READ ${FILENAME} SYMBOLS) | 46 | file(READ ${SYMBOLS_PATH} SYMBOLS) |
42 | string(REPLACE "\n" ";\n" SYMBOLS ${SYMBOLS}) | 47 | string(REPLACE "\n" ";\n" SYMBOLS ${SYMBOLS}) |
43 | string(REPLACE ".sym" ".ver" VER_FILENAME ${FILENAME}) | 48 | string(REPLACE ".sym" ".ver" VER_FILENAME ${FILENAME}) |
44 | file(WRITE ${VER_FILENAME} | 49 | file(TO_CMAKE_PATH "${CMAKE_CURRENT_BINARY_DIR}/${VER_FILENAME}" VER_PATH) |
50 | file(WRITE ${VER_PATH} | ||
45 | "{\nglobal:\n${SYMBOLS}\nlocal:\n*;\n};\n") | 51 | "{\nglobal:\n${SYMBOLS}\nlocal:\n*;\n};\n") |
46 | set(FLAG "-Wl,--version-script,\"${VER_FILENAME}\"") | 52 | set(FLAG "-Wl,--version-script,\"${VER_PATH}\"") |
47 | set_target_properties(${TARGET} PROPERTIES LINK_FLAGS ${FLAG}) | 53 | set_target_properties(${TARGET} PROPERTIES LINK_FLAGS ${FLAG}) |
48 | endif() | 54 | endif() |
49 | 55 | ||