1
0
mirror of https://github.com/Kitware/CMake.git synced 2025-06-21 20:11:22 +08:00

490 Commits

Author SHA1 Message Date
Ben Boeckel
b6a5382217 Ninja: depend on language module information files directly
Now that `GetLinkedTargetDirectories` can get the exact dependencies,
use them to simplify the collation dependency graph.
2023-02-10 18:42:02 -05:00
Ben Boeckel
0ace6053e8 Ninja: track modmap dependencies properly
Mark modmaps as outputs of the collation step.
2023-02-10 18:03:15 -05:00
Ben Boeckel
b215cbc07d Ninja: remove the modmap as an output of the scanner
It's actually an output of the collator.
2023-02-10 17:51:46 -05:00
Kyle Edwards
78cf427157 RULE_LAUNCH_*: Add support for generator expressions 2023-02-03 11:23:32 -05:00
Brad King
c3210aab46 Merge topic 'lang-linker-launcher-genex'
33e27f6ca6 <LANG>_LINKER_LAUNCHER: Allow generator expressions
84ada0b0c9 <LANG>_COMPILER_LAUNCHER: Expand subset of genexes that can be evaluated

Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: buildbot <buildbot@kitware.com>
Merge-request: !8152
2023-02-03 10:00:49 -05:00
Kyle Edwards
84ada0b0c9 <LANG>_COMPILER_LAUNCHER: Expand subset of genexes that can be evaluated 2023-02-02 11:37:30 -05:00
Ben Boeckel
837f7c113a cmCommonTargetGenerator: classify linked target directories by language
These directories are used to direct collators for Fortran and C++
modules to consume dependent module information to properly collate.
However, the consumption of these files merely checks for existence of
the file, not whether they are actually needed anymore.

The problem arises when a target has Fortran or C++ modules at point A,
a build occurs populating this file, and then the target is updated to
no longer have potential modules. The `DependInfo.make` (for
`Makefiles`) or `<LANG>DependInfo.json` (for `Ninja`) files still exist
as they are never guaranteed to be cleaned up. This can introduce stale
information to the build which may cause a false-positive compilation if
a module file happens to still exist and gets found this way.

Instead, query the `linked-target-dirs` using the language in question
and only add the directory if it contains potential sources for modules
coming from the language in question.
2023-01-31 22:34:29 -05:00
Ben Boeckel
e84fcbcb0b cxxmodules: support new round of Clang patches
These patches now support the `-MF` output, so remove the `none` support
added just for the old patchset which did not use it.

Also update the flag name to `-fmodule-output=`.

Due to the new Clang module mapper flag, use a new experimental support
UUID as well.
2022-12-15 18:43:47 -05:00
Brad King
3b4337adc7 Merge topic 'clang-tidy-export-fixes-dir'
232467eb1c clang-tidy: add <LANG>_CLANG_TIDY_EXPORT_FIXES_DIR property

Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: buildbot <buildbot@kitware.com>
Merge-request: !7982
2022-12-07 08:19:53 -05:00
Kyle Edwards
232467eb1c clang-tidy: add <LANG>_CLANG_TIDY_EXPORT_FIXES_DIR property
Fixes: #21362
2022-12-06 10:39:29 -05:00
Ben Boeckel
9c66224668 cmNinjaTargetGenerator: skip setting depfile for none scantypes
The `clang` mechanism does not support `depfile` discovered dependencies
at the moment.
2022-12-02 13:01:13 -05:00
Ben Boeckel
9123a0991f cmNinjaTargetGenerator: use .clear() to empty out some strings 2022-12-01 22:21:42 -05:00
Ben Boeckel
3fc2de5c74 cmDyndepCollation: factor out writing C++ module info from Ninja
To facilitate other generators being able to build C++20 modules, start
pulling out collator logic into a generator-agnostic location.

This commit starts by factoring out the information written to the
"target depend info" object consumed during the build to handle writing
out export and installation scripts expected during those steps.
2022-11-30 10:53:45 -05:00
Ben Boeckel
e37ff5694c cmGeneratorTarget: factor out fileset info and scanning detection 2022-11-23 18:52:36 -05:00
Ben Boeckel
9e61fc3d6d cmGeneratorTarget: factor out dyndep support detection 2022-11-23 17:35:41 -05:00
Ben Boeckel
a02d792c6e cxxmodules: add properties to control scanning
The `CXX_SCAN_FOR_MODULES` property may be used to control scanning for
targets and for source files rather than assuming "C++20 always needs to
be scanned".
2022-11-18 07:54:31 -05:00
Ben Boeckel
008c09d6db cmNinjaTargetGenerator: factor out determining the fileset of a source
This information is now needed in more than one place, so factor the
logic out and use it to build a cache.
2022-11-17 15:26:55 -05:00
Brad King
a9d5a0bf4b Merge topic 'compile-commands-output-field'
887a8874c3 EXPORT_COMPILE_COMMANDS: add `output` field

