1
0
mirror of https://github.com/Kitware/CMake.git synced 2025-06-24 05:03:26 +08:00

273 Commits

Author SHA1 Message Date
Brad King
688b1c11ec Merge topic 'ninja_cuda_export_compile_commands_support'
712af07e CUDA: CMAKE_EXPORT_COMPILE_COMMANDS now works with CUDA and Ninja

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !1055
2017-07-14 08:23:58 -04:00
Robert Maynard
712af07e47 CUDA: CMAKE_EXPORT_COMPILE_COMMANDS now works with CUDA and Ninja
Fixes: #17061
2017-07-13 11:23:16 -04:00
Yurii Batrak
4ef0eedb49 Ninja: always use response file for cmake_ninja_dyndep
Command line argument passed to the internal tool "cmake_ninja_dyndep"
could hit MAX_ARG_STRLEN on Linux for projects with a large code base.
To prevent such problems, a response file was opted for argument transfer
in all cases, not only on Windows.
2017-07-10 13:08:18 +02:00
Brad King
414438b2fb CUDA: Add option to run the compiler through launcher tools
Add a `CUDA_COMPILER_LAUNCHER` target property like those added for C
and CXX by commit v3.4.0-rc1~450^2 (Add options to launch the compiler
through tools like ccache or distcc, 2015-06-04).

Fixes: #16953
2017-06-09 12:34:39 -04:00
Brad King
6a2f833563 Ninja: Fix escaping of path to depfile
Replace the dedicated and non-portable escaping code with use of our
standard escaping logic.
2017-05-30 15:30:43 -04:00
Brad King
74672e2ffa Merge topic 'ninja-dyndep-response-file'
594d3d6f Ninja: support response file for cmake_ninja_depends on Windows

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !722
2017-04-25 09:41:18 -04:00
Bernhard Burgermeister
594d3d6fff Ninja: support response file for cmake_ninja_depends on Windows
The internal tool "cmake_ninja_depends" now supports reading the list of ddi
files from a reponse file to circumvent Windows command line length limits.

Use this response file for dyndep rule on Windows.
2017-04-25 09:32:50 +02:00
Brad King
305e628284 Merge topic 'loosen-object-deps'
d96e5d9a Tests: use BYPRODUCTS in the CustomCommandWorkingDirectory test
664591ce RunCMake.Ninja: add a test for assumed sources
adf60b28 ninja: break unnecessary target dependencies
01c5bb95 RunCMake.Ninja: support passing arguments when running ninja
7f947b60 ninja: remove duplicate order-only dependencies
e9827eba ninja: describe the intermediate order depends target better
b57b7d8e Ninja: Order Fortran dyndep file generation explicitly

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !430
2017-04-24 09:31:49 -04:00
Ben Boeckel
adf60b2838 ninja: break unnecessary target dependencies
Previously, given two libraries, X and Y where X depends on Y, all
object compilations of X would require the Y library to have been linked
before being compiled. This is not necessary and can instead be loosened
such that object compilations of X only depend on the order-only
dependencies of Y to be completed. This is to ensure that generated
sources, headers, custom commands, etc. are completed before X starts to
compile its objects.

This should help build performance in projects with many libraries which
cause a deep library dependency chain. Previously, a library at the
bottom would not start compilation until after all other libraries
completed, but now only its link step needs to wait and its compilation
jobs can be run in parallel with other tasks.

Fixes: #15555
2017-04-21 08:57:40 -04:00
Ben Boeckel
7f947b602f ninja: remove duplicate order-only dependencies 2017-04-21 08:57:02 -04:00
Ben Boeckel
e9827eba68 ninja: describe the intermediate order depends target better
This is only used for compiled objects, so indicate it as such.
2017-04-21 08:57:02 -04:00
Brad King
b57b7d8e55 Ninja: Order Fortran dyndep file generation explicitly
Each target's dyndep file generation depends on loading information
generated by the same step in its dependencies.  Add an explicit
ordering dependency to ensure the needed information is available.
Without the explicit ordering dependency we were abusing the more
general target ordering rules through the preprocessor rules generating
the `.ddi` files used as input to dyndep file generation.
2017-04-21 08:57:02 -04:00
Robert Maynard
23691d789e CUDA: Allow sources to be compiled to .ptx files
When the target property `CUDA_PTX_COMPILATION` is enabled CUDA OBJECT
libraries will generate ptx files instead of object files.
2017-04-20 13:25:38 -04:00
Daniel Pfeifer
1d829c862c Use quotes for non-system includes
Automate with:

