Skip to content

Commit

Permalink
cmake: allow to customize install locations (#57)
Browse files Browse the repository at this point in the history
cmake: allow to customize install locations using CMake GNUInstallDirs
  • Loading branch information
junghans authored Oct 17, 2024
1 parent be7be23 commit 5e8d7c7
Show file tree
Hide file tree
Showing 6 changed files with 22 additions and 19 deletions.
19 changes: 11 additions & 8 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,9 @@ find_package(MPI REQUIRED) # always a dependency

list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)

# define and populate CMAKE_INSTALL_*DIR variables
include(GNUInstallDirs)

# libheffte source files list (does not include the cuda kernels)
add_library(Heffte
include/heffte.h
Expand Down Expand Up @@ -274,24 +277,24 @@ endif()
###########################
# install
###########################
install(TARGETS Heffte EXPORT Heffte_Targets DESTINATION lib)
install(EXPORT Heffte_Targets FILE HeffteTargets.cmake NAMESPACE Heffte:: DESTINATION lib/cmake/Heffte)
install(TARGETS Heffte EXPORT Heffte_Targets DESTINATION ${CMAKE_INSTALL_LIBDIR})
install(EXPORT Heffte_Targets FILE HeffteTargets.cmake NAMESPACE Heffte:: DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/Heffte)

install(FILES "${CMAKE_CURRENT_BINARY_DIR}/HeffteConfig.cmake" "${CMAKE_CURRENT_BINARY_DIR}/HeffteConfigVersion.cmake" DESTINATION lib/cmake/Heffte)
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/HeffteConfig.cmake" "${CMAKE_CURRENT_BINARY_DIR}/HeffteConfigVersion.cmake" DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/Heffte)
install(DIRECTORY include/ DESTINATION include FILES_MATCHING PATTERN "*.h"
PATTERN "**~" EXCLUDE
PATTERN "*_gpu*" EXCLUDE
PATTERN "*.cu*" EXCLUDE
)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/include/heffte_config.h DESTINATION include/)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/configured/HeffteMakefile.in DESTINATION share/heffte/)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/include/heffte_config.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/configured/HeffteMakefile.in DESTINATION ${CMAKE_INSTALL_DATADIR}/heffte/)

# package-config
include(CMakePackageConfigHelpers)
write_basic_package_version_file("HeffteConfigVersion.cmake" VERSION ${PROJECT_VERSION} COMPATIBILITY SameMajorVersion)
configure_package_config_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/HeffteConfig.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/HeffteConfig.cmake"
INSTALL_DESTINATION "lib/Heffte/")
INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/Heffte/")


######################
Expand Down Expand Up @@ -329,8 +332,8 @@ install(FILES "${CMAKE_CURRENT_BINARY_DIR}/configured/CMakeLists.txt"
##############################
if (Heffte_ENABLE_TESTING)
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/ExampleCMakeLists.cmake" "${CMAKE_CURRENT_BINARY_DIR}/examples/CMakeLists.txt" @ONLY)
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/examples/CMakeLists.txt" DESTINATION share/heffte/examples)
install(DIRECTORY examples/ DESTINATION share/heffte/examples FILES_MATCHING PATTERN "*.cpp" PATTERN "*.c" PATTERN "*.f90")
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/examples/CMakeLists.txt" DESTINATION ${CMAKE_INSTALL_DATADIR}/heffte/examples)
install(DIRECTORY examples/ DESTINATION ${CMAKE_INSTALL_DATADIR}/heffte/examples FILES_MATCHING PATTERN "*.cpp" PATTERN "*.c" PATTERN "*.f90")
endif()

# print summary of the CMake options, skip if using add_subdirectory(heffte)
Expand Down
2 changes: 1 addition & 1 deletion cmake/HeffteConfig.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ endif()

if (@Heffte_ENABLE_PYTHON@)
set(Heffte_PYTHON_FOUND "ON")
set(Heffte_PYTHONPATH "@CMAKE_INSTALL_PREFIX@/share/heffte/python")
set(Heffte_PYTHONPATH "@CMAKE_INSTALL_FULL_DATADIR@/heffte/python")
endif()

if ("@BUILD_SHARED_LIBS@")
Expand Down
2 changes: 1 addition & 1 deletion doxygen/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -41,4 +41,4 @@ doxygen_add_docs(heffte_doxygen
COMMENT "Building the ${PROJECT_NAME} documentation")

add_dependencies(Heffte heffte_doxygen)
install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/../html DESTINATION "share/heffte/docs")
install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/../html DESTINATION "${CMAKE_INSTALL_DATADIR}/heffte/docs")
8 changes: 4 additions & 4 deletions fortran/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -50,10 +50,10 @@ function(heffte_add_swig_module heffte_backend)