Acked-by: Kitware Robot <kwrobot@kitware.com>
Tested-by: buildbot <buildbot@kitware.com>
Merge-request: !7844
2022-11-01 09:02:15 -04:00
Evan Wilde
e88509d0e8
Swift: Omit output-file-map when used as a linker
Swift is used as the linker for non-swift files because it needs to pull
files like swiftrt.o in when swift symbols are present to ensure that
the swift runtime is linked.

The swift driver uses clang as the underlying linker, which pulls in
crtbegin.o and friends when appropriate, so using Swift as a linker for
C/C++ libraries is fine.

The output-file-map was getting passed to all Swift invocations,
regardless of whether or not we generated one. This patch changes it so
that we only include the output-file-map in the Swift compiler
invocation if we have actually generated the file.
2022-10-28 16:44:26 -07:00
Ben Boeckel
887a8874c3 EXPORT_COMPILE_COMMANDS: add output field
Also write for all configurations from multi-config generators.

This field was added in the Clang 5 documentation and not present in the
Clang 4 documentation (sometime between Dec 2016 and Mar 2017 according
to `web.archive.org`).
2022-10-28 13:54:43 -04:00
Thomas Weißschuh
36400e9dc1 COMPILER_LAUNCHER: Add support for generator expressions
Fixes: #23441
2022-08-30 17:26:25 -04:00
Kyle Edwards
a186c1aff6 Ninja Multi-Config: Deduplicate compile_commands.json for cross configs
compile_commands.json was being written for every permutation of
cross configurations. Deduplicate so only one command is output
for each configuration.

Fixes: #23733
2022-07-15 16:22:21 -04:00
Ben Boeckel
fddd44c897 cmNinjaTargetGenerator: write out BMI install information for the collator 2022-07-06 10:15:23 -04:00
Ben Boeckel
95402a0bd7 cmNinjaTargetGenerator: write out export information for the collator
The collator will use this to know where the target's export information
needs to go so that module properties may be provided.
2022-07-06 10:15:23 -04:00
Ben Boeckel
d3e2e61bcd cmNinjaTargetGenerator: write out fileset information for the collator
The collator will use this to generate property settings for the
imported targets in the build and install export sets.
2022-07-06 10:15:23 -04:00
Ben Boeckel
386465bf83 cmTarget: add support for C++ module fileset types
C++ modules have two variants which are of importance to CMake:

  - `CXX_MODULES`: interface modules (those using `export module M;`,
    `export module M:part;`, or `module M:internal_part;`)
  - `CXX_MODULE_HEADER_UNITS`: importable header units

Creating C++ modules or partitions are *not* supported in any other
source listing. This is because the source files must be installed (so
their scope matters), but not part of usage requirements (what it means
for a module source to be injected into a consumer is not clear at this
moment). Due to the way `FILE_SET` works with scopes, they are a perfect
fit as long as `INTERFACE` is not allowed (which it is not).
2022-06-16 10:28:34 -04:00
Ben Boeckel
030754a8b3 cmNinjaTargetGenerator: expand CFGIntDir for NMC 2022-06-14 19:27:30 -04:00
Ben Boeckel
c107760417 cmNinjaTargetGenerator: support msvc-style deps discovery for scanning 2022-04-27 18:39:01 -04:00
Ben Boeckel
64c15ec018 cmNinjaTargetGenerator: add flags for scanning based on the fileset type 2022-04-27 15:14:50 -04:00
Robert Maynard
f7c6b9833c CUDA: Ninja generator generates valid compile database
The ninja generator has been updated to poperly write the compile
database when the CUDA language has been enabled.

Fixes #23368
2022-03-30 15:16:43 -04:00
Peter Hill
6b4885b58b Ninja: Avoid preprocessing twice with explicit Fortran_PREPROCESS
Fix spurious warnings from gfortran+Ninja for preprocessing.

Fixes: #23248
2022-02-24 12:54:46 -05:00
Brad King
94a58e502b cmLocalGenerator: Remove unused IncludePathStyle infrastructure
It is unused since commit c564a3e3ff (Ninja: Always compile sources
using absolute paths, 2021-05-19, v3.21.0-rc1~129^2), which left
behind a FIXME comment to eventually remove it.
2021-12-01 11:33:30 -05:00
Brad King
30be83c8a2 Merge topic 'ninja-pdb-dir'
73b84db62d Ninja: Fix creation of Windows import library directory
bd36735f65 cmNinjaTargetGenerator: Replace "their" with "there" in comment

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !6694
2021-11-04 09:02:02 -04:00
Brad King
bd36735f65 cmNinjaTargetGenerator: Replace "their" with "there" in comment 2021-11-03 10:08:47 -04:00
Robert Maynard
61b9764b03 CUDA: Allow both CUDA_SEPARABLE_COMPILATION and CUDA_PTX_COMPILATION
The target properties `CUDA_SEPARABLE_COMPILATION` and `CUDA_PTX_COMPILATION`
now aren't mutually exclusive and can now be used together on the same
target.
2021-10-20 11:18:06 -04:00
Marc Chevrier
cc56dc7468 Rename cmProp in cmValue 2021-09-21 17:14:04 +02:00
Brad King
085719d4d8 Merge topic 'iwyu-cl'
ccfe1b0b40 IWYU: Add `--driver-mode=cl` when applicable

Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: buildbot <buildbot@kitware.com>
Merge-request: !6511
2021-09-14 09:36:13 -04:00
PigeonF
ccfe1b0b40 IWYU: Add --driver-mode=cl when applicable
We already do this for `clang-tidy`.