git grep -l '#include <cm_' -- Source \
  | xargs sed -i 's/#include <\(cm_.*\)>/#include "\1"/g'

git grep -l '#include <cmsys/' -- Source \
  | xargs sed -i 's/#include <\(cmsys\/.*\)>/#include "\1"/g'

git grep -l '#include <cm[A-Z]' -- Source \
  | xargs sed -i 's/#include <\(cm[A-Z].*\)>/#include "\1"/g'
2017-04-11 22:35:21 +02:00
Brad King
10cbb87fa3 Merge topic 'ninja-fortran-depfile-fix'
805706b3 Ninja: Fix Fortran `include` dependency on generated file

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !601
2017-03-22 08:52:18 -04:00
Brad King
b5d8a6de48 Merge topic 'cuda_no_ninja_response_support'
feaea065 CUDA: Disable support for using response files.

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !596
2017-03-22 08:50:05 -04:00
Brad King
805706b36d Ninja: Fix Fortran include dependency on generated file
Work around upstream ninja issue 1251 by converting include directories
used by our Fortran dependency scanner to the same path format that we
use in preprocessor `-I` flags and in the `build.ninja` manifest.

Fixes: #16722
2017-03-21 15:19:01 -04:00
Robert Maynard
feaea0658c CUDA: Disable support for using response files. 2017-03-21 11:09:18 -04:00
Brad King
075f645409 Support WINDOWS_EXPORT_ALL_SYMBOLS with .def files
The `WINDOWS_EXPORT_ALL_SYMBOLS` target property exports all symbols
found in object files explicitly given to the linker.  However, the
linker may also find additional symbols in dependencies and copy them
into the linked binary (e.g. from `msvcrt.lib`).  Provide a way to
export an explicit list of such symbols by adding a `.def` file as a
source file.

Fixes: #16473
2017-03-21 10:02:34 -04:00
Brad King
f36eaf6a6e Refactor WINDOWS_EXPORT_ALL_SYMBOLS implementation
Use `cmGeneratorTarget::ModuleDefinitionInfo` to combine the
implementation of `WINDOWS_EXPORT_ALL_SYMBOLS` with that of using a
`.def` file as a source.  Only one of these could be used within a
single target before anyway.
2017-03-09 16:25:15 -05:00
Brad King
25d261efa7 Refactor module definition file selection
Create a `ModuleDefinitionInfo` structure for each configuration of a
target to hold corresponding information about the selected module
definition file (`.def` source).
2017-03-09 16:25:14 -05:00
Brad King
73909e2421 Merge topic 'ninja-no-full-path'
666ad1df Revert "Ninja: Use full path for all source files"
2017-02-27 09:11:17 -05:00
Brad King
8ea060f960 Merge branch 'ninja-no-full-path' into release 2017-02-24 10:50:21 -05:00
Brad King
666ad1df2d Revert "Ninja: Use full path for all source files"
This reverts commit v3.7.0-rc1~275^2 (Ninja: Use full path for all
source files, 2016-08-05).  Unfortunately using absolute paths can
cause incorrect rebuilds due to ninja limitations.  The ninja
manual [1] explains:

> ... using absolute paths, your depfile may result in a mixture of
> relative and absolute paths. Paths used by other build rules need
> to match exactly.

Passing an absolute path to a source file to the compiler while using a
relative path in the ninja build manifest can cause such mixture and
lead to incorrect rebuilds.  Simply revert the change for now.

Note that there was a follow-up to the original change in commit
v3.7.0-rc2~10^2 (Ninja: Fix RC language depfile generation with
cmcldeps, 2016-10-13).  We don't need to revert that because that
change made the relevant code cleverly adapt to whatever variable
we use to reference the source file.

[1] https://ninja-build.org/manual.html#_deps

