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() |
