diff --git a/AMDiS/cmake/enable_cxx11.cmake b/AMDiS/cmake/enable_cxx11.cmake index f408ab60702505770fb77743424d98c30494351a..465d9f2660296b82e2ed8534d5ee5eaeac51e653 100644 --- a/AMDiS/cmake/enable_cxx11.cmake +++ b/AMDiS/cmake/enable_cxx11.cmake @@ -3,35 +3,23 @@ include(CheckCXXSourceCompiles) include(CheckIncludeFileCXX) if (ENABLE_CXX11) - check_cxx_compiler_flag("-std=c++11" COMPILER_SUPPORTS_CXX11) + check_cxx_compiler_flag("-std=c++11" COMPILER_SUPPORTS_CXX11_FLAG) - if (NOT COMPILER_SUPPORTS_CXX11) + set(CXX11_CODE "#include <tuple>\\n#include <array>\\ntemplate<class... T> using std::tuple<T...>;int main(){decltype(1) vec[]={1,2,3}; for(auto&& x:vec);}") + + if (COMPILER_SUPPORTS_CXX11_FLAG) set(CMAKE_REQUIRED_FLAGS "-std=c++11") - check_cxx_source_compiles("int main(){decltype(1) vec[]={1,2,3}; for(auto&& x:vec);}" CXX_COMPILES_WITH_CXX11) + check_cxx_source_compiles("${CXX11_CODE}" CXX11_COMPILES_WITH_CXX11_FLAG) set(CMAKE_REQUIRED_FLAGS "") endif () - if (COMPILER_SUPPORTS_CXX11 OR CXX_COMPILES_WITH_CXX11) + if (COMPILER_SUPPORTS_CXX11_FLAG AND CXX11_COMPILES_WITH_CXX11_FLAG) add_definitions("-std=c++11") else () - check_cxx_compiler_flag("-std=c++0x" COMPILER_SUPPORTS_CXX0X) - if (NOT COMPILER_SUPPORTS_CXX0X) - set(CMAKE_REQUIRED_FLAGS "-std=c++0x") - check_cxx_source_compiles("int main(){decltype(1) vec[]={1,2,3}; for(auto&& x:vec);}" CXX_COMPILES_WITH_CXX0X) - set(CMAKE_REQUIRED_FLAGS "") - endif () - - if (COMPILER_SUPPORTS_CXX0X OR CXX_COMPILES_WITH_CXX0X) - add_definitions("-std=c++0x") - else () - check_cxx_source_compiles("int main(){decltype(1) vec[]={1,2,3}; for(auto&& x:vec);}" CXX11_COMPILES) - check_include_file_cxx("array" CXX11_INCLUDES) + check_cxx_source_compiles("${CXX11_CODE}" CXX11_COMPILES) - if (CXX11_COMPILES AND CXX11_INCLUDES) - set(${RESULT_VAR} true CACHE BOOL "Enable C++11 compiler features") - else () - message (FATAL_ERROR "Compiler does not support C++11.") - endif () + if (NOT CXX11_COMPILES) + message (FATAL_ERROR "Compiler does not support C++11.") endif () endif () diff --git a/AMDiS/cmake3/AMDISConfig.cmake.in b/AMDiS/cmake3/AMDISConfig.cmake.in index 373183764e0a686288c8155b6a28f6437c0c5279..8636d5d1099877970e01a3f42ff7f72104a26ac8 100644 --- a/AMDiS/cmake3/AMDISConfig.cmake.in +++ b/AMDiS/cmake3/AMDISConfig.cmake.in @@ -14,8 +14,8 @@ # target_link_libraries(yourTarget AMDiS) # -if (${CMAKE_VERSION} VERSION_LESS "3.0") - message(FATAL_ERROR "The Configuration file was created for CMake version >= 3.0") +if (${CMAKE_VERSION} VERSION_LESS "3.2") + message(FATAL_ERROR "The Configuration file was created for CMake version >= 3.2") endif () list(APPEND CMAKE_MODULE_PATH ${AMDIS_DIR}) @@ -39,13 +39,11 @@ set(CMAKE_BUILD_TYPE @CMAKE_BUILD_TYPE@) add_library(amdis_base INTERFACE) add_library(AMDiS ALIAS amdis_base) -target_compile_definitions(amdis_base INTERFACE - $<$<CONFIG:Release>:DEBUG=0> - $<$<NOT:$<CONFIG:Release>>:DEBUG=1>) +target_compile_definitions(amdis_base INTERFACE) if (AMDIS_NEED_CXX11) - set(CMAKE_CXX_STANDARD 11) - set(CMAKE_CXX_STANDARD_REQUIRED ON) + include(test_compile_features) + target_enable_cxx11(AMDIS_NEED_CXX11 amdis_base INTERFACE) target_compile_definitions(amdis_base INTERFACE HAS_CXX11=1) else () target_compile_definitions(amdis_base INTERFACE HAS_CXX11=0) @@ -220,8 +218,11 @@ endif () get_target_property(AMDIS_INCLUDE_DIRS AMDiS INTERFACE_INCLUDE_DIRECTORIES) get_target_property(AMDIS_LIBRARIES AMDiS INTERFACE_LINK_LIBRARIES) get_target_property(AMDIS_COMPILEFLAGS AMDiS INTERFACE_COMPILE_OPTIONS) +if (NOT AMDIS_COMPILEFLAGS) + set(AMDIS_COMPILEFLAGS "") +endif() get_target_property(_DEFINITIONS AMDiS INTERFACE_COMPILE_DEFINITIONS) foreach(defn ${_DEFINITIONS}) list(APPEND AMDIS_COMPILEFLAGS "-D${defn}") -endforeach(s) +endforeach(defn) diff --git a/AMDiS/cmake3/CMakeLists.txt b/AMDiS/cmake3/CMakeLists.txt index 3d7f27764457148d7c1c29e7e1ad91fd730e93d2..5fb863e5d0ad1dfcd0a5f06f23197ce2db169ab2 100644 --- a/AMDiS/cmake3/CMakeLists.txt +++ b/AMDiS/cmake3/CMakeLists.txt @@ -42,9 +42,7 @@ add_library(amdis_base INTERFACE) add_library(AMDiS::base ALIAS amdis_base) target_include_directories(amdis_base INTERFACE ${SOURCE_DIR}) -target_compile_definitions(amdis_base INTERFACE - $<$<CONFIG:Release>:DEBUG=0> - $<$<NOT:$<CONFIG:Release>>:DEBUG=1>) +target_compile_definitions(amdis_base INTERFACE) include(test_compile_features) target_enable_cxx11(ENABLE_CXX11 amdis_base INTERFACE) diff --git a/AMDiS/cmake3/test_compile_features.cmake b/AMDiS/cmake3/test_compile_features.cmake index 3b1d7dd8bef144a5057de2d52210b5ce35a1e6ed..11cd24112a0270fdb187167f1ca00a07f913b33b 100644 --- a/AMDiS/cmake3/test_compile_features.cmake +++ b/AMDiS/cmake3/test_compile_features.cmake @@ -1,39 +1,27 @@ include(CheckCXXCompilerFlag) include(CheckCXXSourceCompiles) -include(CheckIncludeFileCXX) macro(target_enable_cxx11 RESULT_VAR _TARGET_ _SCOPE_) - check_cxx_compiler_flag("-std=c++11" COMPILER_SUPPORTS_CXX11) + check_cxx_compiler_flag("-std=c++11" COMPILER_SUPPORTS_CXX11_FLAG) - if (NOT COMPILER_SUPPORTS_CXX11) + set(CXX11_CODE "#include <tuple>\\n#include <array>\\ntemplate<class... T> using std::tuple<T...>;int main(){decltype(1) vec[]={1,2,3}; for(auto&& x:vec);}") + + if (COMPILER_SUPPORTS_CXX11_FLAG) set(CMAKE_REQUIRED_FLAGS "-std=c++11") - check_cxx_source_compiles("int main(){decltype(1) vec[]={1,2,3}; for(auto&& x:vec);}" CXX_COMPILES_WITH_CXX11) + check_cxx_source_compiles("${CXX11_CODE}" CXX11_COMPILES_WITH_CXX11_FLAG) set(CMAKE_REQUIRED_FLAGS "") endif () - if (COMPILER_SUPPORTS_CXX11 OR CXX_COMPILES_WITH_CXX11) + if (COMPILER_SUPPORTS_CXX11_FLAG AND CXX11_COMPILES_WITH_CXX11_FLAG) target_compile_options(${_TARGET_} ${_SCOPE_} "-std=c++11") - set(${RESULT_VAR} true CACHE BOOL "Enable C++11 compiler features") + set(${RESULT_VAR} true CACHE BOOL "Enable C++11 compiler features" FORCE) else () - check_cxx_compiler_flag("-std=c++0x" COMPILER_SUPPORTS_CXX0X) - if (NOT COMPILER_SUPPORTS_CXX0X) - set(CMAKE_REQUIRED_FLAGS "-std=c++0x") - check_cxx_source_compiles("int main(){decltype(1) vec[]={1,2,3}; for(auto&& x:vec);}" CXX_COMPILES_WITH_CXX0X) - set(CMAKE_REQUIRED_FLAGS "") - endif () + check_cxx_source_compiles("${CXX11_CODE}" CXX11_COMPILES) - if (COMPILER_SUPPORTS_CXX0X OR CXX_COMPILES_WITH_CXX0X) - target_compile_options(${_TARGET_} ${_SCOPE_} "-std=c++0x") - set(${RESULT_VAR} true CACHE BOOL "Enable C++11 compiler features") + if (CXX11_COMPILES) + set(${RESULT_VAR} true CACHE BOOL "Enable C++11 compiler features" FORCE) else () - check_cxx_source_compiles("int main(){decltype(1) vec[]={1,2,3}; for(auto&& x:vec);}" CXX11_COMPILES) - check_include_file_cxx("array" CXX11_INCLUDES) - - if (CXX11_COMPILES AND CXX11_INCLUDES) - set(${RESULT_VAR} true CACHE BOOL "Enable C++11 compiler features") - else () - set(${RESULT_VAR} false CACHE BOOL "Enable C++11 compiler features") - endif () + set(${RESULT_VAR} false CACHE BOOL "Enable C++11 compiler features" FORCE) endif () endif () endmacro(target_enable_cxx11) diff --git a/AMDiS/src/config/Config_clang.h b/AMDiS/src/config/Config_clang.h index 092948de2588ccce2a567ee512e7404f3e28880a..9007feb2b92b47f1369ac0dd13d8622530e1afa0 100644 --- a/AMDiS/src/config/Config_clang.h +++ b/AMDiS/src/config/Config_clang.h @@ -47,7 +47,7 @@ typedef size_t aligned_size_t __attribute__ ((aligned(CACHE_LINE))); // C++11 features // -------------- -#ifdef HAS_CXX11 +#if HAS_CXX11 // __has_feature(cxx_rvalue_references) #if CLANG_VERSION >= 20900 && !defined(HAS_VARIADIC_TEMPLATES) diff --git a/AMDiS/src/config/Config_gcc.h b/AMDiS/src/config/Config_gcc.h index be5589a3683ab813b0639ac155af81d74c1e72b2..c281e3f71282afc415d3d7632abdebe2ed5ac6e4 100644 --- a/AMDiS/src/config/Config_gcc.h +++ b/AMDiS/src/config/Config_gcc.h @@ -47,7 +47,7 @@ typedef size_t aligned_size_t __attribute__ ((aligned(CACHE_LINE))); // C++11 features // -------------- -#ifdef HAS_CXX11 +#if HAS_CXX11 #if GCC_VERSION >= 40300 && !defined(HAS_VARIADIC_TEMPLATES) #define HAS_VARIADIC_TEMPLATES 1 diff --git a/AMDiS/src/config/Config_intel.h b/AMDiS/src/config/Config_intel.h index 0ad423673d7d88bd7fa237d0683a26946c126024..0ee7ab5b89fd25de1401cde84ce05b47750f778e 100644 --- a/AMDiS/src/config/Config_intel.h +++ b/AMDiS/src/config/Config_intel.h @@ -51,7 +51,7 @@ typedef __declspec(align(CACHE_LINE)) size_t aligned_size_t; // C++11 features // -------------- -#ifdef HAS_CXX11 +#if HAS_CXX11 #if INTEL_VERSION >= 1201 && !defined(HAS_VARIADIC_TEMPLATES) #define HAS_VARIADIC_TEMPLATES 1 diff --git a/AMDiS/src/traits/basic.hpp b/AMDiS/src/traits/basic.hpp index f6e54f51bb537af3a4a4c8a6d5b0914ae201a275..1f0303936b6fd6d8474120deff915e4098c5d03e 100644 --- a/AMDiS/src/traits/basic.hpp +++ b/AMDiS/src/traits/basic.hpp @@ -35,7 +35,7 @@ #include <boost/utility/enable_if.hpp> #endif -#ifdef HAS_CXX11 +#if HAS_CXX11 #include <type_traits> #endif @@ -45,7 +45,7 @@ namespace AMDiS // introduce some shortcuts for boost::mpl // --------------------------------------- -#ifdef HAS_CXX11 +#if HAS_CXX11 template <bool B> using bool_ = std::integral_constant<bool, B>;