Fixes: #16675
Issue: #13894
2017-02-24 10:15:50 -05:00
Brad King
08fa0b4595 CUDA: Fix boolean interpretation of CUDA_SEPARABLE_COMPILATION
If the property is explicitly set to a non-true value we should
not treat it as true.
2017-02-20 17:05:35 -05:00
Jamie Snape
0618ddf6b1 Add properties to run the cpplint style checker with the compiler
Create a `<LANG>_CPPLINT` target property (initialized by a
`CMAKE_<LANG>_CPPLINT` variable) to specify a `cpplint` style checker
command line to be run along with the compiler.
2017-01-23 14:47:13 -05:00
Brad King
a2e80cb085 CUDA: Detect MSVC architecture id 2017-01-12 10:39:02 -05:00
Brad King
6271df8ff5 Makefile,Ninja: De-duplicate MSVC compiler PDB path selection
Add a helper to cmCommonTargetGenerator instead of duplicating it
in cmMakefileTargetGenerator and cmNinjaTargetGenerator.
2016-12-15 16:20:21 -05:00
Brad King
d1d11f73a1 Merge topic 'clang-tidy'
b932cd42 clang-tidy: apply misc-redundant-expression fixes
88da3d68 clang-tidy: apply misc-suspicious-string-compare fixes
58c66393 clang-tidy: apply readability-static-definition-in-anonymous-namespace fixes
85bfddda clang-tidy: apply readability-redundant-control-flow fixes
2988abd9 clang-tidy: apply modernize-use-bool-literals fixes
a74e6893 clang-tidy: apply readability-redundant-string-init fixes
cac529dd clang-tidy: apply performance-faster-string-find fixes
7c9db8f8 clang-tidy: apply performance-unnecessary-value-param fixes
2016-12-12 14:21:27 -05:00
Brad King
ce71bd9505 Merge topic 'fix-ctest-launchers'
db61cd5d cmRulePlaceholderExpander: Remove unused member RuleLauncher
b7771078 Comment ExpandRuleVariables calls not preceded by launcher insertion
c58a5198 Makefile: Restore RULE_LAUNCH_COMPILE generation on compilation rules
2016-12-12 14:21:20 -05:00
Daniel Pfeifer
a74e689348 clang-tidy: apply readability-redundant-string-init fixes 2016-12-12 14:04:13 -05:00
Brad King
b7771078ad Comment ExpandRuleVariables calls not preceded by launcher insertion
Call sites of `ExpandRuleVariables` are now responsible for inserting
the `RULE_LAUNCH_{COMPILE,LINK,CUSTOM}` values in rule command lines.
Audit all call sites and add a comment to each one that does not insert
a launcher to explain why.
2016-12-09 08:59:17 -05:00
Brad King
a4da6fa71d Ninja,Makefile: Name static library compile PDB files as VS does
Change the default compile PDB file name for static libraries to match
the Visual Studio default of using the logical target name.  This may be
incompatible with existing behavior but `COMPILE_PDB_NAME` documents
that the default is unspecified.  Projects depending on a particular
name should set the property.

Closes: #16438
2016-11-30 10:26:31 -05:00
Robert Maynard
4b31609710 CUDA: Add support for the CUDA_SEPARABLE_COMPILATION target property 2016-11-14 16:40:48 -05:00
Daniel Pfeifer
2e620f0b38 Fix several include-what-you-use findings 2016-11-08 09:42:04 -05:00
Zsolt Parragi
1e4bb35894 Add generator expression support to per-source COMPILE_FLAGS
This allows users to specify different genex-based compile flags for
each file in a target, e.g. compiling just a single file with `Od/Ox` in
release builds on Visual Studio.
2016-10-28 11:18:03 -04:00
Brad King
a5f4463eed Merge topic 'clang-tidy'
effa6c83 fix more issues reported by clang-tidy
fb461cac silence selected clang-tidy violations
2016-10-20 08:51:09 -04:00
Daniel Pfeifer
effa6c8343 fix more issues reported by clang-tidy 2016-10-20 08:48:20 -04:00
Stephen Kelly
e6eecec761 cmListFileCache: Remove cmState header include
Include it in dependents which have previously relied on it
transitively.
2016-10-19 15:41:00 +02:00
Stephen Kelly
a91eaf3872 cmState: Port dependents to new cmStateTypes header 2016-10-19 15:40:59 +02:00
Stephen Kelly
a49751fb2e cmState: Move TargetType enum to separate namespace 2016-10-19 15:40:58 +02:00
Stephen Kelly
b59b6dd9d2 cmRulePlaceholderExpander: Port clients to direct-use
Add a factory function to cmLocalGenerator so that variableMappings can
be provided from it, and so that Ninja can always have a hard-coded
TargetImpLib.
2016-10-15 11:25:12 +02:00
Stephen Kelly
c75a9d6601 cmLocalGenerator: Use strings instead of a Target in rule replacement
Don't rely on the cmGeneratorTarget type needlessly.
2016-10-15 11:25:12 +02:00
Stephen Kelly
46ad0d2183 cmLocalGenerator: Use a converter in rule replacement API
The rule replacement API should not really be in cmLocalGenerator, but
it was historically, and this coupled many other things together here
too, such as output conversion.  Make the output converter a parameter
so that rule replacement can be removed from cmLocalGenerator.
2016-10-15 11:25:12 +02:00
Stephen Kelly
425cd1670f cmLocalGenerator: Remove the launcher from RuleVariables
This one is not like the others as it doesn't participate in
substitutions.  Keep ExpandRuleVariables doing only one thing and make
callers responsible for inserting a launcher prefix, simplifying the
code all-around.

