Skip to content

Commit

Permalink
Use CMake package helpers (#549)
Browse files Browse the repository at this point in the history
* Use CMake package helpers

* Add include dir variable in package

* Add Fortran include dir to export target. Fixes #501

* More CMake cleanup
  • Loading branch information
daboehme authored Mar 29, 2024
1 parent df3a893 commit 6a1b1a5
Show file tree
Hide file tree
Showing 7 changed files with 125 additions and 99 deletions.
81 changes: 57 additions & 24 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@ if (WITH_FORTRAN)
enable_language(Fortran)
set(CMAKE_Fortran_MODULE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/fortran")
set(CALIPER_Fortran_CMAKE_MSG "Yes, using ${CMAKE_Fortran_COMPILER_ID} ${CMAKE_Fortran_COMPILER_VERSION}")
set(CALIPER_HAVE_FORTRAN TRUE)
endif()

if (BUILD_TESTING)
Expand Down Expand Up @@ -306,8 +307,11 @@ if (WITH_ADIAK)
list(APPEND CALIPER_EXTERNAL_LIBS ${CMAKE_DL_LIBS})
endif()
else()
set(CALIPER_HAVE_ADIAK FALSE)
message(WARNING "Adiak support was requested but Adiak was not found")
endif()
else()
set(CALIPER_HAVE_ADIAK FALSE)
endif()

if (WITH_KOKKOS)
Expand Down Expand Up @@ -452,7 +456,7 @@ endif()
if (WITH_LDMS)
include(FindLDMS)
if (LDMS_FOUND)
set(CALIPER_HAVE_LDMS TRUE)
set(CALIPER_HAVE_LDMS TRUE)
set(CALIPER_LDMS_CMAKE_MSG "Yes, using ${LDMS_LIBLDMS} ${LDMS_LIBSTREAM}")
list(APPEND CALIPER_EXTERNAL_LIBS ${LDMS_LIBLDMS} ${LDMS_LIBSTREAM})
message("Include Directory: ${LDMS_INCLUDE_DIRS}")
Expand All @@ -473,7 +477,19 @@ configure_file(
include_directories(${PROJECT_BINARY_DIR}/include)
include_directories(include)

if(INSTALL_HEADERS)
add_subdirectory(ext)
add_subdirectory(src)

add_subdirectory(examples/apps EXCLUDE_FROM_ALL)

if (BUILD_TESTING)
add_subdirectory(test)
endif()
if (BUILD_DOCS)
add_subdirectory(doc EXCLUDE_FROM_ALL)
endif()

if (INSTALL_HEADERS)
install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
FILES_MATCHING PATTERN "*.h")
install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
Expand All @@ -487,15 +503,15 @@ if(INSTALL_HEADERS)
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/caliper
FILES_MATCHING PATTERN "*.h")

if (WITH_FORTRAN)
if (CALIPER_HAVE_FORTRAN)
install(
DIRECTORY ${CMAKE_Fortran_MODULE_DIRECTORY}/
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/caliper/fortran
FILES_MATCHING PATTERN "*.mod")
endif()
endif()

if(INSTALL_CONFIG)
if (INSTALL_CONFIG)
# Create pkg-config .pc file
set(PKG_CONFIG_INCLUDEDIR "${CMAKE_INSTALL_FULL_INCLUDEDIR}")
set(PKG_CONFIG_LIBDIR "${CMAKE_INSTALL_FULL_LIBDIR}")
Expand All @@ -506,31 +522,48 @@ if(INSTALL_CONFIG)
${PROJECT_SOURCE_DIR}/caliper.pc.in
${PROJECT_BINARY_DIR}/caliper.pc)

# Make caliper findable for cmake
configure_file(
${PROJECT_SOURCE_DIR}/caliper-config.cmake.in
${PROJECT_BINARY_DIR}/caliper-config.cmake
@ONLY)
include(CMakePackageConfigHelpers)

install(FILES ${PROJECT_BINARY_DIR}/caliper-config.cmake
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/cmake/caliper)
install(EXPORT caliper-targets
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/cmake/caliper)
write_basic_package_version_file(
"${CMAKE_CURRENT_BINARY_DIR}/caliper-config-version.cmake"
VERSION
${LIBTOOL_INTERFACE}.${LIBTOOL_REVISION}.${LIBTOOL_AGE}
COMPATIBILITY
SameMajorVersion
)

