From eeacbd26c8838869a491ee89ab5cf0fe7dac016f Mon Sep 17 00:00:00 2001 From: Antonio Sanchez Date: Wed, 25 Aug 2021 11:02:42 -0700 Subject: [PATCH] Bump CMake files to at least c++11. Removed all configurations that explicitly test or set the c++ standard flags. The only place the standard is now configured is at the top of the main `CMakeLists.txt` file, which can easily be updated (e.g. if we decide to move to c++14+). This can also be set via command-line using ``` > cmake -DCMAKE_CXX_STANDARD 14 ``` Kept the `EIGEN_TEST_CXX11` flag for now - that still controls whether to build/run the `cxx11_*` tests. We will likely end up renaming these tests and removing the `CXX11` subfolder. --- CMakeLists.txt | 33 ++------ doc/CMakeLists.txt | 3 - doc/examples/CMakeLists.txt | 4 - doc/snippets/CMakeLists.txt | 47 +++++------- doc/special_examples/CMakeLists.txt | 21 +++-- failtest/CMakeLists.txt | 8 +- test/CMakeLists.txt | 7 +- unsupported/doc/examples/SYCL/CMakeLists.txt | 1 - unsupported/test/CMakeLists.txt | 80 ++++++++------------ 9 files changed, 71 insertions(+), 133 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f3e69b845..bc68247a5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,6 +3,10 @@ cmake_minimum_required(VERSION 3.5.0) project(Eigen3) +set(CMAKE_CXX_STANDARD 11 CACHE STRING "Default C++ standard") +set(CMAKE_CXX_STANDARD_REQUIRED ON CACHE BOOL "Require C++ standard") +set(CMAKE_CXX_EXTENSIONS OFF CACHE BOOL "Allow C++ extensions") + # guard against in-source builds if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR}) @@ -62,8 +66,7 @@ include(CMakeDependentOption) set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake) -option(EIGEN_TEST_CXX11 "Enable testing with C++11 and C++11 features (e.g. Tensor module)." OFF) - +option(EIGEN_TEST_CXX11 "Enable testing of unsupported CXX11 tests (i.e. those starting with cxx11_)." OFF) macro(ei_add_cxx_compiler_flag FLAG) string(REGEX REPLACE "-" "" SFLAG1 ${FLAG}) @@ -74,20 +77,6 @@ macro(ei_add_cxx_compiler_flag FLAG) endif() endmacro() -check_cxx_compiler_flag("-std=c++11" EIGEN_COMPILER_SUPPORT_CPP11) - -if(EIGEN_TEST_CXX11) - set(CMAKE_CXX_STANDARD 11) - set(CMAKE_CXX_EXTENSIONS OFF) - if(EIGEN_COMPILER_SUPPORT_CPP11) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") - endif() -else() - #set(CMAKE_CXX_STANDARD 03) - #set(CMAKE_CXX_EXTENSIONS OFF) - ei_add_cxx_compiler_flag("-std=c++03") -endif() - # Determine if we should build shared libraries on this platform. get_cmake_property(EIGEN_BUILD_SHARED_LIBS TARGET_SUPPORTS_SHARED_LIBS) @@ -183,18 +172,6 @@ if(NOT MSVC) ei_add_cxx_compiler_flag("-wd981") # disable ICC's "operands are evaluated in unspecified order" remark ei_add_cxx_compiler_flag("-wd2304") # disable ICC's "warning #2304: non-explicit constructor with single argument may cause implicit type conversion" produced by -Wnon-virtual-dtor - - # The -ansi flag must be added last, otherwise it is also used as a linker flag by check_cxx_compiler_flag making it fails - # Moreover we should not set both -strict-ansi and -ansi - check_cxx_compiler_flag("-strict-ansi" COMPILER_SUPPORT_STRICTANSI) - ei_add_cxx_compiler_flag("-Qunused-arguments") # disable clang warning: argument unused during compilation: '-ansi' - - if(COMPILER_SUPPORT_STRICTANSI) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -strict-ansi") - else() - ei_add_cxx_compiler_flag("-ansi") - endif() - if(ANDROID_NDK) ei_add_cxx_compiler_flag("-pie") ei_add_cxx_compiler_flag("-fPIE") diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt index 0f9ef2382..e7eaa4ba9 100644 --- a/doc/CMakeLists.txt +++ b/doc/CMakeLists.txt @@ -10,9 +10,6 @@ if(CMAKE_COMPILER_IS_GNUCXX) endif() endif() -# some examples and snippets needs c++11, so let's check it once -check_cxx_compiler_flag("-std=c++11" EIGEN_COMPILER_SUPPORT_CPP11) - option(EIGEN_INTERNAL_DOCUMENTATION "Build internal documentation" OFF) option(EIGEN_DOC_USE_MATHJAX "Use MathJax for rendering math in HTML docs" ON) diff --git a/doc/examples/CMakeLists.txt b/doc/examples/CMakeLists.txt index a2c9d05a4..dd49e3cec 100644 --- a/doc/examples/CMakeLists.txt +++ b/doc/examples/CMakeLists.txt @@ -14,7 +14,3 @@ foreach(example_src ${examples_SRCS}) ) add_dependencies(all_examples ${example}) endforeach() - -if(EIGEN_COMPILER_SUPPORT_CPP11) -ei_add_target_property(nullary_indexing COMPILE_FLAGS "-std=c++11") -endif() \ No newline at end of file diff --git a/doc/snippets/CMakeLists.txt b/doc/snippets/CMakeLists.txt index 65f195a31..868d66905 100644 --- a/doc/snippets/CMakeLists.txt +++ b/doc/snippets/CMakeLists.txt @@ -6,31 +6,26 @@ foreach(snippet_src ${snippets_SRCS}) get_filename_component(snippet ${snippet_src} NAME_WE) set(compile_snippet_target compile_${snippet}) set(compile_snippet_src ${compile_snippet_target}.cpp) - if((NOT ${snippet_src} MATCHES "cxx11") OR EIGEN_COMPILER_SUPPORT_CPP11) - file(READ ${snippet_src} snippet_source_code) - configure_file(${CMAKE_CURRENT_SOURCE_DIR}/compile_snippet.cpp.in - ${CMAKE_CURRENT_BINARY_DIR}/${compile_snippet_src}) - add_executable(${compile_snippet_target} - ${CMAKE_CURRENT_BINARY_DIR}/${compile_snippet_src}) - if(EIGEN_STANDARD_LIBRARIES_TO_LINK_TO) - target_link_libraries(${compile_snippet_target} ${EIGEN_STANDARD_LIBRARIES_TO_LINK_TO}) - endif() - if(${snippet_src} MATCHES "cxx11") - set_target_properties(${compile_snippet_target} PROPERTIES COMPILE_FLAGS "-std=c++11") - endif() - if(${snippet_src} MATCHES "deprecated") - set_target_properties(${compile_snippet_target} PROPERTIES COMPILE_FLAGS "-DEIGEN_NO_DEPRECATED_WARNING") - endif() - add_custom_command( - TARGET ${compile_snippet_target} - POST_BUILD - COMMAND ${compile_snippet_target} - ARGS >${CMAKE_CURRENT_BINARY_DIR}/${snippet}.out - ) - add_dependencies(all_snippets ${compile_snippet_target}) - set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/${compile_snippet_src} - PROPERTIES OBJECT_DEPENDS ${snippet_src}) - else() - message("skip snippet ${snippet_src} because compiler does not support C++11") + + file(READ ${snippet_src} snippet_source_code) + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/compile_snippet.cpp.in + ${CMAKE_CURRENT_BINARY_DIR}/${compile_snippet_src}) + add_executable(${compile_snippet_target} + ${CMAKE_CURRENT_BINARY_DIR}/${compile_snippet_src}) + if(EIGEN_STANDARD_LIBRARIES_TO_LINK_TO) + target_link_libraries(${compile_snippet_target} ${EIGEN_STANDARD_LIBRARIES_TO_LINK_TO}) endif() + + if(${snippet_src} MATCHES "deprecated") + set_target_properties(${compile_snippet_target} PROPERTIES COMPILE_FLAGS "-DEIGEN_NO_DEPRECATED_WARNING") + endif() + add_custom_command( + TARGET ${compile_snippet_target} + POST_BUILD + COMMAND ${compile_snippet_target} + ARGS >${CMAKE_CURRENT_BINARY_DIR}/${snippet}.out + ) + add_dependencies(all_snippets ${compile_snippet_target}) + set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/${compile_snippet_src} + PROPERTIES OBJECT_DEPENDS ${snippet_src}) endforeach() diff --git a/doc/special_examples/CMakeLists.txt b/doc/special_examples/CMakeLists.txt index 5b00e8b1a..e6407aaea 100644 --- a/doc/special_examples/CMakeLists.txt +++ b/doc/special_examples/CMakeLists.txt @@ -19,16 +19,13 @@ if(QT4_FOUND) add_dependencies(all_examples Tutorial_sparse_example) endif() -if(EIGEN_COMPILER_SUPPORT_CPP11) - add_executable(random_cpp11 random_cpp11.cpp) - target_link_libraries(random_cpp11 ${EIGEN_STANDARD_LIBRARIES_TO_LINK_TO}) - add_dependencies(all_examples random_cpp11) - ei_add_target_property(random_cpp11 COMPILE_FLAGS "-std=c++11") +add_executable(random_cpp11 random_cpp11.cpp) +target_link_libraries(random_cpp11 ${EIGEN_STANDARD_LIBRARIES_TO_LINK_TO}) +add_dependencies(all_examples random_cpp11) - add_custom_command( - TARGET random_cpp11 - POST_BUILD - COMMAND random_cpp11 - ARGS >${CMAKE_CURRENT_BINARY_DIR}/random_cpp11.out - ) -endif() +add_custom_command( + TARGET random_cpp11 + POST_BUILD + COMMAND random_cpp11 + ARGS >${CMAKE_CURRENT_BINARY_DIR}/random_cpp11.out +) diff --git a/failtest/CMakeLists.txt b/failtest/CMakeLists.txt index 256e541e2..2c5fc3351 100644 --- a/failtest/CMakeLists.txt +++ b/failtest/CMakeLists.txt @@ -62,9 +62,5 @@ ei_add_failtest("jacobisvd_int") ei_add_failtest("bdcsvd_int") ei_add_failtest("eigensolver_int") ei_add_failtest("eigensolver_cplx") - -if(EIGEN_TEST_CXX11) - ei_add_failtest("initializer_list_1") - ei_add_failtest("initializer_list_2") -endif() - +ei_add_failtest("initializer_list_1") +ei_add_failtest("initializer_list_2") diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 2d6af34ae..f0136db34 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -286,10 +286,8 @@ ei_add_test(num_dimensions) ei_add_test(stl_iterators) ei_add_test(blasutil) ei_add_test(random_matrix) -if(EIGEN_TEST_CXX11) - ei_add_test(initializer_list_construction) - ei_add_test(diagonal_matrix_variadic_ctor) -endif() +ei_add_test(initializer_list_construction) +ei_add_test(diagonal_matrix_variadic_ctor) add_executable(bug1213 bug1213.cpp bug1213_main.cpp) @@ -400,7 +398,6 @@ if(CUDA_FOUND) set(CUDA_NVCC_FLAGS "-ccbin ${CMAKE_C_COMPILER}" CACHE STRING "nvcc flags" FORCE) endif() if(EIGEN_TEST_CUDA_CLANG) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") string(APPEND CMAKE_CXX_FLAGS " --cuda-path=${CUDA_TOOLKIT_ROOT_DIR}") foreach(GPU IN LISTS EIGEN_CUDA_COMPUTE_ARCH) string(APPEND CMAKE_CXX_FLAGS " --cuda-gpu-arch=sm_${GPU}") diff --git a/unsupported/doc/examples/SYCL/CMakeLists.txt b/unsupported/doc/examples/SYCL/CMakeLists.txt index 1d0f721dc..863fc119b 100644 --- a/unsupported/doc/examples/SYCL/CMakeLists.txt +++ b/unsupported/doc/examples/SYCL/CMakeLists.txt @@ -20,7 +20,6 @@ else(EIGEN_SYCL_TRISYCL) set(CMAKE_CXX_COMPILER ${ComputeCpp_DEVICE_COMPILER_EXECUTABLE}) string(REPLACE "-Wlogical-op" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) string(REPLACE "-Wno-psabi" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) - string(REPLACE "-ansi" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) endif() list(APPEND COMPUTECPP_USER_FLAGS -DEIGEN_NO_ASSERTION_CHECKING=1 diff --git a/unsupported/test/CMakeLists.txt b/unsupported/test/CMakeLists.txt index d30fa62bd..fffd0019e 100644 --- a/unsupported/test/CMakeLists.txt +++ b/unsupported/test/CMakeLists.txt @@ -26,11 +26,7 @@ find_package(Adolc) if(Adolc_FOUND) include_directories(${ADOLC_INCLUDES}) ei_add_property(EIGEN_TESTED_BACKENDS "Adolc, ") - if(EIGEN_TEST_CXX11) - ei_add_test(forward_adolc "" ${ADOLC_LIBRARIES}) - else() - message(STATUS "Adolc found, but tests require C++11 mode") - endif() + ei_add_test(forward_adolc "" ${ADOLC_LIBRARIES}) else() ei_add_property(EIGEN_MISSING_BACKENDS "Adolc, ") endif() @@ -56,10 +52,10 @@ ei_add_test(FFT) ei_add_test(EulerAngles) find_package(MPREAL) -if(MPREAL_FOUND AND EIGEN_COMPILER_SUPPORT_CPP11) +if(MPREAL_FOUND) ei_add_property(EIGEN_TESTED_BACKENDS "MPFR C++, ") include_directories(${MPREAL_INCLUDES}) - ei_add_test(mpreal_support "-std=c++11" "${MPREAL_LIBRARIES}" ) + ei_add_test(mpreal_support "" "${MPREAL_LIBRARIES}" ) else() ei_add_property(EIGEN_MISSING_BACKENDS "MPFR C++, ") endif() @@ -147,8 +143,8 @@ if(EIGEN_TEST_CXX11) add_definitions(-DEIGEN_SYCL_DISABLE_SKINNY=${EIGEN_SYCL_DISABLE_SKINNY}) endif() if(EIGEN_SYCL_DISABLE_DOUBLE_BUFFER) - add_definitions(-DEIGEN_SYCL_DISABLE_DOUBLE_BUFFER=${EIGEN_SYCL_DISABLE_DOUBLE_BUFFER}) - endif() + add_definitions(-DEIGEN_SYCL_DISABLE_DOUBLE_BUFFER=${EIGEN_SYCL_DISABLE_DOUBLE_BUFFER}) + endif() if(EIGEN_SYCL_DISABLE_RANK1) add_definitions(-DEIGEN_SYCL_DISABLE_RANK1=${EIGEN_SYCL_DISABLE_RANK1}) endif() @@ -181,7 +177,6 @@ if(EIGEN_TEST_CXX11) set(CMAKE_CXX_COMPILER ${ComputeCpp_DEVICE_COMPILER_EXECUTABLE}) string(REPLACE "-Wlogical-op" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) string(REPLACE "-Wno-psabi" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) - string(REPLACE "-ansi" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) endif() list(APPEND COMPUTECPP_USER_FLAGS -DEIGEN_NO_ASSERTION_CHECKING=1 @@ -281,11 +276,11 @@ if(EIGEN_TEST_CXX11) ei_add_test(cxx11_tensor_thread_pool "-pthread" "${CMAKE_THREAD_LIBS_INIT}") ei_add_test(cxx11_tensor_trace) ei_add_test(cxx11_tensor_volume_patch) -# ei_add_test(cxx11_tensor_symmetry) -if("${CMAKE_SIZEOF_VOID_P}" EQUAL "8" AND NOT CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") - # This test requires __uint128_t which is only available on 64bit systems - ei_add_test(cxx11_tensor_uint128) -endif() + # ei_add_test(cxx11_tensor_symmetry) + if("${CMAKE_SIZEOF_VOID_P}" EQUAL "8" AND NOT CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") + # This test requires __uint128_t which is only available on 64bit systems + ei_add_test(cxx11_tensor_uint128) + endif() endif() @@ -295,12 +290,10 @@ if(CUDA_FOUND AND EIGEN_TEST_CUDA) # Make sure to compile without the -pedantic, -Wundef, -Wnon-virtual-dtor # and -fno-check-new flags since they trigger thousands of compilation warnings # in the CUDA runtime - # Also remove -ansi that is incompatible with std=c++11. string(REPLACE "-pedantic" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") string(REPLACE "-Wundef" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") string(REPLACE "-Wnon-virtual-dtor" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") string(REPLACE "-fno-check-new" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") - string(REPLACE "-ansi" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") message(STATUS "Flags used to compile cuda code: " ${CMAKE_CXX_FLAGS}) @@ -308,7 +301,6 @@ if(CUDA_FOUND AND EIGEN_TEST_CUDA) set(CUDA_NVCC_FLAGS "-ccbin ${CMAKE_C_COMPILER}" CACHE STRING "nvcc flags" FORCE) endif() if(EIGEN_TEST_CUDA_CLANG) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") string(APPEND CMAKE_CXX_FLAGS " --cuda-path=${CUDA_TOOLKIT_ROOT_DIR}") foreach(ARCH IN LISTS EIGEN_CUDA_COMPUTE_ARCH) string(APPEND CMAKE_CXX_FLAGS " --cuda-gpu-arch=sm_${ARCH}") @@ -355,7 +347,6 @@ if(CUDA_FOUND AND EIGEN_TEST_CUDA) ei_add_test(cxx11_tensor_random_gpu) endif() - unset(EIGEN_ADD_TEST_FILENAME_EXTENSION) endif() @@ -365,52 +356,45 @@ if (EIGEN_TEST_HIP) set(HIP_PATH "/opt/rocm/hip" CACHE STRING "Path to the HIP installation.") if (EXISTS ${HIP_PATH}) - list(APPEND CMAKE_MODULE_PATH ${HIP_PATH}/cmake) find_package(HIP REQUIRED) if (HIP_FOUND) - execute_process(COMMAND ${HIP_PATH}/bin/hipconfig --platform OUTPUT_VARIABLE HIP_PLATFORM) if ((${HIP_PLATFORM} STREQUAL "hcc") OR (${HIP_PLATFORM} STREQUAL "amd")) + include_directories(${CMAKE_CURRENT_BINARY_DIR}) + include_directories(${HIP_PATH}/include) - include_directories(${CMAKE_CURRENT_BINARY_DIR}) - include_directories(${HIP_PATH}/include) + set(EIGEN_ADD_TEST_FILENAME_EXTENSION "cu") + # + # complex datatype is not yet supported by HIP + # so leaving out those tests for now + # + # ei_add_test(cxx11_tensor_complex_gpu) + # ei_add_test(cxx11_tensor_complex_cwise_ops_gpu) + # + ei_add_test(cxx11_tensor_reduction_gpu) + ei_add_test(cxx11_tensor_argmax_gpu) + ei_add_test(cxx11_tensor_cast_float16_gpu) + ei_add_test(cxx11_tensor_scan_gpu) + ei_add_test(cxx11_tensor_device) - set(EIGEN_ADD_TEST_FILENAME_EXTENSION "cu") - # - # complex datatype is not yet supported by HIP - # so leaving out those tests for now - # - # ei_add_test(cxx11_tensor_complex_gpu) - # ei_add_test(cxx11_tensor_complex_cwise_ops_gpu) - # - ei_add_test(cxx11_tensor_reduction_gpu) - ei_add_test(cxx11_tensor_argmax_gpu) - ei_add_test(cxx11_tensor_cast_float16_gpu) - ei_add_test(cxx11_tensor_scan_gpu) - ei_add_test(cxx11_tensor_device) + ei_add_test(cxx11_tensor_gpu) + ei_add_test(cxx11_tensor_contract_gpu) + ei_add_test(cxx11_tensor_of_float16_gpu) + ei_add_test(cxx11_tensor_random_gpu) - ei_add_test(cxx11_tensor_gpu) - ei_add_test(cxx11_tensor_contract_gpu) - ei_add_test(cxx11_tensor_of_float16_gpu) - ei_add_test(cxx11_tensor_random_gpu) - - unset(EIGEN_ADD_TEST_FILENAME_EXTENSION) + unset(EIGEN_ADD_TEST_FILENAME_EXTENSION) elseif ((${HIP_PLATFORM} STREQUAL "nvcc") OR (${HIP_PLATFORM} STREQUAL "nvidia")) - message(FATAL_ERROR "HIP_PLATFORM = nvcc is not supported within Eigen") + message(FATAL_ERROR "HIP_PLATFORM = nvcc is not supported within Eigen") else () - message(FATAL_ERROR "Unknown HIP_PLATFORM = ${HIP_PLATFORM}") + message(FATAL_ERROR "Unknown HIP_PLATFORM = ${HIP_PLATFORM}") endif() - endif() - else () - message(FATAL_ERROR "EIGEN_TEST_HIP is ON, but the specified HIP_PATH (${HIP_PATH}) does not exist") - endif() endif()