myx/MyxCMake/lib/AddSaprBlock.cmake

69 lines
2.7 KiB
CMake
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#[=======================================================================[.rst:
myx_add_sapr_block
------------------
Вспомогательная функция для создания блока САПР::
myx_add_sapr_block(TARGET_NAME)
Обязательные параметры: `TARGET_NAME` - имя библиотеки.
Все остальные параметры передаются в стандартную функцию `add_library()`
#]=======================================================================]
include_guard(GLOBAL)
include(CMakePackageConfigHelpers)
include(GenerateExportHeader)
if(${CMAKE_VERSION} VERSION_LESS "3.17.0")
set(MYX_CMAKE_LIB_DIR_BACKPORT "${CMAKE_CURRENT_LIST_DIR}")
endif()
function(myx_add_sapr_block TARGET_NAME)
if(${CMAKE_VERSION} VERSION_LESS "3.17.0")
set(CMAKE_CURRENT_FUNCTION_LIST_DIR ${MYX_CMAKE_LIB_DIR_BACKPORT})
endif()
# Вызов стандартной функции `add_library()`
if(DEFINED ENV{SAPR_PREFIX})
add_library(${TARGET_NAME} SHARED ${ARG_UNPARSED_ARGUMENTS})
else()
add_library(${TARGET_NAME} STATIC ${ARG_UNPARSED_ARGUMENTS})
set_target_properties(${TARGET_NAME} PROPERTIES
ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR})
endif()
# Стандартные пути к заголовочным файлам
target_include_directories(${TARGET_NAME}
PUBLIC
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>
PRIVATE
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
)
# Сборка позиционно-независимых объектных файлов нужна
# для создания динамической библиотеки
set_target_properties(${TARGET_NAME} PROPERTIES POSITION_INDEPENDENT_CODE ON)
target_compile_definitions(${TARGET_NAME} PUBLIC BLOCK_TARGET_MARK)
if(DEFINED ENV{SAPR_PREFIX})
if(NOT WIN32)
set_target_properties(${TARGET_NAME} PROPERTIES LINK_FLAGS "-Wl,-rpath,$ORIGIN")
endif()
else()
find_package(Python3 REQUIRED COMPONENTS Interpreter Development)
target_include_directories(${TARGET_NAME} PRIVATE ${Python3_INCLUDE_DIRS})
find_package(pybind11 REQUIRED)
target_include_directories(${TARGET_NAME} PRIVATE ${pybind11_INCLUDE_DIR})
target_include_directories(${TARGET_NAME}
PUBLIC $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/thirdparty/sapr>)
if(pybind11_VERSION VERSION_LESS "2.5.0")
target_link_libraries(${TARGET_NAME} PRIVATE pybind11::module)
else()
target_link_libraries(${TARGET_NAME} PRIVATE pybind11::headers pybind11::pybind11)
endif()
endif()
endfunction()