cmake, refactor: Introduce SetLibtoolAbiVersion module
This commit is contained in:
28
cmake/SetLibtoolAbiVersion.cmake
Normal file
28
cmake/SetLibtoolAbiVersion.cmake
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
# This emulates Libtool to make sure Libtool and CMake agree on the ABI version,
|
||||||
|
# see below "Calculate the version variables" in autotools-aux/ltmain.sh.
|
||||||
|
function(set_libtool_abi_version target current revision age)
|
||||||
|
math(EXPR _soversion "${current} - ${age}")
|
||||||
|
set_target_properties(${target} PROPERTIES
|
||||||
|
SOVERSION ${_soversion}
|
||||||
|
)
|
||||||
|
if(CMAKE_SYSTEM_NAME MATCHES "^(Linux|FreeBSD)$")
|
||||||
|
set_target_properties(${target} PROPERTIES
|
||||||
|
VERSION ${_soversion}.${age}.${revision}
|
||||||
|
)
|
||||||
|
elseif(APPLE)
|
||||||
|
math(EXPR _compatibility "${current} + 1")
|
||||||
|
set_target_properties(${target} PROPERTIES
|
||||||
|
MACHO_COMPATIBILITY_VERSION ${_compatibility}
|
||||||
|
MACHO_CURRENT_VERSION ${_compatibility}.${revision}
|
||||||
|
)
|
||||||
|
elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows")
|
||||||
|
set(_windows_name "secp256k1")
|
||||||
|
if(MSVC)
|
||||||
|
set(_windows_name "${PROJECT_NAME}")
|
||||||
|
endif()
|
||||||
|
set_target_properties(${target} PROPERTIES
|
||||||
|
ARCHIVE_OUTPUT_NAME "${_windows_name}"
|
||||||
|
RUNTIME_OUTPUT_NAME "${_windows_name}-${_soversion}"
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
endfunction()
|
||||||
@@ -94,35 +94,12 @@ set_target_properties(secp256k1_objs PROPERTIES
|
|||||||
INTERFACE_INCLUDE_DIRECTORIES "$<TARGET_PROPERTY:secp256k1,INTERFACE_INCLUDE_DIRECTORIES>"
|
INTERFACE_INCLUDE_DIRECTORIES "$<TARGET_PROPERTY:secp256k1,INTERFACE_INCLUDE_DIRECTORIES>"
|
||||||
)
|
)
|
||||||
|
|
||||||
# This emulates Libtool to make sure Libtool and CMake agree on the ABI version,
|
include(SetLibtoolAbiVersion)
|
||||||
# see below "Calculate the version variables" in autotools-aux/ltmain.sh.
|
set_libtool_abi_version(secp256k1
|
||||||
math(EXPR ${PROJECT_NAME}_soversion "${${PROJECT_NAME}_LIB_VERSION_CURRENT} - ${${PROJECT_NAME}_LIB_VERSION_AGE}")
|
${${PROJECT_NAME}_LIB_VERSION_CURRENT}
|
||||||
set_target_properties(secp256k1 PROPERTIES
|
${${PROJECT_NAME}_LIB_VERSION_REVISION}
|
||||||
SOVERSION ${${PROJECT_NAME}_soversion}
|
${${PROJECT_NAME}_LIB_VERSION_AGE}
|
||||||
)
|
)
|
||||||
if(CMAKE_SYSTEM_NAME MATCHES "^(Linux|FreeBSD)$")
|
|
||||||
set_target_properties(secp256k1 PROPERTIES
|
|
||||||
VERSION ${${PROJECT_NAME}_soversion}.${${PROJECT_NAME}_LIB_VERSION_AGE}.${${PROJECT_NAME}_LIB_VERSION_REVISION}
|
|
||||||
)
|
|
||||||
elseif(APPLE)
|
|
||||||
math(EXPR ${PROJECT_NAME}_compatibility_version "${${PROJECT_NAME}_LIB_VERSION_CURRENT} + 1")
|
|
||||||
set_target_properties(secp256k1 PROPERTIES
|
|
||||||
MACHO_COMPATIBILITY_VERSION ${${PROJECT_NAME}_compatibility_version}
|
|
||||||
MACHO_CURRENT_VERSION ${${PROJECT_NAME}_compatibility_version}.${${PROJECT_NAME}_LIB_VERSION_REVISION}
|
|
||||||
)
|
|
||||||
unset(${PROJECT_NAME}_compatibility_version)
|
|
||||||
elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows")
|
|
||||||
set(${PROJECT_NAME}_windows "secp256k1")
|
|
||||||
if(MSVC)
|
|
||||||
set(${PROJECT_NAME}_windows "${PROJECT_NAME}")
|
|
||||||
endif()
|
|
||||||
set_target_properties(secp256k1 PROPERTIES
|
|
||||||
ARCHIVE_OUTPUT_NAME "${${PROJECT_NAME}_windows}"
|
|
||||||
RUNTIME_OUTPUT_NAME "${${PROJECT_NAME}_windows}-${${PROJECT_NAME}_soversion}"
|
|
||||||
)
|
|
||||||
unset(${PROJECT_NAME}_windows)
|
|
||||||
endif()
|
|
||||||
unset(${PROJECT_NAME}_soversion)
|
|
||||||
|
|
||||||
if(SECP256K1_BUILD_BENCHMARK)
|
if(SECP256K1_BUILD_BENCHMARK)
|
||||||
add_executable(bench bench.c)
|
add_executable(bench bench.c)
|
||||||
|
|||||||
Reference in New Issue
Block a user