Remove now-obsolete InsertRuleLauncher method.
2016-10-15 11:25:12 +02:00
Ben Boeckel
9977899df2 Ninja: Fix RC language depfile generation with cmcldeps
In commit v3.7.0-rc1~275^2 (Ninja: Use full path for all source files,
2016-08-05), the source path was changed to use an absolute path.
Inside of `cmcldeps` for `.rc` file compilation, it uses a separate
argument for the path to the source file.  This ended up causing
`cmcldeps` to transform the following call:

    cmcldeps.exe RC source.rc ... C:/full/path/to/source.rc

into:

    ... C:/full/path/to//Tc source.rc

which is invalid.  Update the source filename to use the full path to
the source file so that the path is replaced properly.
2016-10-13 13:03:57 -04:00
Brad King
86578eccf2 Simplify CMake per-source license notices
Per-source copyright/license notice headers that spell out copyright holder
names and years are hard to maintain and often out-of-date or plain wrong.
Precise contributor information is already maintained automatically by the
version control tool.  Ultimately it is the receiver of a file who is
responsible for determining its licensing status, and per-source notices are
merely a convenience.  Therefore it is simpler and more accurate for
each source to have a generic notice of the license name and references to
more detailed information on copyright holders and full license terms.

Our `Copyright.txt` file now contains a list of Contributors whose names
appeared source-level copyright notices.  It also references version control
history for more precise information.  Therefore we no longer need to spell
out the list of Contributors in each source file notice.

Replace CMake per-source copyright/license notice headers with a short
description of the license and links to `Copyright.txt` and online information
available from "https://cmake.org/licensing".  The online URL also handles
cases of modules being copied out of our source into other projects, so we
can drop our notices about replacing links with full license text.

Run the `Utilities/Scripts/filter-notices.bash` script to perform the majority
of the replacements mechanically.  Manually fix up shebang lines and trailing
newlines in a few files.  Manually update the notices in a few files that the
script does not handle.
2016-09-27 15:14:44 -04:00
Nils Gladitz
144cc6f1f9 Ninja: Add source location as include directory for preprocessed files
Fortran INCLUDE statements are not handled by the preprocessor.

Since the location of the preprocessed file is distinct from the
original source file explicitly add the source file's directory
as an include path in the actual compile step (not the preprocessing step)
so INCLUDE can find it.

Closes: #16332
2016-09-27 08:11:08 -04:00
Brad King
59aae29214 Ninja: Add dyndep rules for Fortran module dependencies
Teach the Ninja generator to add dyndep rules and bindings as described
in the design comment in `Source/cmGlobalNinjaGenerator.cxx`.
2016-09-22 13:53:10 -04:00
Brad King
39ebfc79e6 Ninja: Add explicit preprocessing step for Fortran
All Fortran sources need to be preprocessed before any source may be
compiled so that module dependencies can be (later) extracted.  Factor
out an explicit preprocessing step preceding compilation.  Use Ninja
depfile dependencies on the preprocessing step and then compile the
already-preprocessed source with a separate build statement that depends
explicitly only on the preprocessor output.  Later we will insert
dynamic discovery of module dependencies between these steps.
2016-09-22 13:53:09 -04:00