1
Fork 0

Adds dynamic_library_linkopts to zig_cc_toolchain_config

If specified, the flags in dynamic_library_linkopts are included in
cpp_link_dynamic_library and cpp_link_nodeps_dynamic_library actions.
nix
Jeremy Volkman 2022-05-24 17:14:35 -07:00 committed by Motiejus Jakštys
parent f6440f8cf0
commit 921fda9260
3 changed files with 24 additions and 3 deletions

View File

@ -32,6 +32,7 @@ def declare_cc_toolchains(absolute_path, zig_include_root):
absolute_tool_paths[name] = "%s/%s" % (absolute_path, tool_path)
linkopts = target_config.linkopts
dynamic_library_linkopts = target_config.dynamic_library_linkopts
copts = target_config.copts
for s in getattr(target_config, "linker_version_scripts", []):
linkopts = linkopts + ["-Wl,--version-script,%s/%s" % (absolute_path, s)]
@ -45,6 +46,7 @@ def declare_cc_toolchains(absolute_path, zig_include_root):
cxx_builtin_include_directories = cxx_builtin_include_directories,
copts = copts,
linkopts = linkopts,
dynamic_library_linkopts = dynamic_library_linkopts,
target_cpu = target_config.bazel_target_cpu,
target_system_name = "unknown",
target_libc = "unknown",

View File

@ -54,6 +54,7 @@ def _target_darwin(gocpu, zigcpu):
"libc/include/any-macos-any",
],
linkopts = [],
dynamic_library_linkopts = [],
copts = [],
bazel_target_cpu = "darwin",
constraint_values = [
@ -84,6 +85,7 @@ def _target_linux_gnu(gocpu, zigcpu, glibc_version):
compiler_extra_includes = ["glibc-hacks/glibchack-fcntl.h"] if fcntl_hack else [],
linker_version_scripts = ["glibc-hacks/fcntl.map"] if fcntl_hack else [],
linkopts = ["-lc++", "-lc++abi"],
dynamic_library_linkopts = [],
copts = [],
bazel_target_cpu = "k8",
constraint_values = [
@ -105,6 +107,7 @@ def _target_linux_musl(gocpu, zigcpu):
"libc/include/{}-linux-any".format(zigcpu),
] + (["libc/include/x86-linux-any"] if zigcpu == "x86_64" else []),
linkopts = ["-s", "-w"],
dynamic_library_linkopts = [],
copts = ["-D_LIBCPP_HAS_MUSL_LIBC", "-D_LIBCPP_HAS_THREAD_API_PTHREAD"],
bazel_target_cpu = "k8",
constraint_values = [

View File

@ -14,6 +14,11 @@ all_link_actions = [
ACTION_NAMES.cpp_link_nodeps_dynamic_library,
]
dynamic_library_link_actions = [
ACTION_NAMES.cpp_link_dynamic_library,
ACTION_NAMES.cpp_link_nodeps_dynamic_library,
]
compile_and_link_actions = [
ACTION_NAMES.c_compile,
ACTION_NAMES.cpp_compile,
@ -73,21 +78,31 @@ def _zig_cc_toolchain_config_impl(ctx):
],
)
if ctx.attr.dynamic_library_linkopts:
dynamic_library_flag_sets = [
flag_set(
actions = dynamic_library_link_actions,
flag_groups = [flag_group(flags = ctx.attr.dynamic_library_linkopts)],
),
]
else:
dynamic_library_flag_sets = []
default_linker_flags = feature(
name = "default_linker_flags",
enabled = True,
flag_sets = [
flag_set(
actions = all_link_actions,
flag_groups = ([
flag_groups = [
flag_group(
flags = ["-target", ctx.attr.target] +
no_gc_sections +
ctx.attr.linkopts,
),
]),
],
),
],
] + dynamic_library_flag_sets,
)
features = [
@ -119,6 +134,7 @@ zig_cc_toolchain_config = rule(
attrs = {
"cxx_builtin_include_directories": attr.string_list(),
"linkopts": attr.string_list(),
"dynamic_library_linkopts": attr.string_list(),
"copts": attr.string_list(),
"tool_paths": attr.string_dict(),
"target": attr.string(),