From cae5f04d2b5186bccb3c65b82b7063f276f3b225 Mon Sep 17 00:00:00 2001 From: sjunges Date: Thu, 21 Jul 2016 14:37:04 +0200 Subject: [PATCH] first in a series of refactoring the library inclusion to be more adequate Former-commit-id: e68ada137ee991c6c4a10d460b78047d3a00ce0b --- CMakeLists.txt | 509 +-------------------------- resources/3rdparty/CMakeLists.txt | 566 ++++++++++++++++++++++++++++-- 2 files changed, 546 insertions(+), 529 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 54ee8452f..d84e80509 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -198,515 +198,8 @@ message(STATUS "StoRM - Using Compiler Configuration: ${STORM_COMPILED_BY}") # In 3rdparty, targets are being defined that can be used # in the the system does not have a library -add_subdirectory(resources/3rdparty) +include(resources/3rdparty/CMakeLists.txt) -############################################################# -## -## l3pp -## -############################################################# - -# l3pp is set up as external project -include_directories(${l3pp_INCLUDE}) -add_dependencies(resources l3pp) - -############################################################# -## -## gmm -## -############################################################# - -# Add the shipped version of GMM to the include pathes -set(GMMXX_INCLUDE_DIR "${PROJECT_SOURCE_DIR}/resources/3rdparty/gmm-5.0/include") -include_directories(${GMMXX_INCLUDE_DIR}) - -############################################################# -## -## Eigen -## -############################################################# - -# Add the shipped version of Eigen to the include pathes -set(EIGEN_INCLUDE_DIR "${PROJECT_SOURCE_DIR}/resources/3rdparty/eigen-3.3-beta1") -include_directories(${EIGEN_INCLUDE_DIR}) - -############################################################# -## -## gmp -## -############################################################# - -# GMP is optional (unless MathSAT is used, see below) -find_package(GMP QUIET) - -############################################################# -## -## Boost -## -############################################################# - -# Boost Option variables -set(Boost_USE_STATIC_LIBS ${USE_BOOST_STATIC_LIBRARIES}) -set(Boost_USE_MULTITHREADED ON) -set(Boost_USE_STATIC_RUNTIME OFF) - -find_package(Boost 1.56.0 QUIET REQUIRED) - -if ((NOT Boost_LIBRARY_DIRS) OR ("${Boost_LIBRARY_DIRS}" STREQUAL "")) - set(Boost_LIBRARY_DIRS "${Boost_INCLUDE_DIRS}/stage/lib") -endif () -link_directories(${Boost_LIBRARY_DIRS}) - -include_directories(${Boost_INCLUDE_DIRS}) -list(APPEND STORM_LINK_LIBRARIES ${Boost_LIBRARIES}) -message(STATUS "StoRM - Using Boost ${Boost_VERSION} (lib ${Boost_LIB_VERSION})") -#message(STATUS "StoRM - BOOST_INCLUDE_DIRS is ${Boost_INCLUDE_DIRS}") -#message(STATUS "StoRM - BOOST_LIBRARY_DIRS is ${Boost_LIBRARY_DIRS}") - -############################################################# -## -## ExprTk -## -############################################################# - -# Use the shipped version of ExprTK -message (STATUS "StoRM - Including ExprTk") -include_directories("${PROJECT_SOURCE_DIR}/resources/3rdparty/exprtk") - -############################################################# -## -## ModernJSON -## -############################################################# - -#use the shipped version of modernjson -message (STATUS "StoRM - Including ModernJSON") -include_directories("${PROJECT_SOURCE_DIR}/resources/3rdparty/modernjson/src/") - -############################################################# -## -## Z3 (optional) -## -############################################################# - -find_package(Z3 QUIET) - -# Z3 Defines -set(STORM_HAVE_Z3 ${Z3_FOUND}) - -if(Z3_FOUND) - message (STATUS "StoRM - Linking with Z3") - include_directories(${Z3_INCLUDE_DIRS}) - list(APPEND STORM_LINK_LIBRARIES ${Z3_LIBRARIES}) -endif(Z3_FOUND) - -############################################################# -## -## glpk -## -############################################################# - -find_package(GLPK QUIET) -if(GLPK_FOUND) - message (STATUS "StoRM - Using system version of GLPK") -else() - message (STATUS "StoRM - Using shipped version of GLPK") - set(GLPK_LIBRARIES ${CMAKE_BINARY_DIR}/resources/3rdparty/glpk-4.57/lib/libglpk${DYNAMIC_EXT}) - set(GLPK_INCLUDE_DIR ${CMAKE_BINARY_DIR}/resources/3rdparty/glpk-4.57/include) - set(GLPK_VERSION_STRING 4.57) - add_dependencies(resources glpk) -endif() - -# Since there is a shipped version, always use GLPK -set(STORM_HAVE_GLPK ON) -message (STATUS "StoRM - Linking with glpk ${GLPK_VERSION_STRING}") -include_directories(${GLPK_INCLUDE_DIR}) -list(APPEND STORM_LINK_LIBRARIES ${GLPK_LIBRARIES}) - -############################################################# -## -## Gurobi (optional) -## -############################################################# - -if (STORM_USE_GUROBI) - find_package(Gurobi QUIET REQUIRED) - set(STORM_HAVE_GUROBI ${GUROBI_FOUND}) - if (GUROBI_FOUND) - message (STATUS "StoRM - Linking with Gurobi") - include_directories(${GUROBI_INCLUDE_DIRS}) - list(APPEND STORM_LINK_LIBRARIES ${GUROBI_LIBRARY}) - #link_directories("${GUROBI_ROOT}/lib") - else() - #message(FATAL_ERROR "StoRM - Gurobi was requested, but not found!") - endif() -else() - set(STORM_HAVE_GUROBI OFF) -endif() - -############################################################# -## -## CUDD -## -############################################################# - -# Do not use system CUDD, StoRM has a modified version -set(CUDD_INCLUDE_DIR ${CMAKE_BINARY_DIR}/resources/3rdparty/cudd-3.0.0/include) -set(CUDD_SHARED_LIBRARY ${CMAKE_BINARY_DIR}/resources/3rdparty/cudd-3.0.0/lib/libcudd${DYNAMIC_EXT}) -set(CUDD_STATIC_LIBRARY ${CMAKE_BINARY_DIR}/resources/3rdparty/cudd-3.0.0/lib/libcudd${STATIC_EXT}) -set(CUDD_VERSION_STRING 3.0.0) -list(APPEND STORM_LINK_LIBRARIES ${CUDD_SHARED_LIBRARY}) -add_dependencies(resources cudd3) - -message(STATUS "StoRM - Linking with CUDD ${CUDD_VERSION_STRING}") -#message("StoRM - CUDD include dir: ${CUDD_INCLUDE_DIR}") -include_directories(${CUDD_INCLUDE_DIR}) - -############################################################# -## -## CLN -## -############################################################# - -find_package(CLN QUIET) - -if(CLN_FOUND) - set(STORM_HAVE_CLN ON) - message(STATUS "StoRM - Linking with CLN ${CLN_VERSION_STRING}") - include_directories("${CLN_INCLUDE_DIR}") - list(APPEND STORM_LINK_LIBRARIES ${CLN_LIBRARIES}) -else() - set(STORM_HAVE_CLN OFF) - if(NOT GMP_FOUND) - message(FATAL_ERROR "StoRM - Neither CLN nor GMP found") - endif() -endif() - -############################################################# -## -## carl -## -############################################################# - -set(STORM_HAVE_CARL OFF) -if(USE_CARL) - find_package(carl QUIET REQUIRED) - if(carl_FOUND) - set(STORM_HAVE_CARL ON) - message(STATUS "StoRM - Linking with carl ${carl_VERSION_STRING}") - include_directories("${carl_INCLUDE_DIR}") - list(APPEND STORM_LINK_LIBRARIES ${carl_LIBRARIES}) - else() - message(FATAL_ERROR "StoRM - CARL was requested but not found") - endif() -endif() - -############################################################# -## -## SMT-RAT -## -############################################################# - -# No find routine yet -#find_package(smtrat QUIET) -# Not yet supported -set(smtrat_FOUND OFF) -set(STORM_HAVE_SMTRAT OFF) -if(smtrat_FOUND) - set(STORM_HAVE_SMTRAT ON) - message(STATUS "StoRM - Linking with smtrat.") - include_directories("${smtrat_INCLUDE_DIR}") - list(APPEND STORM_LINK_LIBRARIES ${smtrat_LIBRARIES}) -endif() - -############################################################# -## -## GiNaC -## -############################################################# - -find_package(GiNaC QUIET) - -if(GINAC_FOUND) - set(STORM_HAVE_GINAC ON) - message(STATUS "StoRM - Linking with GiNaC ${GINAC_VERSION_STRING}") - # Right now only link with GiNaC for carl - #include_directories("${GINAC_INCLUDE_DIR}") - list(APPEND STORM_LINK_LIBRARIES ${GINAC_LIBRARIES}) -else() - set(STORM_HAVE_GINAC OFF) - #TODO: Check if CARL actually requires the use of GiNaC -endif() - -############################################################# -## -## MathSAT (optional) -## -############################################################# - -if ("${MSAT_ROOT}" STREQUAL "") - set(ENABLE_MSAT OFF) -else() - set(ENABLE_MSAT ON) -endif() - -# MathSAT Defines -set(STORM_HAVE_MSAT ${ENABLE_MSAT}) -if (ENABLE_MSAT) - message (STATUS "StoRM - Linking with MathSAT") - link_directories("${MSAT_ROOT}/lib") - include_directories("${MSAT_ROOT}/include") - list(APPEND STORM_LINK_LIBRARIES "mathsat") - if(GMP_FOUND) - include_directories("${GMP_INCLUDE_DIR}") - list(APPEND STORM_LINK_LIBRARIES "gmp") - elseif(MPIR_FOUND) - include_directories("${GMP_INCLUDE_DIR}") - list(APPEND STORM_LINK_LIBRARIES "mpir" "mpirxx") - else(GMP_FOUND) - message(FATAL_ERROR "GMP is required for MathSAT, but was not found!") - endif(GMP_FOUND) -endif(ENABLE_MSAT) - -############################################################# -## -## Xerces -## -############################################################# - -if(USE_XERCES) - find_package(Xerces QUIET REQUIRED) - if(XERCES_FOUND) - message(STATUS "StoRM - Use system version of xerces") - else() - message(STATUS "StoRM - Use shipped version of xerces") - set(XERCES_ROOT ${CMAKE_BINARY_DIR}/resources/3rdparty/xercesc-3.1.2) - set(XERCESC_INCLUDE ${XERCES_ROOT}/include) - set(XERCES_LIBRARY_PATH ${XERCES_ROOT}/lib) - set(XERCESC_LIBRARIES ${XERCES_LIBRARY_PATH}/libxerces-c.a) - - add_dependencies(resources xercesc) - endif() - - message (STATUS "StoRM - Linking with xercesc") - set(STORM_HAVE_XERCES ON) - include_directories(${XERCESC_INCLUDE}) - list(APPEND STORM_LINK_LIBRARIES ${XERCESC_LIBRARIES}) -endif(USE_XERCES) - -############################################################# -## -## Sylvan -## -############################################################# - -message(STATUS "StoRM - Using shipped version of sylvan") -message(STATUS "StoRM - Linking with sylvan") -include_directories("${Sylvan_INCLUDE_DIR}") -list(APPEND STORM_LINK_LIBRARIES ${Sylvan_LIBRARY}) -add_dependencies(resources sylvan) - -if(${OPERATING_SYSTEM} MATCHES "Linux") - find_package(Hwloc QUIET REQUIRED) - if(Hwloc_FOUND) - message(STATUS "StoRM - Linking with hwloc ${Hwloc_VERSION}") - list(APPEND STORM_LINK_LIBRARIES ${Hwloc_LIBRARIES}) - else() - message(FATAL_ERROR "HWLOC is required but was not found.") - endif() -endif() - -############################################################# -## -## Google Test gtest -## -############################################################# - -add_dependencies(test-resources googletest) -list(APPEND STORM_TEST_LINK_LIBRARIES ${GTEST_LIBRARIES}) - -############################################################# -## -## Intel Threading Building Blocks (optional) -## -############################################################# - -set(STORM_HAVE_INTELTBB OFF) -if (STORM_USE_INTELTBB) - # Point to shipped TBB directory - set(TBB_INSTALL_DIR "${PROJECT_SOURCE_DIR}/resources/3rdparty/tbb42_20140122_merged-win-lin-mac") - find_package(TBB QUIET REQUIRED) - - if (TBB_FOUND) - message(STATUS "StoRM - Found Intel TBB with interface version ${TBB_INTERFACE_VERSION}.") - message(STATUS "StoRM - Linking with Intel TBB in ${TBB_LIBRARY_DIRS}.") - set(STORM_HAVE_INTELTBB ON) - link_directories(${TBB_LIBRARY_DIRS}) - include_directories(${TBB_INCLUDE_DIRS}) - list(APPEND STORM_LINK_LIBRARIES tbb tbbmalloc) - else(TBB_FOUND) - message(FATAL_ERROR "StoRM - TBB was requested, but not found!") - endif(TBB_FOUND) -endif(STORM_USE_INTELTBB) - -############################################################# -## -## Threads -## -############################################################# - -find_package(Threads QUIET REQUIRED) -if (NOT Threads_FOUND) - message(FATAL_ERROR "StoRM - Threads was requested, but not found!") -endif() -include_directories(${THREADS_INCLUDE_DIRS}) -list(APPEND STORM_LINK_LIBRARIES ${CMAKE_THREAD_LIBS_INIT}) -if (STORM_USE_COTIRE) - target_link_libraries(storm_unity ${CMAKE_THREAD_LIBS_INIT}) -endif(STORM_USE_COTIRE) - -if (MSVC) - # Add the DebugHelper DLL - set(CMAKE_CXX_STANDARD_LIBRARIES "${CMAKE_CXX_STANDARD_LIBRARIES} Dbghelp.lib") - target_link_libraries(storm "Dbghelp.lib") -endif(MSVC) - -############################################################# -## -## CUDA Library generation -## -############################################################# - - -if ("${CUDA_ROOT}" STREQUAL "") - set(ENABLE_CUDA OFF) -else() - set(ENABLE_CUDA ON) -endif() - -# CUDA Defines -if (ENABLE_CUDA) - set(STORM_CPP_CUDA_DEF "define") -else() - set(STORM_CPP_CUDA_DEF "undef") -endif() - - -# CUDA Defines -set(STORM_CPP_CUDAFORSTORM_DEF "undef") - - -if(ENABLE_CUDA) - - # Test for type alignment - try_run(STORM_CUDA_RUN_RESULT_TYPEALIGNMENT STORM_CUDA_COMPILE_RESULT_TYPEALIGNMENT - ${PROJECT_BINARY_DIR} "${PROJECT_SOURCE_DIR}/cuda/CMakeAlignmentCheck.cpp" - COMPILE_OUTPUT_VARIABLE OUTPUT_TEST_VAR - ) - if(NOT STORM_CUDA_COMPILE_RESULT_TYPEALIGNMENT) - message(FATAL_ERROR "StoRM (CudaPlugin) - Could not test type alignment, there was an Error while compiling the file ${PROJECT_SOURCE_DIR}/cuda/CMakeAlignmentCheck.cpp: ${OUTPUT_TEST_VAR}") - elseif(STORM_CUDA_RUN_RESULT_TYPEALIGNMENT EQUAL 0) - message(STATUS "StoRM (CudaPlugin) - Result of Type Alignment Check: OK.") - else() - message(FATAL_ERROR "StoRM (CudaPlugin) - Result of Type Alignment Check: FAILED (Code ${STORM_CUDA_RUN_RESULT_TYPEALIGNMENT})") - endif() - - # Test for Float 64bit Alignment - try_run(STORM_CUDA_RUN_RESULT_FLOATALIGNMENT STORM_CUDA_COMPILE_RESULT_FLOATALIGNMENT - ${PROJECT_BINARY_DIR} "${PROJECT_SOURCE_DIR}/cuda/CMakeFloatAlignmentCheck.cpp" - COMPILE_OUTPUT_VARIABLE OUTPUT_TEST_VAR - ) - if(NOT STORM_CUDA_COMPILE_RESULT_FLOATALIGNMENT) - message(FATAL_ERROR "StoRM (CudaPlugin) - Could not test float type alignment, there was an Error while compiling the file ${PROJECT_SOURCE_DIR}/cuda/CMakeFloatAlignmentCheck.cpp: ${OUTPUT_TEST_VAR}") - elseif(STORM_CUDA_RUN_RESULT_FLOATALIGNMENT EQUAL 2) - message(STATUS "StoRM (CudaPlugin) - Result of Float Type Alignment Check: 64bit alignment active.") - set(STORM_CUDAPLUGIN_FLOAT_64BIT_ALIGN_DEF "define") - elseif(STORM_CUDA_RUN_RESULT_FLOATALIGNMENT EQUAL 3) - message(STATUS "StoRM (CudaPlugin) - Result of Float Type Alignment Check: 64bit alignment disabled.") - set(STORM_CUDAPLUGIN_FLOAT_64BIT_ALIGN_DEF "undef") - else() - message(FATAL_ERROR "StoRM (CudaPlugin) - Result of Float Type Alignment Check: FAILED (Code ${STORM_CUDA_RUN_RESULT_FLOATALIGNMENT})") - endif() - # - # Make a version file containing the current version from git. - # - include(GetGitRevisionDescription) - git_describe_checkout(STORM_GIT_VERSION_STRING) - # Parse the git Tag into variables - string(REGEX REPLACE "^([0-9]+)\\..*" "\\1" STORM_CUDAPLUGIN_VERSION_MAJOR "${STORM_GIT_VERSION_STRING}") - string(REGEX REPLACE "^[0-9]+\\.([0-9]+).*" "\\1" STORM_CUDAPLUGIN_VERSION_MINOR "${STORM_GIT_VERSION_STRING}") - string(REGEX REPLACE "^[0-9]+\\.[0-9]+\\.([0-9]+).*" "\\1" STORM_CUDAPLUGIN_VERSION_PATCH "${STORM_GIT_VERSION_STRING}") - string(REGEX REPLACE "^[0-9]+\\.[0-9]+\\.[0-9]+\\-([0-9]+)\\-.*" "\\1" STORM_CUDAPLUGIN_VERSION_COMMITS_AHEAD "${STORM_GIT_VERSION_STRING}") - string(REGEX REPLACE "^[0-9]+\\.[0-9]+\\.[0-9]+\\-[0-9]+\\-([a-z0-9]+).*" "\\1" STORM_CUDAPLUGIN_VERSION_HASH "${STORM_GIT_VERSION_STRING}") - string(REGEX REPLACE "^[0-9]+\\.[0-9]+\\.[0-9]+\\-[0-9]+\\-[a-z0-9]+\\-(.*)" "\\1" STORM_CUDAPLUGIN_VERSION_APPENDIX "${STORM_GIT_VERSION_STRING}") - if ("${STORM_CUDAPLUGIN_VERSION_APPENDIX}" MATCHES "^.*dirty.*$") - set(STORM_CUDAPLUGIN_VERSION_DIRTY 1) - else() - set(STORM_CUDAPLUGIN_VERSION_DIRTY 0) - endif() - message(STATUS "StoRM (CudaPlugin) - Version information: ${STORM_CUDAPLUGIN_VERSION_MAJOR}.${STORM_CUDAPLUGIN_VERSION_MINOR}.${STORM_CUDAPLUGIN_VERSION_PATCH} (${STORM_CUDAPLUGIN_VERSION_COMMITS_AHEAD} commits ahead of Tag) build from ${STORM_CUDAPLUGIN_VERSION_HASH} (Dirty: ${STORM_CUDAPLUGIN_VERSION_DIRTY})") - - - # Configure a header file to pass some of the CMake settings to the source code - configure_file ( - "${PROJECT_SOURCE_DIR}/cuda/storm-cudaplugin-config.h.in" - "${PROJECT_BINARY_DIR}/include/storm-cudaplugin-config.h" - ) - - #create library - find_package(CUDA REQUIRED) - set(CUSP_INCLUDE_DIRS "${PROJECT_SOURCE_DIR}/resources/3rdparty/cusplibrary") - find_package(Cusp REQUIRED) - find_package(Thrust REQUIRED) - - set(STORM_CUDA_LIB_NAME "storm-cuda") - - file(GLOB_RECURSE STORM_CUDA_KERNEL_FILES ${PROJECT_SOURCE_DIR}/cuda/kernels/*.cu) - file(GLOB_RECURSE STORM_CUDA_HEADER_FILES ${PROJECT_SOURCE_DIR}/cuda/kernels/*.h) - - source_group(kernels FILES ${STORM_CUDA_KERNEL_FILES} ${STORM_CUDA_HEADER_FILES}) - include_directories(${PROJECT_SOURCE_DIR}/cuda/kernels/) - - #set(CUDA_PROPAGATE_HOST_FLAGS OFF) - set(CUDA_NVCC_FLAGS "-arch=sm_30") - - ############################################################# - ## - ## CUSP - ## - ############################################################# - if(CUSP_FOUND) - include_directories(${CUSP_INCLUDE_DIR}) - cuda_include_directories(${CUSP_INCLUDE_DIR}) - message(STATUS "StoRM (CudaPlugin) - Found CUSP Version ${CUSP_VERSION} in location ${CUSP_INCLUDE_DIR}") - else() - message(FATAL_ERROR "StoRM (CudaPlugin) - Could not find CUSP!") - endif() - - ############################################################# - ## - ## Thrust - ## - ############################################################# - if(THRUST_FOUND) - include_directories(${THRUST_INCLUDE_DIR}) - cuda_include_directories(${THRUST_INCLUDE_DIR}) - message(STATUS "StoRM (CudaPlugin) - Found Thrust Version ${THRUST_VERSION} in location ${THRUST_INCLUDE_DIR}") - else() - message(FATAL_ERROR "StoRM (CudaPlugin) - Could not find Thrust! Check your CUDA installation.") - endif() - - include_directories(${CUDA_INCLUDE_DIRS}) - include_directories(${ADDITIONAL_INCLUDE_DIRS}) - - cuda_add_library(${STORM_CUDA_LIB_NAME} - ${STORM_CUDA_KERNEL_FILES} ${STORM_CUDA_HEADER_FILES} - ) - - message (STATUS "StoRM - Linking with CUDA") - list(APPEND STORM_LINK_LIBRARIES ${STORM_CUDA_LIB_NAME}) - include_directories("${PROJECT_SOURCE_DIR}/cuda/kernels/") -endif() ############################################################# ## diff --git a/resources/3rdparty/CMakeLists.txt b/resources/3rdparty/CMakeLists.txt index 88263eaad..5206c0526 100644 --- a/resources/3rdparty/CMakeLists.txt +++ b/resources/3rdparty/CMakeLists.txt @@ -1,11 +1,14 @@ add_custom_target(resources) add_custom_target(test-resources) +set(STORM_3RDPARTY_SOURCE_DIR ${PROJECT_SOURCE_DIR}/resources/3rdparty) +set(STORM_3RDPARTY_BINARY_DIR ${PROJECT_BINARY_DIR}/resources/3rdparty) + ExternalProject_Add( xercesc - SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/xercesc-3.1.2 - CONFIGURE_COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/xercesc-3.1.2/configure --prefix=${CMAKE_CURRENT_BINARY_DIR}/xercesc-3.1.2 --libdir=${CMAKE_CURRENT_BINARY_DIR}/xercesc-3.1.2/lib CC=${CMAKE_C_COMPILER} CXX=${CMAKE_CXX_COMPILER} CFLAGS=-O3 CXXFLAGS=-O3 - PREFIX ${CMAKE_CURRENT_BINARY_DIR}/xercesc-3.1.2 + SOURCE_DIR ${STORM_3RDPARTY_SOURCE_DIR}/xercesc-3.1.2 + CONFIGURE_COMMAND ${STORM_3RDPARTY_SOURCE_DIR}/xercesc-3.1.2/configure --prefix=${CMAKE_CURRENT_BINARY_DIR}/xercesc-3.1.2 --libdir=${CMAKE_CURRENT_BINARY_DIR}/xercesc-3.1.2/lib CC=${CMAKE_C_COMPILER} CXX=${CMAKE_CXX_COMPILER} CFLAGS=-O3 CXXFLAGS=-O3 + PREFIX ${STORM_3RDPARTY_BINARY_DIR}/xercesc-3.1.2 BUILD_COMMAND make BUILD_IN_SOURCE 0 LOG_CONFIGURE ON @@ -16,9 +19,9 @@ ExternalProject_Add( ExternalProject_Add( glpk DOWNLOAD_COMMAND "" - PREFIX ${CMAKE_CURRENT_BINARY_DIR}/glpk-4.57 - SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/glpk-4.57 - CONFIGURE_COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/glpk-4.57/configure --prefix=${CMAKE_CURRENT_BINARY_DIR}/glpk-4.57 --libdir=${CMAKE_CURRENT_BINARY_DIR}/glpk-4.57/lib CC=${CMAKE_C_COMPILER} + PREFIX ${STORM_3RDPARTY_BINARY_DIR}/glpk-4.57 + SOURCE_DIR ${STORM_3RDPARTY_SOURCE_DIR}/glpk-4.57 + CONFIGURE_COMMAND ${STORM_3RDPARTY_SOURCE_DIR}/glpk-4.57/configure --prefix=${STORM_3RDPARTY_BINARY_DIR}/glpk-4.57 --libdir=${CMAKE_CURRENT_BINARY_DIR}/glpk-4.57/lib CC=${CMAKE_C_COMPILER} BUILD_COMMAND make "CFLAGS=-O2 -w" INSTALL_COMMAND make install BUILD_IN_SOURCE 0 @@ -30,10 +33,10 @@ ExternalProject_Add( ExternalProject_Add( cudd3 DOWNLOAD_COMMAND "" - SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/cudd-3.0.0 - PREFIX ${CMAKE_CURRENT_BINARY_DIR}/cudd-3.0.0 + SOURCE_DIR ${STORM_3RDPARTY_SOURCE_DIR}/cudd-3.0.0 + PREFIX ${STORM_3RDPARTY_BINARY_DIR}/cudd-3.0.0 UPDATE_COMMAND autoreconf - CONFIGURE_COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/cudd-3.0.0/configure --enable-shared --enable-obj --prefix=${CMAKE_CURRENT_BINARY_DIR}/cudd-3.0.0 --libdir=${CMAKE_CURRENT_BINARY_DIR}/cudd-3.0.0/lib CC=${CMAKE_C_COMPILER} CXX=${CMAKE_CXX_COMPILER} + CONFIGURE_COMMAND ${STORM_3RDPARTY_SOURCE_DIR}/cudd-3.0.0/configure --enable-shared --enable-obj --prefix=${STORM_3RDPARTY_SOURCE_DIR}/cudd-3.0.0 --libdir=${STORM_3RDPARTY_SOURCE_DIR}/cudd-3.0.0/lib CC=${CMAKE_C_COMPILER} CXX=${CMAKE_CXX_COMPILER} BUILD_COMMAND make "CFLAGS=-O2 -w" INSTALL_COMMAND make install BUILD_IN_SOURCE 0 @@ -46,16 +49,16 @@ ExternalProject_Add( sylvan DOWNLOAD_COMMAND "" PREFIX "sylvan" - SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/sylvan + SOURCE_DIR ${STORM_3RDPARTY_SOURCE_DIR}/sylvan CMAKE_ARGS -DSYLVAN_BUILD_TEST=Off -DSYLVAN_BUILD_EXAMPLES=Off -DCMAKE_BUILD_TYPE=Release BINARY_DIR "${PROJECT_BINARY_DIR}/sylvan" INSTALL_COMMAND "" - INSTALL_DIR "${PROJECT_BINARY_DIR}/sylvan" + INSTALL_DIR "${STORM_3RDPARTY_BINARY_DIR}/sylvan" ) ExternalProject_Get_Property(sylvan source_dir) ExternalProject_Get_Property(sylvan binary_dir) -set(Sylvan_INCLUDE_DIR "${source_dir}/src" PARENT_SCOPE) -set(Sylvan_LIBRARY "${binary_dir}/src/libsylvan.a" PARENT_SCOPE) +set(Sylvan_INCLUDE_DIR "${source_dir}/src") +set(Sylvan_LIBRARY "${binary_dir}/src/libsylvan.a") ExternalProject_Add( googletest @@ -63,34 +66,555 @@ ExternalProject_Add( #SVN_REPOSITORY http://googletest.googlecode.com/svn/trunk/ #TIMEOUT 10 DOWNLOAD_COMMAND "" - SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/gtest-1.7.0" + SOURCE_DIR "${STORM_3RDPARTY_SOURCE_DIR}/gtest-1.7.0" # Force the same output paths for debug and release builds so that # we know in which place the binaries end up when using the Xcode generator - CMAKE_ARGS -Dgtest_force_shared_crt=ON -DCXX=${CMAKE_CXX_COMPILER} -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG:PATH=${CMAKE_CURRENT_BINARY_DIR}/gtest-1.7.0 -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE:PATH=${CMAKE_CURRENT_BINARY_DIR}/gtest-1.7.0 + CMAKE_ARGS -Dgtest_force_shared_crt=ON -DCXX=${CMAKE_CXX_COMPILER} -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG:PATH=${STORM_3RDPARTY_BINARY_DIR}/gtest-1.7.0 -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE:PATH=${STORM_3RDPARTY_BINARY_DIR}/gtest-1.7.0 # Disable install step INSTALL_COMMAND "" - BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/gtest-1.7.0" - INSTALL_DIR "${CMAKE_CURRENT_BINARY_DIR}/gtest-1.7.0" + BINARY_DIR "${STORM_3RDPARTY_BINARY_DIR}/gtest-1.7.0" + INSTALL_DIR "${STORM_3RDPARTY_BINARY_DIR}/gtest-1.7.0" # Wrap download, configure and build steps in a script to log output LOG_CONFIGURE ON LOG_BUILD ON) # Specify include dir ExternalProject_Get_Property(googletest source_dir) -set(GTEST_INCLUDE_DIR ${source_dir}/include PARENT_SCOPE) +set(GTEST_INCLUDE_DIR ${source_dir}/include) # Specify MainTest's link libraries ExternalProject_Get_Property(googletest binary_dir) -set(GTEST_LIBRARIES ${binary_dir}/libgtest.a ${binary_dir}/libgtest_main.a PARENT_SCOPE) +set(GTEST_LIBRARIES ${binary_dir}/libgtest.a ${binary_dir}/libgtest_main.a) ExternalProject_Add( l3pp GIT_REPOSITORY https://github.com/hbruintjes/l3pp.git GIT_TAG master - SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/l3pp + SOURCE_DIR ${STORM_3RDPARTY_SOURCE_DIR}/l3pp CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND "" LOG_INSTALL ON ) ExternalProject_Get_Property(l3pp source_dir) -set(l3pp_INCLUDE "${source_dir}/" PARENT_SCOPE) +set(l3pp_INCLUDE "${source_dir}/") +# +#ExternalProject_Add( +# carl +# GIT_REPOSITORY http://smtrat.github.io/carl +# GIT_TAG master +# SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/carl +# CMAKE_ARGS -DCXX=${CMAKE_CXX_COMPILER} +# LOG_CONFIGURE ON +# LOG_BUILD ON +#) + + +############################################################# +## +## l3pp +## +############################################################# + +# l3pp is set up as external project +message("${l3pp_INCLUDE}") +include_directories(${l3pp_INCLUDE}) +add_dependencies(resources l3pp) + +############################################################# +## +## gmm +## +############################################################# + +# Add the shipped version of GMM to the include pathes +set(GMMXX_INCLUDE_DIR "${PROJECT_SOURCE_DIR}/resources/3rdparty/gmm-5.0/include") +include_directories(${GMMXX_INCLUDE_DIR}) + +############################################################# +## +## Eigen +## +############################################################# + +# Add the shipped version of Eigen to the include pathes +set(EIGEN_INCLUDE_DIR "${PROJECT_SOURCE_DIR}/resources/3rdparty/eigen-3.3-beta1") +include_directories(${EIGEN_INCLUDE_DIR}) + +############################################################# +## +## gmp +## +############################################################# + +# GMP is optional (unless MathSAT is used, see below) +find_package(GMP QUIET) + +############################################################# +## +## Boost +## +############################################################# + +# Boost Option variables +set(Boost_USE_STATIC_LIBS ${USE_BOOST_STATIC_LIBRARIES}) +set(Boost_USE_MULTITHREADED ON) +set(Boost_USE_STATIC_RUNTIME OFF) + +find_package(Boost 1.56.0 QUIET REQUIRED) + +if ((NOT Boost_LIBRARY_DIRS) OR ("${Boost_LIBRARY_DIRS}" STREQUAL "")) + set(Boost_LIBRARY_DIRS "${Boost_INCLUDE_DIRS}/stage/lib") +endif () +link_directories(${Boost_LIBRARY_DIRS}) + +include_directories(${Boost_INCLUDE_DIRS}) +list(APPEND STORM_LINK_LIBRARIES ${Boost_LIBRARIES}) +message(STATUS "StoRM - Using Boost ${Boost_VERSION} (lib ${Boost_LIB_VERSION})") +#message(STATUS "StoRM - BOOST_INCLUDE_DIRS is ${Boost_INCLUDE_DIRS}") +#message(STATUS "StoRM - BOOST_LIBRARY_DIRS is ${Boost_LIBRARY_DIRS}") + +############################################################# +## +## ExprTk +## +############################################################# + +# Use the shipped version of ExprTK +message (STATUS "StoRM - Including ExprTk") +include_directories("${PROJECT_SOURCE_DIR}/resources/3rdparty/exprtk") + +############################################################# +## +## ModernJSON +## +############################################################# + +#use the shipped version of modernjson +message (STATUS "StoRM - Including ModernJSON") +include_directories("${PROJECT_SOURCE_DIR}/resources/3rdparty/modernjson/src/") + +############################################################# +## +## Z3 (optional) +## +############################################################# + +find_package(Z3 QUIET) + +# Z3 Defines +set(STORM_HAVE_Z3 ${Z3_FOUND}) + +if(Z3_FOUND) + message (STATUS "StoRM - Linking with Z3") + include_directories(${Z3_INCLUDE_DIRS}) + list(APPEND STORM_LINK_LIBRARIES ${Z3_LIBRARIES}) +endif(Z3_FOUND) + +############################################################# +## +## glpk +## +############################################################# + +find_package(GLPK QUIET) +if(GLPK_FOUND) + message (STATUS "StoRM - Using system version of GLPK") +else() + message (STATUS "StoRM - Using shipped version of GLPK") + set(GLPK_LIBRARIES ${CMAKE_BINARY_DIR}/resources/3rdparty/glpk-4.57/lib/libglpk${DYNAMIC_EXT}) + set(GLPK_INCLUDE_DIR ${CMAKE_BINARY_DIR}/resources/3rdparty/glpk-4.57/include) + set(GLPK_VERSION_STRING 4.57) + add_dependencies(resources glpk) +endif() + +# Since there is a shipped version, always use GLPK +set(STORM_HAVE_GLPK ON) +message (STATUS "StoRM - Linking with glpk ${GLPK_VERSION_STRING}") +include_directories(${GLPK_INCLUDE_DIR}) +list(APPEND STORM_LINK_LIBRARIES ${GLPK_LIBRARIES}) + +############################################################# +## +## Gurobi (optional) +## +############################################################# + +if (STORM_USE_GUROBI) + find_package(Gurobi QUIET REQUIRED) + set(STORM_HAVE_GUROBI ${GUROBI_FOUND}) + if (GUROBI_FOUND) + message (STATUS "StoRM - Linking with Gurobi") + include_directories(${GUROBI_INCLUDE_DIRS}) + list(APPEND STORM_LINK_LIBRARIES ${GUROBI_LIBRARY}) + #link_directories("${GUROBI_ROOT}/lib") + else() + #message(FATAL_ERROR "StoRM - Gurobi was requested, but not found!") + endif() +else() + set(STORM_HAVE_GUROBI OFF) +endif() + +############################################################# +## +## CUDD +## +############################################################# + +# Do not use system CUDD, StoRM has a modified version +set(CUDD_INCLUDE_DIR ${CMAKE_BINARY_DIR}/resources/3rdparty/cudd-3.0.0/include) +set(CUDD_SHARED_LIBRARY ${CMAKE_BINARY_DIR}/resources/3rdparty/cudd-3.0.0/lib/libcudd${DYNAMIC_EXT}) +set(CUDD_STATIC_LIBRARY ${CMAKE_BINARY_DIR}/resources/3rdparty/cudd-3.0.0/lib/libcudd${STATIC_EXT}) +set(CUDD_VERSION_STRING 3.0.0) +list(APPEND STORM_LINK_LIBRARIES ${CUDD_SHARED_LIBRARY}) +add_dependencies(resources cudd3) + +message(STATUS "StoRM - Linking with CUDD ${CUDD_VERSION_STRING}") +#message("StoRM - CUDD include dir: ${CUDD_INCLUDE_DIR}") +include_directories(${CUDD_INCLUDE_DIR}) + +############################################################# +## +## CLN +## +############################################################# + +find_package(CLN QUIET) + +if(CLN_FOUND) + set(STORM_HAVE_CLN ON) + message(STATUS "StoRM - Linking with CLN ${CLN_VERSION_STRING}") + include_directories("${CLN_INCLUDE_DIR}") + list(APPEND STORM_LINK_LIBRARIES ${CLN_LIBRARIES}) +else() + set(STORM_HAVE_CLN OFF) + if(NOT GMP_FOUND) + message(FATAL_ERROR "StoRM - Neither CLN nor GMP found") + endif() +endif() + +############################################################# +## +## carl +## +############################################################# + +set(STORM_HAVE_CARL OFF) +if(USE_CARL) + find_package(carl QUIET REQUIRED) + if(carl_FOUND) + set(STORM_HAVE_CARL ON) + message(STATUS "StoRM - Linking with carl ${carl_VERSION_STRING}") + include_directories("${carl_INCLUDE_DIR}") + list(APPEND STORM_LINK_LIBRARIES ${carl_LIBRARIES}) + else() + + # message(FATAL_ERROR "StoRM - CARL was requested but not found") + endif() +endif() + +############################################################# +## +## SMT-RAT +## +############################################################# + +# No find routine yet +#find_package(smtrat QUIET) +# Not yet supported +set(smtrat_FOUND OFF) +set(STORM_HAVE_SMTRAT OFF) +if(smtrat_FOUND) + set(STORM_HAVE_SMTRAT ON) + message(STATUS "StoRM - Linking with smtrat.") + include_directories("${smtrat_INCLUDE_DIR}") + list(APPEND STORM_LINK_LIBRARIES ${smtrat_LIBRARIES}) +endif() + +############################################################# +## +## GiNaC +## +############################################################# + +find_package(GiNaC QUIET) + +if(GINAC_FOUND) + set(STORM_HAVE_GINAC ON) + message(STATUS "StoRM - Linking with GiNaC ${GINAC_VERSION_STRING}") + # Right now only link with GiNaC for carl + #include_directories("${GINAC_INCLUDE_DIR}") + list(APPEND STORM_LINK_LIBRARIES ${GINAC_LIBRARIES}) +else() + set(STORM_HAVE_GINAC OFF) + #TODO: Check if CARL actually requires the use of GiNaC +endif() + +############################################################# +## +## MathSAT (optional) +## +############################################################# + +if ("${MSAT_ROOT}" STREQUAL "") + set(ENABLE_MSAT OFF) +else() + set(ENABLE_MSAT ON) +endif() + +# MathSAT Defines +set(STORM_HAVE_MSAT ${ENABLE_MSAT}) +if (ENABLE_MSAT) + message (STATUS "StoRM - Linking with MathSAT") + link_directories("${MSAT_ROOT}/lib") + include_directories("${MSAT_ROOT}/include") + list(APPEND STORM_LINK_LIBRARIES "mathsat") + if(GMP_FOUND) + include_directories("${GMP_INCLUDE_DIR}") + list(APPEND STORM_LINK_LIBRARIES "gmp") + elseif(MPIR_FOUND) + include_directories("${GMP_INCLUDE_DIR}") + list(APPEND STORM_LINK_LIBRARIES "mpir" "mpirxx") + else(GMP_FOUND) + message(FATAL_ERROR "GMP is required for MathSAT, but was not found!") + endif(GMP_FOUND) +endif(ENABLE_MSAT) + +############################################################# +## +## Xerces +## +############################################################# + +if(USE_XERCES) + find_package(Xerces QUIET REQUIRED) + if(XERCES_FOUND) + message(STATUS "StoRM - Use system version of xerces") + else() + message(STATUS "StoRM - Use shipped version of xerces") + set(XERCES_ROOT ${CMAKE_BINARY_DIR}/resources/3rdparty/xercesc-3.1.2) + set(XERCESC_INCLUDE ${XERCES_ROOT}/include) + set(XERCES_LIBRARY_PATH ${XERCES_ROOT}/lib) + set(XERCESC_LIBRARIES ${XERCES_LIBRARY_PATH}/libxerces-c.a) + + add_dependencies(resources xercesc) + endif() + + message (STATUS "StoRM - Linking with xercesc") + set(STORM_HAVE_XERCES ON) + include_directories(${XERCESC_INCLUDE}) + list(APPEND STORM_LINK_LIBRARIES ${XERCESC_LIBRARIES}) +endif(USE_XERCES) + +############################################################# +## +## Sylvan +## +############################################################# + +message(STATUS "StoRM - Using shipped version of sylvan") +message(STATUS "StoRM - Linking with sylvan") +include_directories("${Sylvan_INCLUDE_DIR}") +list(APPEND STORM_LINK_LIBRARIES ${Sylvan_LIBRARY}) +add_dependencies(resources sylvan) + +if(${OPERATING_SYSTEM} MATCHES "Linux") + find_package(Hwloc QUIET REQUIRED) + if(Hwloc_FOUND) + message(STATUS "StoRM - Linking with hwloc ${Hwloc_VERSION}") + list(APPEND STORM_LINK_LIBRARIES ${Hwloc_LIBRARIES}) + else() + message(FATAL_ERROR "HWLOC is required but was not found.") + endif() +endif() + +############################################################# +## +## Google Test gtest +## +############################################################# + +add_dependencies(test-resources googletest) +list(APPEND STORM_TEST_LINK_LIBRARIES ${GTEST_LIBRARIES}) + +############################################################# +## +## Intel Threading Building Blocks (optional) +## +############################################################# + +set(STORM_HAVE_INTELTBB OFF) +if (STORM_USE_INTELTBB) + # Point to shipped TBB directory + set(TBB_INSTALL_DIR "${PROJECT_SOURCE_DIR}/resources/3rdparty/tbb42_20140122_merged-win-lin-mac") + find_package(TBB QUIET REQUIRED) + + if (TBB_FOUND) + message(STATUS "StoRM - Found Intel TBB with interface version ${TBB_INTERFACE_VERSION}.") + message(STATUS "StoRM - Linking with Intel TBB in ${TBB_LIBRARY_DIRS}.") + set(STORM_HAVE_INTELTBB ON) + link_directories(${TBB_LIBRARY_DIRS}) + include_directories(${TBB_INCLUDE_DIRS}) + list(APPEND STORM_LINK_LIBRARIES tbb tbbmalloc) + else(TBB_FOUND) + message(FATAL_ERROR "StoRM - TBB was requested, but not found!") + endif(TBB_FOUND) +endif(STORM_USE_INTELTBB) + +############################################################# +## +## Threads +## +############################################################# + +find_package(Threads QUIET REQUIRED) +if (NOT Threads_FOUND) + message(FATAL_ERROR "StoRM - Threads was requested, but not found!") +endif() +include_directories(${THREADS_INCLUDE_DIRS}) +list(APPEND STORM_LINK_LIBRARIES ${CMAKE_THREAD_LIBS_INIT}) +if (STORM_USE_COTIRE) + target_link_libraries(storm_unity ${CMAKE_THREAD_LIBS_INIT}) +endif(STORM_USE_COTIRE) + +if (MSVC) + # Add the DebugHelper DLL + set(CMAKE_CXX_STANDARD_LIBRARIES "${CMAKE_CXX_STANDARD_LIBRARIES} Dbghelp.lib") + target_link_libraries(storm "Dbghelp.lib") +endif(MSVC) + +############################################################# +## +## CUDA Library generation +## +############################################################# + + +if ("${CUDA_ROOT}" STREQUAL "") + set(ENABLE_CUDA OFF) +else() + set(ENABLE_CUDA ON) +endif() + +# CUDA Defines +if (ENABLE_CUDA) + set(STORM_CPP_CUDA_DEF "define") +else() + set(STORM_CPP_CUDA_DEF "undef") +endif() + + +# CUDA Defines +set(STORM_CPP_CUDAFORSTORM_DEF "undef") + + +if(ENABLE_CUDA) + + # Test for type alignment + try_run(STORM_CUDA_RUN_RESULT_TYPEALIGNMENT STORM_CUDA_COMPILE_RESULT_TYPEALIGNMENT + ${PROJECT_BINARY_DIR} "${PROJECT_SOURCE_DIR}/cuda/CMakeAlignmentCheck.cpp" + COMPILE_OUTPUT_VARIABLE OUTPUT_TEST_VAR + ) + if(NOT STORM_CUDA_COMPILE_RESULT_TYPEALIGNMENT) + message(FATAL_ERROR "StoRM (CudaPlugin) - Could not test type alignment, there was an Error while compiling the file ${PROJECT_SOURCE_DIR}/cuda/CMakeAlignmentCheck.cpp: ${OUTPUT_TEST_VAR}") + elseif(STORM_CUDA_RUN_RESULT_TYPEALIGNMENT EQUAL 0) + message(STATUS "StoRM (CudaPlugin) - Result of Type Alignment Check: OK.") + else() + message(FATAL_ERROR "StoRM (CudaPlugin) - Result of Type Alignment Check: FAILED (Code ${STORM_CUDA_RUN_RESULT_TYPEALIGNMENT})") + endif() + + # Test for Float 64bit Alignment + try_run(STORM_CUDA_RUN_RESULT_FLOATALIGNMENT STORM_CUDA_COMPILE_RESULT_FLOATALIGNMENT + ${PROJECT_BINARY_DIR} "${PROJECT_SOURCE_DIR}/cuda/CMakeFloatAlignmentCheck.cpp" + COMPILE_OUTPUT_VARIABLE OUTPUT_TEST_VAR + ) + if(NOT STORM_CUDA_COMPILE_RESULT_FLOATALIGNMENT) + message(FATAL_ERROR "StoRM (CudaPlugin) - Could not test float type alignment, there was an Error while compiling the file ${PROJECT_SOURCE_DIR}/cuda/CMakeFloatAlignmentCheck.cpp: ${OUTPUT_TEST_VAR}") + elseif(STORM_CUDA_RUN_RESULT_FLOATALIGNMENT EQUAL 2) + message(STATUS "StoRM (CudaPlugin) - Result of Float Type Alignment Check: 64bit alignment active.") + set(STORM_CUDAPLUGIN_FLOAT_64BIT_ALIGN_DEF "define") + elseif(STORM_CUDA_RUN_RESULT_FLOATALIGNMENT EQUAL 3) + message(STATUS "StoRM (CudaPlugin) - Result of Float Type Alignment Check: 64bit alignment disabled.") + set(STORM_CUDAPLUGIN_FLOAT_64BIT_ALIGN_DEF "undef") + else() + message(FATAL_ERROR "StoRM (CudaPlugin) - Result of Float Type Alignment Check: FAILED (Code ${STORM_CUDA_RUN_RESULT_FLOATALIGNMENT})") + endif() + # + # Make a version file containing the current version from git. + # + include(GetGitRevisionDescription) + git_describe_checkout(STORM_GIT_VERSION_STRING) + # Parse the git Tag into variables + string(REGEX REPLACE "^([0-9]+)\\..*" "\\1" STORM_CUDAPLUGIN_VERSION_MAJOR "${STORM_GIT_VERSION_STRING}") + string(REGEX REPLACE "^[0-9]+\\.([0-9]+).*" "\\1" STORM_CUDAPLUGIN_VERSION_MINOR "${STORM_GIT_VERSION_STRING}") + string(REGEX REPLACE "^[0-9]+\\.[0-9]+\\.([0-9]+).*" "\\1" STORM_CUDAPLUGIN_VERSION_PATCH "${STORM_GIT_VERSION_STRING}") + string(REGEX REPLACE "^[0-9]+\\.[0-9]+\\.[0-9]+\\-([0-9]+)\\-.*" "\\1" STORM_CUDAPLUGIN_VERSION_COMMITS_AHEAD "${STORM_GIT_VERSION_STRING}") + string(REGEX REPLACE "^[0-9]+\\.[0-9]+\\.[0-9]+\\-[0-9]+\\-([a-z0-9]+).*" "\\1" STORM_CUDAPLUGIN_VERSION_HASH "${STORM_GIT_VERSION_STRING}") + string(REGEX REPLACE "^[0-9]+\\.[0-9]+\\.[0-9]+\\-[0-9]+\\-[a-z0-9]+\\-(.*)" "\\1" STORM_CUDAPLUGIN_VERSION_APPENDIX "${STORM_GIT_VERSION_STRING}") + if ("${STORM_CUDAPLUGIN_VERSION_APPENDIX}" MATCHES "^.*dirty.*$") + set(STORM_CUDAPLUGIN_VERSION_DIRTY 1) + else() + set(STORM_CUDAPLUGIN_VERSION_DIRTY 0) + endif() + message(STATUS "StoRM (CudaPlugin) - Version information: ${STORM_CUDAPLUGIN_VERSION_MAJOR}.${STORM_CUDAPLUGIN_VERSION_MINOR}.${STORM_CUDAPLUGIN_VERSION_PATCH} (${STORM_CUDAPLUGIN_VERSION_COMMITS_AHEAD} commits ahead of Tag) build from ${STORM_CUDAPLUGIN_VERSION_HASH} (Dirty: ${STORM_CUDAPLUGIN_VERSION_DIRTY})") + + + # Configure a header file to pass some of the CMake settings to the source code + configure_file ( + "${PROJECT_SOURCE_DIR}/cuda/storm-cudaplugin-config.h.in" + "${PROJECT_BINARY_DIR}/include/storm-cudaplugin-config.h" + ) + + #create library + find_package(CUDA REQUIRED) + set(CUSP_INCLUDE_DIRS "${PROJECT_SOURCE_DIR}/resources/3rdparty/cusplibrary") + find_package(Cusp REQUIRED) + find_package(Thrust REQUIRED) + + set(STORM_CUDA_LIB_NAME "storm-cuda") + + file(GLOB_RECURSE STORM_CUDA_KERNEL_FILES ${PROJECT_SOURCE_DIR}/cuda/kernels/*.cu) + file(GLOB_RECURSE STORM_CUDA_HEADER_FILES ${PROJECT_SOURCE_DIR}/cuda/kernels/*.h) + + source_group(kernels FILES ${STORM_CUDA_KERNEL_FILES} ${STORM_CUDA_HEADER_FILES}) + include_directories(${PROJECT_SOURCE_DIR}/cuda/kernels/) + + #set(CUDA_PROPAGATE_HOST_FLAGS OFF) + set(CUDA_NVCC_FLAGS "-arch=sm_30") + + ############################################################# + ## + ## CUSP + ## + ############################################################# + if(CUSP_FOUND) + include_directories(${CUSP_INCLUDE_DIR}) + cuda_include_directories(${CUSP_INCLUDE_DIR}) + message(STATUS "StoRM (CudaPlugin) - Found CUSP Version ${CUSP_VERSION} in location ${CUSP_INCLUDE_DIR}") + else() + message(FATAL_ERROR "StoRM (CudaPlugin) - Could not find CUSP!") + endif() + + ############################################################# + ## + ## Thrust + ## + ############################################################# + if(THRUST_FOUND) + include_directories(${THRUST_INCLUDE_DIR}) + cuda_include_directories(${THRUST_INCLUDE_DIR}) + message(STATUS "StoRM (CudaPlugin) - Found Thrust Version ${THRUST_VERSION} in location ${THRUST_INCLUDE_DIR}") + else() + message(FATAL_ERROR "StoRM (CudaPlugin) - Could not find Thrust! Check your CUDA installation.") + endif() + + include_directories(${CUDA_INCLUDE_DIRS}) + include_directories(${ADDITIONAL_INCLUDE_DIRS}) + + cuda_add_library(${STORM_CUDA_LIB_NAME} + ${STORM_CUDA_KERNEL_FILES} ${STORM_CUDA_HEADER_FILES} + ) + + message (STATUS "StoRM - Linking with CUDA") + list(APPEND STORM_LINK_LIBRARIES ${STORM_CUDA_LIB_NAME}) + include_directories("${PROJECT_SOURCE_DIR}/cuda/kernels/") +endif() \ No newline at end of file