summaryrefslogtreecommitdiffstats
path: root/Source/cmGeneratorTarget.cxx
Commit message (Collapse)AuthorAgeFilesLines
* 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
|/
* Merge topic 'vs-csharp-dotnet-sdk'Brad King2021-12-221-0/+5
|\ | | | | | | | | | | | | | | | | 0eea32a376 VS: Add DOTNET_SDK property to generate SDK-style C# projects a450cc9533 VS: Set ResolveNugetPackages to false for ALL_BUILD and ZERO_CHECK fa76e5d194 cmVisualStudio10TargetGenerator: Factor out helper for classic MSBuild project Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !6634
| * VS: Add DOTNET_SDK property to generate SDK-style C# projectsSumit Bhardwaj2021-12-211-0/+5
| | | | | | | | | | | | | | | | Changes in cmVisualStudio10TargetGenerator::Generate to write .Net SDK-style project for VS generators VS 19 and above. Also adds documentation and tests. Issue: #20227
* | target_link_libraries: Optionally require only target namesBrad King2021-12-201-0/+49
| | | | | | | | | | | | | | | | | | | | Optionally verify that items in `LINK_LIBRARIES` and `INTERFACE_LINK_LIBRARIES` that can be target names are actually target names. Add a `LINK_LIBRARIES_ONLY_TARGETS` target property and corresponding `CMAKE_LINK_LIBRARIES_ONLY_TARGETS` variable to enable this new check. Fixes: #22858
* | cmGeneratorTarget: Factor out message about reasons for a missing targetBrad King2021-12-201-5/+11
| |
* | CMP0028: Report the target whose link interface has an offending itemBrad King2021-12-161-36/+78
| | | | | | | | | | | | | | | | | | | | | | | | Previously items linked via the link interface of a dependency were reported in CMP0028 messages as if directly linked by a target. Clarify the messages to indicate that an offending item is actually in the link interface of a given target, regardless of its consumer. Move the check to the end of generation and look through the final set of link implementations and link interfaces that were used for generation. This avoids repeating messages on link interfaces that have multiple consumers.
* | CMP0028: Report backtrace to link item rather than target creationBrad King2021-12-161-1/+5
| | | | | | | | | | | | Now that we have proper backtraces for both `LINK_LIBRARIES` and `INTERFACE_LINK_LIBRARIES` entries, we can report them in error messages.
* | cmGeneratorTarget: Record when imported target link iface libs are doneBrad King2021-12-161-0/+1
| | | | | | | | | | | | `GetImportLinkInterface` populates the link interface from properties of imported targets. Make it more closely match the link interface of in-project targets by recording the `LibrariesDone` field.
* | cmGeneratorTarget: Propagate backtraces from INTERFACE_LINK_LIBRARIESBrad King2021-12-151-45/+66
|/
* Merge topic 'link-iface-usage-reqs-only'Brad King2021-12-101-44/+53
|\ | | | | | | | | | | | | | | 1e49880472 cmGeneratorTarget: Avoid boolean trap in usage requirement lookup Acked-by: Kitware Robot <kwrobot@kitware.com> Acked-by: buildbot <buildbot@kitware.com> Merge-request: !6796
| * cmGeneratorTarget: Avoid boolean trap in usage requirement lookupBrad King2021-12-091-44/+53
| | | | | | | | | | Replace `bool usage_requirements_only` arguments with a proper enumeration to clarify meaning at call sites.
* | cmTargetPropertyComputer: Simplify by restoring use of cmMakefileBrad King2021-12-081-6/+3
|/ | | | | | | | | | | Logically revert commit 390a7d8647 (cmTargetPropertyComputer: Implement GetProperty without cmMakefile, 2016-10-13, v3.8.0-rc1~445^2~9). It relied on using `cmListFileBacktrace` to get a scope in which to look up policies. This does remove a backtrace from `LOCATION` property errors at generate time, but the backtrace we reported before was incorrect. It pointed at the addition of a target, not to the reference to the property.
* Merge topic 'support_nvcc_native_flag'Brad King2021-11-021-3/+16
|\ | | | | | | | | | | | | | | 14d8a2768d CUDA: Support nvcc 11.5 new -arch=all|all-major flags Acked-by: Kitware Robot <kwrobot@kitware.com> Reviewed-by: Raul Tambre <raul@tambre.ee> Merge-request: !6652
| * CUDA: Support nvcc 11.5 new -arch=all|all-major flagsRobert Maynard2021-11-011-3/+16
| |
* | cmGeneratorTarget: Integrate file sets into calculated sourcesKyle Edwards2021-10-271-1/+144
| |
* | Source: fix many -Wmissing-prototypes warnings by marking functions staticSean McBride2021-10-251-21/+26
|/
* Add property to mark IMPORTED targets as not SYSTEMBrad King2021-10-141-0/+3
| | | | | | | | | | | Add an `IMPORTED_NO_SYSTEM` target property to specify this. When enabled, do not treat the `INTERFACE_INCLUDE_DIRECTORIES` of an imported target as `SYSTEM` include directories. This is similar to the existing `NO_SYSTEM_FROM_IMPORTED` property, but works from the consumed target rather than the consumer. Fixes: #17364
* Source: Fix clang -Wimplicit-fallthrough warningsSean McBride2021-09-281-0/+6
|
* Rename cmProp in cmValueMarc Chevrier2021-09-211-124/+127
|
* Merge topic 'macos-cache-rpath-install-namedir'Brad King2021-09-211-0/+15
|\ | | | | | | | | | | | | 2266e223c5 macOS: Speed up rpath install name dir lookup with a cache Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !6543
| * macOS: Speed up rpath install name dir lookup with a cacheLukas Böger2021-09-201-0/+15
| | | | | | | | Fixes: #20602
* | remove cmToCStr functionMarc Chevrier2021-09-191-1/+1
|/
* Merge topic 'pch-xcode-multiple-languages'Brad King2021-09-141-2/+2
|\ | | | | | | | | | | | | | | bbcdac4e5d PCH: Fix all-language precompile header support in Xcode Acked-by: Kitware Robot <kwrobot@kitware.com> Acked-by: buildbot <buildbot@kitware.com> Merge-request: !6435
| * PCH: Fix all-language precompile header support in XcodeCristian Adam2021-09-131-2/+2
| | | | | | | | Fixes: #22384
* | Refactor: Convert parallel string/backtrace vectors to BT vectorsKyle Edwards2021-09-031-56/+47
| |
* | Refactor: reduce cmToCStr usageMarc Chevrier2021-08-191-12/+9
| |
* | Refactor: cmGeneratorTarget::GetSourcesProperty returns cmPropMarc Chevrier2021-08-091-3/+3
| |
* | cmProp: refactoring: transform alias in classMarc Chevrier2021-08-081-14/+13
|/ | | | | | To handle safely the values used by CMake variables and properties, introduce the class cmProp as a replacement from the simple pointer to std::string instance.
* cmGeneratorTarget: Clarify logic recognizing explicit link interfaceBrad King2021-07-131-6/+6
|
* cmGeneratorTarget: Clarify cmLinkImplItem constructor callBrad King2021-07-131-1/+2
|
* cmGeneratorTarget: Clarify ExpandLinkItems local variable roleBrad King2021-07-131-4/+7
|
* cmGeneratorTarget: Simplify ExpandLinkItems signatureBrad King2021-07-131-30/+17
|
* cmGeneratorTarget: Add method for LINKER: prefix translationMarc Chevrier2021-07-081-0/+7
|
* Merge topic 'tll-out-of-dir'Brad King2021-06-301-6/+8
|\ | | | | | | | | | | | | e27a76f131 target_link_libraries: Restore transitive out-of-dir linking Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !6285
| * target_link_libraries: Restore transitive out-of-dir linkingBrad King2021-06-291-6/+8
| | | | | | | | | | | | | | | | | | | | | | | | Refactoring in commit 7f506b95a7 (cmGeneratorTarget: Refactor link item lookup, 2021-05-26, v3.21.0-rc1~103^2~4) accidentally dropped the persistent lookup scope tracking across multiple items that was added by commit f0e67da061 (target_link_libraries: Fix out-of-dir linking of a list of targets, 2020-01-14, v3.17.0-rc1~149^2). This broke a transitive out-of-dir linking case not covered by our test suite. Restore the scope tracking and add a test case. Fixes: #22363
* | Merge topic 'import-elf'Brad King2021-06-251-7/+2
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 115ff6a347 cmELF: Include the ELF parsing code unconditionally 5dfa3ddbe5 cmELF: Allow building without system ELF headers 0da1540aaa cmELF: Fix check for TagMipsRldMapRel e21188df8b cmELF: Open file explicitly in binary mode 70cdb36d25 Merge branch 'upstream-elf' into import-elf 7a0a37ca41 elf 2021-06-23 (f13da247) 18038042ed cmelf: Add script to import the FreeBSD ELF headers Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !6240
| * | cmELF: Include the ELF parsing code unconditionallyAlex Richardson2021-06-241-7/+2
| |/ | | | | | | | | Now that the ELF definitions are provided on all platforms there is no need to keep the CMake_USE_ELF_PARSER option.
* | Makefiles: Add support for building Fortran intrinsicsIsuru Fernando2021-06-241-0/+8
|/ | | | Fixes: #21463
* HIP: analyze output of `hipcc` to determine default GPU architectureZack Galbreath2021-06-071-0/+6
|
* HIP: Automatically inject the `hip::device` runtime targetRobert Maynard2021-06-071-26/+170
| | | | | Any target that might need to link to hip code needs the `hip::device` target