diff options
-rw-r--r-- | .gitlab-ci.yml | 44 | ||||
-rwxr-xr-x | .gitlab/ci/cmake.ps1 | 14 | ||||
-rw-r--r-- | .gitlab/ci/configure_windows_arm64_vs2022.cmake | 1 | ||||
-rw-r--r-- | .gitlab/ci/configure_windows_arm64_vs2022_ninja.cmake | 7 | ||||
-rw-r--r-- | .gitlab/ci/cxx_modules_rules_msvc.cmake | 10 | ||||
-rwxr-xr-x | .gitlab/ci/python-env.ps1 | 4 | ||||
-rwxr-xr-x | .gitlab/ci/qt-env.ps1 | 10 | ||||
-rw-r--r-- | .gitlab/os-windows.yml | 49 | ||||
-rw-r--r-- | Help/dev/experimental.rst | 4 | ||||
-rw-r--r-- | Modules/CMakeDetermineASMCompiler.cmake | 7 | ||||
-rw-r--r-- | Modules/Compiler/MSVC-CXX.cmake | 12 | ||||
-rw-r--r-- | Source/CMakeVersion.cmake | 2 | ||||
-rw-r--r-- | Source/cmScanDepFormat.cxx | 22 | ||||
-rw-r--r-- | Tests/CTestUpdateGIT.cmake.in | 2 | ||||
-rw-r--r-- | Tests/RunCMake/CXXModules/NoCXX20ModuleFlag-stderr.txt | 2 | ||||
-rw-r--r-- | Tests/RunCMake/CXXModules/NoCXX20ModuleFlag.cmake | 2 |
16 files changed, 145 insertions, 47 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 83bd9ef..16c9e25 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -880,7 +880,7 @@ u:macos10.10-package: needs: - b:macos10.10-package -# Windows builds +# Windows x86_64 jobs b:windows-vs2022-x64-ninja: extends: @@ -1116,6 +1116,48 @@ t:windows-openwatcom1.9: variables: CMAKE_CI_JOB_NIGHTLY: "true" +# Windows arm64 jobs + +b:windows-arm64-vs2022-ninja: + extends: + - .windows_arm64_vs2022_ninja + - .cmake_build_windows + - .cmake_build_artifacts + - .windows_arm64_tags_nonconcurrent_vs2022 + - .run_manually + variables: + CMAKE_CI_JOB_NIGHTLY: "true" + +t:windows-arm64-vs2022-ninja: + extends: + - .windows_arm64_vs2022_ninja + - .cmake_test_windows + - .windows_arm64_tags_nonconcurrent_vs2022 + - .cmake_test_artifacts + - .run_dependent + dependencies: + - b:windows-arm64-vs2022-ninja + needs: + - b:windows-arm64-vs2022-ninja + variables: + CMAKE_CI_JOB_NIGHTLY: "true" + +t:windows-arm64-vs2022: + extends: + - .windows_arm64_vs2022 + - .cmake_test_windows_external + - .windows_arm64_tags_concurrent_vs2022 + - .cmake_junit_artifacts + - .run_dependent + dependencies: + - t:windows-arm64-vs2022-ninja + needs: + - t:windows-arm64-vs2022-ninja + variables: + CMAKE_CI_JOB_NIGHTLY: "true" + +# Windows package jobs + b:windows-x86_64-package: extends: - .windows_x86_64_package diff --git a/.gitlab/ci/cmake.ps1 b/.gitlab/ci/cmake.ps1 index 98aeae3..3efb67a 100755 --- a/.gitlab/ci/cmake.ps1 +++ b/.gitlab/ci/cmake.ps1 @@ -1,8 +1,18 @@ $erroractionpreference = "stop" $version = "3.24.1" -$sha256sum = "C1B17431A16337D517F7BA78C7067B6F143A12686CB8087F3DD32F3FA45F5AAE" -$filename = "cmake-$version-windows-x86_64" + +if ("$env:PROCESSOR_ARCHITECTURE" -eq "AMD64") { + $sha256sum = "C1B17431A16337D517F7BA78C7067B6F143A12686CB8087F3DD32F3FA45F5AAE" + $platform = "windows-x86_64" +} elseif ("$env:PROCESSOR_ARCHITECTURE" -eq "ARM64") { + $sha256sum = "D94683F3B0E63F6EF194C621194F6E26F3735EDA70750395E0F2BBEE4023FB95" + $platform = "windows-arm64" +} else { + throw ('unknown PROCESSOR_ARCHITECTURE: ' + "$env:PROCESSOR_ARCHITECTURE") +} + +$filename = "cmake-$version-$platform" $tarball = "$filename.zip" $outdir = $pwd.Path diff --git a/.gitlab/ci/configure_windows_arm64_vs2022.cmake b/.gitlab/ci/configure_windows_arm64_vs2022.cmake new file mode 100644 index 0000000..c7d41ea --- /dev/null +++ b/.gitlab/ci/configure_windows_arm64_vs2022.cmake @@ -0,0 +1 @@ +include("${CMAKE_CURRENT_LIST_DIR}/configure_windows_vs_common.cmake") diff --git a/.gitlab/ci/configure_windows_arm64_vs2022_ninja.cmake b/.gitlab/ci/configure_windows_arm64_vs2022_ninja.cmake new file mode 100644 index 0000000..722e009 --- /dev/null +++ b/.gitlab/ci/configure_windows_arm64_vs2022_ninja.cmake @@ -0,0 +1,7 @@ +# Qt host tools are not yet available natively on windows-arm64. +set(CMake_TEST_GUI "OFF" CACHE BOOL "") +set(BUILD_QtDialog "OFF" CACHE BOOL "") +set(CMAKE_PREFIX_PATH "" CACHE STRING "") + +include("${CMAKE_CURRENT_LIST_DIR}/configure_windows_msvc_cxx_modules_common.cmake") +include("${CMAKE_CURRENT_LIST_DIR}/configure_windows_vs_common_ninja.cmake") diff --git a/.gitlab/ci/cxx_modules_rules_msvc.cmake b/.gitlab/ci/cxx_modules_rules_msvc.cmake index 5f0ae76..2b09b0e 100644 --- a/.gitlab/ci/cxx_modules_rules_msvc.cmake +++ b/.gitlab/ci/cxx_modules_rules_msvc.cmake @@ -1,11 +1 @@ set(CMake_TEST_CXXModules_UUID "a246741c-d067-4019-a8fb-3d16b0c9d1d3") - -set(CMAKE_EXPERIMENTAL_CXX_MODULE_DYNDEP 1) -string(CONCAT CMAKE_EXPERIMENTAL_CXX_SCANDEP_SOURCE - "<CMAKE_CXX_COMPILER> <DEFINES> <INCLUDES> <FLAGS> <SOURCE> -nologo -TP" - " -showIncludes" - " -scanDependencies <DYNDEP_FILE>" - " -Fo<OBJECT>") -set(CMAKE_EXPERIMENTAL_CXX_SCANDEP_DEPFILE_FORMAT "msvc") -set(CMAKE_EXPERIMENTAL_CXX_MODULE_MAP_FORMAT "msvc") -set(CMAKE_EXPERIMENTAL_CXX_MODULE_MAP_FLAG "@<MODULE_MAP_FILE>") diff --git a/.gitlab/ci/python-env.ps1 b/.gitlab/ci/python-env.ps1 new file mode 100755 index 0000000..4e897d8 --- /dev/null +++ b/.gitlab/ci/python-env.ps1 @@ -0,0 +1,4 @@ +$pwdpath = $pwd.Path +cmake -P .gitlab/ci/download_python3.cmake +Set-Item -Force -Path "env:PATH" -Value "$pwdpath\.gitlab\python3;$env:PATH" +python --version diff --git a/.gitlab/ci/qt-env.ps1 b/.gitlab/ci/qt-env.ps1 new file mode 100755 index 0000000..7eff55f --- /dev/null +++ b/.gitlab/ci/qt-env.ps1 @@ -0,0 +1,10 @@ +if ("$env:PROCESSOR_ARCHITECTURE" -eq "AMD64") { + $pwdpath = $pwd.Path + cmake -P .gitlab/ci/download_qt.cmake + Set-Item -Force -Path "env:PATH" -Value "$pwdpath\.gitlab\qt\bin;$env:PATH" + qmake -v +} elseif ("$env:PROCESSOR_ARCHITECTURE" -eq "ARM64") { + # Qt host tools are not yet available natively on windows-arm64. +} else { + throw ('unknown PROCESSOR_ARCHITECTURE: ' + "$env:PROCESSOR_ARCHITECTURE") +} diff --git a/.gitlab/os-windows.yml b/.gitlab/os-windows.yml index 1979aa4..64b595e 100644 --- a/.gitlab/os-windows.yml +++ b/.gitlab/os-windows.yml @@ -49,6 +49,12 @@ VCVARSPLATFORM: "x64_arm64" VCVARSVERSION: "14.34.31933" +.windows_arm64_vcvarsall_vs2022: + variables: + VCVARSALL: "${VS170COMNTOOLS}\\..\\..\\VC\\Auxiliary\\Build\\vcvarsall.bat" + VCVARSPLATFORM: "arm64" + VCVARSVERSION: "14.34.31933" + .windows_vs2022_x64_ninja: extends: - .windows_build_ninja @@ -57,6 +63,14 @@ variables: CMAKE_CONFIGURATION: windows_vs2022_x64_ninja +.windows_arm64_vs2022_ninja: + extends: + - .windows_build_ninja + - .windows_arm64_vcvarsall_vs2022 + + variables: + CMAKE_CONFIGURATION: windows_arm64_vs2022_ninja + .windows_package: extends: - .windows_build_ninja @@ -224,6 +238,16 @@ variables: CMAKE_CONFIGURATION: windows_openwatcom1.9 +.windows_arm64_vs2022: + extends: .windows + + variables: + CMAKE_CONFIGURATION: windows_arm64_vs2022 + CMAKE_GENERATOR: "Visual Studio 17 2022" + CMAKE_GENERATOR_PLATFORM: "ARM64" + CMAKE_GENERATOR_TOOLSET: "v143,version=14.34.31933" + CMAKE_CI_NIGHTLY_IGNORE_DEPS: "true" + .mingw_osdn_io: extends: .windows @@ -292,6 +316,24 @@ - shell - concurrent +.windows_arm64_tags_nonconcurrent_vs2022: + tags: + - cmake # Since this is a bare runner, pin to a project. + - windows-arm64 + - shell + - vs2022 + - msvc-19.34 + - nonconcurrent + +.windows_arm64_tags_concurrent_vs2022: + tags: + - cmake # Since this is a bare runner, pin to a project. + - windows-arm64 + - shell + - vs2022 + - msvc-19.34 + - concurrent + ## Windows-specific scripts .before_script_windows: &before_script_windows @@ -304,11 +346,8 @@ - . .gitlab/ci/ninja-env.ps1 - (& "$env:WIX\bin\light.exe" -help) | Select -First 1 - cmake --version - - cmake -P .gitlab/ci/download_qt.cmake - - Set-Item -Force -Path "env:PATH" -Value "$pwdpath\.gitlab\qt\bin;$env:PATH" - - cmake -P .gitlab/ci/download_python3.cmake - - Set-Item -Force -Path "env:PATH" -Value "$pwdpath\.gitlab\python3;$env:PATH" - - python --version + - . .gitlab/ci/qt-env.ps1 + - . .gitlab/ci/python-env.ps1 .cmake_build_windows: stage: build diff --git a/Help/dev/experimental.rst b/Help/dev/experimental.rst index adfa36f..336137f 100644 --- a/Help/dev/experimental.rst +++ b/Help/dev/experimental.rst @@ -39,6 +39,10 @@ they can use it to develop and test their dependency scanning tool. The ``CMAKE_EXPERIMENTAL_CXX_SCANDEP_SOURCE`` variable must also be set to tell CMake how to invoke the C++20 module dependency scanning tool. +MSVC 19.34 (provided with Visual Studio 17.4) and above contains the support +that CMake needs and has these variables already set up as required and only +the UUID variable needs to be set. + For example, add code like the following to a test project: .. code-block:: cmake diff --git a/Modules/CMakeDetermineASMCompiler.cmake b/Modules/CMakeDetermineASMCompiler.cmake index d03cbef..5ec2972 100644 --- a/Modules/CMakeDetermineASMCompiler.cmake +++ b/Modules/CMakeDetermineASMCompiler.cmake @@ -129,14 +129,13 @@ if(NOT CMAKE_ASM${ASM_DIALECT}_COMPILER_ID) if("x${CMAKE_ASM${ASM_DIALECT}_COMPILER_ID}" STREQUAL "xIAR") # primary necessary to detect architecture, so the right archiver and linker can be picked # eg. "IAR Assembler V8.10.1.12857/W32 for ARM" or "IAR Assembler V4.11.1.4666 for Renesas RX" - # Cut out identification first, newline handling is a pain + # Earlier versions did not provide `--version`, so grep the full output to extract Assembler ID string string(REGEX MATCH "IAR Assembler[^\r\n]*" _compileid "${CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_OUTPUT}") if("${_compileid}" MATCHES "V([0-9]+\\.[0-9]+\\.[0-9]+)") set(CMAKE_ASM${ASM_DIALECT}_COMPILER_VERSION ${CMAKE_MATCH_1}) endif() - string(REGEX MATCHALL "([A-Za-z0-9-]+)" _all_compileid_matches "${_compileid}") - if(_all_compileid_matches) - list(GET _all_compileid_matches "-1" CMAKE_ASM${ASM_DIALECT}_COMPILER_ARCHITECTURE_ID) + if("${_compileid}" MATCHES "for.*(MSP430|8051|ARM|AVR|RH850|RISC-?V|RL78|RX|STM8|V850)") + set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ARCHITECTURE_ID ${CMAKE_MATCH_1}) endif() elseif("x${CMAKE_ASM${ASM_DIALECT}_COMPILER_ID}" STREQUAL "xClang") # Test whether an MSVC-like command-line option works. diff --git a/Modules/Compiler/MSVC-CXX.cmake b/Modules/Compiler/MSVC-CXX.cmake index 60d13f1..212f6d1 100644 --- a/Modules/Compiler/MSVC-CXX.cmake +++ b/Modules/Compiler/MSVC-CXX.cmake @@ -77,3 +77,15 @@ elseif (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 16.0) _record_compiler_features(CXX "" CMAKE_CXX_COMPILE_FEATURES) endmacro() endif() + +if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "19.34") + set(CMAKE_EXPERIMENTAL_CXX_MODULE_DYNDEP 1) + string(CONCAT CMAKE_EXPERIMENTAL_CXX_SCANDEP_SOURCE + "<CMAKE_CXX_COMPILER> <DEFINES> <INCLUDES> <FLAGS> <SOURCE> -nologo -TP" + " -showIncludes" + " -scanDependencies <DYNDEP_FILE>" + " -Fo<OBJECT>") + set(CMAKE_EXPERIMENTAL_CXX_SCANDEP_DEPFILE_FORMAT "msvc") + set(CMAKE_EXPERIMENTAL_CXX_MODULE_MAP_FORMAT "msvc") + set(CMAKE_EXPERIMENTAL_CXX_MODULE_MAP_FLAG "@<MODULE_MAP_FILE>") +endif () diff --git a/Source/CMakeVersion.cmake b/Source/CMakeVersion.cmake index 67a9e4f..fbd5c69 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 25) -set(CMake_VERSION_PATCH 20221111) +set(CMake_VERSION_PATCH 20221114) #set(CMake_VERSION_RC 0) set(CMake_VERSION_IS_DIRTY 0) diff --git a/Source/cmScanDepFormat.cxx b/Source/cmScanDepFormat.cxx index ec53af5..81ef3da 100644 --- a/Source/cmScanDepFormat.cxx +++ b/Source/cmScanDepFormat.cxx @@ -5,7 +5,6 @@ #include <cctype> #include <cstdio> -#include <iostream> #include <utility> #include <cm/optional> @@ -281,27 +280,6 @@ bool cmScanDepFormat_P1689_Parse(std::string const& arg_pp, info->Requires.push_back(require_info); } } - - // MSVC 17.3 toolchain bug. Remove when 17.4 is available. - if (rule.isMember("is-interface")) { - std::cerr - << "warning: acknowledging an VS 17.3 toolchain bug; accepting " - "until a new release which fixes it is available" - << std::endl; - - Json::Value const& is_interface_json = rule["is-interface"]; - if (!is_interface_json.isBool()) { - cmSystemTools::Error( - cmStrCat("-E cmake_ninja_dyndep failed to parse ", arg_pp, - ": is-interface is not a boolean")); - return false; - } - bool is_interface = is_interface_json.asBool(); - - for (auto& provide : info->Provides) { - provide.IsInterface = is_interface; - } - } } } diff --git a/Tests/CTestUpdateGIT.cmake.in b/Tests/CTestUpdateGIT.cmake.in index a3ef4eb..7fddaa3 100644 --- a/Tests/CTestUpdateGIT.cmake.in +++ b/Tests/CTestUpdateGIT.cmake.in @@ -34,7 +34,7 @@ endif() # Adapt to the system default branch name. execute_process( - COMMAND ${GIT} config --get init.defaultBranch + COMMAND ${GIT} --git-dir= config --get init.defaultBranch RESULT_VARIABLE defaultBranchFailed OUTPUT_VARIABLE defaultBranch ERROR_VARIABLE defaultBranchError diff --git a/Tests/RunCMake/CXXModules/NoCXX20ModuleFlag-stderr.txt b/Tests/RunCMake/CXXModules/NoCXX20ModuleFlag-stderr.txt index 5f90ec8..aa99af0 100644 --- a/Tests/RunCMake/CXXModules/NoCXX20ModuleFlag-stderr.txt +++ b/Tests/RunCMake/CXXModules/NoCXX20ModuleFlag-stderr.txt @@ -1,4 +1,4 @@ -CMake Warning \(dev\) at NoCXX20ModuleFlag.cmake:4 \(target_sources\): +CMake Warning \(dev\) at NoCXX20ModuleFlag.cmake:6 \(target_sources\): CMake's C\+\+ module support is experimental. It is meant only for experimentation and feedback to CMake developers. Call Stack \(most recent call first\): diff --git a/Tests/RunCMake/CXXModules/NoCXX20ModuleFlag.cmake b/Tests/RunCMake/CXXModules/NoCXX20ModuleFlag.cmake index 5f896f9..79892ee 100644 --- a/Tests/RunCMake/CXXModules/NoCXX20ModuleFlag.cmake +++ b/Tests/RunCMake/CXXModules/NoCXX20ModuleFlag.cmake @@ -1,5 +1,7 @@ enable_language(CXX) +unset(CMAKE_EXPERIMENTAL_CXX_MODULE_DYNDEP) + add_library(noexperimentalflag) target_sources(noexperimentalflag PUBLIC |