-
Whitney Armstrong authoredWhitney Armstrong authored
CMakeLists.txt 6.84 KiB
cmake_minimum_required(VERSION 3.6 FATAL_ERROR)
project(insane
LANGUAGES CXX Fortran
VERSION 2.1.0
DESCRIPTION "insane2")
set(BUILD_SHARED_LIBS ON)
# --------------------------------------------------------------------------
# Unit tests
enable_testing()
#add_subdirectory(src/3rd_party/catch)
Include(FetchContent)
FetchContent_Declare(
Catch2
GIT_REPOSITORY https://github.com/catchorg/Catch2.git
GIT_TAG v3.4.0 # or a later release
)
FetchContent_MakeAvailable(Catch2)
#add_executable(tests test.cpp)
#target_link_libraries(tests PRIVATE Catch2::Catch2WithMain)
set(CMAKE_MODULE_PATH
${CMAKE_MODULE_PATH}
${PROJECT_SOURCE_DIR}/cmake
${PROJECT_SOURCE_DIR}/cmake/modules)
# This assumes you are installing into a director like
# /usr/local/opt/project_version and
# /usr/local/etc/modulesfiles is in MODULEPATH
set(LMOD_INSTALL_PREFIX ../../etc/modulefiles)
set(INSTALL_LMOD_FILES OFF)
include(cmake/os.cmake)
include(cmake/root.cmake)
set(INSANE_DATA_DIR ${CMAKE_INSTALL_PREFIX}/share/insane CACHE PATH "insane data directrory" )
set(InSANE_PDF_GRID_DIR ${INSANE_DATA_DIR}/grid)
#-------------------------------------------------------
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/cmake)
# ---------------------------------------------------------------------------
# undocumented cmake:
set(CMAKE_DISABLE_IN_SOURCE_BUILD ON)
#----------------------------------------------------------------------------
# Find Libraries
list(APPEND CMAKE_PREFIX_PATH $ENV{ROOTSYS})
find_package(ROOT REQUIRED
COMPONENTS MathCore RIO Hist MathMore Graf Graf3d Gpad GX11 GeomPainter X3d Gviz3d RGL
Eve EG Foam GenVector Geom GLEW Gui HistPainter MathCore Matrix MLP Net Physics Thread Tree TreeViewer)
include(${ROOT_USE_FILE})
include_directories(${ROOT_INCLUDE_DIRS})
#include_directories("/opt/software/local/etc/cling/lib/clang/5.0.0/include/include"
#"/opt/software/local/etc/cling/lib/clang/5.0.0/include")
#add_definitions(${ROOT_CXX_FLAGS})
#find_package(CLHEP REQUIRED)
#find_package(LHAPDF QUIET)
#find_package(MySQL QUIET)
find_package(fmt REQUIRED)
list(APPEND CMAKE_PREFIX_PATH $ENV{HOME})
#list(APPEND CMAKE_PREFIX_PATH /usr/local/share/eigen3)
#list(APPEND CMAKE_PREFIX_PATH /usr/local/share/eigen3/cmake)
#list(APPEND CMAKE_PREFIX_PATH /usr/local/share/eigen3)
#set(Eigen3_DIR ${CMAKE_SOURCE_DIR}/src/eigen3)
find_package (Eigen3 3.3 REQUIRED NO_MODULE)
#find_package(PkgConfig REQUIRED)
#pkg_search_module(Eigen3 REQUIRED IMPORTED_TARGET Eigen)
#target_include_directories(${PROJECT_NAME} INTERFACE ${EIGEN3_INCLUDE_DIR})
message("Eigen3_INCLUDE_DIRS : ${Eigen3_INCLUDE_DIRS}")
message("EIGEN3_INCLUDE_DIRS : ${EIGEN3_INCLUDE_DIRS}")
message("EIGEN3_INCLUDE_DIR : ${EIGEN3_INCLUDE_DIR}")
include_directories(${EIGEN3_INCLUDE_DIRS})
#add_library(eigen INTERFACE IMPORTED)
#----------------------------------------------------------------------------
# not sure this is the best way to do this....
#set(InSANE_Fortran_FLAGS "${InSANE_Fortran_FLAGS} -finit-local-zero -Wno-conversion -Wno-unused-variable -Wno-tabs -Wno-unused-dummy-argument")
#set(InSANE_Fortran_FLAGS "${InSANE_Fortran_FLAGS} -D\"InSANE_PDF_GRID_DIR='${InSANE_PDF_GRID_DIR}'\" -g -O2 -Wall -ffixed-line-length-none -x f77-cpp-input ")
#set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} ${InSANE_Fortran_FLAGS}")
#set(InSANE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS}")
#set(CMAKE_Fortran_FLAGS " -D\"InSANE_PDF_GRID_DIR='${InSANE_PDF_GRID_DIR}'\" -g -O2 -Wall -fPIC -Iinclude -ffixed-line-length-none -x f77-cpp-input ")
#set(CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS}")
#message(" CMAKE_Fortran_FLAGS : ${CMAKE_Fortran_FLAGS}")
#message(" CMAKE_CXX_FLAGS : ${CMAKE_CXX_FLAGS}")
# configure a header file to pass some of the CMake settings to the source code
configure_file (
"${PROJECT_SOURCE_DIR}/src/insaneConfig.h.in"
"${PROJECT_BINARY_DIR}/insaneConfig.h"
)
#----------------------------------------------------------------------------
# Add the executable
#add_executable(insane-config insane-config.cxx )
add_subdirectory(config)
#
# The main insane library:
add_subdirectory("src/lib")
# -----------------------------------------------------------
# Set the library version in the main CMakeLists.txt
SET(InSANE_LIBRARY_PROPERTIES ${InSANE_LIBRARY_PROPERTIES}
VERSION "${insane_VERSION}"
SOVERSION "${insane_MAJOR_VERSION}"
SUFFIX ".so"
)
add_subdirectory(doc)
# ----------------------------------------------------------------------------
# The cmake stuff goes here
# Add all targets to the build-tree export set
#export(TARGETS InSANE FILE "${PROJECT_BINARY_DIR}/${PROJECT_NAME}Targets.cmake")
# TODO: replace "InSANE" with smaller libraries
# Export the package for use from the build-tree
# (this registers the build-tree with a global CMake-registry)
export(PACKAGE ${PROJECT_NAME})
#set(CONF_LIBRARIES
# ${PROJECT_NAME} # TODO: Break big library into smaller ones
# )
#
#set(CONF_EXECUTABLES
# insane-config
# )
#
#set(CONF_INCLUDE_DIRS
# ${CMAKE_INSTALL_PREFIX}/include
# ${CMAKE_INSTALL_PREFIX}/include/${PROJECT_NAME}
# )
#
#set(CONF_LIBRARY_DIRS
# ${CMAKE_INSTALL_PREFIX}/lib
# )
#configure_file(config/${PROJECT_NAME}Config.cmake.in "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${PROJECT_NAME}Config.cmake" @ONLY)
#configure_file(config/${PROJECT_NAME}ConfigVersion.cmake.in "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${PROJECT_NAME}ConfigVersion.cmake" @ONLY)
# Install the FooBarConfig.cmake and FooBarConfigVersion.cmake
#install(FILES
# "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${PROJECT_NAME}Config.cmake"
# "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${PROJECT_NAME}ConfigVersion.cmake"
# DESTINATION lib/${PROJECT_NAME} COMPONENT dev)
#
## Install the export set for use with the install-tree
#install(EXPORT ${PROJECT_NAME}Targets
# DESTINATION lib/${PROJECT_NAME}
# COMPONENT dev)
# ---------------------------------
#
if(INSTALL_LMOD_FILES)
configure_file (
etc/lmod.in
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/${PROJECT_VERSION}
)
install(
FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/${PROJECT_VERSION}
DESTINATION ${LMOD_INSTALL_PREFIX}/${PROJECT_NAME}
)
endif(INSTALL_LMOD_FILES)
# -------------------------
# install library config
include(CMakePackageConfigHelpers)
# Install and export targets
install(EXPORT ${PROJECT_NAME}Targets
FILE ${PROJECT_NAME}Targets.cmake
NAMESPACE insane::
DESTINATION lib/insane
)
set(TARGETS_INSTALL_PATH lib/insane/insaneTargets.cmake)
configure_package_config_file(
cmake/insaneConfig.cmake.in
insaneConfig.cmake
INSTALL_DESTINATION lib/insane
PATH_VARS TARGETS_INSTALL_PATH
)
write_basic_package_version_file("insaneConfigVersion.cmake"
VERSION ${VERSION}
COMPATIBILITY SameMajorVersion
)
install(FILES
${CMAKE_CURRENT_BINARY_DIR}/insaneConfig.cmake
${CMAKE_CURRENT_BINARY_DIR}/insaneConfigVersion.cmake
DESTINATION lib/insane
)