| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
| |
`cmake_determine_linker_id` is only used for macOS because Apple device
platforms set `_CMAKE_FEATURE_DETECTION_TARGET_TYPE` to `STATIC_LIBRARY`,
but we might as well prepare for them anyway.
|
| |
|
|
|
|
|
| |
Some compiler drivers invoke the linker tool as just `ld`, with no path,
expecting it to be in the `PATH`.
|
|
|
|
| |
Do not match quotes as part of the path.
|
|
|
|
|
|
| |
Previously we matched an entire build system output line and then
extracted the relevant portion in a separate brittle step. Match
it directly. Use the `CMAKE_LINKER` value directly if available.
|
|
|
|
|
|
| |
We do not use `-Wl,-v` on SunOS because not all GNU deployments use the
`collect2` helper, and those that do do not always print the underlying
`ld` command line. Parse the `--with-ld=` option as a fallback.
|
|
|
|
|
| |
These compilers print an explicit `export XL_LINKER=` line.
Parse it separately.
|
|
|
|
|
|
|
| |
When IBM XL is used as the host compiler for nvcc, it generates a
comma-separated link line. Parse the `exec:` line syntax separately, as
was done in commit b5f20da94d (CMakeParseImplicitLinkInfo supports comma
separated link lines, 2019-08-23, v3.16.0-rc1~181^2).
|
| |
|
|
|
|
| |
Cover both Ninja and Visual Studio generators.
|
|
|
|
|
| |
There are a few cases where content besides the path is picked up.
Match them for now. We will fix them in following commits.
|
|
|
|
|
|
| |
Since commit c26c6ac488 (Link Step: compute effective linker used by the
compiler, 2023-05-27) we use `CMAKE_${lang}_VERBOSE_LINK_FLAG` when
detecting implicit link information. Generate sample test data with it.
|
| |
|
| |
|
|
|
|
|
|
|
|
| |
As of llvm-project `main` branch commit `86accd4e03` (2023-12-04),
LLVMFlang 18.0.0, when used to drive linking an executable, emits a MSVC
linker flag to use all object files from the `Fortran_main` library.
These object files are meant for use when linking the program entry
point, and so are not implicit link dependencies of Fortran libraries.
|
|
|
|
|
|
| |
These are printed by LLVM-based compiler drivers targeting the MSVC ABI.
In our use case for this, `CMAKE_LINKER` may not yet be known, so do
not include it in the test data.
|
|
|
|
|
|
|
|
| |
A misconfigured compiler may pass extraneous implicit link directories
to its linker. If they are in `CMAKE_<LANG>_IMPLICIT_LINK_DIRECTORIES`,
CMake may generate extra `-L` flags on mixed-language link lines that
break linking. Add an environment variable that users can set to work
around such misconfiguration of their compilers.
|
|
|
|
|
|
|
|
| |
For policy-specific tests, use the version before the policy was
introduced. Otherwise, use 3.5 where possible.
Also, remove `cmake_minimum_required()` and `project()` calls from
individual cases where they are handled by `CMakeLists.txt`.
|
|\
| |
| |
| |
| |
| |
| |
| | |
0301779e85 LLVMFlang: Add support for mixed-language linking with Fortran
Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: buildbot <buildbot@kitware.com>
Merge-request: !7781
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Parse implicit link information for this compiler to support
mixed-language linking. This was missed by commit 85749766df
(LLVMFlang: Add support for LLVM Flang, 2021-07-07, v3.24.0-rc1~86^2).
Also activate mixed-language test cases that would have caught this.
Issue: #22387
|
|/
|
|
| |
Use the compiler id information in addition to checking for `cl.exe`.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The current regular expression is able to match `/usr/lib/<arch>`,
`/usr/usr/lib/<arch>`, `/usr/usr/usr/lib/<arch>`, ... but not
`/lib/<arch>`.
This behavior ends up causing the detected architecture to
be x86_64-pc-linux-gnu when the Clang compiler is installed on
a "non-system" location (like /opt/llvm-13) which, in turn, makes
almost every 'find_library()' fail because the correct
architecture is x86_64-linux-gnu.
This is due to a typo in commit 764606e256 (CMakeDetermineCompilerABI:
Extract lib arch from implicit object file paths, 2021-04-05,
v3.20.1~10^2), which used `+` instead of `?`.
|
|
|
|
|
|
|
|
| |
With flags like `-static-libstdc++` or `-static-libgfortran`, the GNU
compiler driver adds `-Bstatic ... -Bdynamic` around its language
runtime library. Convert the libraries in between these to absolute
paths so that mixed-language linking honors the static runtime
libraries.
|
|
|
|
|
| |
Generate sample input data with GNU 10.2.1 compilers using flags like
`-static-libstdc++` and `-static-libgfortran`.
|
|
|
|
|
| |
As in commit 6bc6fc2a7f (Tests: Teach RunCMake.ParseImplicitIncludeInfo
to match output by regex, 2019-04-08, v3.14.2~5^2~1).
|
|
|
|
|
|
|
|
|
| |
The NVHPC compiler does not have any implicit link directories that can
be used to detect `CMAKE_LIBRARY_ARCHITECTURE`, but it does have
implicit object files. Extract implicit object file paths from link
lines and check them for the `CMAKE_LIBRARY_ARCHITECTURE` pattern.
Issue: #22024
|
|
|
|
|
|
|
|
|
|
| |
The change in commit 657fc3a9a7 (CMakeDetermineCompilerABI: Parse
library arch from versioned paths, 2021-02-03, v3.20.0-rc1~40^2) caused
`CMAKE_LIBRARY_ARCHITECTURE` to be populated on non-multiarch platforms
if their compilers happen to use `$arch/$version` library directories.
Revert the use of versioned library paths.
Fixes: #22024
|
|
|
|
|
|
| |
Teach CMake how to extract `CMAKE_<LANG>_LIBRARY_ARCHITECTURE` from
versioned paths such as `/usr/lib/gcc/x86_64-linux-gnu/9`. These kind of
paths are generated by NVHPC compilers.
|
|
|
|
|
|
|
|
|
| |
It is currently presumed that the linker will generate
a space separated line. This is not the case for some
compilers such as IBM XL where it can output space or
comma separated. This is particularly apparent when IBM XL
is used as the host compiler for CUDA as it generates a comma
separated link line.
|
|
By sharing the information used by ParseImplicitIncludeInfo we can
also verify the parsing of implicit link info such as directories.
|