diff options
author | hlopko <hlopko@google.com> | 2017-08-18 14:28:58 +0200 |
---|---|---|
committer | Damien Martin-Guillerez <dmarting@google.com> | 2017-08-21 14:15:32 +0200 |
commit | c08f67975272a6b40d1fa5c444718efc0b59194a (patch) | |
tree | 7cfb3c8600106f989248e5415f95d6bcbac5d3ae /src | |
parent | e2eb771029a065438b99556111a267b280356a03 (diff) |
Do not add linking features in CppActionConfigs when crosstool already defines it
RELNOTES: None.
PiperOrigin-RevId: 165695975
Diffstat (limited to 'src')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/cpp/CppActionConfigs.java | 644 |
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 {", |