diff options
30 files changed, 168 insertions, 20 deletions
diff --git a/.gitlab/ci/configure_fedora31_makefiles.cmake b/.gitlab/ci/configure_fedora31_makefiles.cmake index aee100e..8d2454f 100644 --- a/.gitlab/ci/configure_fedora31_makefiles.cmake +++ b/.gitlab/ci/configure_fedora31_makefiles.cmake @@ -44,10 +44,9 @@ set(CMake_TEST_FindPatch "ON" CACHE BOOL "") set(CMake_TEST_FindPNG "ON" CACHE BOOL "") set(CMake_TEST_FindPostgreSQL "ON" CACHE BOOL "") set(CMake_TEST_FindProtobuf "ON" CACHE BOOL "") -#FIXME: Not all FindPython tests pass on Fedora! -#set(CMake_TEST_FindPython "ON" CACHE BOOL "") -#set(CMake_TEST_FindPython_NumPy "ON" CACHE BOOL "") -#set(CMake_TEST_FindPython_PyPy "ON" CACHE BOOL "") +set(CMake_TEST_FindPython "ON" CACHE BOOL "") +set(CMake_TEST_FindPython_NumPy "ON" CACHE BOOL "") +set(CMake_TEST_FindPython_PyPy "ON" CACHE BOOL "") set(CMake_TEST_FindRuby "ON" CACHE BOOL "") set(CMake_TEST_FindRuby_RVM "ON" CACHE BOOL "") set(CMake_TEST_FindSDL "ON" CACHE BOOL "") diff --git a/Help/release/dev/cuda-check-support.rst b/Help/release/dev/cuda-check-support.rst new file mode 100644 index 0000000..d88ef94 --- /dev/null +++ b/Help/release/dev/cuda-check-support.rst @@ -0,0 +1,14 @@ +cuda-check-support +------------------ + +* The :module:`CheckCompilerFlag` module was extended to + support 'CUDA'. + +* The :module:`CheckSourceCompiles` module was extended to + support 'CUDA'. + +* The :module:`CheckSourceRuns` module was extended to + support 'CUDA'. + +* The :module:`CheckLinkerFlag` module has been extended to + support the validity of CUDA link flags. diff --git a/Modules/CheckCompilerFlag.cmake b/Modules/CheckCompilerFlag.cmake index f2385d5..3ce1b9b 100644 --- a/Modules/CheckCompilerFlag.cmake +++ b/Modules/CheckCompilerFlag.cmake @@ -49,6 +49,10 @@ function(CHECK_COMPILER_FLAG _lang _flag _var) elseif(_lang STREQUAL CXX) set(_lang_src "int main() { return 0; }") set(_lang_fail_regex FAIL_REGEX "command[ -]line option .* is valid for .* but not for C\\+\\+") + elseif(_lang STREQUAL CUDA) + set(_lang_src "__host__ int main() { return 0; }") + set(_lang_fail_regex FAIL_REGEX "command[ -]line option .* is valid for .* but not for C\\+\\+" # Host GNU + FAIL_REGEX "argument unused during compilation: .*") # Clang elseif(_lang STREQUAL Fortran) set(_lang_src " program test\n stop\n end program") set(_lang_fail_regex FAIL_REGEX "command[ -]line option .* is valid for .* but not for Fortran") diff --git a/Modules/CheckLinkerFlag.cmake b/Modules/CheckLinkerFlag.cmake index 051e0bc..f56d365 100644 --- a/Modules/CheckLinkerFlag.cmake +++ b/Modules/CheckLinkerFlag.cmake @@ -66,6 +66,8 @@ function(CHECK_LINKER_FLAG _lang _flag _var) set (_source "int main() { return 0; }") elseif (_lang STREQUAL "Fortran") set (_source " program test\n stop\n end program") + elseif (_lang MATCHES "CUDA") + set (_source "__host__ int main() { return 0; }") elseif (_lang MATCHES "^(OBJC|OBJCXX)$") set (_source "#ifndef __OBJC__\n# error \"Not an Objective-C++ compiler\"\n#endif\nint main(void) { return 0; }") else() diff --git a/Modules/CheckSourceCompiles.cmake b/Modules/CheckSourceCompiles.cmake index 70a733d..08fc153 100644 --- a/Modules/CheckSourceCompiles.cmake +++ b/Modules/CheckSourceCompiles.cmake @@ -89,6 +89,9 @@ function(CHECK_SOURCE_COMPILES _lang _source _var) elseif(_lang STREQUAL CXX) set(_lang_textual "C++") set(_lang_ext "cxx") + elseif(_lang STREQUAL CUDA) + set(_lang_textual "CUDA") + set(_lang_ext "cu") elseif(_lang STREQUAL Fortran) set(_lang_textual "Fortran") set(_lang_ext "F") diff --git a/Modules/CheckSourceRuns.cmake b/Modules/CheckSourceRuns.cmake index 6165123..20f3e1e 100644 --- a/Modules/CheckSourceRuns.cmake +++ b/Modules/CheckSourceRuns.cmake @@ -87,6 +87,9 @@ function(CHECK_SOURCE_RUNS _lang _source _var) elseif(_lang STREQUAL CXX) set(_lang_textual "C++") set(_lang_ext "cxx") + elseif(_lang STREQUAL CUDA) + set(_lang_textual "CUDA") + set(_lang_ext "cu") elseif(_lang STREQUAL Fortran) set(_lang_textual "Fortran") set(_lang_ext "F") diff --git a/Modules/FindJNI.cmake b/Modules/FindJNI.cmake index bbca952..5aa2d60 100644 --- a/Modules/FindJNI.cmake +++ b/Modules/FindJNI.cmake @@ -215,6 +215,14 @@ set(_JNI_JAVA_DIRECTORIES_BASE /usr/local/jre-1.7.0 /usr/local/jdk-1.6.0 /usr/local/jre-1.6.0 + # FreeBSD specific paths for default JVM + /usr/local/openjdk15 + /usr/local/openjdk14 + /usr/local/openjdk13 + /usr/local/openjdk12 + /usr/local/openjdk11 + /usr/local/openjdk8 + /usr/local/openjdk7 # SuSE specific paths for default JVM /usr/lib64/jvm/java /usr/lib64/jvm/jre diff --git a/Modules/FindwxWidgets.cmake b/Modules/FindwxWidgets.cmake index 93ac51d..eab09f1 100644 --- a/Modules/FindwxWidgets.cmake +++ b/Modules/FindwxWidgets.cmake @@ -760,8 +760,16 @@ else() # UNIX: Start actual work. #----------------------------------------------------------------- # Support cross-compiling, only search in the target platform. + # + # Look for wx-config -- this can be set in the environment, + # or try versioned and toolchain-versioned variants of the -config + # executable as well. find_program(wxWidgets_CONFIG_EXECUTABLE - NAMES $ENV{WX_CONFIG} wx-config wx-config-3.1 wx-config-3.0 wx-config-2.9 wx-config-2.8 + NAMES + $ENV{WX_CONFIG} + wx-config + wx-config-3.1 wx-config-3.0 wx-config-2.9 wx-config-2.8 + wxgtk3u-3.1-config wxgtk3u-3.0-config wxgtk2u-2.8-config DOC "Location of wxWidgets library configuration provider binary (wx-config)." ONLY_CMAKE_FIND_ROOT_PATH ) diff --git a/Source/CMakeVersion.cmake b/Source/CMakeVersion.cmake index 9502460..8d4d1c2 100644 --- a/Source/CMakeVersion.cmake +++ b/Source/CMakeVersion.cmake @@ -1,7 +1,7 @@ # CMake version number components. set(CMake_VERSION_MAJOR 3) set(CMake_VERSION_MINOR 18) -set(CMake_VERSION_PATCH 20201007) +set(CMake_VERSION_PATCH 20201008) #set(CMake_VERSION_RC 0) set(CMake_VERSION_IS_DIRTY 0) diff --git a/Tests/CMakeOnly/CMakeLists.txt b/Tests/CMakeOnly/CMakeLists.txt index 361cf5f..a41b44e 100644 --- a/Tests/CMakeOnly/CMakeLists.txt +++ b/Tests/CMakeOnly/CMakeLists.txt @@ -38,6 +38,11 @@ if (APPLE AND CMAKE_C_COMPILER_ID MATCHES "Clang|GNU") add_CMakeOnly_test(CheckOBJCXXCompilerFlag) endif() +if(CMake_TEST_CUDA) + add_CMakeOnly_test(CompilerIdCUDA) +endif() + + if(CMAKE_Fortran_COMPILER) add_CMakeOnly_test(CompilerIdFortran) endif() diff --git a/Tests/CMakeOnly/CompilerIdCUDA/CMakeLists.txt b/Tests/CMakeOnly/CompilerIdCUDA/CMakeLists.txt new file mode 100644 index 0000000..da14000 --- /dev/null +++ b/Tests/CMakeOnly/CompilerIdCUDA/CMakeLists.txt @@ -0,0 +1,14 @@ +cmake_minimum_required(VERSION 3.18) +project(CompilerIdCUDA CUDA) + +foreach(v + CMAKE_CUDA_COMPILER + CMAKE_CUDA_COMPILER_ID + CMAKE_CUDA_COMPILER_VERSION + ) + if(${v}) + message(STATUS "${v}=[${${v}}]") + else() + message(SEND_ERROR "${v} not set!") + endif() +endforeach() diff --git a/Tests/FindPython/ArtifactsInteractive/CMakeLists.txt b/Tests/FindPython/ArtifactsInteractive/CMakeLists.txt index 8ada221..524be92 100644 --- a/Tests/FindPython/ArtifactsInteractive/CMakeLists.txt +++ b/Tests/FindPython/ArtifactsInteractive/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.1) -project(TestArtifactsInteractive LANGUAGES NONE) +project(TestArtifactsInteractive LANGUAGES C) set (components Interpreter Development) if (CMake_TEST_FindPython_NumPy) diff --git a/Tests/FindPython/ExactVersion/CMakeLists.txt b/Tests/FindPython/ExactVersion/CMakeLists.txt index 4aa748b..60abb26 100644 --- a/Tests/FindPython/ExactVersion/CMakeLists.txt +++ b/Tests/FindPython/ExactVersion/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.1) -project(TestExactVersion LANGUAGES NONE) +project(TestExactVersion LANGUAGES C) find_package(Python${Python_MAJOR_VERSION} ${Python_REQUESTED_VERSION} COMPONENTS Interpreter Development) if(NOT Python${Python_MAJOR_VERSION}_FOUND) diff --git a/Tests/FindPython/NumPy/CMakeLists.txt b/Tests/FindPython/NumPy/CMakeLists.txt index f557026..3e17f68 100644 --- a/Tests/FindPython/NumPy/CMakeLists.txt +++ b/Tests/FindPython/NumPy/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.1) -project(TestNumPy C) +project(TestNumPy LANGUAGES C) find_package (Python2 REQUIRED COMPONENTS Interpreter Development NumPy) find_package (Python3 REQUIRED COMPONENTS Interpreter Development NumPy) diff --git a/Tests/FindPython/NumPyOnly/CMakeLists.txt b/Tests/FindPython/NumPyOnly/CMakeLists.txt index a5db603..bedc627 100644 --- a/Tests/FindPython/NumPyOnly/CMakeLists.txt +++ b/Tests/FindPython/NumPyOnly/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.1) -project(TestNumPyOnly C) +project(TestNumPyOnly LANGUAGES C) find_package(Python2 REQUIRED COMPONENTS NumPy) find_package(Python3 REQUIRED COMPONENTS NumPy) diff --git a/Tests/FindPython/PyPy/CMakeLists.txt b/Tests/FindPython/PyPy/CMakeLists.txt index 6539b63..4cf7c0a 100644 --- a/Tests/FindPython/PyPy/CMakeLists.txt +++ b/Tests/FindPython/PyPy/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.1) -project(TestPyPy LANGUAGES NONE) +project(TestPyPy LANGUAGES C) set (Python_FIND_IMPLEMENTATIONS PyPy) diff --git a/Tests/FindPython/PyPy2/CMakeLists.txt b/Tests/FindPython/PyPy2/CMakeLists.txt index 4efea23..ebfc9ab 100644 --- a/Tests/FindPython/PyPy2/CMakeLists.txt +++ b/Tests/FindPython/PyPy2/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.1) -project(TestPyPy2 LANGUAGES NONE) +project(TestPyPy2 LANGUAGES C) set (Python2_FIND_IMPLEMENTATIONS "PyPy") diff --git a/Tests/FindPython/PyPy3/CMakeLists.txt b/Tests/FindPython/PyPy3/CMakeLists.txt index 7454a68..bf7cd61 100644 --- a/Tests/FindPython/PyPy3/CMakeLists.txt +++ b/Tests/FindPython/PyPy3/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.1) -project(TestPyPy3 LANGUAGES NONE) +project(TestPyPy3 LANGUAGES C) set (Python3_FIND_IMPLEMENTATIONS "PyPy") diff --git a/Tests/FindPython/RequiredArtifacts/CMakeLists.txt b/Tests/FindPython/RequiredArtifacts/CMakeLists.txt index 6e854e3..ae50f32 100644 --- a/Tests/FindPython/RequiredArtifacts/CMakeLists.txt +++ b/Tests/FindPython/RequiredArtifacts/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.1) -project(TestRequiredArtifacts LANGUAGES NONE) +project(TestRequiredArtifacts LANGUAGES C) include(CTest) diff --git a/Tests/FindPython/RequiredArtifacts/Check/CMakeLists.txt b/Tests/FindPython/RequiredArtifacts/Check/CMakeLists.txt index 036407f..287cfdb 100644 --- a/Tests/FindPython/RequiredArtifacts/Check/CMakeLists.txt +++ b/Tests/FindPython/RequiredArtifacts/Check/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.1) -project(TestRequiredArtifacts.Check LANGUAGES NONE) +project(TestRequiredArtifacts.Check LANGUAGES C) set (components) if (CHECK_INTERPRETER) diff --git a/Tests/FindPython/VersionRange/CMakeLists.txt b/Tests/FindPython/VersionRange/CMakeLists.txt index 0d946f5..e8873cb 100644 --- a/Tests/FindPython/VersionRange/CMakeLists.txt +++ b/Tests/FindPython/VersionRange/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required (VERSION 3.18...3.19) -project (TestVersionRange LANGUAGES NONE) +project (TestVersionRange LANGUAGES C) find_package (${Python} ${Python_REQUESTED_VERSION} EXACT COMPONENTS Interpreter) diff --git a/Tests/RunCMake/CMakeLists.txt b/Tests/RunCMake/CMakeLists.txt index 557808e..63738d7 100644 --- a/Tests/RunCMake/CMakeLists.txt +++ b/Tests/RunCMake/CMakeLists.txt @@ -538,9 +538,15 @@ add_RunCMake_test(target_compile_features) add_RunCMake_test(target_compile_options -DCMAKE_C_COMPILER_ID=${CMAKE_C_COMPILER_ID}) add_RunCMake_test(target_include_directories) add_RunCMake_test(target_sources) -add_RunCMake_test(CheckCompilerFlag) -add_RunCMake_test(CheckSourceCompiles -DCMake_TEST_ISPC=${CMake_TEST_ISPC}) -add_RunCMake_test(CheckSourceRuns) +add_RunCMake_test(CheckCompilerFlag -DCMake_TEST_CUDA=${CMake_TEST_CUDA} + -DCMake_TEST_ISPC=${CMake_TEST_ISPC}) +add_RunCMake_test(CheckSourceCompiles -DCMake_TEST_CUDA=${CMake_TEST_CUDA} + -DCMake_TEST_ISPC=${CMake_TEST_ISPC}) +add_RunCMake_test(CheckSourceRuns -DCMake_TEST_CUDA=${CMake_TEST_CUDA}) +set_property(TEST RunCMake.CheckCompilerFlag + RunCMake.CheckSourceCompiles + RunCMake.CheckSourceRuns + APPEND PROPERTY LABELS "CUDA") set_property(TEST RunCMake.CheckSourceCompiles RunCMake.CheckCompilerFlag APPEND PROPERTY LABELS "ISPC") @@ -549,7 +555,9 @@ add_RunCMake_test(CheckIPOSupported) if (CMAKE_SYSTEM_NAME MATCHES "(Linux|Darwin)" AND (CMAKE_C_COMPILER_ID MATCHES "Clang|GNU" OR CMAKE_Fortran_COMPILER_ID MATCHES "GNU")) add_RunCMake_test(CheckLinkerFlag -DCMAKE_C_COMPILER_ID=${CMAKE_C_COMPILER_ID} - -DCMAKE_Fortran_COMPILER_ID=${CMAKE_Fortran_COMPILER_ID}) + -DCMAKE_Fortran_COMPILER_ID=${CMAKE_Fortran_COMPILER_ID} + -DCMake_TEST_CUDA=${CMake_TEST_CUDA}) + set_property(TEST RunCMake.CheckLinkerFlag APPEND PROPERTY LABELS "CUDA") endif() diff --git a/Tests/RunCMake/CheckCompilerFlag/CheckCUDACompilerFlag.cmake b/Tests/RunCMake/CheckCompilerFlag/CheckCUDACompilerFlag.cmake new file mode 100644 index 0000000..a40699c --- /dev/null +++ b/Tests/RunCMake/CheckCompilerFlag/CheckCUDACompilerFlag.cmake @@ -0,0 +1,13 @@ + +enable_language (CUDA) +include(CheckCompilerFlag) + +check_compiler_flag(CUDA "-_this_is_not_a_flag_" SHOULD_FAIL) +if(SHOULD_FAIL) + message(SEND_ERROR "invalid CUDA compile flag didn't fail.") +endif() + +check_compiler_flag(CUDA "-DFOO" SHOULD_WORK) +if(NOT SHOULD_WORK) + message(SEND_ERROR "${CMAKE_CUDA_COMPILER_ID} compiler flag '-DFOO' check failed") +endif() diff --git a/Tests/RunCMake/CheckCompilerFlag/RunCMakeTest.cmake b/Tests/RunCMake/CheckCompilerFlag/RunCMakeTest.cmake index e4d65b8..7a4e2ce 100644 --- a/Tests/RunCMake/CheckCompilerFlag/RunCMakeTest.cmake +++ b/Tests/RunCMake/CheckCompilerFlag/RunCMakeTest.cmake @@ -15,6 +15,10 @@ if (CMAKE_Fortran_COMPILER_ID) run_cmake(CheckFortranCompilerFlag) endif() +if (CMake_TEST_CUDA) + run_cmake(CheckCUDACompilerFlag) +endif() + if(CMake_TEST_ISPC) run_cmake(CheckISPCCompilerFlag) endif() diff --git a/Tests/RunCMake/CheckLinkerFlag/CheckCUDALinkerFlag.cmake b/Tests/RunCMake/CheckLinkerFlag/CheckCUDALinkerFlag.cmake new file mode 100644 index 0000000..84d6dd9 --- /dev/null +++ b/Tests/RunCMake/CheckLinkerFlag/CheckCUDALinkerFlag.cmake @@ -0,0 +1,3 @@ + +set (CHECK_LANGUAGE CUDA) +include ("${CMAKE_CURRENT_SOURCE_DIR}/CheckLinkerFlag.cmake") diff --git a/Tests/RunCMake/CheckLinkerFlag/RunCMakeTest.cmake b/Tests/RunCMake/CheckLinkerFlag/RunCMakeTest.cmake index 224a2a3..6ec9148 100644 --- a/Tests/RunCMake/CheckLinkerFlag/RunCMakeTest.cmake +++ b/Tests/RunCMake/CheckLinkerFlag/RunCMakeTest.cmake @@ -12,3 +12,7 @@ endif() if (CMAKE_Fortran_COMPILER_ID MATCHES "GNU") run_cmake(CheckFortranLinkerFlag) endif() + +if (CMake_TEST_CUDA) + run_cmake(CheckCUDALinkerFlag) +endif() diff --git a/Tests/RunCMake/CheckSourceCompiles/CheckCUDASourceCompiles.cmake b/Tests/RunCMake/CheckSourceCompiles/CheckCUDASourceCompiles.cmake new file mode 100644 index 0000000..1e6e6b2 --- /dev/null +++ b/Tests/RunCMake/CheckSourceCompiles/CheckCUDASourceCompiles.cmake @@ -0,0 +1,27 @@ + +enable_language (CUDA) +include(CheckSourceCompiles) + +check_source_compiles(CUDA "I don't build" SHOULD_FAIL) +if(SHOULD_FAIL) + message(SEND_ERROR "invalid CUDA source didn't fail.") +endif() + +check_source_compiles(CUDA [=[ + #include <vector> + __device__ int d_func() { } + int main() { + return 0; + } +]=] + SHOULD_BUILD) +if(NOT SHOULD_BUILD) + message(SEND_ERROR "Test fail for valid CUDA source.") +endif() + +check_source_compiles(CUDA "void l(char const (&x)[2]){}; int main() { l(\"\\n\"); return 0;}" + SHOULD_BUILD_COMPLEX) + +if(NOT SHOULD_BUILD_COMPLEX) + message(SEND_ERROR "Test fail for valid CUDA complex source.") +endif() diff --git a/Tests/RunCMake/CheckSourceCompiles/RunCMakeTest.cmake b/Tests/RunCMake/CheckSourceCompiles/RunCMakeTest.cmake index a574d7d..22cb466 100644 --- a/Tests/RunCMake/CheckSourceCompiles/RunCMakeTest.cmake +++ b/Tests/RunCMake/CheckSourceCompiles/RunCMakeTest.cmake @@ -15,6 +15,10 @@ if (CMAKE_Fortran_COMPILER_ID) run_cmake(CheckFortranSourceCompiles) endif() +if (CMake_TEST_CUDA) + run_cmake(CheckCUDASourceCompiles) +endif() + if(CMake_TEST_ISPC) run_cmake(CheckISPCSourceCompiles) endif() diff --git a/Tests/RunCMake/CheckSourceRuns/CheckCUDASourceRuns.cmake b/Tests/RunCMake/CheckSourceRuns/CheckCUDASourceRuns.cmake new file mode 100644 index 0000000..01e5ac8 --- /dev/null +++ b/Tests/RunCMake/CheckSourceRuns/CheckCUDASourceRuns.cmake @@ -0,0 +1,21 @@ + +enable_language (CUDA) +include(CheckSourceRuns) + +check_source_runs(CUDA "int main() {return 2;}" SHOULD_FAIL) +if(SHOULD_FAIL) + message(SEND_ERROR "CUDA check_source_runs succeeded, but should have failed.") +endif() + +check_source_runs(CUDA +[=[ + #include <vector> + __device__ __host__ void fake_function(); + __host__ int main() { + return 0; + } +]=] + SHOULD_RUN) +if(NOT SHOULD_RUN) + message(SEND_ERROR "CUDA check_source_runs failed for valid CUDA executable.") +endif() diff --git a/Tests/RunCMake/CheckSourceRuns/RunCMakeTest.cmake b/Tests/RunCMake/CheckSourceRuns/RunCMakeTest.cmake index 8bcde6a..b27b08d 100644 --- a/Tests/RunCMake/CheckSourceRuns/RunCMakeTest.cmake +++ b/Tests/RunCMake/CheckSourceRuns/RunCMakeTest.cmake @@ -14,3 +14,7 @@ endif() if (CMAKE_Fortran_COMPILER_ID) run_cmake(CheckFortranSourceRuns) endif() + +if (CMake_TEST_CUDA) + run_cmake(CheckCUDASourceRuns) +endif() |