|
@@ -686,8 +686,7 @@ def _impl(ctx):
|
|
|
),
|
|
),
|
|
|
flag_group(
|
|
flag_group(
|
|
|
flags = ["-Wl,-whole-archive"],
|
|
flags = ["-Wl,-whole-archive"],
|
|
|
- expand_if_true =
|
|
|
|
|
- "libraries_to_link.is_whole_archive",
|
|
|
|
|
|
|
+ expand_if_true = "libraries_to_link.is_whole_archive",
|
|
|
),
|
|
),
|
|
|
flag_group(
|
|
flag_group(
|
|
|
flags = ["%{libraries_to_link.object_files}"],
|
|
flags = ["%{libraries_to_link.object_files}"],
|
|
@@ -757,6 +756,137 @@ def _impl(ctx):
|
|
|
],
|
|
],
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
|
|
+ macos_link_libraries_feature = feature(
|
|
|
|
|
+ name = "macos_link_libraries",
|
|
|
|
|
+ enabled = True,
|
|
|
|
|
+ flag_sets = [
|
|
|
|
|
+ flag_set(
|
|
|
|
|
+ actions = all_link_actions,
|
|
|
|
|
+ flag_groups = [
|
|
|
|
|
+ flag_group(
|
|
|
|
|
+ flags = ["%{linkstamp_paths}"],
|
|
|
|
|
+ iterate_over = "linkstamp_paths",
|
|
|
|
|
+ expand_if_available = "linkstamp_paths",
|
|
|
|
|
+ ),
|
|
|
|
|
+ flag_group(
|
|
|
|
|
+ iterate_over = "libraries_to_link",
|
|
|
|
|
+ flag_groups = [
|
|
|
|
|
+ flag_group(
|
|
|
|
|
+ flags = ["-Wl,--start-lib"],
|
|
|
|
|
+ expand_if_equal = variable_with_value(
|
|
|
|
|
+ name = "libraries_to_link.type",
|
|
|
|
|
+ value = "object_file_group",
|
|
|
|
|
+ ),
|
|
|
|
|
+ ),
|
|
|
|
|
+ flag_group(
|
|
|
|
|
+ iterate_over = "libraries_to_link.object_files",
|
|
|
|
|
+ expand_if_equal = variable_with_value(
|
|
|
|
|
+ name = "libraries_to_link.type",
|
|
|
|
|
+ value = "object_file_group",
|
|
|
|
|
+ ),
|
|
|
|
|
+ flag_groups = [
|
|
|
|
|
+ flag_group(
|
|
|
|
|
+ flags = ["%{libraries_to_link.object_files}"],
|
|
|
|
|
+ expand_if_false = "libraries_to_link.is_whole_archive",
|
|
|
|
|
+ ),
|
|
|
|
|
+ flag_group(
|
|
|
|
|
+ flags = ["-Wl,-force_load,%{libraries_to_link.object_files}"],
|
|
|
|
|
+ expand_if_true = "libraries_to_link.is_whole_archive",
|
|
|
|
|
+ ),
|
|
|
|
|
+ ],
|
|
|
|
|
+ ),
|
|
|
|
|
+ flag_group(
|
|
|
|
|
+ expand_if_equal = variable_with_value(
|
|
|
|
|
+ name = "libraries_to_link.type",
|
|
|
|
|
+ value = "object_file",
|
|
|
|
|
+ ),
|
|
|
|
|
+ flag_groups = [
|
|
|
|
|
+ flag_group(
|
|
|
|
|
+ flags = ["%{libraries_to_link.name}"],
|
|
|
|
|
+ expand_if_false = "libraries_to_link.is_whole_archive",
|
|
|
|
|
+ ),
|
|
|
|
|
+ flag_group(
|
|
|
|
|
+ flags = ["-Wl,-force_load,%{libraries_to_link.name}"],
|
|
|
|
|
+ expand_if_true = "libraries_to_link.is_whole_archive",
|
|
|
|
|
+ ),
|
|
|
|
|
+ ],
|
|
|
|
|
+ ),
|
|
|
|
|
+ flag_group(
|
|
|
|
|
+ expand_if_equal = variable_with_value(
|
|
|
|
|
+ name = "libraries_to_link.type",
|
|
|
|
|
+ value = "interface_library",
|
|
|
|
|
+ ),
|
|
|
|
|
+ flag_groups = [
|
|
|
|
|
+ flag_group(
|
|
|
|
|
+ flags = ["%{libraries_to_link.name}"],
|
|
|
|
|
+ expand_if_false = "libraries_to_link.is_whole_archive",
|
|
|
|
|
+ ),
|
|
|
|
|
+ flag_group(
|
|
|
|
|
+ flags = ["-Wl,-force_load,%{libraries_to_link.name}"],
|
|
|
|
|
+ expand_if_true = "libraries_to_link.is_whole_archive",
|
|
|
|
|
+ ),
|
|
|
|
|
+ ],
|
|
|
|
|
+ ),
|
|
|
|
|
+ flag_group(
|
|
|
|
|
+ expand_if_equal = variable_with_value(
|
|
|
|
|
+ name = "libraries_to_link.type",
|
|
|
|
|
+ value = "static_library",
|
|
|
|
|
+ ),
|
|
|
|
|
+ flag_groups = [
|
|
|
|
|
+ flag_group(
|
|
|
|
|
+ flags = ["%{libraries_to_link.name}"],
|
|
|
|
|
+ expand_if_false = "libraries_to_link.is_whole_archive",
|
|
|
|
|
+ ),
|
|
|
|
|
+ flag_group(
|
|
|
|
|
+ flags = ["-Wl,-force_load,%{libraries_to_link.name}"],
|
|
|
|
|
+ expand_if_true = "libraries_to_link.is_whole_archive",
|
|
|
|
|
+ ),
|
|
|
|
|
+ ],
|
|
|
|
|
+ ),
|
|
|
|
|
+ flag_group(
|
|
|
|
|
+ flags = ["-l%{libraries_to_link.name}"],
|
|
|
|
|
+ expand_if_equal = variable_with_value(
|
|
|
|
|
+ name = "libraries_to_link.type",
|
|
|
|
|
+ value = "dynamic_library",
|
|
|
|
|
+ ),
|
|
|
|
|
+ ),
|
|
|
|
|
+ flag_group(
|
|
|
|
|
+ flags = ["-l:%{libraries_to_link.name}"],
|
|
|
|
|
+ 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"],
|
|
|
|
|
+ ),
|
|
|
|
|
+ ],
|
|
|
|
|
+ ),
|
|
|
|
|
+ flag_group(
|
|
|
|
|
+ flags = ["-Wl,--end-lib"],
|
|
|
|
|
+ expand_if_equal = variable_with_value(
|
|
|
|
|
+ name = "libraries_to_link.type",
|
|
|
|
|
+ value = "object_file_group",
|
|
|
|
|
+ ),
|
|
|
|
|
+ ),
|
|
|
|
|
+ ],
|
|
|
|
|
+ expand_if_available = "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}"],
|
|
|
|
|
+ ),
|
|
|
|
|
+ ],
|
|
|
|
|
+ ),
|
|
|
|
|
+ ],
|
|
|
|
|
+ )
|
|
|
|
|
+
|
|
|
# Place user provided compile flags after all the features so that these
|
|
# Place user provided compile flags after all the features so that these
|
|
|
# flags can override or customize behavior. The only thing user flags
|
|
# flags can override or customize behavior. The only thing user flags
|
|
|
# cannot override is the output file as Bazel depends on that.
|
|
# cannot override is the output file as Bazel depends on that.
|
|
@@ -913,10 +1043,11 @@ def _impl(ctx):
|
|
|
features.append(x86_64_cpu_flags)
|
|
features.append(x86_64_cpu_flags)
|
|
|
|
|
|
|
|
# Finally append the libraries to link and any final flags.
|
|
# Finally append the libraries to link and any final flags.
|
|
|
- features += [
|
|
|
|
|
- default_link_libraries_feature,
|
|
|
|
|
- final_flags_feature,
|
|
|
|
|
- ]
|
|
|
|
|
|
|
+ if ctx.attr.target_cpu in ["darwin", "darwin_arm64"]:
|
|
|
|
|
+ features.append(macos_link_libraries_feature)
|
|
|
|
|
+ else:
|
|
|
|
|
+ features.append(default_link_libraries_feature)
|
|
|
|
|
+ features.append(final_flags_feature)
|
|
|
|
|
|
|
|
return cc_common.create_cc_toolchain_config_info(
|
|
return cc_common.create_cc_toolchain_config_info(
|
|
|
ctx = ctx,
|
|
ctx = ctx,
|