150 lines
5.5 KiB
CMake
150 lines
5.5 KiB
CMake
# - h4nexus
|
|
cmake_minimum_required(VERSION 3.26)
|
|
|
|
project(h4nexus VERSION 0.1.0 LANGUAGES CXX)
|
|
|
|
#--- set C++ standard ---------------------------------------------------------
|
|
set(CMAKE_CXX_STANDARD 17)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
|
|
|
#--- set a default build type if none was specified ---------------------------
|
|
set(default_build_type "Release")
|
|
|
|
if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
|
|
message(STATUS "Setting build type to '${default_build_type}' as none was specified.")
|
|
set(CMAKE_BUILD_TYPE "${default_build_type}" CACHE
|
|
STRING "Choose the type of build." FORCE)
|
|
# Set the possible values of build type for cmake-gui
|
|
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS
|
|
"Debug" "Release" "MinSizeRel" "RelWithDebInfo")
|
|
endif ()
|
|
|
|
#--- check for pkg-config -----------------------------------------------------
|
|
find_package(PkgConfig REQUIRED)
|
|
|
|
#--- check for git ------------------------------------------------------------
|
|
find_package(Git REQUIRED)
|
|
|
|
#--- check for HDF4 -----------------------------------------------------------
|
|
# Find HDF4 manually (pkg-config often doesn't have hdf4)
|
|
find_path(HDF4_INCLUDE_DIR
|
|
NAMES mfhdf.h
|
|
PATHS /usr/include /usr/local/include
|
|
PATH_SUFFIXES hdf
|
|
)
|
|
|
|
find_library(HDF4_DF_LIBRARY
|
|
NAMES df libdf
|
|
PATHS /usr/lib64 /usr/lib /usr/local/lib64 /usr/local/lib
|
|
)
|
|
|
|
find_library(HDF4_MFHDF_LIBRARY
|
|
NAMES mfhdf libmfhdf
|
|
PATHS /usr/lib64 /usr/lib /usr/local/lib64 /usr/local/lib
|
|
)
|
|
|
|
if (HDF4_INCLUDE_DIR AND HDF4_DF_LIBRARY AND HDF4_MFHDF_LIBRARY)
|
|
set(HDF4_FOUND TRUE)
|
|
set(HDF4_INCLUDE_DIRS ${HDF4_INCLUDE_DIR})
|
|
set(HDF4_LIBRARIES ${HDF4_MFHDF_LIBRARY} ${HDF4_DF_LIBRARY})
|
|
message(STATUS "Found HDF4: ${HDF4_INCLUDE_DIR}")
|
|
message(STATUS " HDF4 libraries: ${HDF4_LIBRARIES}")
|
|
else ()
|
|
message(FATAL_ERROR "HDF4 library not found. Please install libhdf4-dev or hdf-devel")
|
|
endif ()
|
|
|
|
include_directories(${HDF4_INCLUDE_DIRS})
|
|
|
|
#--- check for HDF5 -----------------------------------------------------------
|
|
find_package(HDF5 REQUIRED COMPONENTS CXX)
|
|
if(NOT HDF5_FOUND)
|
|
message(FATAL_ERROR "HDF5 C++ library not found")
|
|
endif()
|
|
include_directories(${HDF5_INCLUDE_DIRS})
|
|
|
|
#--- check for ROOT -----------------------------------------------------------
|
|
find_package(ROOT 6.36 REQUIRED COMPONENTS Minuit2)
|
|
if (ROOT_miniut2_FOUND)
|
|
execute_process(COMMAND root-config --bindir OUTPUT_VARIABLE ROOT_BINDIR)
|
|
string(STRIP ${ROOT_BINDIR} ROOT_BINDIR)
|
|
execute_process(COMMAND root-config --version OUTPUT_VARIABLE ROOT_VERSION)
|
|
string(STRIP ${ROOT_VERSION} ROOT_VERSION)
|
|
message("-- Found ROOT: ${ROOT_BINDIR} (found version: ${ROOT_VERSION})")
|
|
#---Define useful ROOT functions and macros (e.g. ROOT_GENERATE_DICTIONARY)
|
|
include(${ROOT_USE_FILE})
|
|
endif (ROOT_miniut2_FOUND)
|
|
|
|
#--- all checks done -> feed config.h -----------------------------------------
|
|
set(HAVE_CONFIG_H 1 CACHE INTERNAL "config.h is available")
|
|
configure_file(${CMAKE_SOURCE_DIR}/cmake/config.h.in ${CMAKE_CURRENT_BINARY_DIR}/config.h)
|
|
|
|
#--- check if project source is a git repo ------------------------------------
|
|
if (EXISTS "${CMAKE_SOURCE_DIR}/.git/HEAD")
|
|
message(STATUS "is a git repo")
|
|
set(IS_GIT_REPO 1)
|
|
else ()
|
|
message(STATUS "is NOT a git repo")
|
|
set(IS_GIT_REPO 0)
|
|
endif ()
|
|
|
|
#--- start create git-revision.h ----------------------------------------------
|
|
if (IS_GIT_REPO)
|
|
execute_process(COMMAND sh ${CMAKE_SOURCE_DIR}/git_revision.sh ${CMAKE_BINARY_DIR})
|
|
|
|
set(HAVE_GIT_REV_H "-DHAVE_GIT_REV_H")
|
|
set(GIT_REV_H "git-revision.h")
|
|
else (IS_GIT_REPO)
|
|
set(HAVE_GIT_REV_H "")
|
|
set(GIT_REV_H "")
|
|
endif (IS_GIT_REPO)
|
|
|
|
#--- end create git-revision.h ------------------------------------------------
|
|
|
|
#--- write summary of the installation
|
|
cmake_host_system_information(RESULT PROCESSOR QUERY PROCESSOR_DESCRIPTION)
|
|
|
|
message("")
|
|
message("|-----------------------------------------------------------------------|")
|
|
message("| |")
|
|
message("| Summary |")
|
|
message("| |")
|
|
message("|-----------------------------------------------------------------------|")
|
|
message("")
|
|
message(" System: ${CMAKE_HOST_SYSTEM_NAME} ${CMAKE_SYSTEM_PROCESSOR} - ${CMAKE_HOST_SYSTEM_VERSION}")
|
|
message(" Processor: ${PROCESSOR} (${CMAKE_SYSTEM_PROCESSOR})")
|
|
message(" ----------")
|
|
message("")
|
|
message(" h4nexus Version: ${h4nexus_VERSION}")
|
|
message(" ----------------")
|
|
message("")
|
|
message(" Build Type: ${CMAKE_BUILD_TYPE}")
|
|
message(" -----------")
|
|
message("")
|
|
message(" Requirements:")
|
|
message(" -------------")
|
|
message("")
|
|
message(" HDF4 found in ${HDF4_INCLUDE_DIRS}")
|
|
message(" ROOT found in ${ROOT_INCLUDE_DIRS}, Version: ${ROOT_VERSION}")
|
|
message("")
|
|
message(" Installation directories:")
|
|
message(" -------------------------")
|
|
message("")
|
|
message(" Programs : ${CMAKE_INSTALL_PREFIX}/bin")
|
|
message("")
|
|
message("-------------------------------------------------------------------------")
|
|
message("")
|
|
|
|
#--- h4nexus executable -------------------------------------------------------
|
|
add_executable(h4nexus
|
|
../../PNeXus.cpp
|
|
main.cpp)
|
|
target_compile_options(h4nexus BEFORE PRIVATE "-DHAVE_HDF4 -DHAVE_CONFIG_H" ${HAVE_GIT_REV_H})
|
|
target_include_directories(h4nexus
|
|
BEFORE PRIVATE
|
|
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/build>
|
|
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/../..>
|
|
$<BUILD_INTERFACE:${ROOT_INCLUDE_DIRS}>
|
|
)
|
|
target_link_libraries(h4nexus ${HDF4_LIBRARIES} ${HDF5_LIBRARIES} ${ROOT_LIBRARIES})
|