|
|
@@ -11,237 +11,237 @@ load(
|
|
|
"flag_group",
|
|
|
"flag_set",
|
|
|
"variable_with_value",
|
|
|
+ "with_feature_set",
|
|
|
)
|
|
|
load(
|
|
|
":cc_toolchain_actions.bzl",
|
|
|
"all_link_actions",
|
|
|
)
|
|
|
|
|
|
-default_link_libraries_feature = feature(
|
|
|
- name = "default_link_libraries",
|
|
|
+link_libraries_feature = feature(
|
|
|
+ name = "link_libraries",
|
|
|
enabled = True,
|
|
|
- flag_sets = [flag_set(
|
|
|
- actions = all_link_actions,
|
|
|
- flag_groups = [
|
|
|
- flag_group(
|
|
|
- expand_if_available = "linkstamp_paths",
|
|
|
- flags = ["%{linkstamp_paths}"],
|
|
|
- iterate_over = "linkstamp_paths",
|
|
|
- ),
|
|
|
- flag_group(
|
|
|
- expand_if_available = "libraries_to_link",
|
|
|
- flag_groups = [
|
|
|
- flag_group(
|
|
|
- expand_if_equal = variable_with_value(
|
|
|
- name = "libraries_to_link.type",
|
|
|
- value = "object_file_group",
|
|
|
- ),
|
|
|
- flags = ["-Wl,--start-lib"],
|
|
|
- ),
|
|
|
- flag_group(
|
|
|
- expand_if_true = "libraries_to_link.is_whole_archive",
|
|
|
- flags = ["-Wl,-whole-archive"],
|
|
|
- ),
|
|
|
- flag_group(
|
|
|
- expand_if_equal = variable_with_value(
|
|
|
- name = "libraries_to_link.type",
|
|
|
- value = "object_file_group",
|
|
|
+ flag_sets = [
|
|
|
+ flag_set(
|
|
|
+ actions = all_link_actions,
|
|
|
+ flag_groups = [
|
|
|
+ flag_group(
|
|
|
+ expand_if_available = "linkstamp_paths",
|
|
|
+ flags = ["%{linkstamp_paths}"],
|
|
|
+ iterate_over = "linkstamp_paths",
|
|
|
+ ),
|
|
|
+ flag_group(
|
|
|
+ expand_if_available = "libraries_to_link",
|
|
|
+ flag_groups = [
|
|
|
+ flag_group(
|
|
|
+ expand_if_equal = variable_with_value(
|
|
|
+ name = "libraries_to_link.type",
|
|
|
+ value = "object_file_group",
|
|
|
+ ),
|
|
|
+ flags = ["-Wl,--start-lib"],
|
|
|
),
|
|
|
- flags = ["%{libraries_to_link.object_files}"],
|
|
|
- iterate_over = "libraries_to_link.object_files",
|
|
|
- ),
|
|
|
- flag_group(
|
|
|
- expand_if_equal = variable_with_value(
|
|
|
- name = "libraries_to_link.type",
|
|
|
- value = "object_file",
|
|
|
+ flag_group(
|
|
|
+ expand_if_true = "libraries_to_link.is_whole_archive",
|
|
|
+ flags = ["-Wl,-whole-archive"],
|
|
|
),
|
|
|
- flags = ["%{libraries_to_link.name}"],
|
|
|
- ),
|
|
|
- flag_group(
|
|
|
- expand_if_equal = variable_with_value(
|
|
|
- name = "libraries_to_link.type",
|
|
|
- value = "interface_library",
|
|
|
+ flag_group(
|
|
|
+ expand_if_equal = variable_with_value(
|
|
|
+ name = "libraries_to_link.type",
|
|
|
+ value = "object_file_group",
|
|
|
+ ),
|
|
|
+ flags = ["%{libraries_to_link.object_files}"],
|
|
|
+ iterate_over = "libraries_to_link.object_files",
|
|
|
),
|
|
|
- flags = ["%{libraries_to_link.name}"],
|
|
|
- ),
|
|
|
- flag_group(
|
|
|
- expand_if_equal = variable_with_value(
|
|
|
- name = "libraries_to_link.type",
|
|
|
- value = "static_library",
|
|
|
+ flag_group(
|
|
|
+ expand_if_equal = variable_with_value(
|
|
|
+ name = "libraries_to_link.type",
|
|
|
+ value = "object_file",
|
|
|
+ ),
|
|
|
+ flags = ["%{libraries_to_link.name}"],
|
|
|
),
|
|
|
- flags = ["%{libraries_to_link.name}"],
|
|
|
- ),
|
|
|
- flag_group(
|
|
|
- expand_if_equal = variable_with_value(
|
|
|
- name = "libraries_to_link.type",
|
|
|
- value = "dynamic_library",
|
|
|
+ flag_group(
|
|
|
+ expand_if_equal = variable_with_value(
|
|
|
+ name = "libraries_to_link.type",
|
|
|
+ value = "interface_library",
|
|
|
+ ),
|
|
|
+ flags = ["%{libraries_to_link.name}"],
|
|
|
),
|
|
|
- flags = ["-l%{libraries_to_link.name}"],
|
|
|
- ),
|
|
|
- flag_group(
|
|
|
- expand_if_equal = variable_with_value(
|
|
|
- name = "libraries_to_link.type",
|
|
|
- value = "versioned_dynamic_library",
|
|
|
+ flag_group(
|
|
|
+ expand_if_equal = variable_with_value(
|
|
|
+ name = "libraries_to_link.type",
|
|
|
+ value = "static_library",
|
|
|
+ ),
|
|
|
+ flags = ["%{libraries_to_link.name}"],
|
|
|
),
|
|
|
- flags = ["-l:%{libraries_to_link.name}"],
|
|
|
- ),
|
|
|
- flag_group(
|
|
|
- expand_if_true = "libraries_to_link.is_whole_archive",
|
|
|
- flags = ["-Wl,-no-whole-archive"],
|
|
|
- ),
|
|
|
- flag_group(
|
|
|
- expand_if_equal = variable_with_value(
|
|
|
- name = "libraries_to_link.type",
|
|
|
- value = "object_file_group",
|
|
|
+ flag_group(
|
|
|
+ expand_if_equal = variable_with_value(
|
|
|
+ name = "libraries_to_link.type",
|
|
|
+ value = "dynamic_library",
|
|
|
+ ),
|
|
|
+ flags = ["-l%{libraries_to_link.name}"],
|
|
|
),
|
|
|
- flags = ["-Wl,--end-lib"],
|
|
|
- ),
|
|
|
- ],
|
|
|
- iterate_over = "libraries_to_link",
|
|
|
- ),
|
|
|
- # Note that the params file comes at the end, after the
|
|
|
- # libraries to link above.
|
|
|
- flag_group(
|
|
|
- expand_if_available = "linker_param_file",
|
|
|
- flags = ["@%{linker_param_file}"],
|
|
|
- ),
|
|
|
- ],
|
|
|
- )],
|
|
|
-)
|
|
|
-
|
|
|
-macos_link_libraries_feature = feature(
|
|
|
- name = "macos_link_libraries",
|
|
|
- enabled = True,
|
|
|
- flag_sets = [flag_set(
|
|
|
- actions = all_link_actions,
|
|
|
- flag_groups = [
|
|
|
- flag_group(
|
|
|
- expand_if_available = "linkstamp_paths",
|
|
|
- flags = ["%{linkstamp_paths}"],
|
|
|
- iterate_over = "linkstamp_paths",
|
|
|
- ),
|
|
|
- flag_group(
|
|
|
- expand_if_available = "libraries_to_link",
|
|
|
- flag_groups = [
|
|
|
- flag_group(
|
|
|
- expand_if_equal = variable_with_value(
|
|
|
- name = "libraries_to_link.type",
|
|
|
- value = "object_file_group",
|
|
|
+ flag_group(
|
|
|
+ expand_if_equal = variable_with_value(
|
|
|
+ name = "libraries_to_link.type",
|
|
|
+ value = "versioned_dynamic_library",
|
|
|
+ ),
|
|
|
+ flags = ["-l:%{libraries_to_link.name}"],
|
|
|
),
|
|
|
- flags = ["-Wl,--start-lib"],
|
|
|
- ),
|
|
|
- flag_group(
|
|
|
- expand_if_equal = variable_with_value(
|
|
|
- name = "libraries_to_link.type",
|
|
|
- value = "object_file_group",
|
|
|
+ flag_group(
|
|
|
+ expand_if_true = "libraries_to_link.is_whole_archive",
|
|
|
+ flags = ["-Wl,-no-whole-archive"],
|
|
|
),
|
|
|
- flag_groups = [
|
|
|
- flag_group(
|
|
|
- expand_if_false = "libraries_to_link.is_whole_archive",
|
|
|
- flags = ["%{libraries_to_link.object_files}"],
|
|
|
+ flag_group(
|
|
|
+ expand_if_equal = variable_with_value(
|
|
|
+ name = "libraries_to_link.type",
|
|
|
+ value = "object_file_group",
|
|
|
),
|
|
|
- flag_group(
|
|
|
- expand_if_true = "libraries_to_link.is_whole_archive",
|
|
|
- flags = ["-Wl,-force_load,%{libraries_to_link.object_files}"],
|
|
|
+ flags = ["-Wl,--end-lib"],
|
|
|
+ ),
|
|
|
+ ],
|
|
|
+ iterate_over = "libraries_to_link",
|
|
|
+ ),
|
|
|
+ # Note that the params file comes at the end, after the
|
|
|
+ # libraries to link above.
|
|
|
+ flag_group(
|
|
|
+ expand_if_available = "linker_param_file",
|
|
|
+ flags = ["@%{linker_param_file}"],
|
|
|
+ ),
|
|
|
+ ],
|
|
|
+ with_features = [with_feature_set(not_features = ["macos_target"])],
|
|
|
+ ),
|
|
|
+ flag_set(
|
|
|
+ actions = all_link_actions,
|
|
|
+ flag_groups = [
|
|
|
+ flag_group(
|
|
|
+ expand_if_available = "linkstamp_paths",
|
|
|
+ flags = ["%{linkstamp_paths}"],
|
|
|
+ iterate_over = "linkstamp_paths",
|
|
|
+ ),
|
|
|
+ flag_group(
|
|
|
+ expand_if_available = "libraries_to_link",
|
|
|
+ flag_groups = [
|
|
|
+ flag_group(
|
|
|
+ expand_if_equal = variable_with_value(
|
|
|
+ name = "libraries_to_link.type",
|
|
|
+ value = "object_file_group",
|
|
|
),
|
|
|
- ],
|
|
|
- iterate_over = "libraries_to_link.object_files",
|
|
|
- ),
|
|
|
- flag_group(
|
|
|
- expand_if_equal = variable_with_value(
|
|
|
- name = "libraries_to_link.type",
|
|
|
- value = "object_file",
|
|
|
+ flags = ["-Wl,--start-lib"],
|
|
|
),
|
|
|
- flag_groups = [
|
|
|
- flag_group(
|
|
|
- expand_if_false = "libraries_to_link.is_whole_archive",
|
|
|
- flags = ["%{libraries_to_link.name}"],
|
|
|
+ flag_group(
|
|
|
+ expand_if_equal = variable_with_value(
|
|
|
+ name = "libraries_to_link.type",
|
|
|
+ value = "object_file_group",
|
|
|
),
|
|
|
- flag_group(
|
|
|
- expand_if_true = "libraries_to_link.is_whole_archive",
|
|
|
- flags = ["-Wl,-force_load,%{libraries_to_link.name}"],
|
|
|
+ flag_groups = [
|
|
|
+ flag_group(
|
|
|
+ expand_if_false = "libraries_to_link.is_whole_archive",
|
|
|
+ flags = ["%{libraries_to_link.object_files}"],
|
|
|
+ ),
|
|
|
+ flag_group(
|
|
|
+ expand_if_true = "libraries_to_link.is_whole_archive",
|
|
|
+ flags = ["-Wl,-force_load,%{libraries_to_link.object_files}"],
|
|
|
+ ),
|
|
|
+ ],
|
|
|
+ iterate_over = "libraries_to_link.object_files",
|
|
|
+ ),
|
|
|
+ flag_group(
|
|
|
+ expand_if_equal = variable_with_value(
|
|
|
+ name = "libraries_to_link.type",
|
|
|
+ value = "object_file",
|
|
|
),
|
|
|
- ],
|
|
|
- ),
|
|
|
- flag_group(
|
|
|
- expand_if_equal = variable_with_value(
|
|
|
- name = "libraries_to_link.type",
|
|
|
- value = "interface_library",
|
|
|
+ flag_groups = [
|
|
|
+ flag_group(
|
|
|
+ expand_if_false = "libraries_to_link.is_whole_archive",
|
|
|
+ flags = ["%{libraries_to_link.name}"],
|
|
|
+ ),
|
|
|
+ flag_group(
|
|
|
+ expand_if_true = "libraries_to_link.is_whole_archive",
|
|
|
+ flags = ["-Wl,-force_load,%{libraries_to_link.name}"],
|
|
|
+ ),
|
|
|
+ ],
|
|
|
),
|
|
|
- flag_groups = [
|
|
|
- flag_group(
|
|
|
- expand_if_false = "libraries_to_link.is_whole_archive",
|
|
|
- flags = ["%{libraries_to_link.name}"],
|
|
|
+ flag_group(
|
|
|
+ expand_if_equal = variable_with_value(
|
|
|
+ name = "libraries_to_link.type",
|
|
|
+ value = "interface_library",
|
|
|
),
|
|
|
- flag_group(
|
|
|
- expand_if_true = "libraries_to_link.is_whole_archive",
|
|
|
- flags = ["-Wl,-force_load,%{libraries_to_link.name}"],
|
|
|
+ flag_groups = [
|
|
|
+ flag_group(
|
|
|
+ expand_if_false = "libraries_to_link.is_whole_archive",
|
|
|
+ flags = ["%{libraries_to_link.name}"],
|
|
|
+ ),
|
|
|
+ flag_group(
|
|
|
+ expand_if_true = "libraries_to_link.is_whole_archive",
|
|
|
+ flags = ["-Wl,-force_load,%{libraries_to_link.name}"],
|
|
|
+ ),
|
|
|
+ ],
|
|
|
+ ),
|
|
|
+ flag_group(
|
|
|
+ expand_if_equal = variable_with_value(
|
|
|
+ name = "libraries_to_link.type",
|
|
|
+ value = "static_library",
|
|
|
),
|
|
|
- ],
|
|
|
- ),
|
|
|
- flag_group(
|
|
|
- expand_if_equal = variable_with_value(
|
|
|
- name = "libraries_to_link.type",
|
|
|
- value = "static_library",
|
|
|
+ flag_groups = [
|
|
|
+ flag_group(
|
|
|
+ expand_if_false = "libraries_to_link.is_whole_archive",
|
|
|
+ flags = ["%{libraries_to_link.name}"],
|
|
|
+ ),
|
|
|
+ flag_group(
|
|
|
+ expand_if_true = "libraries_to_link.is_whole_archive",
|
|
|
+ flags = ["-Wl,-force_load,%{libraries_to_link.name}"],
|
|
|
+ ),
|
|
|
+ ],
|
|
|
),
|
|
|
- flag_groups = [
|
|
|
- flag_group(
|
|
|
- expand_if_false = "libraries_to_link.is_whole_archive",
|
|
|
- flags = ["%{libraries_to_link.name}"],
|
|
|
+ flag_group(
|
|
|
+ expand_if_equal = variable_with_value(
|
|
|
+ name = "libraries_to_link.type",
|
|
|
+ value = "dynamic_library",
|
|
|
),
|
|
|
- flag_group(
|
|
|
- expand_if_true = "libraries_to_link.is_whole_archive",
|
|
|
- flags = ["-Wl,-force_load,%{libraries_to_link.name}"],
|
|
|
+ flags = ["-l%{libraries_to_link.name}"],
|
|
|
+ ),
|
|
|
+ flag_group(
|
|
|
+ expand_if_equal = variable_with_value(
|
|
|
+ name = "libraries_to_link.type",
|
|
|
+ value = "versioned_dynamic_library",
|
|
|
),
|
|
|
- ],
|
|
|
- ),
|
|
|
- flag_group(
|
|
|
- expand_if_equal = variable_with_value(
|
|
|
- name = "libraries_to_link.type",
|
|
|
- value = "dynamic_library",
|
|
|
+ flags = ["-l:%{libraries_to_link.name}"],
|
|
|
),
|
|
|
- flags = ["-l%{libraries_to_link.name}"],
|
|
|
- ),
|
|
|
- flag_group(
|
|
|
- expand_if_equal = variable_with_value(
|
|
|
- name = "libraries_to_link.type",
|
|
|
- value = "versioned_dynamic_library",
|
|
|
+ flag_group(
|
|
|
+ expand_if_true = "libraries_to_link.is_whole_archive",
|
|
|
+ flag_groups = [
|
|
|
+ flag_group(
|
|
|
+ expand_if_false = "macos_flags",
|
|
|
+ flags = ["-Wl,-no-whole-archive"],
|
|
|
+ ),
|
|
|
+ ],
|
|
|
),
|
|
|
- flags = ["-l:%{libraries_to_link.name}"],
|
|
|
- ),
|
|
|
- flag_group(
|
|
|
- expand_if_true = "libraries_to_link.is_whole_archive",
|
|
|
- flag_groups = [
|
|
|
- flag_group(
|
|
|
- expand_if_false = "macos_flags",
|
|
|
- flags = ["-Wl,-no-whole-archive"],
|
|
|
+ flag_group(
|
|
|
+ expand_if_equal = variable_with_value(
|
|
|
+ name = "libraries_to_link.type",
|
|
|
+ value = "object_file_group",
|
|
|
),
|
|
|
- ],
|
|
|
- ),
|
|
|
- flag_group(
|
|
|
- expand_if_equal = variable_with_value(
|
|
|
- name = "libraries_to_link.type",
|
|
|
- value = "object_file_group",
|
|
|
+ flags = ["-Wl,--end-lib"],
|
|
|
),
|
|
|
- flags = ["-Wl,--end-lib"],
|
|
|
- ),
|
|
|
- ],
|
|
|
- iterate_over = "libraries_to_link",
|
|
|
- ),
|
|
|
- # Note that the params file comes at the end, after the
|
|
|
- # libraries to link above.
|
|
|
- flag_group(
|
|
|
- expand_if_available = "linker_param_file",
|
|
|
- flags = ["@%{linker_param_file}"],
|
|
|
- ),
|
|
|
- ],
|
|
|
- )],
|
|
|
+ ],
|
|
|
+ iterate_over = "libraries_to_link",
|
|
|
+ ),
|
|
|
+ # Note that the params file comes at the end, after the
|
|
|
+ # libraries to link above.
|
|
|
+ flag_group(
|
|
|
+ expand_if_available = "linker_param_file",
|
|
|
+ flags = ["@%{linker_param_file}"],
|
|
|
+ ),
|
|
|
+ ],
|
|
|
+ with_features = [with_feature_set(["macos_target"])],
|
|
|
+ ),
|
|
|
+ ],
|
|
|
)
|
|
|
|
|
|
# Archive actions have an entirely independent set of flags and don't
|
|
|
# interact with either compiler or link actions.
|
|
|
-default_archiver_flags_feature = feature(
|
|
|
- name = "default_archiver_flags",
|
|
|
+archiving_feature = feature(
|
|
|
+ name = "archiving",
|
|
|
enabled = True,
|
|
|
flag_sets = [flag_set(
|
|
|
actions = [ACTION_NAMES.cpp_link_static_library],
|
|
|
@@ -283,5 +283,6 @@ default_archiver_flags_feature = feature(
|
|
|
# Note that the order of features is significant in this list and determines the
|
|
|
# relative order of flags from the features listed.
|
|
|
linking_features = [
|
|
|
- default_archiver_flags_feature,
|
|
|
+ link_libraries_feature,
|
|
|
+ archiving_feature,
|
|
|
]
|