зеркало из https://github.com/microsoft/SEAL.git
114 строки
4.2 KiB
CMake
114 строки
4.2 KiB
CMake
# Copyright (c) Microsoft Corporation. All rights reserved.
|
|
# Licensed under the MIT license.
|
|
|
|
# Set the C++ language version
|
|
macro(seal_set_language target)
|
|
if(SEAL_USE_CXX17)
|
|
target_compile_features(${target} PUBLIC cxx_std_17)
|
|
else()
|
|
target_compile_features(${target} PUBLIC cxx_std_14)
|
|
endif()
|
|
endmacro()
|
|
|
|
# Include a file to fetch thirdparty content
|
|
macro(seal_fetch_thirdparty_content content_file)
|
|
set(SEAL_FETCHCONTENT_BASE_DIR_OLD ${FETCHCONTENT_BASE_DIR})
|
|
set(FETCHCONTENT_BASE_DIR ${SEAL_THIRDPARTY_DIR} CACHE STRING "" FORCE)
|
|
include(${content_file})
|
|
set(FETCHCONTENT_BASE_DIR ${SEAL_FETCHCONTENT_BASE_DIR_OLD} CACHE STRING "" FORCE)
|
|
unset(SEAL_FETCHCONTENT_BASE_DIR_OLD)
|
|
endmacro()
|
|
|
|
# Set the VERSION property
|
|
macro(seal_set_version target)
|
|
set_target_properties(${target} PROPERTIES VERSION ${SEAL_VERSION})
|
|
endmacro()
|
|
|
|
# Set the library filename to reflect version
|
|
macro(seal_set_version_filename target)
|
|
set_target_properties(${target} PROPERTIES
|
|
OUTPUT_NAME ${target}-${SEAL_VERSION_MAJOR}.${SEAL_VERSION_MINOR})
|
|
endmacro()
|
|
|
|
# Set the SOVERSION property
|
|
macro(seal_set_soversion target)
|
|
set_target_properties(${target} PROPERTIES
|
|
SOVERSION ${SEAL_VERSION_MAJOR}.${SEAL_VERSION_MINOR})
|
|
endmacro()
|
|
|
|
# Set include directories for build and install interfaces
|
|
macro(seal_set_include_directories target)
|
|
target_include_directories(${target} PUBLIC
|
|
$<BUILD_INTERFACE:${SEAL_INCLUDES_DIR}>
|
|
$<INSTALL_INTERFACE:${SEAL_INCLUDES_INSTALL_DIR}>)
|
|
target_include_directories(${target} PUBLIC
|
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/native/src/>
|
|
$<INSTALL_INTERFACE:${SEAL_INCLUDES_INSTALL_DIR}>)
|
|
endmacro()
|
|
|
|
# Link a thread library
|
|
macro(seal_link_threads target)
|
|
# Require thread library
|
|
if(NOT TARGET Threads::Threads)
|
|
set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
|
|
set(THREADS_PREFER_PTHREAD_FLAG TRUE)
|
|
find_package(Threads REQUIRED)
|
|
endif()
|
|
|
|
# Link Threads
|
|
target_link_libraries(${target} PUBLIC Threads::Threads)
|
|
endmacro()
|
|
|
|
# Include target to given export
|
|
macro(seal_install_target target export)
|
|
install(TARGETS ${target} EXPORT ${export}
|
|
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
|
|
endmacro()
|
|
|
|
# Manually combine archives, using ${CMAKE_LIBRARY_OUTPUT_DIRECTORY} to keep temporary files.
|
|
macro(seal_combine_archives target dependency)
|
|
if(MSVC)
|
|
add_custom_command(TARGET ${target} POST_BUILD
|
|
COMMAND lib.exe /OUT:$<TARGET_FILE:${target}> $<TARGET_FILE:${target}> $<TARGET_FILE:${dependency}>
|
|
DEPENDS $<TARGET_FILE:${target}> $<TARGET_FILE:${dependency}>
|
|
WORKING_DIRECTORY ${CMAKE_LIBRARY_OUTPUT_DIRECTORY})
|
|
else()
|
|
if(CMAKE_HOST_WIN32)
|
|
get_filename_component(CXX_DIR "${CMAKE_CXX_COMPILER}" DIRECTORY)
|
|
set(AR_CMD_PATH "${CXX_DIR}/llvm-ar.exe")
|
|
file(TO_NATIVE_PATH "${AR_CMD_PATH}" AR_CMD_PATH)
|
|
set(DEL_CMD "del")
|
|
set(DEL_CMD_OPTS "")
|
|
else()
|
|
set(AR_CMD_PATH "ar")
|
|
set(DEL_CMD "rm")
|
|
set(DEL_CMD_OPTS "-rf")
|
|
endif()
|
|
if(EMSCRIPTEN)
|
|
set(AR_CMD_PATH "emar")
|
|
endif()
|
|
add_custom_command(TARGET ${target} POST_BUILD
|
|
COMMAND "${AR_CMD_PATH}" x $<TARGET_FILE:${target}>
|
|
COMMAND "${AR_CMD_PATH}" x $<TARGET_FILE:${dependency}>
|
|
COMMAND "${AR_CMD_PATH}" rcs $<TARGET_FILE:${target}> *.o
|
|
COMMAND ${DEL_CMD} ${DEL_CMD_OPTS} *.o
|
|
WORKING_DIRECTORY ${CMAKE_LIBRARY_OUTPUT_DIRECTORY})
|
|
endif()
|
|
endmacro()
|
|
|
|
# Add secure compile options
|
|
macro(seal_set_secure_compile_options target scope)
|
|
if(MSVC)
|
|
# Build debug symbols for static analysis tools
|
|
target_link_options(${target} ${scope} /DEBUG)
|
|
|
|
# Control Flow Guard / Spectre
|
|
target_compile_options(${target} ${scope} /guard:cf)
|
|
target_compile_options(${target} ${scope} /Qspectre)
|
|
target_link_options(${target} ${scope} /guard:cf)
|
|
target_link_options(${target} ${scope} /DYNAMICBASE)
|
|
endif()
|
|
endmacro()
|