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 | |
parent | 3b2560feb355e708a59ecfb224932810687a75ad (diff) | |
download | portable-3b8cf47307c65f6adfe20e13e85e074a8e5cc044.tar.gz portable-3b8cf47307c65f6adfe20e13e85e074a8e5cc044.tar.bz2 portable-3b8cf47307c65f6adfe20e13e85e074a8e5cc044.zip |
Add export symbol support to CMake
-rw-r--r-- | CMakeLists.txt | 3 | ||||
-rw-r--r-- | Makefile.am | 2 | ||||
-rw-r--r-- | cmake_export_symbol.cmake | 41 | ||||
-rw-r--r-- | ssl/CMakeLists.txt | 3 | ||||
-rw-r--r-- | tls/CMakeLists.txt | 3 |
5 files changed, 47 insertions, 5 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 9cf14de..558a6f5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt | |||
@@ -4,6 +4,9 @@ include(CheckLibraryExists) | |||
4 | include(CheckIncludeFiles) | 4 | include(CheckIncludeFiles) |
5 | include(CheckTypeSize) | 5 | include(CheckTypeSize) |
6 | 6 | ||
7 | set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}" ${CMAKE_MODULE_PATH}) | ||
8 | include(cmake_export_symbol) | ||
9 | |||
7 | project (LibreSSL C) | 10 | project (LibreSSL C) |
8 | 11 | ||
9 | enable_testing() | 12 | enable_testing() |
diff --git a/Makefile.am b/Makefile.am index 48da18b..b4b9dfc 100644 --- a/Makefile.am +++ b/Makefile.am | |||
@@ -5,7 +5,7 @@ pkgconfigdir = $(libdir)/pkgconfig | |||
5 | pkgconfig_DATA = libcrypto.pc libssl.pc libtls.pc openssl.pc | 5 | pkgconfig_DATA = libcrypto.pc libssl.pc libtls.pc openssl.pc |
6 | 6 | ||
7 | EXTRA_DIST = README.md README.windows VERSION config scripts | 7 | EXTRA_DIST = README.md README.windows VERSION config scripts |
8 | EXTRA_DIST += CMakeLists.txt cmake_uninstall.cmake.in | 8 | EXTRA_DIST += CMakeLists.txt cmake_export_symbol.cmake cmake_uninstall.cmake.in |
9 | 9 | ||
10 | .PHONY: install_sw | 10 | .PHONY: install_sw |
11 | install_sw: install | 11 | install_sw: install |
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() | ||
diff --git a/ssl/CMakeLists.txt b/ssl/CMakeLists.txt index d511c8e..67115e4 100644 --- a/ssl/CMakeLists.txt +++ b/ssl/CMakeLists.txt | |||
@@ -52,9 +52,8 @@ add_library(ssl-objects OBJECT ${SSL_SRC}) | |||
52 | if (BUILD_SHARED) | 52 | if (BUILD_SHARED) |
53 | add_library(ssl STATIC $<TARGET_OBJECTS:ssl-objects>) | 53 | add_library(ssl STATIC $<TARGET_OBJECTS:ssl-objects>) |
54 | add_library(ssl-shared SHARED $<TARGET_OBJECTS:ssl-objects>) | 54 | add_library(ssl-shared SHARED $<TARGET_OBJECTS:ssl-objects>) |
55 | export_symbol(ssl-shared ${CMAKE_CURRENT_SOURCE_DIR}/ssl.sym) | ||
55 | if (WIN32) | 56 | if (WIN32) |
56 | target_sources(ssl-shared PRIVATE | ||
57 | ${CMAKE_CURRENT_SOURCE_DIR}/ssl.def) | ||
58 | target_link_libraries(ssl-shared crypto-shared Ws2_32.lib) | 57 | target_link_libraries(ssl-shared crypto-shared Ws2_32.lib) |
59 | set(SSL_POSTFIX -${SSL_MAJOR_VERSION}) | 58 | set(SSL_POSTFIX -${SSL_MAJOR_VERSION}) |
60 | endif() | 59 | endif() |
diff --git a/tls/CMakeLists.txt b/tls/CMakeLists.txt index 1f78038..dcefad7 100644 --- a/tls/CMakeLists.txt +++ b/tls/CMakeLists.txt | |||
@@ -33,9 +33,8 @@ add_library(tls-objects OBJECT ${TLS_SRC}) | |||
33 | if (BUILD_SHARED) | 33 | if (BUILD_SHARED) |
34 | add_library(tls STATIC $<TARGET_OBJECTS:tls-objects>) | 34 | add_library(tls STATIC $<TARGET_OBJECTS:tls-objects>) |
35 | add_library(tls-shared SHARED $<TARGET_OBJECTS:tls-objects>) | 35 | add_library(tls-shared SHARED $<TARGET_OBJECTS:tls-objects>) |
36 | export_symbol(tls-shared ${CMAKE_CURRENT_SOURCE_DIR}/tls.sym) | ||
36 | if (WIN32) | 37 | if (WIN32) |
37 | target_sources(tls-shared PRIVATE | ||
38 | ${CMAKE_CURRENT_SOURCE_DIR}/tls.def) | ||
39 | target_link_libraries(tls-shared ssl-shared crypto-shared Ws2_32.lib) | 38 | target_link_libraries(tls-shared ssl-shared crypto-shared Ws2_32.lib) |
40 | set(TLS_POSTFIX -${TLS_MAJOR_VERSION}) | 39 | set(TLS_POSTFIX -${TLS_MAJOR_VERSION}) |
41 | endif() | 40 | endif() |