install(TARGETS ${heffte_module_name}
EXPORT Heffte_Targets
RUNTIME DESTINATION "bin"
LIBRARY DESTINATION "lib"
ARCHIVE DESTINATION "lib")
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${heffte_module_name}.mod" DESTINATION include)
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}")
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${heffte_module_name}.mod" DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
unset(heffte_src_file)
unset(heffte_module_name)
unset(heffte_backend)
Expand Down
6 changes: 3 additions & 3 deletions python/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ set(heffte_library_path "${CMAKE_CURRENT_BINARY_DIR}/../${CMAKE_SHARED_LIBRARY_P
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/heffte_config.cmake.py" "${CMAKE_CURRENT_BINARY_DIR}/heffte_config.py")

# configure for the install folder
set(heffte_library_path "${CMAKE_INSTALL_PREFIX}/lib/${CMAKE_SHARED_LIBRARY_PREFIX}heffte${CMAKE_SHARED_LIBRARY_SUFFIX}")
set(heffte_library_path "${CMAKE_INSTALL_FULL_LIBDIR}/${CMAKE_SHARED_LIBRARY_PREFIX}heffte${CMAKE_SHARED_LIBRARY_SUFFIX}")
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/heffte_config.cmake.py" "${CMAKE_CURRENT_BINARY_DIR}/configured/heffte_config.py")

# add testing files to the CMake build folder
Expand Down Expand Up @@ -57,6 +57,6 @@ endif()
# install the python files
set(heffte_python_module "${CMAKE_CURRENT_SOURCE_DIR}/heffte.py;${CMAKE_CURRENT_BINARY_DIR}/configured/heffte_config.py")
install(FILES ${heffte_python_module}
DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/python${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}/site-packages")
DESTINATION "${CMAKE_INSTALL_LIBDIR}/python${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}/site-packages")
install(FILES ${heffte_python_module}
DESTINATION "${CMAKE_INSTALL_PREFIX}/share/heffte/python")
DESTINATION "${CMAKE_INSTALL_DATADIR}/heffte/python")
4 changes: 2 additions & 2 deletions test/post_install_test.cmake.sh
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,14 @@ fi
@CMAKE_COMMAND@ \
-DCMAKE_CXX_COMPILER=@CMAKE_CXX_COMPILER@ \
-DCMAKE_CXX_FLAGS="@CMAKE_CXX_FLAGS@" \
-DHeffte_DIR=@CMAKE_INSTALL_PREFIX@/lib/cmake/Heffte \
-DHeffte_DIR=@CMAKE_INSTALL_FULL_LIBDIR@/cmake/Heffte \
-DMPI_CXX_COMPILER="@MPI_CXX_COMPILER@" \
$heffte_mpic_compiler \
$heffte_mpif_compiler \
-DMPIEXEC_NUMPROC_FLAG="@MPIEXEC_NUMPROC_FLAG@" \
-DMPIEXEC_PREFLAGS="@MPIEXEC_PREFLAGS@" \
-DMPIEXEC_POSTFLAGS="@MPIEXEC_POSTFLAGS@" \
@CMAKE_INSTALL_PREFIX@/share/heffte/testing/
@CMAKE_INSTALL_FULL_DATADIR@/heffte/testing/

make -j4
ctest -V

0 comments on commit 5e8d7c7

Please sign in to comment.