aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkinichiro <kinichiro.inoguchi@gmail.com>2017-01-17 21:27:41 +0900
committerkinichiro <kinichiro.inoguchi@gmail.com>2017-01-18 00:34:20 +0900
commit3b8cf47307c65f6adfe20e13e85e074a8e5cc044 (patch)
tree67d179a13a60379c02b4ea3a52d29dbaa8a706e3
parent3b2560feb355e708a59ecfb224932810687a75ad (diff)
downloadportable-3b8cf47307c65f6adfe20e13e85e074a8e5cc044.tar.gz
portable-3b8cf47307c65f6adfe20e13e85e074a8e5cc044.tar.bz2
portable-3b8cf47307c65f6adfe20e13e85e074a8e5cc044.zip
Add export symbol support to CMake
-rw-r--r--CMakeLists.txt3
-rw-r--r--Makefile.am2
-rw-r--r--cmake_export_symbol.cmake41
-rw-r--r--ssl/CMakeLists.txt3
-rw-r--r--tls/CMakeLists.txt3
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)
4include(CheckIncludeFiles) 4include(CheckIncludeFiles)
5include(CheckTypeSize) 5include(CheckTypeSize)
6 6
7set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}" ${CMAKE_MODULE_PATH})
8include(cmake_export_symbol)
9
7project (LibreSSL C) 10project (LibreSSL C)
8 11
9enable_testing() 12enable_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
5pkgconfig_DATA = libcrypto.pc libssl.pc libtls.pc openssl.pc 5pkgconfig_DATA = libcrypto.pc libssl.pc libtls.pc openssl.pc
6 6
7EXTRA_DIST = README.md README.windows VERSION config scripts 7EXTRA_DIST = README.md README.windows VERSION config scripts
8EXTRA_DIST += CMakeLists.txt cmake_uninstall.cmake.in 8EXTRA_DIST += CMakeLists.txt cmake_export_symbol.cmake cmake_uninstall.cmake.in
9 9
10.PHONY: install_sw 10.PHONY: install_sw
11install_sw: install 11install_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 @@
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()
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})
52if (BUILD_SHARED) 52if (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})
33if (BUILD_SHARED) 33if (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()