summaryrefslogtreecommitdiffstats
path: root/Source/cmGeneratorTarget.cxx
Commit message (Collapse)AuthorAgeFilesLines
* Ninja: Restore support for compilers not defining a C++ standard levelLingkai Dong2022-11-101-5/+12
| | | | | | | | | | | | | | | | Since commit 386465bf83 (cmTarget: add support for C++ module fileset types, 2022-04-08, v3.25.0-rc1~624^2~7), the Ninja generator checks for C++20 support using logic that requires `CMAKE_<LANG>_STANDARD_DEFAULT` to be non-empty. On some compilers, such as ARMClang, CMake does not automatically detect and set default language standards, thus causing `HaveStandardAvailable` to raise an internal error. To fix this issue, if `CMAKE_CXX_STANDARD_DEFAULT` is empty, assume all standards to be supported instead of calling `HaveStandardAvailable`. This is consistent with how `CompileFeaturesNode::Evaluate` handles this case. Fixes: #24146
* VERIFY_INTERFACE_HEADER_SETS: Add IWYU pragma: associated to verification fileDaniel Hannon2022-10-071-1/+5
|
* Xcode: Set object file locations using TARGET_TEMP_DIRBrad King2022-09-291-3/+0
| | | | | | This avoids relying on `SYMROOT` to locate the object files. Issue: #22550
* Merge topic 'check-library-properties-fix-performances-regression'Brad King2022-09-091-1/+1
|\ | | | | | | | | | | | | | | 985b4c82a6 Check link libraries properties: fix performances regression a47eef32a3 renames method FinalizeTargetCompileInfo() in FinalizeTargetConfiguration(). Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !7651
| * renames method FinalizeTargetCompileInfo() in FinalizeTargetConfiguration().Marc Chevrier2022-09-071-1/+1
| |
* | Merge topic 'file-set-source-group'Kyle Edwards2022-08-251-1/+1
|\ \ | |/ | | | | | | | | | | | | | | 970052fedd FILE_SET: Fix source group detection bcc3965813 Tests: Fix VS10Project SourceGroupTreeCMakeLists check Acked-by: Kitware Robot <kwrobot@kitware.com> Acked-by: buildbot <buildbot@kitware.com> Merge-request: !7609
| * FILE_SET: Fix source group detectionKyle Edwards2022-08-241-1/+1
| | | | | | | | | | | | | | Call MatchChildrenFiles() instead of MatchesFiles() in order to account for files being in subgroups of source groups. Fixes: #23880
* | Merge topic 'all-verify-interface-header-sets'Kyle Edwards2022-08-031-0/+12
|\ \ | |/ | | | | | | | | | | 83e44002ae VERIFY_INTERFACE_HEADER_SETS: Add verification target for all Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !7536
| * VERIFY_INTERFACE_HEADER_SETS: Add verification target for allKyle Edwards2022-08-031-0/+12
| | | | | | | | Fixes: #23802
| * Merge topic 'verify-interface-header-sets-interface-library-source-language' ↵Brad King2022-07-281-0/+6
| |\ | | | | | | | | | | | | | | | | | | | | | | | | | | | into release-3.24 41f15193e5 VERIFY_INTERFACE_HEADER_SETS: Fall back to global languages Acked-by: Kitware Robot <kwrobot@kitware.com> Tested-by: buildbot <buildbot@kitware.com> Merge-request: !7517
* | \ Merge topic 'cuda_add_lto_support'Brad King2022-08-031-3/+27
|\ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 96bc59b1ca CUDA: Add Device LTO support for nvcc 1527d48cd0 CheckIPO: Refactor logic selecting test source files 4a552ab4ad remove unused variables 6eda92d037 remove unused variable Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !7389
| * | | CUDA: Add Device LTO support for nvccRobert Maynard2022-07-221-3/+27
| | | | | | | | | | | | | | | | Fixes #22200
* | | | Merge topic 'verify-interface-header-sets-interface-library-source-language'Brad King2022-07-281-0/+6
|\ \ \ \ | | |_|/ | |/| | | | | | | | | | | | | | | | | | | | | | 41f15193e5 VERIFY_INTERFACE_HEADER_SETS: Fall back to global languages Acked-by: Kitware Robot <kwrobot@kitware.com> Tested-by: buildbot <buildbot@kitware.com> Merge-request: !7517
| * | | VERIFY_INTERFACE_HEADER_SETS: Fall back to global languagesKyle Edwards2022-07-271-0/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If a target doesn't have any source files, fall back to the global list of enabled languages to determine the language of the header file to verify. Fixes: #23774
* | | | Merge topic 'verify-interface-header-sets-add-compile-definitions'Brad King2022-07-281-0/+6
|\ \ \ \ | |_|/ / |/| | / | | |/ | |/| | | | | | | | | | 27fd172d8d VERIFY_INTERFACE_HEADER_SETS: Finalize compile info for verify targets 626e641a19 cmTarget: Factor out FinalizeTargetCompileInfo() Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !7516
| * | VERIFY_INTERFACE_HEADER_SETS: Finalize compile info for verify targetsKyle Edwards2022-07-271-0/+6
| |/ | | | | | | Fixes: #23732
* | Merge topic 'cpp-named-module-file-sets'Brad King2022-06-171-1/+89
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 07bc3b07ec gitlab-ci: test C++ modules using GCC 1b2270aa4e ci: add a Docker image to test out C++ modules with GCC 8c5a53096a Tests/RunCMake/CXXModules: add module-using examples 4151547e2f cmGlobalNinjaGenerator: use `cmModuleMapper` implementation b43bdaff3c cmCxxModuleMapper: implement support for GCC's module map format 02d0f0e752 cmCxxModuleMapper: add source to handle module mapper contents a046a45aad cmGlobalNinjaGenerator: add a TODO for header units 386465bf83 cmTarget: add support for C++ module fileset types ... Acked-by: Kitware Robot <kwrobot@kitware.com> Tested-by: buildbot <buildbot@kitware.com> Merge-request: !7369
| * | cmTarget: add support for C++ module fileset typesBen Boeckel2022-06-161-1/+89
| |/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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).
* | Add SYSTEM target propertyDa Quexian2022-06-151-3/+8
|/ | | | | | | | If it is ON, treat INTERFACE_INCLUDE_DIRECTORIES as system include directories. Issue: #18040 Signed-off-by: Da Quexian <daquexian566@gmail.com>
* cmSystemTools: Fix 'ErrorOccurred' spellingFeRD (Frank Dana)2022-06-131-6/+6
| | | | | | | | Rename the booleans 's_ErrorOccured' and 's_FatalErrorOccured' to 's_ErrorOccurred' and 's_FatalErrorOccurred', respectively. Rename the getters and setters to 'Get[Fatal]ErrorOccurred' and 'Set[Fatal]ErrorOccurred', and fix all uses across the codebase.
* VERIFY_INTERFACE_HEADER_SETS: Add property for list of header setsKyle Edwards2022-05-251-5/+23
| | | | | | | | Add a new property, INTERFACE_HEADER_SETS_TO_VERIFY, which contains a list of header sets that should be verified by VERIFY_INTERFACE_HEADER_SETS. Fixes: #23522
* clang-tidy: address `modernize-use-default-member-init` lintsBen Boeckel2022-05-241-17/+2
|
* VERIFY_HEADER_SETS: Rename to VERIFY_INTERFACE_HEADER_SETSKyle Edwards2022-05-181-5/+5
| | | | Issue: #23448
* Merge topic 'file-set-generated-dependency'Brad King2022-04-151-2/+4
|\ | | | | | | | | | | | | | | | | | | d0d09aa29f FILE_SET: Make INTERFACE libraries with HEADER_SETS participate in buildsystem Acked-by: Kitware Robot <kwrobot@kitware.com> Acked-by: buildbot <buildbot@kitware.com> Acked-by: Ben Boeckel <ben.boeckel@kitware.com> Acked-by: Gabriel Nützi <gnuetzi@gmail.com> Merge-request: !7173
| * FILE_SET: Make INTERFACE libraries with HEADER_SETS participate in buildsystemKyle Edwards2022-04-141-2/+4
| | | | | | | | | | | | | | | | If an INTERFACE library has HEADER_SETS, and its header sets contain files generated by a custom command, the library needs to participate in the buildsystem so that the files will be generated. Fixes: #23422
| * Revert INTERFACE_LINK_LIBRARIES_DIRECT feature for 3.23 branchBrad King2022-03-211-166/+14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Revert commit f3ad061858 (Add usage requirements to update direct link dependencies, 2022-01-12, v3.23.0-rc1~44^2) and the property storage updates in its predecessor commit 193a999cd5 (cmTarget: Add INTERFACE_LINK_LIBRARIES_DIRECT{,_EXCLUDE} backtrace storage, 2022-01-06, v3.23.0-rc1~44^2~1) from the 3.23 release branch. After initial experience using the feature in practice, additional design considerations have been raised for discussion in the original issue. To avoid rushing this for the 3.23 series, we've decided to revert the feature for now so it can be revised for a future release. Issue: #22496
* | FILE_SET: Add VERIFY_HEADER_SETS target propertyKyle Edwards2022-03-291-0/+173
| | | | | | | | Fixes: #23338
* | LINK_LIBRARIES: Add support for LINK_ONLY genexBrad King2022-03-241-0/+14
| | | | | | | | | | | | | | Previously we always used content guarded by `$<LINK_ONLY:...>` in `LINK_LIBRARIES`, even when evaluating for non-linking usage requirements. Add a policy to honor `LINK_ONLY` in `LINK_LIBRARIES` the same way we already do in `INTERFACE_LINK_LIBRARIES`.
* | INTERFACE_LINK_LIBRARIES_DIRECT: Honor link dependencies through LINK_ONLYBrad King2022-03-221-6/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In commit f3ad061858 (Add usage requirements to update direct link dependencies, 2022-01-12, v3.23.0-rc1~44^2), we evaluated the transitive closure of `INTERFACE_LINK_LIBRARIES` as a non-linking usage requirement. That left out `INTERFACE_LINK_LIBRARIES_DIRECT` link dependencies that appear behind private dependencies of a static library, guarded by the `$<LINK_ONLY:...>` generator expression. At the time, that decision was intentional, in order to prevent arbitrary usage requirements from leaking out of `PRIVATE` dependencies. Since then, we've revised evaluation of `LINK_LIBRARIES` to distinguish between collecting link dependencies and other usage requirements. Use that information when following `INTERFACE_LINK_LIBRARIES` to collect the matching kind of requirements from `INTERFACE_LINK_LIBRARIES_DIRECT`. Fixes: #22496
* | LINK_LIBRARIES: Evaluate separately for linking and usage requirementsBrad King2022-03-221-27/+56
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We evaluate `LINK_LIBRARIES` and `INTERFACE_LINK_LIBRARIES` for two purposes: * Constructing the link line. * Collecting usage requirements. We evaluate `INTERFACE_LINK_LIBRARIES` separately for each purpose in order to support the `$<LINK_ONLY:...>` generator expression used to express private link dependencies of a static library. Previously we only evaluated `LINK_LIBRARIES` for linking, and used that result for collecting usage requirements too. Therefore `$<LINK_ONLY:...>` does not work in `LINK_LIBRARIES`. With the introduction of `INTERFACE_LINK_LIBRARIES_DIRECT`, evaluation of `LINK_LIBRARIES` now needs to distinguish these two cases in order to honor link dependencies encountered through `$<LINK_ONLY:...>` without also exposing other usage requirements through private dependencies of a static library. Revise internal infrastructure to distinguish the two cases when evaluating `LINK_LIBRARIES`. Make the information available in code paths for `INTERFACE_LINK_LIBRARIES_DIRECT` and `LINK_ONLY`. Defer actually using the information to later commits. Issue: #22496
* | CUDA: Add support for CUDA_ARCHITECTURES=nativeBrad King2022-03-101-0/+17
| | | | | | | | | | | | | | | | | | | | | | 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
* | Merge topic 'cuda-arch-all'Brad King2022-03-021-13/+13
|\ \ | |/ | | | | | | | | | | | | | | 2796d6eeca CUDA: Fix CMAKE_CUDA_ARCHITECTURES=all/all-major with NVCC 11.5+ e450d55552 Help: Update CUDA_ARCHITECTURES docs for generic all/all-major support fe64c49e72 CUDA: Simplify CMAKE_CUDA_ARCHITECTURES special value logic Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !7026
| * CUDA: Simplify CMAKE_CUDA_ARCHITECTURES special value logicBrad King2022-03-011-13/+13
| | | | | | | | | | | | Refactor the logic checking `CMAKE_CUDA_ARCHITECTURES` special values. Switch on the value first, and then make other decisions for each case. This makes room for other special values to be added later.
* | Genex-LINK_GROUP: Add possibility to group libraries at link stepMarc Chevrier2022-02-281-2/+4
| | | | | | | | Fixes: #23121
* | Merge topic 'cuda-archs'Brad King2022-02-221-5/+3
|\ \ | |/ | | | | | | | | | | f75299b803 CUDA: Restore support for non-"all" CUDA_ARCHITECTURES with nvcc 11.5+ Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !7007
| * CUDA: Restore support for non-"all" CUDA_ARCHITECTURES with nvcc 11.5+Brad King2022-02-181-5/+3
| | | | | | | | | | | | | | | | | | Since commit 8f64df0a7c (CUDA: Generic all and all-major support, 2021-12-19, v3.23.0-rc1~23^2), setting `CUDA_ARCHITECTURES` to a value other than `all` or `all-major` is ignored with NVCC 11.5+. Fix the logic to return early only when actually using an "all" value. Fixes: #23243
* | Merge topic 'genex-LINK_LIBRARY-to-decorate-library'Brad King2022-02-091-3/+12
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 2a6b0415d7 $<LINK_LIBRARY>: Add LINK_LIBRARY_OVERRIDE target property 42965799b4 Genex: Add $<LINK_LIBRARY:...> 78dd7d5292 cmRulePlaceholderExpander: add base class for placeholder expansion reuse 4b55828a9f cmExpandListWithBacktrace: add handling of empty elements. 28d7432468 cmComputeLinkInformation: use cmComputeLinkDepends::LinkEntry Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !6769
| * | Genex: Add $<LINK_LIBRARY:...>Marc Chevrier2022-02-071-3/+12
| |/ | | | | | | | | | | | | | | This generator expression offers the capability, for the link step, to decorate libraries with prefix/suffix flags and/or adding any specific flag for each library. Fixes: #22812, #18751, #20078, #22703
* | Windows: Allow manifest files to be bundled as contentAron Yu2022-02-041-1/+5
|/
* CUDA: Generic all and all-major supportRaul Tambre2022-02-011-8/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Commit 14d8a276 (CUDA: Support nvcc 11.5 new -arch=all|all-major flags, 2021-08-17) added all and all-major options to CUDA_ARCHITECTURES. These are fairly generic and likely to see real-world use by distributors. Thus it's desirable to support these also for Clang and older NVCC versions. The supported architectures are dependent on the toolkit version. We determine the toolkit version prior to compiler detection. For NVCC we get the version from the vendor identification output, but for Clang we need to invoke NVCC separately. The architecture information is mostly based on the Wikipedia list with the earliest supported version being CUDA 7.0. This could be documented and expanded in the future to allow projects to query CUDA toolkit version and architecture information. For Clang we additionally constrain based on its support. Additionally the architecture mismatch detection logic is fixed, improved and updated for generic support: * Commit 01428c55 (CUDA: Fail fast if CMAKE_CUDA_ARCHITECTURES doesn't work during detection, 2020-08-29) enabled CMAKE_CUDA_COMPILER_ID_REQUIRE_SUCCESS if CMAKE_CUDA_ARCHITECTURES is specified. This results in CMakeDetermineCompilerID.cmake printing the compiler error and our code for presenting the mismatch in a user-friendly way being useless. The custom logic seems preferable so go back to not enabling it. * Commit 14d8a276 (CUDA: Support nvcc 11.5 new -arch=all|all-major flags, 2021-08-17) tried to support CMP0054 but forgot to add x to the interpolated result. Thus the conditions would always evaluate to false. This is fixed as a byproduct of removing NVIDIA specific checks, improving the error message and replacing architectures_mode with a simpler architectures_explicit. Visual Studio support omits testing the flags during detection due to complexities in determining the toolkit version when using it. A long-term proper implementation would be #23161. Implements #22860.
* Merge topic 'link-interface-direct'Brad King2022-01-311-95/+255
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | f3ad061858 Add usage requirements to update direct link dependencies 193a999cd5 cmTarget: Add INTERFACE_LINK_LIBRARIES_DIRECT{,_EXCLUDE} backtrace storage 22d5427aa6 cmGeneratorTarget: Add LookupLinkItem option to consider own target name f3d2eab36a cmGeneratorTarget: Fix link interface caching of partial results d75ab9d066 cmGeneratorTarget: Clarify CMP0022 logic in ComputeLinkInterfaceLibraries f3e9e03fe0 cmGeneratorTarget: Simplify CMP0022 warning check 216aa14997 cmGeneratorTarget: Return early from ExpandLinkItems with no items 1bc98371d1 Tests: Remove unnecessary policy setting from ObjectLibrary test ... Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !6886
| * Add usage requirements to update direct link dependenciesBrad King2022-01-291-14/+166
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Link line construction starts with `LINK_LIBRARIES` and appends dependencies from the transitive closure of `INTERFACE_LINK_LIBRARIES`. Only the entries of `LINK_LIBRARIES` are considered direct link dependencies. In some advanced use cases, particularly involving static libraries and static plugins, usage requirements need to update the list of direct link dependencies. This may mean adding new items, removing existing items, or both. Add target properties to encode these usage requirements: * INTERFACE_LINK_LIBRARIES_DIRECT * INTERFACE_LINK_LIBRARIES_DIRECT_EXCLUDE Fixes: #22496
| * cmGeneratorTarget: Add LookupLinkItem option to consider own target nameBrad King2022-01-291-6/+7
| |
| * cmGeneratorTarget: Fix link interface caching of partial resultsBrad King2022-01-291-16/+14
| | | | | | | | | | | | | | | | | | | | `GetLinkInterface` and `GetLinkInterfaceLibraries` cache their results to avoid repeating work. In the case that the result does not depend on the "head" target, they re-use results computed from the first call with any "head" target. However, if `GetLinkInterfaceLibraries` is called first, then not all of the link interface is populated. If `GetLinkInterface` is later called, it needs to finish populating the link interface even if a partially completed interface was cached.
| * cmGeneratorTarget: Clarify CMP0022 logic in ComputeLinkInterfaceLibrariesBrad King2022-01-291-56/+59
| | | | | | | | | | | | Follow up commit 1d709ea2f5 (cmGeneratorTarget: Propagate backtraces from INTERFACE_LINK_LIBRARIES, 2021-12-15), which made the logic a bit more complicated due to having backtraces for CMP0022 NEW behavior.
| * cmGeneratorTarget: Simplify CMP0022 warning checkBrad King2022-01-291-7/+4
| | | | | | | | | | | | Since commit 1d709ea2f5 (cmGeneratorTarget: Propagate backtraces from INTERFACE_LINK_LIBRARIES, 2021-12-15) we can use the special storage of the property directly.
| * cmGeneratorTarget: Return early from ExpandLinkItems with no itemsBrad King2022-01-291-0/+3
| |
| * PCH: Clear link interface cache when adding PCH object to itBrad King2022-01-291-0/+6
| | | | | | | | | | | | | | On platforms using `CMAKE_LINK_PCH`, the implementation of `PRECOMPILE_HEADERS_REUSE_FROM`, when re-using the PCH from one object library in another, adds a PCH object file to the link interface. Clear any cached link interface to ensure it is used.
| * cmLinkItem: Clarify name of CMP0027 check memberBrad King2022-01-291-3/+3
| | | | | | | | | | | | | | The only purpose of `cmLinkImplItem`'s `FromGenex` member is to decide whether to check CMP0027. That won't be needed for link items added by new interfaces in the future. Clarify the name to indicate that we do not always need to know if the item came from a generator expression.
* | cmGlobalVisualStudio10Generator: Auto restore NuGet packages.Carsten Rudolph2022-01-221-0/+20
|/