aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com
diff options
context:
space:
mode:
authorGravatar hlopko <hlopko@google.com>2017-08-18 14:28:58 +0200
committerGravatar Damien Martin-Guillerez <dmarting@google.com>2017-08-21 14:15:32 +0200
commitc08f67975272a6b40d1fa5c444718efc0b59194a (patch)
tree7cfb3c8600106f989248e5415f95d6bcbac5d3ae /src/main/java/com
parente2eb771029a065438b99556111a267b280356a03 (diff)
Do not add linking features in CppActionConfigs when crosstool already defines it
RELNOTES: None. PiperOrigin-RevId: 165695975
Diffstat (limited to 'src/main/java/com')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppActionConfigs.java644
1 files changed, 335 insertions, 309 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppActionConfigs.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppActionConfigs.java
index 4bc7fa19f8..8ed59a2fe0 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppActionConfigs.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppActionConfigs.java
@@ -417,358 +417,384 @@ public class CppActionConfigs {
// Order of feature declaration matters, cppDynamicLibraryLinkerTool has to
// follow right after build_interface_libraries.
cppDynamicLibraryLinkerTool),
- "feature {",
- " name: 'symbol_counts'",
- " flag_set {",
- " expand_if_all_available: 'symbol_counts_output'",
- " action: 'c++-link-executable'",
- " action: 'c++-link-dynamic-library'",
- " flag_group {",
- " flag: '-Wl,--print-symbol-counts=%{symbol_counts_output}'",
- " }",
- " }",
- "}",
- "feature {",
- " name: 'shared_flag'",
- " flag_set {",
- " action: 'c++-link-dynamic-library'",
- " flag_group {",
- " flag: '-shared'",
- " }",
- " }",
- "}",
- "feature {",
- " name: 'linkstamps'",
- " flag_set {",
- " action: 'c++-link-executable'",
- " action: 'c++-link-dynamic-library'",
- " expand_if_all_available: 'linkstamp_paths'",
- " flag_group {",
- " iterate_over: 'linkstamp_paths'",
- " flag: '%{linkstamp_paths}'",
- " }",
- " }",
- "}",
- "feature {",
- " name: 'output_execpath_flags'",
- " flag_set {",
- " expand_if_all_available: 'output_execpath'",
- " action: 'c++-link-dynamic-library'",
- " flag_group {",
- " flag: '-o'",
- " flag: '%{output_execpath}'",
- " }",
- " }",
- "}",
- "feature {",
- " name: 'output_execpath_flags_executable'",
- " flag_set {",
- " expand_if_all_available: 'output_execpath'",
- " action: 'c++-link-executable'",
- " flag_group {",
- " flag: '-o'",
- " }",
- " }",
- " flag_set {",
- " expand_if_all_available: 'skip_mostly_static'",
- " expand_if_all_available: 'output_execpath'",
- " action: 'c++-link-executable'",
- " flag_group {",
- " flag: '/dev/null'",
- " flag: '-MMD'",
- " flag: '-MF'",
- " }",
- " }",
- " flag_set {",
- " expand_if_all_available: 'output_execpath'",
- " action: 'c++-link-executable'",
- " flag_group {",
- " flag: '%{output_execpath}'",
- " }",
- " }",
- "}",
- "feature {",
- " name: 'runtime_library_search_directories',",
- " flag_set {",
- " expand_if_all_available: 'runtime_library_search_directories'",
- " action: 'c++-link-executable'",
- " action: 'c++-link-dynamic-library'",
- " flag_group {",
- " iterate_over: 'runtime_library_search_directories'",
- " flag_group {",
- // TODO(b/27153401): This should probably be @loader_path on osx.
- ifTrue(
- supportsEmbeddedRuntimes,
- " expand_if_all_available: 'is_cc_test_link_action'",
- " flag: ",
- " '-Wl,-rpath,$EXEC_ORIGIN/%{runtime_library_search_directories}'",
- " }",
- " flag_group {",
- " expand_if_all_available: 'is_not_cc_test_link_action'"),
- " flag: '-Wl,-rpath,$ORIGIN/%{runtime_library_search_directories}'",
- " }",
- " }",
- " }",
- "}",
- "feature {",
- " name: 'library_search_directories'",
- " flag_set {",
- " expand_if_all_available: 'library_search_directories'",
- " action: 'c++-link-executable'",
- " action: 'c++-link-dynamic-library'",
- " flag_group {",
- " iterate_over: 'library_search_directories'",
- " flag: '-L%{library_search_directories}'",
- " }",
- " }",
- "}",
ifTrue(
- !features.contains("archiver_flags"),
+ !features.contains("symbol_counts"),
"feature {",
- " name: 'archiver_flags'",
+ " name: 'symbol_counts'",
" flag_set {",
- " expand_if_all_available: 'output_execpath'",
- " action: 'c++-link-static-library'",
- " action: 'c++-link-alwayslink-static-library'",
- " action: 'c++-link-pic-static-library'",
- " action: 'c++-link-alwayslink-pic-static-library'",
+ " expand_if_all_available: 'symbol_counts_output'",
+ " action: 'c++-link-executable'",
+ " action: 'c++-link-dynamic-library'",
" flag_group {",
- ifLinux(platform, "flag: 'rcsD'", "flag: '%{output_execpath}'"),
- ifMac(
- platform,
- " flag: '-static'",
- " flag: '-s'",
- " flag: '-o'",
- " flag: '%{output_execpath}'"),
+ " flag: '-Wl,--print-symbol-counts=%{symbol_counts_output}'",
" }",
" }",
"}"),
- "feature {",
- " name: 'libraries_to_link'",
- " flag_set {",
- " expand_if_all_available: 'libraries_to_link'",
- " action: 'c++-link-executable'",
- " action: 'c++-link-dynamic-library'",
- " action: 'c++-link-static-library'",
- " action: 'c++-link-alwayslink-static-library'",
- " action: 'c++-link-pic-static-library'",
- " action: 'c++-link-alwayslink-pic-static-library'",
- " flag_group {",
- " iterate_over: 'libraries_to_link'",
- " flag_group {",
- " expand_if_equal: {",
- " variable: 'libraries_to_link.type'",
- " value: 'object_file_group'",
- " }",
- " flag: '-Wl,--start-lib'",
- " }",
- ifLinux(
- platform,
- " flag_group {",
- " expand_if_true: 'libraries_to_link.is_whole_archive'",
- " flag: '-Wl,-whole-archive'",
- " }",
- " flag_group {",
- " expand_if_equal: {",
- " variable: 'libraries_to_link.type'",
- " value: 'object_file_group'",
+ ifTrue(
+ !features.contains("shared_flag"),
+ "feature {",
+ " name: 'shared_flag'",
+ " flag_set {",
+ " action: 'c++-link-dynamic-library'",
+ " flag_group {",
+ " flag: '-shared'",
" }",
- " iterate_over: 'libraries_to_link.object_files'",
- " flag: '%{libraries_to_link.object_files}'",
" }",
- " flag_group {",
- " expand_if_equal: {",
- " variable: 'libraries_to_link.type'",
- " value: 'object_file'",
+ "}"),
+ ifTrue(
+ !features.contains("linkstamps"),
+ "feature {",
+ " name: 'linkstamps'",
+ " flag_set {",
+ " action: 'c++-link-executable'",
+ " action: 'c++-link-dynamic-library'",
+ " expand_if_all_available: 'linkstamp_paths'",
+ " flag_group {",
+ " iterate_over: 'linkstamp_paths'",
+ " flag: '%{linkstamp_paths}'",
" }",
- " flag: '%{libraries_to_link.name}'",
" }",
- " flag_group {",
- " expand_if_equal: {",
- " variable: 'libraries_to_link.type'",
- " value: 'interface_library'",
+ "}"),
+ ifTrue(
+ !features.contains("output_execpath_flags"),
+ "feature {",
+ " name: 'output_execpath_flags'",
+ " flag_set {",
+ " expand_if_all_available: 'output_execpath'",
+ " action: 'c++-link-dynamic-library'",
+ " flag_group {",
+ " flag: '-o'",
+ " flag: '%{output_execpath}'",
" }",
- " flag: '%{libraries_to_link.name}'",
" }",
- " flag_group {",
- " expand_if_equal: {",
- " variable: 'libraries_to_link.type'",
- " value: 'static_library'",
+ "}"),
+ ifTrue(
+ !features.contains("output_execpath_flags_executable"),
+ "feature {",
+ " name: 'output_execpath_flags_executable'",
+ " flag_set {",
+ " expand_if_all_available: 'output_execpath'",
+ " action: 'c++-link-executable'",
+ " flag_group {",
+ " flag: '-o'",
" }",
- " flag: '%{libraries_to_link.name}'",
" }",
- " flag_group {",
- " expand_if_equal: {",
- " variable: 'libraries_to_link.type'",
- " value: 'dynamic_library'",
+ " flag_set {",
+ " expand_if_all_available: 'skip_mostly_static'",
+ " expand_if_all_available: 'output_execpath'",
+ " action: 'c++-link-executable'",
+ " flag_group {",
+ " flag: '/dev/null'",
+ " flag: '-MMD'",
+ " flag: '-MF'",
" }",
- " flag: '-l%{libraries_to_link.name}'",
" }",
- " flag_group {",
- " expand_if_equal: {",
- " variable: 'libraries_to_link.type'",
- " value: 'versioned_dynamic_library'",
+ " flag_set {",
+ " expand_if_all_available: 'output_execpath'",
+ " action: 'c++-link-executable'",
+ " flag_group {",
+ " flag: '%{output_execpath}'",
" }",
- " flag: '-l:%{libraries_to_link.name}'",
" }",
- " flag_group {",
- " expand_if_true: 'libraries_to_link.is_whole_archive'",
- " flag: '-Wl,-no-whole-archive'",
- " }"),
- ifMac(
- platform,
- " flag_group {",
- " expand_if_equal: {",
- " variable: 'libraries_to_link.type'",
- " value: 'object_file_group'",
- " }",
- " iterate_over: 'libraries_to_link.object_files'",
+ "}"),
+ ifTrue(
+ !features.contains("runtime_library_search_directories"),
+ "feature {",
+ " name: 'runtime_library_search_directories',",
+ " flag_set {",
+ " expand_if_all_available: 'runtime_library_search_directories'",
+ " action: 'c++-link-executable'",
+ " action: 'c++-link-dynamic-library'",
" flag_group {",
- " expand_if_false: 'libraries_to_link.is_whole_archive'",
- " flag: '%{libraries_to_link.object_files}'",
+ " iterate_over: 'runtime_library_search_directories'",
+ " flag_group {",
+ // TODO(b/27153401): This should probably be @loader_path on osx.
+ ifTrue(
+ supportsEmbeddedRuntimes,
+ " expand_if_all_available: 'is_cc_test_link_action'",
+ " flag: ",
+ " '-Wl,-rpath,$EXEC_ORIGIN/%{runtime_library_search_directories}'",
+ " }",
+ " flag_group {",
+ " expand_if_all_available: 'is_not_cc_test_link_action'"),
+ " flag: '-Wl,-rpath,$ORIGIN/%{runtime_library_search_directories}'",
+ " }",
" }",
+ " }",
+ "}"),
+ ifTrue(
+ !features.contains("library_search_directories"),
+ "feature {",
+ " name: 'library_search_directories'",
+ " flag_set {",
+ " expand_if_all_available: 'library_search_directories'",
+ " action: 'c++-link-executable'",
+ " action: 'c++-link-dynamic-library'",
" flag_group {",
- " expand_if_true: 'libraries_to_link.is_whole_archive'",
- " flag: '-Wl,-force_load,%{libraries_to_link.object_files}'",
+ " iterate_over: 'library_search_directories'",
+ " flag: '-L%{library_search_directories}'",
" }",
" }",
- " flag_group {",
- " expand_if_equal: {",
- " variable: 'libraries_to_link.type'",
- " value: 'object_file'",
+ "}"),
+ ifTrue(
+ !features.contains("archiver_flags"),
+ "feature {",
+ " name: 'archiver_flags'",
+ " flag_set {",
+ " expand_if_all_available: 'output_execpath'",
+ " action: 'c++-link-static-library'",
+ " action: 'c++-link-alwayslink-static-library'",
+ " action: 'c++-link-pic-static-library'",
+ " action: 'c++-link-alwayslink-pic-static-library'",
+ " flag_group {",
+ ifLinux(platform, "flag: 'rcsD'", "flag: '%{output_execpath}'"),
+ ifMac(
+ platform,
+ " flag: '-static'",
+ " flag: '-s'",
+ " flag: '-o'",
+ " flag: '%{output_execpath}'"),
" }",
+ " }",
+ "}"),
+ ifTrue(
+ !features.contains("libraries_to_link"),
+ "feature {",
+ " name: 'libraries_to_link'",
+ " flag_set {",
+ " expand_if_all_available: 'libraries_to_link'",
+ " action: 'c++-link-executable'",
+ " action: 'c++-link-dynamic-library'",
+ " action: 'c++-link-static-library'",
+ " action: 'c++-link-alwayslink-static-library'",
+ " action: 'c++-link-pic-static-library'",
+ " action: 'c++-link-alwayslink-pic-static-library'",
" flag_group {",
- " expand_if_false: 'libraries_to_link.is_whole_archive'",
- " flag: '%{libraries_to_link.name}'",
+ " iterate_over: 'libraries_to_link'",
+ " flag_group {",
+ " expand_if_equal: {",
+ " variable: 'libraries_to_link.type'",
+ " value: 'object_file_group'",
+ " }",
+ " flag: '-Wl,--start-lib'",
+ " }",
+ ifLinux(
+ platform,
+ " flag_group {",
+ " expand_if_true: 'libraries_to_link.is_whole_archive'",
+ " flag: '-Wl,-whole-archive'",
+ " }",
+ " flag_group {",
+ " expand_if_equal: {",
+ " variable: 'libraries_to_link.type'",
+ " value: 'object_file_group'",
+ " }",
+ " iterate_over: 'libraries_to_link.object_files'",
+ " flag: '%{libraries_to_link.object_files}'",
+ " }",
+ " flag_group {",
+ " expand_if_equal: {",
+ " variable: 'libraries_to_link.type'",
+ " value: 'object_file'",
+ " }",
+ " flag: '%{libraries_to_link.name}'",
+ " }",
+ " flag_group {",
+ " expand_if_equal: {",
+ " variable: 'libraries_to_link.type'",
+ " value: 'interface_library'",
+ " }",
+ " flag: '%{libraries_to_link.name}'",
+ " }",
+ " flag_group {",
+ " expand_if_equal: {",
+ " variable: 'libraries_to_link.type'",
+ " value: 'static_library'",
+ " }",
+ " flag: '%{libraries_to_link.name}'",
+ " }",
+ " flag_group {",
+ " expand_if_equal: {",
+ " variable: 'libraries_to_link.type'",
+ " value: 'dynamic_library'",
+ " }",
+ " flag: '-l%{libraries_to_link.name}'",
+ " }",
+ " flag_group {",
+ " expand_if_equal: {",
+ " variable: 'libraries_to_link.type'",
+ " value: 'versioned_dynamic_library'",
+ " }",
+ " flag: '-l:%{libraries_to_link.name}'",
+ " }",
+ " flag_group {",
+ " expand_if_true: 'libraries_to_link.is_whole_archive'",
+ " flag: '-Wl,-no-whole-archive'",
+ " }"),
+ ifMac(
+ platform,
+ " flag_group {",
+ " expand_if_equal: {",
+ " variable: 'libraries_to_link.type'",
+ " value: 'object_file_group'",
+ " }",
+ " iterate_over: 'libraries_to_link.object_files'",
+ " flag_group {",
+ " expand_if_false: 'libraries_to_link.is_whole_archive'",
+ " flag: '%{libraries_to_link.object_files}'",
+ " }",
+ " flag_group {",
+ " expand_if_true: 'libraries_to_link.is_whole_archive'",
+ " flag: '-Wl,-force_load,%{libraries_to_link.object_files}'",
+ " }",
+ " }",
+ " flag_group {",
+ " expand_if_equal: {",
+ " variable: 'libraries_to_link.type'",
+ " value: 'object_file'",
+ " }",
+ " flag_group {",
+ " expand_if_false: 'libraries_to_link.is_whole_archive'",
+ " flag: '%{libraries_to_link.name}'",
+ " }",
+ " flag_group {",
+ " expand_if_true: 'libraries_to_link.is_whole_archive'",
+ " flag: '-Wl,-force_load,%{libraries_to_link.name}'",
+ " }",
+ " }",
+ " flag_group {",
+ " expand_if_equal: {",
+ " variable: 'libraries_to_link.type'",
+ " value: 'interface_library'",
+ " }",
+ " flag_group {",
+ " expand_if_false: 'libraries_to_link.is_whole_archive'",
+ " flag: '%{libraries_to_link.name}'",
+ " }",
+ " flag_group {",
+ " expand_if_true: 'libraries_to_link.is_whole_archive'",
+ " flag: '-Wl,-force_load,%{libraries_to_link.name}'",
+ " }",
+ " }",
+ " flag_group {",
+ " expand_if_equal: {",
+ " variable: 'libraries_to_link.type'",
+ " value: 'static_library'",
+ " }",
+ " flag_group {",
+ " expand_if_false: 'libraries_to_link.is_whole_archive'",
+ " flag: '%{libraries_to_link.name}'",
+ " }",
+ " flag_group {",
+ " expand_if_true: 'libraries_to_link.is_whole_archive'",
+ " flag: '-Wl,-force_load,%{libraries_to_link.name}'",
+ " }",
+ " }",
+ " flag_group {",
+ " expand_if_equal: {",
+ " variable: 'libraries_to_link.type'",
+ " value: 'dynamic_library'",
+ " }",
+ " flag: '-l%{libraries_to_link.name}'",
+ " }",
+ " flag_group {",
+ " expand_if_equal: {",
+ " variable: 'libraries_to_link.type'",
+ " value: 'versioned_dynamic_library'",
+ " }",
+ " flag: '-l:%{libraries_to_link.name}'",
+ " }"),
+ " flag_group {",
+ " expand_if_equal: {",
+ " variable: 'libraries_to_link.type'",
+ " value: 'object_file_group'",
+ " }",
+ " flag: '-Wl,--end-lib'",
+ " }",
" }",
" flag_group {",
- " expand_if_true: 'libraries_to_link.is_whole_archive'",
- " flag: '-Wl,-force_load,%{libraries_to_link.name}'",
+ " expand_if_true: 'thinlto_param_file'",
+ " flag: '-Wl,@%{thinlto_param_file}'",
" }",
" }",
- " flag_group {",
- " expand_if_equal: {",
- " variable: 'libraries_to_link.type'",
- " value: 'interface_library'",
- " }",
+ "}"),
+ ifTrue(
+ !features.contains("force_pic_flags"),
+ "feature {",
+ " name: 'force_pic_flags'",
+ " flag_set {",
+ " expand_if_all_available: 'force_pic'",
+ " action: 'c++-link-executable'",
" flag_group {",
- " expand_if_false: 'libraries_to_link.is_whole_archive'",
- " flag: '%{libraries_to_link.name}'",
+ " flag: '-pie'",
" }",
+ " }",
+ "}"),
+ ifTrue(
+ !features.contains("legacy_link_flags"),
+ "feature {",
+ " name: 'legacy_link_flags'",
+ " flag_set {",
+ " expand_if_all_available: 'legacy_link_flags'",
+ " action: 'c++-link-executable'",
+ " action: 'c++-link-dynamic-library'",
" flag_group {",
- " expand_if_true: 'libraries_to_link.is_whole_archive'",
- " flag: '-Wl,-force_load,%{libraries_to_link.name}'",
+ " iterate_over: 'legacy_link_flags'",
+ " flag: '%{legacy_link_flags}'",
" }",
" }",
- " flag_group {",
- " expand_if_equal: {",
- " variable: 'libraries_to_link.type'",
- " value: 'static_library'",
- " }",
+ "}"),
+ ifTrue(
+ !features.contains("fission_support"),
+ "feature {",
+ " name: 'fission_support'",
+ " flag_set {",
+ " action: 'c++-link-executable'",
+ " action: 'c++-link-dynamic-library'",
+ " action: 'c++-link-interface-dynamic-library'",
" flag_group {",
- " expand_if_false: 'libraries_to_link.is_whole_archive'",
- " flag: '%{libraries_to_link.name}'",
+ " expand_if_all_available: 'is_using_fission'",
+ " flag: '-Wl,--gdb-index'",
" }",
+ " }",
+ "}"),
+ ifTrue(
+ !features.contains("strip_debug_symbols"),
+ "feature {",
+ " name: 'strip_debug_symbols'",
+ " flag_set {",
+ " action: 'c++-link-executable'",
+ " action: 'c++-link-dynamic-library'",
+ " action: 'c++-link-interface-dynamic-library'",
" flag_group {",
- " expand_if_true: 'libraries_to_link.is_whole_archive'",
- " flag: '-Wl,-force_load,%{libraries_to_link.name}'",
+ " expand_if_all_available: 'strip_debug_symbols'",
+ " flag: '-Wl,-S'",
" }",
" }",
- " flag_group {",
- " expand_if_equal: {",
- " variable: 'libraries_to_link.type'",
- " value: 'dynamic_library'",
+ "}"),
+ ifTrue(
+ !features.contains("linker_param_file"),
+ "feature {",
+ " name: 'linker_param_file'",
+ " flag_set {",
+ " expand_if_all_available: 'linker_param_file'",
+ " action: 'c++-link-executable'",
+ " action: 'c++-link-dynamic-library'",
+ " flag_group {",
+ " flag: '-Wl,@%{linker_param_file}'",
" }",
- " flag: '-l%{libraries_to_link.name}'",
" }",
- " flag_group {",
- " expand_if_equal: {",
- " variable: 'libraries_to_link.type'",
- " value: 'versioned_dynamic_library'",
+ " flag_set {",
+ " expand_if_all_available: 'linker_param_file'",
+ " action: 'c++-link-static-library'",
+ " action: 'c++-link-alwayslink-static-library'",
+ " action: 'c++-link-pic-static-library'",
+ " action: 'c++-link-alwayslink-pic-static-library'",
+ " flag_group {",
+ " flag: '@%{linker_param_file}'",
" }",
- " flag: '-l:%{libraries_to_link.name}'",
- " }"),
- " flag_group {",
- " expand_if_equal: {",
- " variable: 'libraries_to_link.type'",
- " value: 'object_file_group'",
- " }",
- " flag: '-Wl,--end-lib'",
- " }",
- " }",
- " flag_group {",
- " expand_if_true: 'thinlto_param_file'",
- " flag: '-Wl,@%{thinlto_param_file}'",
- " }",
- " }",
- "}",
- "feature {",
- " name: 'force_pic_flags'",
- " flag_set {",
- " expand_if_all_available: 'force_pic'",
- " action: 'c++-link-executable'",
- " flag_group {",
- " flag: '-pie'",
- " }",
- " }",
- "}",
- "feature {",
- " name: 'legacy_link_flags'",
- " flag_set {",
- " expand_if_all_available: 'legacy_link_flags'",
- " action: 'c++-link-executable'",
- " action: 'c++-link-dynamic-library'",
- " flag_group {",
- " iterate_over: 'legacy_link_flags'",
- " flag: '%{legacy_link_flags}'",
- " }",
- " }",
- "}",
- "feature {",
- " name: 'fission_support'",
- " flag_set {",
- " action: 'c++-link-executable'",
- " action: 'c++-link-dynamic-library'",
- " action: 'c++-link-interface-dynamic-library'",
- " flag_group {",
- " expand_if_all_available: 'is_using_fission'",
- " flag: '-Wl,--gdb-index'",
- " }",
- " }",
- "}",
- "feature {",
- " name: 'strip_debug_symbols'",
- " flag_set {",
- " action: 'c++-link-executable'",
- " action: 'c++-link-dynamic-library'",
- " action: 'c++-link-interface-dynamic-library'",
- " flag_group {",
- " expand_if_all_available: 'strip_debug_symbols'",
- " flag: '-Wl,-S'",
- " }",
- " }",
- "}",
- "feature {",
- " name: 'linker_param_file'",
- " flag_set {",
- " expand_if_all_available: 'linker_param_file'",
- " action: 'c++-link-executable'",
- " action: 'c++-link-dynamic-library'",
- " flag_group {",
- " flag: '-Wl,@%{linker_param_file}'",
- " }",
- " }",
- " flag_set {",
- " expand_if_all_available: 'linker_param_file'",
- " action: 'c++-link-static-library'",
- " action: 'c++-link-alwayslink-static-library'",
- " action: 'c++-link-pic-static-library'",
- " action: 'c++-link-alwayslink-pic-static-library'",
- " flag_group {",
- " flag: '@%{linker_param_file}'",
- " }",
- " }",
- "}",
+ " }",
+ "}"),
ifTrue(
!features.contains(CppRuleClasses.COVERAGE),
"feature {",