Ninja: Revert accidental LINK_WHAT_YOU_USE impl for static libraries

In commit d7159f9591, (Ninja: Fix LINK_WHAT_YOU_USE link flag placement,
2021-06-24), we fixed usage of -Wl,--no-as-needed to override
-Wl,--as-needed from LDFLAGS. However, that change also passes
-Wl,--no-as-needed to `ar`, which is incorrect flag for `ar`.

Let's check the target type before passing down the flags.

Fixes: #22487
This commit is contained in:
Đoàn Trần Công Danh
2021-07-31 14:17:35 +07:00
committed by Brad King
parent f7cf69e34a
commit 93eb4a7bd1
5 changed files with 14 additions and 1 deletions

View File

@@ -1156,7 +1156,10 @@ void cmNinjaNormalTargetGenerator::WriteLinkStatement(
this->AddModuleDefinitionFlag(linkLineComputer.get(), vars["LINK_FLAGS"],
config);
if (gt->GetPropertyAsBool("LINK_WHAT_YOU_USE")) {
if (gt->GetPropertyAsBool("LINK_WHAT_YOU_USE") &&
(gt->GetType() == cmStateEnums::TargetType::EXECUTABLE ||
gt->GetType() == cmStateEnums::TargetType::SHARED_LIBRARY ||
gt->GetType() == cmStateEnums::TargetType::MODULE_LIBRARY)) {
vars["LINK_FLAGS"] += " -Wl,--no-as-needed";
}
vars["LINK_FLAGS"] = globalGen->EncodeLiteral(vars["LINK_FLAGS"]);

View File

@@ -2,3 +2,4 @@ enable_language(C)
set(CMAKE_LINK_WHAT_YOU_USE TRUE)
add_executable(main main.c)
target_link_libraries(main m)
add_library(foo STATIC foo.c)

View File

@@ -2,3 +2,4 @@ enable_language(CXX)
set(CMAKE_LINK_WHAT_YOU_USE TRUE)
add_executable(main main.cxx)
target_link_libraries(main m)
add_library(foo STATIC foo.cxx)

View File

@@ -0,0 +1,4 @@
int foo(void)
{
return 0;
}

View File

@@ -0,0 +1,4 @@
int foo()
{
return 0;
}