diff --git a/AMDiS/cmake/CMakeLists.txt b/AMDiS/cmake/CMakeLists.txt index 43444ccc422af3c4b3b3ac15c5700b3afb87cbf0..b2e14a996fe436b1c0c2701b0cc4abbea2fb6db8 100644 --- a/AMDiS/cmake/CMakeLists.txt +++ b/AMDiS/cmake/CMakeLists.txt @@ -11,6 +11,11 @@ endif() SET(LIB_DIR ${AMDIS_SOURCE_DIR}/lib) SET(SOURCE_DIR ${AMDIS_SOURCE_DIR}/src) +#define the build type, empty can be everything and nothing +if(CMAKE_BUILD_TYPE STREQUAL "") + set(CMAKE_BUILD_TYPE "Release") +endif() + #TODO: use the cmake build type SET(MTL_INCLUDE_DIR ${LIB_DIR}/mtl4/ CACHE PATH "mtl4 directory") @@ -34,10 +39,6 @@ if(NOT AMDIS_MINOR) endif() list(APPEND COMPILEFLAGS "-DAMDIS_VERSION=${CurrentRevision}") -#define the build type, empty can be everything and nothing -if(CMAKE_BUILD_TYPE STREQUAL "") - set(CMAKE_BUILD_TYPE "Release") -endif() if(CMAKE_CXX_COMPILER MATCHES ".*icpc") Message("Compiler: Intel") diff --git a/AMDiS/cmake3/AMDISConfig.cmake.in b/AMDiS/cmake3/AMDISConfig.cmake.in index 6d5bbb2b222acaac1b3efb4eb29a19433a5bb785..d007f410ee6cfb7ecb3d9329bf9b5d77481324e7 100644 --- a/AMDiS/cmake3/AMDISConfig.cmake.in +++ b/AMDiS/cmake3/AMDISConfig.cmake.in @@ -34,6 +34,7 @@ set(AMDIS_NEED_REINIT @ENABLE_REINIT@) set(AMDIS_NEED_COMPOSITE_FEM @ENABLE_COMPOSITE_FEM@) set(BUILD_SHARED_LIBS @BUILD_SHARED_LIBS@) +set(CMAKE_BUILD_TYPE @CMAKE_BUILD_TYPE@) add_library(amdis_base INTERFACE) add_library(AMDiS ALIAS amdis_base) @@ -43,17 +44,11 @@ target_compile_definitions(amdis_base INTERFACE $<$>:DEBUG=1>) if (AMDIS_NEED_CXX11) - target_compile_features(amdis_base INTERFACE - cxx_alias_templates - cxx_auto_type - cxx_lambdas - cxx_override - cxx_range_for - cxx_static_assert - cxx_variadic_templates) - target_compile_definitions(amdis_base INTERFACE HAS_CXX11=1) + set(CMAKE_CXX_STANDARD 11) + set(CMAKE_CXX_STANDARD_REQUIRED ON) + target_compile_definitions(amdis_base INTERFACE HAS_CXX11=1) else () - target_compile_definitions(amdis_base INTERFACE HAS_CXX11=0) + target_compile_definitions(amdis_base INTERFACE HAS_CXX11=0) endif (AMDIS_NEED_CXX11) @@ -171,7 +166,7 @@ endif (AMDIS_NEED_REINIT) if (AMDIS_NEED_COMPOSITE_FEM) find_library(_COMPOSITE_FEM_LIB amdis_compositeFEM PATHS ${AMDIS_DIR}/../../lib/amdis/) if (_COMPOSITE_FEM_LIB) - target_include_directories(amdis_base INTERFACE ${Boost_INCLUDE_DIR}/compositeFEM) + target_include_directories(amdis_base INTERFACE ${AMDIS_INCLUDE_DIR}/compositeFEM) target_link_libraries(amdis_base INTERFACE ${_COMPOSITE_FEM_LIB}) else () message(ERROR "CompositeFEM library not found") @@ -184,7 +179,7 @@ endif (AMDIS_NEED_COMPOSITE_FEM) # -------------------- find_library(_MUPARSER_LIB muparser PATHS ${AMDIS_DIR}/../../lib/amdis/) if (_MUPARSER_LIB) - target_include_directories(amdis_base INTERFACE ${Boost_INCLUDE_DIR}/muparser) + target_include_directories(amdis_base INTERFACE ${AMDIS_INCLUDE_DIR}/muparser) target_link_libraries(amdis_base INTERFACE ${_MUPARSER_LIB}) else () message(ERROR "MuParser library not found") diff --git a/AMDiS/cmake3/CMakeLists.txt b/AMDiS/cmake3/CMakeLists.txt index c988564ead10e37f323f391a94d01f83f98eef3c..858c75e9cff0850bf13f4a3c47a43a746e09f192 100644 --- a/AMDiS/cmake3/CMakeLists.txt +++ b/AMDiS/cmake3/CMakeLists.txt @@ -7,30 +7,44 @@ set(BASE_DIR ${AMDiS_SOURCE_DIR}) set(SOURCE_DIR ${BASE_DIR}/src) list(APPEND CMAKE_MODULE_PATH ${BASE_DIR}/cmake3) -option(ENABLE_CXX11 "Enable C++11 compiler features" false) +if (NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE "Release" CACHE STRING "") +endif () + +# ------------------------------------------------------------------------------ + +#some options to control the build process option(ENABLE_PARALLEL_DOMAIN "Use parallel domain decomposition" false) -option(ENABLE_UMFPACK "Enable support for the UMFPACK solver" false) -option(ENABLE_COMPRESSION "Use output compression for vtu and arh files" false) +option(ENABLE_UMFPACK "Enable support for the UMFPACK solver" true) option(ENABLE_EXTENSIONS "Use extensions for AMDiS" false) # enable/disable some more features +option(ENABLE_COMPRESSION "Use output compression for vtu and arh files" true) +mark_as_advanced(ENABLE_COMPRESSION) + option(ENABLE_REINIT "Compile reinit library" true) mark_as_advanced(ENABLE_REINIT) + option(ENABLE_COMPOSITE_FEM "Compile compositeFEM library" true) mark_as_advanced(ENABLE_COMPOSITE_FEM) -option(BUILD_SHARED_LIBS "Build all libraries as shared or static, default: shared" ON) +option(BUILD_SHARED_LIBS "Build all libraries as shared or static, default: shared" true) +mark_as_advanced(BUILD_SHARED_LIBS) + if (MSVC) # if (${CMAKE_VERSION} VERSION_LESS "3.4") - set(BUILD_SHARED_LIBS OFF) + set(BUILD_SHARED_LIBS false) mark_as_advanced(BUILD_SHARED_LIBS) - message(WARNING "Currently we can only build static libraries wiht Visual Studio") + message(WARNING "Currently we can only build static libraries with Visual Studio") # elseif (BUILD_SHARED_LIBS) # set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS true) # set(MSVC_SHARED_LIBS true) # endif () endif (MSVC) +# ------------------------------------------------------------------------------ + +# define an interface-library for flags and compile-definitions add_library(amdis_base INTERFACE) add_library(AMDiS::base ALIAS amdis_base) @@ -38,16 +52,17 @@ target_include_directories(amdis_base INTERFACE ${SOURCE_DIR}) target_compile_definitions(amdis_base INTERFACE $<$:DEBUG=0> $<$>:DEBUG=1>) - + +include(test_compile_features) +test_compile_features(ENABLE_CXX11 amdis_base INTERFACE + cxx_alias_templates + cxx_auto_type + cxx_lambdas + cxx_override + cxx_range_for + cxx_static_assert + cxx_variadic_templates) if (ENABLE_CXX11) - target_compile_features(amdis_base INTERFACE - cxx_alias_templates - cxx_auto_type - cxx_lambdas - cxx_override - cxx_range_for - cxx_static_assert - cxx_variadic_templates) target_compile_definitions(amdis_base INTERFACE HAS_CXX11=1) else () target_compile_definitions(amdis_base INTERFACE HAS_CXX11=0) @@ -58,6 +73,8 @@ endif (ENABLE_CXX11) include(find_mtl4) # -> target mtl4 install(FILES ${BASE_DIR}/cmake3/find_mtl4.cmake DESTINATION share/amdis/) +include(find_umfpack) + include(find_boost) # -> target boost install(FILES ${BASE_DIR}/cmake3/find_boost.cmake DESTINATION share/amdis/) @@ -186,7 +203,7 @@ add_library(amdis ${SOURCE_DIR}/time/RosenbrockMethod.cc ${SOURCE_DIR}/time/RosenbrockStationary.cc ) - + add_library(amdis_debug INTERFACE) target_sources(amdis_debug INTERFACE ${SOURCE_DIR}/Debug.cc @@ -194,7 +211,13 @@ target_sources(amdis_debug INTERFACE ${SOURCE_DIR}/GlobalElementNumbering.cc # not used by any other class ${SOURCE_DIR}/ProblemStatDbg.cc ) - + +include(amdis_parallel) # adds sources to amdis +include(amdis_extensions) # -> target AMDiS::extensions +include(muparser) # -> target muparser + +# ------------------------------------------------------------------------------ + if (ENABLE_COMPRESSION) target_compile_definitions(amdis PRIVATE HAVE_COMPRESSION=1) endif (ENABLE_COMPRESSION) @@ -202,8 +225,6 @@ endif (ENABLE_COMPRESSION) if (ENABLE_UMFPACK) target_compile_definitions(amdis PRIVATE HAVE_UMFPACK=1) endif (ENABLE_UMFPACK) - -include(amdis_parallel) # adds sources to amdis if (ENABLE_REINIT) include(amdis_reinit) # -> target AMDiS::reinit @@ -213,17 +234,15 @@ if (ENABLE_COMPOSITE_FEM) include(amdis_compositeFEM) # -> target AMDiS::compositeFEM endif (ENABLE_COMPOSITE_FEM) -include(amdis_extensions) # -> target AMDiS::extensions -include(muparser) # -> target muparser - +# ------------------------------------------------------------------------------ if (MSVC) - target_compile_definitions(amdis PRIVATE - _SCL_SECURE_NO_WARNINGS + target_compile_definitions(amdis PRIVATE + _SCL_SECURE_NO_WARNINGS _CRT_SECURE_NO_WARNINGS) endif (MSVC) -target_link_libraries(amdis AMDiS::base muparser +target_link_libraries(amdis AMDiS::base muparser $<$:amdis_debug>) # specify how to install this target: diff --git a/AMDiS/cmake3/amdis_extensions.cmake b/AMDiS/cmake3/amdis_extensions.cmake index 0cd47fcd819d25627a8667241d3e905a445b11f3..a6efc90b11bc5be6f0138ec7514789e5b576b070 100644 --- a/AMDiS/cmake3/amdis_extensions.cmake +++ b/AMDiS/cmake3/amdis_extensions.cmake @@ -1,6 +1,7 @@ if (ENABLE_EXTENSIONS) option(ENABLE_BASE_PROBLEMS "Use base_problems" true) + mark_as_advanced(ENABLE_BASE_PROBLEMS) find_path(EXTENSIONS_DIR NAMES Helpers.h HINTS ${BASE_DIR}/../extensions diff --git a/AMDiS/cmake3/dummy.cc b/AMDiS/cmake3/dummy.cc new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/AMDiS/cmake3/find_mtl4.cmake b/AMDiS/cmake3/find_mtl4.cmake index f273dc1a66fdfcda99b772d636cc63d45e012102..868833a4c01f71b61a3c552c9a4422798ac157fc 100644 --- a/AMDiS/cmake3/find_mtl4.cmake +++ b/AMDiS/cmake3/find_mtl4.cmake @@ -6,20 +6,21 @@ else () target_include_directories(mtl4 INTERFACE ${BASE_DIR}/lib/mtl4) endif (IS_AMDISCONFIG) -if (ENABLE_CXX11) - target_compile_features(mtl4 INTERFACE - cxx_rvalue_references - cxx_auto_type - cxx_range_for - cxx_generalized_initializers - cxx_static_assert - cxx_defaulted_functions) - +include(test_compile_features) +test_compile_features(MTL_ENABLE_CXX11 mtl4 INTERFACE + cxx_rvalue_references + cxx_auto_type + cxx_range_for + cxx_generalized_initializers + cxx_static_assert + cxx_defaulted_functions) + +if (MTL_ENABLE_CXX11) set (CXX_ELEVEN_FEATURE_LIST "MOVE" "AUTO" "RANGEDFOR" "INITLIST" "STATICASSERT" "DEFAULTIMPL") foreach (feature ${CXX_ELEVEN_FEATURE_LIST}) target_compile_definitions(mtl4 INTERFACE MTL_WITH_${feature}) endforeach () -endif (ENABLE_CXX11) +endif (MTL_ENABLE_CXX11) if (ENABLE_OPENMP) @@ -34,8 +35,6 @@ endif (ENABLE_OPENMP) if (NOT IS_AMDISCONFIG) - include(find_umfpack) - # specify how to install this target: # ----------------------------------- install(DIRECTORY ${BASE_DIR}/lib/mtl4/ diff --git a/AMDiS/cmake3/find_umfpack.cmake b/AMDiS/cmake3/find_umfpack.cmake index be041474c1137c1c9cf8f32212471ca64b9ad2cc..138f171b52a099e3585390e7047e3912b2091a21 100644 --- a/AMDiS/cmake3/find_umfpack.cmake +++ b/AMDiS/cmake3/find_umfpack.cmake @@ -10,6 +10,7 @@ if (ENABLE_UMFPACK OR AMDIS_NEED_UMFPACK) # try to use a cmake-package of suitesparse find_package(SuiteSparse QUIET HINTS ${AMDIS_SuiteSparse_DIR}) if (SuiteSparse_FOUND) + message(STATUS "Found SuiteSparse CMake-library") include(${USE_SuiteSparse}) target_link_libraries(amdis_base INTERFACE ${SuiteSparse_LIBRARIES}) target_include_directories(amdis_base INTERFACE ${SuiteSparse_INCLUDE_DIR} ${SuiteSparse_METIS_INCLUDE_DIR}) diff --git a/AMDiS/cmake3/test_compile_features.cmake b/AMDiS/cmake3/test_compile_features.cmake new file mode 100644 index 0000000000000000000000000000000000000000..cf92edf83977ccbfc78bdbe7de348074decf7592 --- /dev/null +++ b/AMDiS/cmake3/test_compile_features.cmake @@ -0,0 +1,41 @@ + +macro(test_compile_features RESULT_VAR TARGET SCOPE) # feature1 feature2 feature3 ...) + set(_FEATURES "") + foreach(FEATURE ${ARGN}) + set(_FEATURES "${_FEATURES} ${FEATURE}") + endforeach() + + # test only of variable RESULT_VAR not yet set manually or by a + # previous call to this macro + if (DEFINED ${RESULT_VAR}) + return () + endif () + + set(_DIR ${BASE_DIR}/cmake3/tmp) + + message(STATUS "Test for cxx11 features for target ${TARGET}") + execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${_DIR}) + file(WRITE ${_DIR}/CMakeLists.txt " + cmake_minimum_required(VERSION 3.1 FATAL_ERROR) + project(TestCxx LANGUAGES CXX) + add_library(test_cxx ${BASE_DIR}/cmake3/dummy.cc) + target_compile_features(test_cxx PRIVATE ${_FEATURES})") + + execute_process(COMMAND ${CMAKE_COMMAND} ${_DIR} + WORKING_DIRECTORY ${_DIR} + RESULT_VARIABLE _RES_VAR OUTPUT_QUIET) + + execute_process(COMMAND ${CMAKE_COMMAND} -E remove_directory ${_DIR}) + + if ("${_RES_VAR}" STREQUAL "0") + set(${RESULT_VAR} true CACHE BOOL "Enable C++11 compiler features") + target_compile_features(${TARGET} ${SCOPE} ${ARGN}) + else () + set(${RESULT_VAR} false CACHE BOOL "Enable C++11 compiler features") + endif () + mark_as_advanced(${RESULT_VAR}) + + unset(_RES_VAR) + unset(_DIR) + unset(_FEATURES) +endmacro(test_compile_features) \ No newline at end of file