summaryrefslogtreecommitdiff
path: root/Modules/CMakeDetermineCompilerId.cmake
Commit message (Collapse)AuthorAgeFilesLines
* Merge topic 'msvc-wine-showIncludes'Brad King2023-05-161-1/+1
|\ | | | | | | | | | | | | | | fb3c4715cd Ninja: Restore detection of msvc-wine showIncludes prefix Acked-by: Kitware Robot <kwrobot@kitware.com> Acked-by: huangqinjin <huangqinjin@gmail.com> Merge-request: !8479
| * Ninja: Restore detection of msvc-wine showIncludes prefixBrad King2023-05-151-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Since commit 8f82e755f3 (Ninja: Fix detection of MSVC showIncludes prefix in Italian, 2023-01-26, v3.26.0-rc1~20^2) our regex no longer matches the output from `msvc-wine`, which uses forward slashes: Note: including file: /path/to/foo.h `cl /showIncludes` under Wine prints paths of the form `Z:\path\to\file`, but the `msvc-wine` wrapper converts them to the form `/path/to/file` so that native Ninja can be used. Update our regex to match the prefix followed by a path with a leading forward slash. Fixes: #24908
* | VS/Android: Set API level explicitly during compiler identificationMichael Karcher2023-04-251-0/+2
| | | | | | | | | | VS2022 defaults to API 31 in 64-bit builds. This breaks if you combine VS2022 with an older Android NDK.
* | VS/Android: Use ApplicationTypeRevision 3.0 in VS2022Michael Karcher2023-04-251-1/+1
| | | | | | | | | | | | Visual Studio 17 (Marketing name: Visual Studio 2022) still ships with "3.0" as most recent Variant of the Android application type. Use this revision.
* | Merge topic 'clang-cl-showIncludes'Brad King2023-03-211-1/+1
|\ \ | |/ | | | | | | | | | | | | 843fc607de Ninja: Restore detection of clang-cl showIncludes prefix 3346570ae9 Tests: Comment RunCMake.Ninja ShowIncludes sample input languages Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !8344
| * Ninja: Restore detection of clang-cl showIncludes prefixYR Chen2023-03-201-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Since commit 8f82e755f3 (Ninja: Fix detection of MSVC showIncludes prefix in Italian, 2023-01-26, v3.26.0-rc1~20^2) our regex no longer matches the output from `clang-cl`, which uses a relative path, forward slashes, and is always in English [1]: Note: including file: ./foo.h Update the regex to match that too. [1] https://github.com/llvm/llvm-project/blob/llvmorg-16.0.0/clang/lib/Frontend/HeaderIncludeGen.cpp#L102 Co-authored-by: Brad King <brad.king@kitware.com>
* | VS: Import default C++ props file before toolset-specific props fileMatthew Voss2023-03-071-0/+3
| | | | | | | | | | | | | | This avoids overwriting toolset-specific settings like `VCRedistDir` with default settings. Fixes: #22420
* | CompilerId: Fix handling of CMAKE_<LANG>_FLAGS with quotesRussell Greene2023-02-031-1/+1
|/ | | | | | Use `separate_arguments` to correctly parse arguments with quotes. Fixes: #24385
* Ninja: Fix detection of MSVC showIncludes prefix in ItalianBrad King2023-01-281-1/+1
| | | | | | The prefix does not have two colons. Update our regex. Fixes: #24357
* Ninja: Record showIncludes detection in configure logBrad King2023-01-271-0/+6
| | | | Also avoid running the detection multiple times.
* Modules: Record system inspection steps in the configure logBrad King2023-01-181-16/+23
| | | | | | | | Replace old-style `file(APPEND .../CMake{Output,Error}.log)` logging with calls to `message(CONFIGURE_LOG)` to record the steps in the `CMakeConfigureLog.yaml` configure log instead. Issue: #23200
* GHS: Drop debugging message from logBrad King2023-01-181-2/+0
|
* CompilerId: Restore logging of failed identificationsBrad King2023-01-181-2/+4
| | | | | | Changes in commit 9c5bd7fe3a (CompilerId: Output errors from all attempts at detection, 2022-08-16, v3.25.0-rc1~290^2) accidentally stopped logging failed compiler identification build output.
* Set CMAKE_<LANG>_COMPILER_FRONTEND_VARIANT on single-variant compilersRussell Greene2023-01-111-1/+5
| | | | | | | The `GNU` and `MSVC` compilers obviously use their own front-end command-line style. Also set this for `AppleClang`. Fixes: #24232
* Ninja: Match showIncludes dependencies using console output code pageBrad King2022-10-301-1/+1
| | | | | | | | | Generalize the fix from commit 37a279f8d1 (Ninja: Write msvc_deps_prefix as UTF-8 when console codepage is UTF-8, 2020-07-31, v3.19.0-rc1~349^2). `cl /showIncludes` output is encoded using the console output code page, so this is the byte sequence that Ninja must use to match its lines. Fixes: #24068
* CompilerId: Output errors from all attempts at detectionRobert Maynard2022-08-161-2/+6
| | | | | Instead of printing the output of the last attempt, print the output of all attempts. This shows users that CMake isn't ignoring any provided flags ( LANG_FLAGS ).
* Merge topic 'xcode-14'Brad King2022-06-111-0/+2
|\ | | | | | | | | | | | | | | | | 627c08e28b Tests: Teach RunCMake to ignore Xcode DVTSDK warnings ab40020b17 Xcode: Suppress "Run Script" build phase warning during compiler id 89e1113e0c Xcode: Use ad-hoc signing during compiler id on macOS Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !7350
| * Xcode: Use ad-hoc signing during compiler id on macOSBrad King2022-06-101-0/+2
| | | | | | | | | | | | | | | | Xcode 14 no longer accepts an empty signing identity for macOS. However, Xcode in general does not accept an ad-hoc signing identity for iOS. Switch based on the target platform. Fixes: #23609
| * Merge topic 'vs-intel-oneapi-toolset' into release-3.22Brad King2021-12-171-5/+3
| |\ | | | | | | | | | | | | | | | | | | 612c0d49f4 VS: Fix detecting icx.exe with Intel Compiler toolsets newer than 2021 Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !6806
* | | CUDA: Defer architecture testing to the compiler testing stepBrad King2022-04-251-7/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Verifying the architectures during compiler identification is redundant, and requires a lot more up-front information than we should need. It also causes unsupported architectures to break the compiler id and version detection, so the resulting output from CMake does not report the compiler version, which is useful information to know why the specified architectures are not supported. The "detecting compiler ABI info" and "check for working compiler" steps already pass `CMAKE_CUDA_ARCHITECTURES` into their test projects. Therefore we can just drop the earlier architecture testing. Bad architectures will be reported as a not-working compiler, and the output will include the compiler's error message. This reverts the approach from: * commit 19cc5bc296 (CUDA: Throw error if user-specified architectures don't work, 2020-05-26, v3.18.0-rc1~79^2) * commit 650c1029a0 (CUDA: Detect non-working user-specified architectures on NVCC, 2020-05-28, v3.18.0-rc1~51^2) * commit 01428c5560 (CUDA: Fail fast if CMAKE_CUDA_ARCHITECTURES doesn't work during detection, 2020-08-29, v3.19.0-rc1~241^2). Their goal was in part to avoid waiting until the test for working compiler to detect unsupported architectures. However, experience has shown that failing earlier is more trouble than it's worth. Fixes: #23161 Issue: #20756
* | | ADSP: Configure compiler in compiler moduleChris Wright2022-04-041-1/+10
| | |
* | | CUDA: Add support for CUDA_ARCHITECTURES=nativeBrad King2022-03-101-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | CUDA 11.6 added the `nvcc -arch=native` flag to automatically compile for the host GPUs' architectures. Add support for specifying this special `native` value in `CMAKE_CUDA_ARCHITECTURES` and `CUDA_ARCHITECTURES`. During the compiler ABI detection step, detect the native architectures so we can pass them explicitly when using Clang or older versions of nvcc. Fixes: #22375
* | | CUDA: Restore support for CMAKE_CUDA_ARCHITECTURES=OFFRobert Maynard2022-03-091-1/+1
| | | | | | | | | | | | Fixes: #23309
* | | VS: Fix CUDA compiler id with CMAKE_CUDA_ARCHITECTURES={all,all-major}Brad King2022-03-021-4/+6
| | | | | | | | | | | | | | | | | | | | | | | | Skip the architecture verification check for these values on Visual Studio. It cannot be implemented correctly until future work delays the check to the main compiler test step. Issue: #23164, #23161
* | | Merge topic 'vs-intel-oneapi-toolset'Brad King2021-12-171-5/+3
|\ \ \ | | |/ | |/| | | | | | | | | | | | | 612c0d49f4 VS: Fix detecting icx.exe with Intel Compiler toolsets newer than 2021 Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !6806
| * | VS: Fix detecting icx.exe with Intel Compiler toolsets newer than 2021William R. Dieter2021-12-151-5/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The logic added by commit 7808cbd644 (CMakeDetermineCompilerId: support Intel DPC++ compiler toolset for VS gen, 2020-12-06, v3.20.0-rc1~330^2) matches a specific toolset known to be the `icx.exe` compiler, and assumes all other Intel C++ compilers (that are not DPC++) must be `icl.exe`. Since `icx.exe` is officially replacing `icl.exe`, use a regex that matches the now-fixed set of toolsets known to use `icl.exe`. Any other Intel C++ compiler will be assumed to be `icx.exe`. Signed-off-by: William R. Dieter <william.r.dieter@intel.com>
* | | GHS: Update selection of primaryTarget in MULTI project fileFred Baksik2021-11-151-6/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Changes to ``-A`` handling: * Don't force CMAKE_GENERATOR_PLATFORM into cache when using default value (breaks using CMake presets). * Don't print message when using default value (breaks CMake tests). Changes to ``GHS_PRIMARY_TARGET`` handling: * Add as a cache variable so its known to GUI * Don't always include``GHS_TARGET_PLATFORM``, it's only needed if ``GHS_PRIMARY_TARGET`` wasn't set by the user. * Set ``GHS_PRIMARY_TARGET`` during platform selection instead of when a language is enabled. By performing this sooner ``GHS_TARGET_PLATFORM`` is not always required to be set into cache.
* | | Merge topic 'vs-framework-version'Brad King2021-11-081-0/+9
|\ \ \ | | |/ | |/| | | | | | | | | | | | | | | | | | | | | | d51246c662 VS: Default TargetFrameworkVersion to v4.7.2 for VS 2022 f97f8537f3 VS: Model a default target framework e40cedddc0 cmVisualStudio10TargetGenerator: Refactor target framework selection 78782cc7dc cmGlobalVisualStudio8Generator: Refactor SetGeneratorPlatform Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !6699
| * | VS: Model a default target frameworkBrad King2021-11-061-0/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add fields to the VS generator to select a target framework. Migrate the existing default for VS 12 .NET CF for Windows CE. Report the values in `CMAKE_VS_*` variables and use them for the CSharp compiler id project too. Issue: #22849
* | | LCC: Add policy CMP0129 regarding interpreting LCC as GNUmakise-homura2021-10-211-0/+21
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Due to MCST LCC compiler identification is now changed to LCC, there should be a way for old projects to still identify it as GNU, as it was before. This commits adds the policy: CMP0129: Compiler id for MCST LCC compilers is now LCC, not GNU. This policy controls such a behavior. OLD behaivior is to treat LCC as GNU, NEW is to treat is as LCC.
* | | LCC: Add dedicated support for MCST LCC compilermakise-homura2021-10-151-1/+1
|/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Divert LCC compiler as a new one, instead of treating it as GNU. Since old times, Elbrus C/C++/Fortran Compiler (LCC) by MCST has been passing checks for GNU compilers, so it has been identified as GNU. Now, with intent of seriously upstreaming its support, it has been added as a separate LCC compiler, and its version displays not a supported GCC version, but LCC version itself (e.g. LCC 1.25.19 instead of GNU 7.3.0). This commit adds its support for detection, and also converts basically every check like 'is this compiler GNU?' to 'is this compiler GNU or LCC?'. The only places where this check is untouched, is where it regards other platforms where LCC is unavailable (primarily non-Linux), and where it REALLY differs from GNU compiler. Note: this transition may break software that are already ported to Elbrus, but hardly relies that LCC will be detected as GNU; still such software is not known.
* | Xcode: Fix detection of default language standard when given -std= flagsBrad King2021-10-061-2/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If one uses `CFLAGS='-std=...'` or `CXXFLAGS='-std=...'` then the given `-std=` flag(s) will always be used. That effectively changes the compiler default standard level and extension settings. Fix the Xcode generator's compiler id logic to preserve any `-std=` flag so that the proper defaults are detected. This problem was exposed by commit 4a0485be7f (cmStandardLevelResolver: Avoid unnecessary flags, fix unset level logic, 2021-05-29), which changed the logic to not pass any `-std=` flag if the standard level and extension settings requested by the project match the default (`stdIt <= defaultStdIt` became `stdIt < defaultStdIt`). The new logic assumes the detected default standard matches what will actually happen when the project is generated.
* | CMakeDetermineCompilerId: Tolerate variables named for languagesBrad King2021-10-061-1/+1
| |
* | CompilerID: Compiler extensions default detectionRaul Tambre2021-09-281-0/+5
| |
* | CompilerID: Rename language_dialect to language_standardRaul Tambre2021-09-281-1/+1
| | | | | | | | | | In Linux C++ terms dialect usually refers to having GNU extensions or not. Change the name to better reflect that this is about the standard version.
* | Merge topic 'hip-no-hipcc'Brad King2021-09-201-35/+0
|\ \ | |/ | | | | | | | | | | | | | | | | | | | | | | cb93f72624 HIP: Simplify detection of HIP runtime CMake package a71f0fc9c7 HIP: Remove ROMClang compiler id and use Clang directly b125e9809a HIP: Detect ROCm path earlier 735f41fc2d HIP: Use 'rocm_agent_enumerator' to determine CMAKE_HIP_ARCHITECTURES Acked-by: Kitware Robot <kwrobot@kitware.com> Acked-by: buildbot <buildbot@kitware.com> Acked-by: Raul Tambre <raul@tambre.ee> Acked-by: Axel Huebl <axel.huebl@plasma.ninja> Merge-request: !6533
| * HIP: Remove ROMClang compiler id and use Clang directlyBrad King2021-09-161-24/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Since commit bd844387df (ROCMClang: Add the ROCm toolkit derived clang compiler to CMake, 2020-08-28, v3.21.0-rc1~66^2~6) and commit ff0d2858e1 (HIP: Extract clang compiler details from hipcc, 2020-10-21, v3.21.0-rc1~66^2~5), the separate `ROCMClang` compiler id for `hipcc` has caused a few problems: * The compiler id changed from behavior of CMake 3.20 and below, breaking projects that already built with `hipcc` treated as `Clang`. * The implementation of `target_compile_features` was incomplete for the `ROCMClang` identity. * Only `hipcc` was identified as `ROCMClang`, so after it is unwrapped to the underlying `clang++`, future runs of new CMake versions on an existing build tree would not repeat this. * Clang should be usable as a HIP compiler without the `hipcc` wrapper. Remove the `ROMClang` compiler identity, and revise HIP language support to work directly with a Clang compiler. Reject direct `hipcc` usage as a HIP compiler. For now it cannot be supported because it interferes with flags CMake needs to pass to Clang. Fixes: #22536, #22460, #22593
| * HIP: Detect ROCm path earlierBrad King2021-09-161-11/+0
| | | | | | | | | | | | | | | | | | Fail early if it is not found. Use the detected location as a hint to find `rocm_agent_enumerator`. Also remove the leading `_` prefix in case we want to document this publicly later.
* | Merge topic 'enable_language-CMP0126'Brad King2021-07-201-4/+0
|\ \ | |/ | | | | | | | | | | f75610d492 CMakeDetermineCompilerId: Fix CMAKE_EXECUTABLE_FORMAT in CMP0126 NEW behavior Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !6364
| * CMakeDetermineCompilerId: Fix CMAKE_EXECUTABLE_FORMAT in CMP0126 NEW behaviorBrad King2021-07-191-4/+0
| | | | | | | | | | | | | | | | Setting `CMAKE_EXECUTABLE_FORMAT` as a normal variable is unnecessary because setting it as a cache entry already makes the value visible to the calling scope. Fixes: #22433
* | Intel/Fortran: Avoid recording warning 5117 lines in CMakeError.logMichael Hirsch2021-07-061-2/+5
|/
* HIP: Extract clang compiler details from hipccRobert Maynard2021-06-071-0/+35
|
* ROCMClang: Add the ROCm toolkit derived clang compiler to CMakeRobert Maynard2021-06-071-1/+0
|
* Modules: Fix typos and spelling in commentsJosef Angstenberger2021-05-071-1/+1
|
* FujitsuClang: Use GNU-like command-linePaul Zehner2021-04-141-0/+2
|
* Merge topic 'flags-with-backslash'Brad King2021-04-081-5/+6
|\ | | | | | | | | | | | | 3953dfcb31 Restore support for backslashes in initial language-wide flags Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !5995
| * Restore support for backslashes in initial language-wide flagsBrad King2021-04-071-5/+6
| | | | | | | | | | | | | | | | | | | | Refactoring in commit bdc40742bd (CMakeDetermineCompilerId: Test without COMPILER_ID_FLAGS if REQUIRE_SUCCESS, 2021-02-27, v3.20.0-rc3~6^2) added an extra macro layer through which flag strings are passed. That caused an extra level of argument re-parsing, and broke flags with backslashes. Pass flags to the helper macro through variable names instead. Fixes: #22041
* | Fujitsu: Add support for the Fujitsu compiler in Trad modeChuck Atkins2021-03-301-2/+23
| | | | | | | | Co-Author: Yuichiro Utsumi <utsumi.yuichiro@jp.fujitsu.com>
* | VS: switch to new folder structure while keeping the old one workingMarcel Ritzschke2021-03-181-3/+13
|/ | | | Fixes: #21170
* CMakeDetermineCompilerId: Fix REQUIRE_SUCCESS with multiple user flagsRaul Tambre2021-03-021-1/+1
| | | | Need to quote the list expansion otherwise we'll try each argument separately.