omnitrace find_package support (#3)

* omnitrace find_package support

- Fix to INSTALL_DESTINATION for configure_package_config_file
- Fixes to ConfigInstall.cmake and omnitrace-config.cmake.in

* Test find_package
This commit is contained in:
Jonathan R. Madsen
2022-05-24 22:45:26 -05:00
committed by GitHub
parent 6491ce7808
commit d2e635ed3c
18 changed files with 364 additions and 49 deletions
+24 -9
View File
@@ -1,6 +1,4 @@
# include guard
include_guard(DIRECTORY)
# ########################################################################################
#
# Compilers
@@ -31,8 +29,11 @@ if("${LIBNAME}" STREQUAL "")
string(TOLOWER "${PROJECT_NAME}" LIBNAME)
endif()
omnitrace_add_interface_library(
${LIBNAME}-compile-options "Adds the standard set of compiler flags used by timemory")
if(NOT TARGET ${LIBNAME}-compile-options)
omnitrace_add_interface_library(
${LIBNAME}-compile-options
"Adds the standard set of compiler flags used by timemory")
endif()
# ----------------------------------------------------------------------------------------#
# macro converting string to list
@@ -116,10 +117,17 @@ endmacro()
# add C flag to target
# ----------------------------------------------------------------------------------------#
macro(ADD_TARGET_C_FLAG _TARG)
get_target_property(_TARG_TYPE ${_TARG} TYPE)
if("${_TARG_TYPE}" MATCHES "INTERFACE_LIBRARY")
set(_SCOPE INTERFACE)
else()
set(_SCOPE PRIVATE)
endif()
string(REPLACE "-" "_" _MAKE_TARG "${_TARG}")
list(APPEND OMNITRACE_MAKE_TARGETS ${_MAKE_TARG})
target_compile_options(${_TARG} INTERFACE $<$<COMPILE_LANGUAGE:C>:${ARGN}>)
target_compile_options(${_TARG} ${_SCOPE} $<$<COMPILE_LANGUAGE:C>:${ARGN}>)
list(APPEND ${_MAKE_TARG}_C_FLAGS ${ARGN})
endmacro()
@@ -211,18 +219,25 @@ endmacro()
# add CXX flag to target
# ----------------------------------------------------------------------------------------#
macro(ADD_TARGET_CXX_FLAG _TARG)
get_target_property(_TARG_TYPE ${_TARG} TYPE)
if("${_TARG_TYPE}" MATCHES "INTERFACE_LIBRARY")
set(_SCOPE INTERFACE)
else()
set(_SCOPE PRIVATE)
endif()
string(REPLACE "-" "_" _MAKE_TARG "${_TARG}")
list(APPEND OMNITRACE_MAKE_TARGETS ${_MAKE_TARG})
target_compile_options(${_TARG} INTERFACE $<$<COMPILE_LANGUAGE:CXX>:${ARGN}>)
target_compile_options(${_TARG} ${_SCOPE} $<$<COMPILE_LANGUAGE:CXX>:${ARGN}>)
list(APPEND ${_MAKE_TARG}_CXX_FLAGS ${ARGN})
get_property(LANGUAGES GLOBAL PROPERTY ENABLED_LANGUAGES)
if(CMAKE_CUDA_COMPILER_IS_NVIDIA)
target_compile_options(${_TARG}
INTERFACE $<$<COMPILE_LANGUAGE:CUDA>:-Xcompiler=${ARGN}>)
target_compile_options(${_TARG} ${_SCOPE}
$<$<COMPILE_LANGUAGE:CUDA>:-Xcompiler=${ARGN}>)
list(APPEND ${_MAKE_TARG}_CUDA_FLAGS -Xcompiler=${ARGN})
elseif(CMAKE_CUDA_COMPILER_IS_CLANG)
target_compile_options(${_TARG} INTERFACE $<$<COMPILE_LANGUAGE:CUDA>:${ARGN}>)
target_compile_options(${_TARG} ${_SCOPE} $<$<COMPILE_LANGUAGE:CUDA>:${ARGN}>)
list(APPEND ${_MAKE_TARG}_CUDA_FLAGS ${ARGN})
endif()
endmacro()
+38
View File
@@ -0,0 +1,38 @@
# include guard
include_guard(GLOBAL)
include(CMakePackageConfigHelpers)
install(
EXPORT omnitrace-library-targets
FILE omnitrace-library-targets.cmake
NAMESPACE omnitrace::
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/cmake/omnitrace)
# ------------------------------------------------------------------------------#
# install tree
#
set(PROJECT_INSTALL_DIR ${CMAKE_INSTALL_PREFIX})
set(INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_INCLUDEDIR})
set(LIB_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR})
set(PROJECT_BUILD_TARGETS user dl)
configure_package_config_file(
${PROJECT_SOURCE_DIR}/cmake/Templates/${PROJECT_NAME}-config.cmake.in
${PROJECT_BINARY_DIR}/install-tree/${PROJECT_NAME}-config.cmake
INSTALL_DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/cmake/omnitrace
INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX}
PATH_VARS PROJECT_INSTALL_DIR INCLUDE_INSTALL_DIR LIB_INSTALL_DIR)
write_basic_package_version_file(
${PROJECT_BINARY_DIR}/install-tree/${PROJECT_NAME}-version.cmake
VERSION ${PROJECT_VERSION}
COMPATIBILITY SameMajorVersion)
install(
FILES ${PROJECT_BINARY_DIR}/install-tree/${PROJECT_NAME}-config.cmake
${PROJECT_BINARY_DIR}/install-tree/${PROJECT_NAME}-version.cmake
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/cmake/${PROJECT_NAME}
OPTIONAL)
export(PACKAGE ${PROJECT_NAME})
+3
View File
@@ -598,6 +598,9 @@ target_link_libraries(omnitrace-ptl INTERFACE PTL::ptl-object)
#
# ----------------------------------------------------------------------------------------#
# override compiler macros
include(Compilers)
if(OMNITRACE_BUILD_STATIC_LIBSTDCXX)
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
omnitrace_restore_variables(STATIC_LIBSTDCXX_CXX VARIABLES CMAKE_CXX_FLAGS)
+56
View File
@@ -0,0 +1,56 @@
# - Config file for @PROJECT_NAME@ and its component libraries
# It defines the following variables:
#
# @PROJECT_NAME@_INCLUDE_DIRS
# @PROJECT_NAME@_LIBRARIES
# @PROJECT_NAME@_INTERNAL_DEFINES - used by the test suite
# compute paths
get_filename_component(@PROJECT_NAME@_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
# version
include(${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@-version.cmake)
@PACKAGE_INIT@
set_and_check(@PROJECT_NAME@_INCLUDE_DIR "@PACKAGE_INCLUDE_INSTALL_DIR@")
set_and_check(@PROJECT_NAME@_LIB_DIR "@PACKAGE_LIB_INSTALL_DIR@")
get_filename_component(@PROJECT_NAME@_ROOT_DIR ${@PROJECT_NAME@_INCLUDE_DIR} PATH)
set(@PROJECT_NAME@_LIBRARIES)
add_library(@PROJECT_NAME@::@PROJECT_NAME@ INTERFACE IMPORTED)
include("${@PROJECT_NAME@_CMAKE_DIR}/@PROJECT_NAME@-library-targets.cmake")
# Library dependencies
foreach(TARG @PROJECT_BUILD_TARGETS@)
set(TARG @PROJECT_NAME@-${TARG}-library)
if(NOT @PROJECT_NAME@_FIND_COMPONENTS)
list(APPEND @PROJECT_NAME@_LIBRARIES @PROJECT_NAME@::${TARG})
target_link_libraries(@PROJECT_NAME@::@PROJECT_NAME@
INTERFACE @PROJECT_NAME@::${TARG})
endif()
endforeach()
if(@PROJECT_NAME@_FIND_COMPONENTS)
foreach(COMP ${@PROJECT_NAME@_FIND_COMPONENTS})
set(TARG @PROJECT_NAME@::@PROJECT_NAME@-${COMP}-library)
if(TARGET ${TARG})
set(@PROJECT_NAME@_${COMP}_FOUND 1)
list(APPEND @PROJECT_NAME@_LIBRARIES ${TARG})
target_link_libraries(@PROJECT_NAME@::@PROJECT_NAME@
INTERFACE ${TARG})
else()
set(@PROJECT_NAME@_${COMP}_FOUND 0)
endif()
endforeach()
endif()
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(
@PROJECT_NAME@
FOUND_VAR @PROJECT_NAME@_FOUND
REQUIRED_VARS @PROJECT_NAME@_ROOT_DIR @PROJECT_NAME@_INCLUDE_DIR @PROJECT_NAME@_LIBRARIES
VERSION_VAR @PROJECT_NAME@_VERSION
HANDLE_COMPONENTS)