summaryrefslogtreecommitdiffstats
path: root/Source/cmGlobalNinjaGenerator.cxx
Commit message (Collapse)AuthorAgeFilesLines
* Merge topic 'ninja-regenerate-no-recompact'Brad King2021-03-171-2/+3
|\ | | | | | | | | | | | | | | 6fd9c68ed0 Ninja: Do not recompact deps log in regeneration during a build Acked-by: Kitware Robot <kwrobot@kitware.com> Acked-by: Ben Boeckel <ben.boeckel@kitware.com> Merge-request: !5916
| * Ninja: Do not recompact deps log in regeneration during a buildBrad King2021-03-161-2/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Since commit fb18215904 (Ninja: clean ninja metadata once generated, 2019-05-13, v3.17.0-rc1~207^2) we recompact the ninja deps log during regeneration. That does not make sense during a build, so skip it if we are regenerating during a build. This problem went unnoticed previously because on non-Windows platforms the deps log is just overwritten again by the outer build. On Windows platforms, recompaction during the build fails, but we did not actually try to do that until commit 11f4259362 (Ninja: Clean metadata after regen during build on Windows with 1.10.2+, 2020-11-30, v3.19.2~29^2~1). Fixes: #21916
* | Ninja: Use new wincodepage tool to determine encodingKyle Edwards2021-03-091-8/+57
| | | | | | | | | | | | | | | | Ninja 1.11 and later uses UTF-8 on Windows when possible, and includes a tool that reports the code page in use. Use this tool to determine what encoding to write the Ninja files in. Fixes: #21866
* | clang-tidy: fix `readability-use-anyofallof` warningsBen Boeckel2021-01-271-23/+25
| |
* | Merge topic 'cpp-modules'Brad King2021-01-071-4/+84
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 39cbbb59a5 ninja: add experimental infrastructure to generate gcc-format modmap files 791b4d26d6 ninja: add experimental infrastructure to generate modmap files with dyndep 4b23359117 ninja: Add experimental infrastructure for C++20 module dependency scanning f814d3b3c6 cmNinjaTargetGenerator: use $OBJ_FILE for the object b0fc2993e1 Treat the '.mpp' file extension as C++ code 988f997100 cmScanDepFormat: Fix name of our internal tool in parse errors dacd93a2db ninja: De-duplicate version numbers required for ninja features 533386ca29 cmStandardLevelResolver: Factor out helper to capture stoi exceptions Acked-by: Kitware Robot <kwrobot@kitware.com> Acked-by: Ben Boeckel <ben.boeckel@kitware.com> Acked-by: Robert Maynard <robert.maynard@kitware.com> Acked-by: Shannon Booth <shannon.ml.booth@gmail.com> Merge-request: !5562
| * | ninja: add experimental infrastructure to generate gcc-format modmap filesBen Boeckel2021-01-051-1/+24
| | |
| * | ninja: add experimental infrastructure to generate modmap files with dyndepBen Boeckel2021-01-051-2/+24
| | | | | | | | | | | | | | | | | | | | | | | | The scan step may need to output additional information for the compiler, not just the build tool. The modmap is assumed to be beside the object output. Additional refactoring may open up a channel to inform per-source paths to the dyndep rule in the future, but is not done here.
| * | ninja: Add experimental infrastructure for C++20 module dependency scanningBrad King2021-01-051-0/+32
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Optionally enable this infrastructure through an undocumented `CMAKE_EXPERIMENTAL_CXX_MODULE_DYNDEP` variable. Currently this is experimental and intended for use by compiler writers to implement their scanning tools. Warn as such when the feature is activated. Later when compilers provide the needed scanning tools we can enable this variable from our corresponding compiler information modules. It is never meant to be set by project code. When enabled, generate a build graph similar to what we use for Fortran module dependencies. There are some differences needed because we can scan dependencies without explicit preprocessing, and can directly compile the original source afterward. Co-Author: Ben Boeckel <ben.boeckel@kitware.com>
| * | ninja: De-duplicate version numbers required for ninja featuresBrad King2021-01-051-2/+5
| | |
* | | Code style: add missed explicit 'this->'Oleksandr Koval2021-01-051-36/+38
|/ / | | | | | | | | CMake uses explicit 'this->' style. Using custom clang-tidy check we can detect and fix places where 'this->' was missed.
* | Merge topic 'custom-command-output-genex-nmc'Brad King2020-12-161-14/+83
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 1526ae3aba Tests: Add cases for Ninja Multi-Config cross-config custom commands dcf9f4d2f7 Ninja Multi-Config: Add support for cross-config custom commands 15467f12f7 cmLocalGenerator: Adopt custom target 'force' output name generation 7b64b0cd5a cmLocalGenerator: Refactor custom command generator construction d29da8ed3e cmMakefile: Simplify custom target 'force' output name generation 2b1cc175ee Help: Clarify version adding add_custom_{command,target} OUTPUT genex support Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !5612
| * | Ninja Multi-Config: Add support for cross-config custom commandsKyle Edwards2020-12-151-14/+83
| | | | | | | | | | | | Co-Author: Brad King <brad.king@kitware.com>
* | | Merge topic 'ninja-no-cleandead'Brad King2020-12-151-13/+1
|\ \ \ | |/ / |/| / | |/ | | | | | | | | 1144d25094 Merge branch 'backport-ninja-no-cleandead' into ninja-no-cleandead 73a961eaba Ninja: Remove cleandead on regeneration Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !5614
| * Merge branch 'backport-ninja-no-cleandead' into ninja-no-cleandeadBrad King2020-12-141-13/+1
| |\
| | * Ninja: Remove cleandead on regenerationBrad King2020-12-141-13/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Remove the `cleandead` tool invocation added by commit fb18215904 (Ninja: clean ninja metadata once generated, 2019-05-13, v3.17.0-rc1~207^2). The tool deletes files that were not previously deleted by regenerating the build system. Also, there are use cases where no-longer-generated files should not be removed, such as Qt's TS files. Fixes: #21549
* | | Merge topic 'ninja-regen-metadata'Brad King2020-12-011-2/+6
|\ \ \ | |/ / | | | | | | | | | | | | | | | | | | 73d1c78bf4 ci: update to use ninja 1.10.2 11f4259362 Ninja: Clean metadata after regen during build on Windows with 1.10.2+ Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !5555
| * | Ninja: Clean metadata after regen during build on Windows with 1.10.2+Brad King2020-11-301-2/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Ninja 1.10.2 fixes support for `generator = 1` rules that run metadata update commands during regeneration while a build is running. Update the condition added by commit ccaa0bccc4 (Ninja: Do not clean metadata when re-generating inside a running build, 2020-01-27, v3.17.0-rc1~73^2) to remove our workaround when Ninja is new enough. Fixes: #20274
* | | cmGlobalNinjaGenerator: use P1689 dependency file format for FortranBen Boeckel2020-11-171-74/+47
| | | | | | | | | | | | | | | | | | | | | The module dependency specification format described in the C++ JTC1/SC22/WG21 paper [1] is also suitable for use by Fortran. [1] http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p1689r2.html
* | | Ninja: Exclude unused dyndep features during CMake bootstrapBrad King2020-11-161-5/+9
| | |
* | | Merge topic 'ninja-cleandead-no-dyndep'Brad King2020-11-111-2/+9
|\ \ \ | |/ / | | | | | | | | | | | | | | | c5011399c5 Ninja: Avoid cleandead with dyndep bindings for Fortran module dependencies Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !5490
| * | Ninja: Avoid cleandead with dyndep bindings for Fortran module dependenciesBrad King2020-11-101-2/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | The Ninja `cleandead` tool does not account for implicit outputs discovered by `dyndep` bindings and can remove Fortran `.mod` files that are still needed. Disable the `cleandead` step when using `dyndep` bindings. Fixes: #21406
* | | Merge topic 'ninja-multi-per-config-sources'Brad King2020-10-271-1/+3
|\ \ \ | |/ / | | | | | | | | | | | | | | | | | | | | | b8937a992b Merge branch 'release' into ninja-multi-per-config-sources d13bd6ec3d Ninja Multi-Config: Don't try to calculate dependencies for "all" Acked-by: Kitware Robot <kwrobot@kitware.com> Acked-by: Brad King <brad.king@kitware.com> Merge-request: !5430
| * | Merge branch 'release' into ninja-multi-per-config-sourcesKyle Edwards2020-10-261-45/+100
| |\ \
| * | | Ninja Multi-Config: Don't try to calculate dependencies for "all"Kyle Edwards2020-10-261-1/+3
| | | |
* | | | Constify some code as suggested by clang-tidyCengizhan Pasaoglu2020-10-191-2/+2
| | | |
* | | | Ninja Multi-Config: Read configuration variables as normal variablesKyle Edwards2020-10-131-20/+13
| |/ / |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Early versions of the Ninja Multi-Config generator required CMAKE_CONFIGURATION_TYPES and friends to be cache variables in order to support selecting the default config in cmake(1) --build. The behavior of cmake(1) --build has since been updated to no longer require this, and requiring these variables to be cache variables is inconsistent with the other generators. Read the variables as normal CMake variables like the other generators. This does not require a policy, since the only scenario where this would cause a breakage is one where the cache variable and the CMake variable are explicitly set to different values, which doesn't make sense to do anyway.
* | | Ninja Multi-Config: Fix segfault when installing an exportKyle Edwards2020-10-091-7/+7
| | | | | | | | | | | | Fixes: #21290
* | | Merge topic 'ninja-multi-automoc-regression'Brad King2020-09-181-0/+1
|\ \ \ | |/ / | | | | | | | | | | | | | | | 23fe4b861f Ninja Multi-Config: Fix dependencies of custom commands Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !5238
| * | Ninja Multi-Config: Fix dependencies of custom commandsKyle Edwards2020-09-171-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | a9fd3a10 addressed the scenario where the depending target is a utility target, but not the scenario where the dependent target is a utility target. Account for this scenario. Also add a Qt-specific test case. Fixes: #21118
* | | ISPC: Support generation for multiple instruction setsRobert Maynard2020-09-041-0/+6
| | |
* | | Merge topic 'getdef'Brad King2020-09-031-2/+3
|\ \ \ | | | | | | | | | | | | | | | | | | | | | | | | 11425041f0 cmMakefile::GetDefinition: return cmProp Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !5179
| * | | cmMakefile::GetDefinition: return cmPropVitaly Stakhovsky2020-09-021-2/+3
| | | |
* | | | Merge branch 'master' into ninja-multi-automoc-regressionKyle Edwards2020-09-021-36/+84
|\ \ \ \ | |/ / / | | / / | |/ / |/| |
| * | Merge topic 'ispc_lang_support'Brad King2020-09-011-0/+42
| |\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 5ece12b7e4 gitlab-ci: add ISPC to the Fedora CI image 8976817d6d ISPC: Update help documentation to include ISPC 2368f46ba4 ISPC: Support building with the MSVC toolchain e783bf8aa6 ISPC: Support ISPC header generation byproducts and parallel builds 34cc6acc81 Add ISPC compiler support to CMake 419d70d490 Refactor some swift only logic to be re-used by other languages Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !5065
| | * | ISPC: Support ISPC header generation byproducts and parallel buildsRobert Maynard2020-08-281-0/+42
| | | |
| * | | Add INTERFACE libraries to generated buildsystem if they have SOURCESBrad King2020-08-071-1/+1
| |/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | INTERFACE libraries were created with the intention of collecting usage requirements for use by other targets via `target_link_libraries`. Therefore they were not allowed to have SOURCES and were not included in the generated buildsystem. In practice, this has become limiting: * Header-only libraries do have sources, they just do not compile. Developers should be able to edit those sources (the header files) in their IDE. * Header-only libraries may need to generate some of their header files via custom commands. Some projects work around these limitations by pairing each interface library with an `add_custom_target` that makes the header files and custom commands appear in the generated buildsystem and in IDEs. Lift such limitations by allowing INTERFACE libraries to have SOURCES. For those with sources, add a corresponding build target to the generated buildsystem. Fixes: #19145
| * | Merge topic 'cleanup-target-types'Brad King2020-07-281-4/+5
| |\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ef796cc743 cmGeneratorTarget: Skip computing link implementation for custom targets 45158b2afe cmGeneratorTarget: Simplify logic in ComputeLinkInterfaceLibraries d6b1f5704e cmGeneratorTarget: Add missing nullptr checks 7695b67500 cmComputeTargetDepends: Add missing nullptr check 95b5df8646 cmGeneratorTarget: Skip computing languages for custom targets 2f0790df50 Factor out generator checks for filtering on non-compiling targets 422d9a0ab2 Factor out generator checks for filtering out interface libraries bce82df0aa cmGeneratorTarget: Remove unnecessary target type check in dependency tracing ... Acked-by: Kitware Robot <kwrobot@kitware.com> Acked-by: Kyle Edwards <kyle.edwards@kitware.com> Merge-request: !5038
| | * | Factor out generator checks for filtering out interface librariesBrad King2020-07-231-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | Add a `cmGeneratorTarget::IsInBuildSystem` helper method to tell generators whether a target should participate in the generated build system.
| | * | cmGlobalNinjaGenerator: Replace switch default with all casesBrad King2020-07-231-2/+3
| | | |
| * | | Ninja: Remove parameter default for cmNinjaTargetDependsKyle Edwards2020-07-241-7/+11
| |/ /
| * | Allow generator expressions in the EXCLUDE_FROM_ALL target propertyJoerg Bornemann2020-07-211-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | This allows for setting EXCLUDE_FROM_ALL, conditional on the build configuration. However, only the Ninja Multi-Config generator supports different property values per config. All other multi-config generators will yield an error in that situation. Fixes: #20923
| * | cmMakefile: Refactor API to better handle empty config valuesRobert Maynard2020-07-031-24/+25
| | |
* | | Ninja Multi-Config: Fix dependencies of utility targetsKyle Edwards2020-09-021-1/+2
| | | | | | | | | | | | Fixes: #21118
* | | Ninja Multi-Config: Fix clean:all targetKyle Edwards2020-09-021-0/+1
|/ /
* | Refactoring: Third-parties public headers are under cm3p prefixMarc Chevrier2020-05-071-4/+4
| | | | | | | | Fixes: #20666
* | Merge branch 'master' into ninja-order-only-fixKyle Edwards2020-04-231-79/+78
|\ \ | |/ |/|
| * Merge topic 'ninja-fortran-doc'Brad King2020-04-201-8/+1
| |\ | | | | | | | | | | | | | | | | | | | | | f2fa7d20b2 Merge branch 'backport-3.17-ninja-fortran-doc' into ninja-fortran-doc fa31c195b8 Ninja: Document that Fortran support is available with Ninja 1.10+ Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !4626
| | * Merge branch 'backport-3.17-ninja-fortran-doc' into ninja-fortran-docBrad King2020-04-171-8/+1
| | |\
| * | | Refactoring: add cm::contains to <cmext/algorithm>Marc Chevrier2020-04-171-3/+2
| |/ /
| * | cmGlobalNinjaGenerator: Remove outdated commentBrad King2020-04-131-2/+0
| | |