Fixes: #16554
2021-09-10 09:53:31 -04:00
Wayde Reitsma
fa2f6e0f5a cmNinjaTargetGenerator: Use short path for cmcldeps.exe 2021-09-04 09:34:05 +10:00
Marc Chevrier
5a2a275bb4 Refactor: reduce cmToCStr usage 2021-08-19 10:49:30 +02:00
Brad King
312ced6547 cmNinjaTargetGenerator: Fix scan rule PREPROCESSED_SOURCE placeholder
When running the module dependencies scan tool for for a language that
does not compile the preprocessed output, we do not actually put the
preprocessed output in the build graph.  However, the value of
`CMAKE_EXPERIMENTAL_<LANG>_SCANDEP_SOURCE` may reference the placeholder
for the preprocessed source.  Populate the placeholder to keep the file
out of the way.  In particular, do not clobber the `.ddi` file.
2021-06-14 15:15:39 -04:00
Brad King
1dd9c4ab6f cmNinjaTargetGenerator: Clarify GetScanBuildStatement condition
Use the `compilePP` variable directly rather than relying on callers
to make `compilePP == !ppFileName.empty()`.
2021-06-14 15:11:20 -04:00
Brad King
d94b23885a cmNinjaTargetGenerator: Simplify scan rule response file selection
Since commit 33a8e0bb09 (cmNinjaTargetGenerator: Simplify scan rule
depfile selection, 2020-11-06, v3.20.0-rc1~516^2~1), the `$out` of the
scan rule always matches our `.rsp` file selection, so use `$out.rsp`.
2021-06-14 15:06:34 -04:00
Robert Maynard
b50bfc8913 HIP: Add language to CMake 2021-06-07 19:25:33 +00:00
Brad King
c564a3e3ff Ninja: Always compile sources using absolute paths
The Ninja generator traditionally referenced source files and include
directories using paths relative to the build directory if they could be
expressed without a `../` sequence that leaves the build and source
directories.  For example, when using a `build/` directory inside the
source tree, sources would be compiled as `-c ../src.c` and include
directories would be referenced as `-I ../include`.  This approach
matches the traditional Ninja convention of using relative paths
whenever possible, but has undesirable side effects such as:

* Compiler diagnostic messages may not use absolute paths, making it
  harder for IDEs/editors to find the referenced sources or headers.

* Debug symbols may not use absolute paths, making it harder for
  debuggers to find the referenced sources or headers.

* Different results depending on the path to the build tree relative
  to the source tree.

* Inconsistent with the Makefile generators, which use absolute paths.

Switch to always using absolute paths to reference source files and
include directories on compiler command lines.  While alternative
solutions for diagnostic messages and debug symbols may exist with
specific tooling, this is the simplest and most consistent approach.

Note that a previous attempt to do this in commit 955c2a630a (Ninja: Use
full path for all source files, 2016-08-05, v3.7.0-rc1~275^2) was
reverted by commit 666ad1df2d (Revert "Ninja: Use full path for all
source files", 2017-02-24, v3.8.0-rc2~9^2) due to problems hooking up
depfile dependencies on generated files.  This time, the changes in
commit 2725ecff38 (Ninja: Handle depfiles with absolute paths to
generated files, 2021-05-19) should avoid those problems.

Fixes: #13894, #17450
2021-05-25 10:48:26 -04:00
Brad King
fb3a57575a cmNinjaTargetGenerator: Rename source file path lookup method for clarity
The `GetSourceFilePath` method is meant only for compiled sources, and
automatically handles converting it to a path for the Ninja build
manifest.  Rename the method to clarify both.
2021-05-25 10:48:25 -04:00
Brad King
0f2b1c9d1b cmNinjaTargetGenerator: Remove GetSourceFilePath call with different semantics
Reference external object files using `ConvertToNinjaPath` directly.
`GetSourceFilePath` is meant to reference source files to be compiled.
2021-05-25 10:48:25 -04:00
Brad King
dfc98774a2 cmNinjaTargetGenerator: Rename local variable for clarity 2021-05-25 10:48:25 -04:00
Brad King
ef553410e2 Ninja/Swift: Remove redundant calls to ConvertToNinjaPath
`GetSourceFilePath` already handles converting to a Ninja path.
2021-05-25 10:48:25 -04:00
Brad King
bd12b97d05 cmScanDepFormat: Drop unused "outputs", "inputs", and "depends" fields
These fields are specified by our `P1689r3` paper, but are not actually
needed.  The dependencies of the scanning results themselves can be
captured via normal depfile logic.  Avoid saving this possibly-large
information in the scanning results.  It is not needed by later steps.
2021-05-13 08:33:00 -04:00