install(FILES ${PROJECT_BINARY_DIR}/caliper.pc
DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
endif()
set(caliper_INSTALL_INCLUDE_DIR "include/")

add_subdirectory(ext)
add_subdirectory(src)
configure_package_config_file(
"${CMAKE_CURRENT_SOURCE_DIR}/caliper-config.cmake.in"
"${CMAKE_CURRENT_BINARY_DIR}/caliper-config.cmake"
INSTALL_DESTINATION
${CMAKE_INSTALL_DATAROOTDIR}/cmake/caliper
PATH_VARS
caliper_INSTALL_INCLUDE_DIR
)

add_subdirectory(examples/apps EXCLUDE_FROM_ALL)
install(
FILES
"${CMAKE_CURRENT_BINARY_DIR}/caliper-config-version.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/caliper-config.cmake"
DESTINATION
"${CMAKE_INSTALL_DATAROOTDIR}/cmake/caliper"
)

if (BUILD_TESTING)
add_subdirectory(test)
endif()
if (BUILD_DOCS)
add_subdirectory(doc EXCLUDE_FROM_ALL)
install(
EXPORT
caliper-targets
DESTINATION
"${CMAKE_INSTALL_DATAROOTDIR}/cmake/caliper"
)

install(
FILES
${PROJECT_BINARY_DIR}/caliper.pc
DESTINATION
${CMAKE_INSTALL_LIBDIR}/pkgconfig
)
endif()

#
Expand Down
74 changes: 22 additions & 52 deletions caliper-config.cmake.in
Original file line number Diff line number Diff line change
@@ -1,58 +1,28 @@
# - caliper: Context Annotation Library
#
#=============================================================================
# Caliper is a program instrumentation and performance measurement
# framework. It provides data collection mechanisms and a source-code
# annotation API for a variety of performance engineering use cases,
# e.g., performance profiling, tracing, monitoring, and
# auto-tuning.
#
#=== Usage ===================================================================
# This file allows caliper to be automatically detected by other libraries
# using CMake. To build with caliper, you can do one of two things:
#
# 1. Set the caliper_DIR environment variable to the root of the Caliper
# installation. If you loaded caliper through a dotkit, this may already
# be set, and caliper will be autodetected by CMake.
#
# 2. Configure your project with this option:
# -Dcaliper_DIR=<caliper install prefix>/share/
#
# If you have done either of these things, then CMake should automatically find
# and include this file when you call find_package(caliper) from your
# CMakeLists.txt file.
#
#=== Components ==============================================================
# (David's TO DO)
#
# To link against these, just do, for example:
#
# find_package(caliper REQUIRED)
# add_executable(foo foo.c)
# target_link_libraries(foo caliper)
#
# That's all!
#
if (NOT caliper_CONFIG_LOADED)
set(caliper_CONFIG_LOADED TRUE)
@PACKAGE_INIT@

# Install layout
set(caliper_INSTALL_PREFIX @CMAKE_INSTALL_PREFIX@)
set(caliper_INCLUDE_DIR @CMAKE_INSTALL_FULL_INCLUDEDIR@)
set(caliper_LIB_DIR @CMAKE_INSTALL_FULL_LIBDIR@)
set(caliper_CMAKE_DIR @CMAKE_INSTALL_FULL_DATADIR@/cmake/caliper)
include(CMakeFindDependencyMacro)

# Includes needed to use caliper
set(caliper_INCLUDE_PATH ${caliper_INCLUDE_DIR})
set(caliper_LIB_PATH ${caliper_LIB_DIR})
include("${CMAKE_CURRENT_LIST_DIR}/caliper-targets.cmake")

include(CMakeFindDependencyMacro)
find_dependency(Threads)
set_and_check(caliper_INCLUDE_DIR "@PACKAGE_caliper_INSTALL_INCLUDE_DIR@")

if (@CALIPER_HAVE_ADIAK@)
find_dependency(adiak)
if (@CALIPER_HAVE_ADIAK@)
if (NOT TARGET adiak::adiak)
set(CALIPER_ADIAK_DIR @adiak_DIR@)
if (NOT adiak_DIR)
set(adiak_DIR ${CALIPER_ADIAK_DIR})
endif()
find_dependency(
adiak
CONFIG
NO_DEFAULT_PATH
PATHS
${adiak_DIR}
${adiak_DIR}/lib/cmake/adiak
${PACKAGE_PREFIX_DIR}
${PACKAGE_PREFIX_DIR}/lib/cmake/adiak
)
endif()

# Library targets imported from file
include(${caliper_CMAKE_DIR}/caliper-targets.cmake)
endif()

check_required_components(caliper)
1 change: 0 additions & 1 deletion examples/apps/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,6 @@ if (WITH_FORTRAN)
foreach(app ${CALIPER_Fortran_EXAMPLE_APPS})
add_executable(${app} ${app}.f)
set_source_files_properties(${app}.f PROPERTIES Fortran_FORMAT FREE)
target_include_directories(${app} PRIVATE ${CMAKE_Fortran_MODULE_DIRECTORY})
target_link_libraries(${app} caliper)
endforeach()
endif()
Expand Down
34 changes: 21 additions & 13 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ set(CMAKE_POSITION_INDEPENDENT_CODE TRUE)
include(CheckCXXCompilerFlag)
set(Wall_flag)
check_cxx_compiler_flag("-Wall" Supports_Wall_Flag)
if(Supports_Wall_Flag)
if (Supports_Wall_Flag)
set(Wall_flag "-Wall")
endif()

Expand All @@ -17,7 +17,7 @@ add_subdirectory(reader)
add_subdirectory(services)
add_subdirectory(caliper)

set(CALIPER_COMMON_OBJS
set(CALIPER_ALL_OBJS
$<TARGET_OBJECTS:caliper-common>
$<TARGET_OBJECTS:caliper-interface>
$<TARGET_OBJECTS:caliper-reader>
Expand All @@ -26,20 +26,20 @@ set(CALIPER_COMMON_OBJS
${CALIPER_SERVICES_LIBS}
${CALIPER_EXTERNAL_SOURCES})

list(APPEND CALIPER_ALL_OBJS
${CALIPER_COMMON_OBJS})

add_library(caliper ${CALIPER_ALL_OBJS})

set_target_properties(caliper PROPERTIES SOVERSION ${CALIPER_MAJOR_VERSION})
set_target_properties(caliper PROPERTIES VERSION ${CALIPER_VERSION})

target_compile_features(caliper PUBLIC cxx_std_11)

target_include_directories(
caliper
INTERFACE
"$<INSTALL_INTERFACE:include>")
if (CALIPER_HAVE_FORTRAN)
target_include_directories(
caliper
PUBLIC
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/caliper/fortran>"
)
endif()

if (CALIPER_HAVE_MPI)
target_link_libraries(caliper PUBLIC ${MPI_CXX_LIBRARIES})
Expand All @@ -57,7 +57,15 @@ if (WITH_TOOLS)
add_subdirectory(tools)
endif()

install(TARGETS caliper
EXPORT caliper-targets
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
install(
TARGETS
caliper
EXPORT
caliper-targets
ARCHIVE DESTINATION
${CMAKE_INSTALL_LIBDIR}
LIBRARY DESTINATION
${CMAKE_INSTALL_LIBDIR}
INCLUDES DESTINATION
${CMAKE_INSTALL_INCLUDEDIR}
)
15 changes: 12 additions & 3 deletions src/interface/c_fortran/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,20 @@ set(CALIPER_INTERFACE_SOURCES
wrapScopeAnnotation.cpp
utilCaliper.cpp)

if (WITH_FORTRAN)
if (CALIPER_HAVE_FORTRAN)
list(APPEND CALIPER_INTERFACE_SOURCES
wrapfcaliper.F)
set_source_files_properties(wrapfcaliper.F PROPERTIES Fortran_FORMAT FREE)
set_source_files_properties(wrapfcaliper.F PROPERTIES Fortran_FORMAT FREE)
endif()

add_library(caliper-interface OBJECT ${CALIPER_INTERFACE_SOURCES})
target_compile_features(caliper-interface PUBLIC cxx_std_11)
target_compile_features(caliper-interface PUBLIC cxx_std_11)

if (CALIPER_HAVE_FORTRAN)
target_include_directories(
caliper-interface
PUBLIC
"$<BUILD_INTERFACE:${CMAKE_Fortran_MODULE_DIRECTORY}>"
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/caliper/fortran>"
)
endif()
18 changes: 13 additions & 5 deletions src/tools/util/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
set(CALIPER_TOOLS_UTIL_SOURCES
Args.cpp)
Args.cpp)

add_library(caliper-tools-util ${CALIPER_TOOLS_UTIL_SOURCES})

Expand All @@ -8,7 +8,15 @@ target_compile_features(caliper-tools-util PUBLIC cxx_std_11)
set_target_properties(caliper-tools-util PROPERTIES SOVERSION ${CALIPER_MAJOR_VERSION})
set_target_properties(caliper-tools-util PROPERTIES VERSION ${CALIPER_VERSION})

install(TARGETS caliper-tools-util
EXPORT caliper-targets
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
install(
TARGETS
caliper-tools-util
EXPORT
caliper-targets
ARCHIVE DESTINATION
${CMAKE_INSTALL_LIBDIR}
LIBRARY DESTINATION
${CMAKE_INSTALL_LIBDIR}
INCLUDES DESTINATION
${CMAKE_INSTALL_INCLUDEDIR}
)
1 change: 0 additions & 1 deletion test/ci_app_tests/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,6 @@ if (WITH_FORTRAN)
foreach(app ${CALIPER_CI_Fortran_TEST_APPS})
add_executable(${app} ${app}.f)
set_source_files_properties(${app}.f PROPERTIES Fortran_FORMAT FREE)
target_include_directories(${app} PRIVATE ${CMAKE_Fortran_MODULE_DIRECTORY})
target_link_libraries(${app} caliper)
endforeach()

Expand Down

0 comments on commit 6a1b1a5

Please sign in to comment.