diff --git a/CMakeLists.txt b/CMakeLists.txt index ae6f3c43be2dee1d593b7384a860825a0542b481..a74f0e361f938b366ea342a1080bbd89bc187671 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -21,8 +21,9 @@ enable_language (Fortran) # TEMPORARY: this should be removed, the sanitizers should be always enabled option (WITH_CORSIKA_SANITIZERS_ENABLED "temporary way to globally disable sanitizers until the currently failing tests are fixed" OFF) option (WITH_COAST "Flag to switch on/off COAST (reverse) interface" OFF) -set (WITH_EIGEN3 "" CACHE STRING "Selection of eigen3 package. Can be \'system\' or path to installation. If empty ThirdParty/eigen3 will be used." FORCE) -set (WITH_PYTHIA8 "" CACHE STRING "Selection of pythia8 package. Can be \'system\' or path to installation. If empty ThirdParty/pythia8 will be used..") +set (WITH_EIGEN3 "" CACHE STRING "Selection of eigen3 package. Can be \'c8\' or path to installation. If empty: search system, if not found use ThirdParty/eigen3." FORCE) +set (WITH_PYTHIA8 "" CACHE STRING "Selection of pythia8 package. Can be \'c8\' or path to installation. If empty: search system, if not found use ThirdParty/pythia8." FORCE) +set (WITH_BOOST "" CACHE STRING "Selection of boost libaries. Can be \'c8\' or path to installation. If empty: search system, if not found use ThirdParty/boost." FORCE) # check for python set(Python_ADDITIONAL_VERSIONS 3) @@ -135,29 +136,28 @@ else (WITH_PYTHIA8) find_package (Pythia8) # if not found here, will automatically pick ThirdParty version endif (WITH_PYTHIA8) -# include potential ThirdParty code provided with CORSIKA -add_subdirectory (ThirdParty) - # check for Eigen3: either use ThirdParty/eigen3 or system-level installation message ("***** Configuring eigen3 version") if (WITH_EIGEN3) string (TOLOWER ${WITH_EIGEN3} WITH_EIGEN3_LOWER) - if (WITH_EIGEN3_LOWER STREQUAL "system") - message ("Use system-level eigen3") + if ("x_${WITH_EIGEN3_LOWER}" STREQUAL "x_c8") + message ("Use eigen3 from ThirdParty folder") else () - message ("Use eigen3 installed at ${WITH_EIGEN3}") + message ("Using eigen3 installed at location ${WITH_EIGEN3}") list (APPEND CMAKE_MODULE_PATH "${WITH_EIGEN3}/cmake") - set (EIGEN3_INCLUDE_DIR "${WITH_EIGEN3}" CACHE PATH "eigen3 directory") + # set (EIGEN3_INCLUDE_DIR "${WITH_EIGEN3}" CACHE PATH "eigen3 directory") + find_package (Eigen3 REQUIRED) endif () else (WITH_EIGEN3) - list (APPEND CMAKE_MODULE_PATH "${C8_Eigen3_VERSION}/cmake") - set (EIGEN3_INCLUDE_DIR "${C8_Eigen3_VERSION}" CACHE PATH "eigen3 directory") + message ("Searching eigen3 installed at system-level") + find_package (Eigen3) # if not found here, will automatically pick ThirdParty version endif (WITH_EIGEN3) -find_package (Eigen3 REQUIRED) # some final info output message ("Use eigen3 version: ${EIGEN3_VERSION} from ${EIGEN3_INCLUDE_DIR}") +# include potential ThirdParty code provided with CORSIKA +add_subdirectory (ThirdParty) # order of subdirectories add_subdirectory (Framework) diff --git a/ThirdParty/CMakeLists.txt b/ThirdParty/CMakeLists.txt index 48b0bedbe30ec6565d199dedb09a7739f82f1db0..e2b4d06dfde83fdd6ceb9add90ed23cea0e264b0 100644 --- a/ThirdParty/CMakeLists.txt +++ b/ThirdParty/CMakeLists.txt @@ -18,7 +18,7 @@ add_library (CORSIKAboost INTERFACE IMPORTED GLOBAL) if (NOT Boost_FOUND) set (_C8_Boost_VERSION "107000") message ("Building ThirdParty/boost using boost-${_C8_Boost_VERSION}.tar.bz2") - ExternalProject_Add (boost PREFIX boost + ExternalProject_Add (boost URL ${CMAKE_CURRENT_SOURCE_DIR}/boost-${_C8_Boost_VERSION}.tar.bz2 URL_MD5 8ffed5895a851894ad866888d4e64685 SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/boost/install/boost @@ -54,19 +54,51 @@ endif (NOT Boost_FOUND) # eigen3 -if (NOT WITH_EIGEN3) +add_library (CORSIKAEigen3 INTERFACE IMPORTED GLOBAL) +if (NOT Eigen3_FOUND) set (_C8_Eigen3_VERSION "eigen-eigen-b3f3d4950030") - if ("${CMAKE_CURRENT_SOURCE_DIR}/${_C8_Eigen3_VERSION}.tar.bz2" - IS_NEWER_THAN - "${CMAKE_CURRENT_SOURCE_DIR}/${_C8_Eigen3_VERSION}") - message ("Unpacking ThirdParty/eigen3") - execute_process ( - COMMAND ${CMAKE_COMMAND} -E tar xjf ${_C8_Eigen3_VERSION}.tar.bz2 - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - ) - endif () - set (C8_Eigen3_VERSION ${CMAKE_CURRENT_SOURCE_DIR}/eigen-eigen-b3f3d4950030 PARENT_SCOPE) -endif (NOT WITH_EIGEN3) + + message ("Building ThirdParty/eigen3 using ${_C8_Eigen3_VERSION}.tar.bz2") + ExternalProject_Add (eigen3 + URL ${CMAKE_CURRENT_SOURCE_DIR}/${_C8_Eigen3_VERSION}.tar.bz2 + URL_MD5 8ffed5895a851894ad866888d4e64685 + SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/eigen3/install/eigen + INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/eigen3/install/eigen + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND "" + BUILD_IN_SOURCE ON + EXCLUDE_FROM_ALL FALSE + ) + set (HAVE_Eigen3 1 CACHE BOOL "presence of eigen3, via external-project-add in ThirdParty folder") + set (Eigen3_FOUND 1 PARENT_SCOPE) + ExternalProject_Get_Property (boost INSTALL_DIR) + set (Eigen3_PREFIX ${INSTALL_DIR}/..) + set (Eigen3_INCLUDE_DIR ${Eigen3_PREFIX}) + set (Eigen3_LIBRARY_DIR ${Eigen3_PREFIX}) + add_dependencies (CORSIKAboost boost) + + # create include directory at config time + file (MAKE_DIRECTORY ${Eigen3_INCLUDE_DIR}) + + set (Eigen3_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/share/externals/eigen3) + install (DIRECTORY ${Eigen3_PREFIX}/ DESTINATION ${Eigen3_INSTALL_DIR}) + + set_target_properties ( + CORSIKAEigen3 PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES + $<BUILD_INTERFACE:${Eigen3_INCLUDE_DIR}> + ) + +else (NOT Eigen3_FOUND) + + set_target_properties ( + CORSIKAEigen3 PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES + $<BUILD_INTERFACE:${Eigen3_INCLUDE_DIR}> + ) + +endif (NOT Eigen3_FOUND) # Pythia8 @@ -75,7 +107,7 @@ if (NOT Pythia8_FOUND) set (_C8_Pythia8_VERSION "8235") message ("Building ThirdParty/pythia8 using pythia${_C8_Pythia8_VERSION}-stripped.tar.bz2") message ("This will take a bit.....") - ExternalProject_Add (pythia8 PREFIX pythia8 + ExternalProject_Add (pythia8 URL ${CMAKE_CURRENT_SOURCE_DIR}/pythia${_C8_Pythia8_VERSION}-stripped.tar.bz2 URL_MD5 53e1b5925a53875dedcf4ff2e3ba4cb9 INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/pythia8/install