Skip to content

Commit

Permalink
logically revert #841 (#1147)
Browse files Browse the repository at this point in the history
Co-authored-by: Marcel Hlopko <hlopko@google.com>
  • Loading branch information
krasimirgg and hlopko committed Feb 22, 2022
1 parent 34cc2e9 commit 4a4d217
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 38 deletions.
11 changes: 8 additions & 3 deletions rust/private/rustc.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -1099,11 +1099,11 @@ def _get_crate_dirname(crate):

def _portable_link_flags(lib, use_pic):
if lib.static_library or lib.pic_static_library:
return ["-C", "link-arg=%s" % get_preferred_artifact(lib, use_pic).path]
return [
"-lstatic=%s" % get_lib_name(get_preferred_artifact(lib, use_pic)),
]
elif _is_dylib(lib):
# TODO: Consider switching dylibs to use -Clink-arg as above.
return [
"-Lnative=%s" % get_preferred_artifact(lib, use_pic).dirname,
"-ldylib=%s" % get_lib_name(get_preferred_artifact(lib, use_pic)),
]

Expand Down Expand Up @@ -1149,6 +1149,10 @@ def _make_link_flags_default(linker_input_and_use_pic):
ret.extend(_portable_link_flags(lib, use_pic))
return ret

def _libraries_dirnames(linker_input_and_use_pic):
link_input, use_pic = linker_input_and_use_pic
return [get_preferred_artifact(lib, use_pic).dirname for lib in link_input.libraries]

def _add_native_link_flags(args, dep_info, linkstamp_outs, crate_type, toolchain, cc_toolchain, feature_configuration):
"""Adds linker flags for all dependencies of the current target.
Expand Down Expand Up @@ -1176,6 +1180,7 @@ def _add_native_link_flags(args, dep_info, linkstamp_outs, crate_type, toolchain

# TODO(hlopko): Remove depset flattening by using lambdas once we are on >=Bazel 5.0
args_and_pic = [(arg, use_pic) for arg in dep_info.transitive_noncrates.to_list()]
args.add_all(args_and_pic, map_each = _libraries_dirnames, uniquify = True, format_each = "-Lnative=%s")
args.add_all(args_and_pic, map_each = make_link_flags)

for linkstamp_out in linkstamp_outs:
Expand Down
54 changes: 19 additions & 35 deletions test/unit/native_deps/native_deps_test.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,6 @@ load(
"assert_list_contains_adjacent_elements",
)

def _native_dep_lib_name(ctx):
if ctx.target_platform_has_constraint(ctx.attr._windows_constraint[platform_common.ConstraintValueInfo]):
return "native_dep.lib"
elif ("dylib" in ctx.label.name or "proc_macro" in ctx.label.name) and ctx.var["COMPILATION_MODE"] == "opt":
return "libnative_dep.pic.a"
else:
return "libnative_dep.a"

def _rlib_has_no_native_libs_test_impl(ctx):
env = analysistest.begin(ctx)
tut = analysistest.target_under_test(env)
Expand All @@ -35,17 +27,19 @@ def _cdylib_has_native_libs_test_impl(ctx):
env = analysistest.begin(ctx)
tut = analysistest.target_under_test(env)
action = tut.actions[0]
assert_argv_contains_prefix_suffix(env, action, "-Lnative=", "/native_deps")
assert_argv_contains(env, action, "--crate-type=cdylib")
assert_argv_contains_prefix_suffix(env, action, "link-arg=", "/native_deps/" + _native_dep_lib_name(ctx))
assert_argv_contains(env, action, "-lstatic=native_dep")
assert_argv_contains_prefix(env, action, "--codegen=linker=")
return analysistest.end(env)

def _staticlib_has_native_libs_test_impl(ctx):
env = analysistest.begin(ctx)
tut = analysistest.target_under_test(env)
action = tut.actions[0]
assert_argv_contains_prefix_suffix(env, action, "-Lnative=", "/native_deps")
assert_argv_contains(env, action, "--crate-type=staticlib")
assert_argv_contains_prefix_suffix(env, action, "link-arg=", "/native_deps/" + _native_dep_lib_name(ctx))
assert_argv_contains(env, action, "-lstatic=native_dep")
assert_argv_contains_prefix(env, action, "--codegen=linker=")
return analysistest.end(env)

Expand All @@ -54,16 +48,18 @@ def _proc_macro_has_native_libs_test_impl(ctx):
tut = analysistest.target_under_test(env)
asserts.equals(env, 1, len(tut.actions))
action = tut.actions[0]
assert_argv_contains_prefix_suffix(env, action, "-Lnative=", "/native_deps")
assert_argv_contains(env, action, "--crate-type=proc-macro")
assert_argv_contains_prefix_suffix(env, action, "link-arg=", "/native_deps/" + _native_dep_lib_name(ctx))
assert_argv_contains(env, action, "-lstatic=native_dep")
assert_argv_contains_prefix(env, action, "--codegen=linker=")
return analysistest.end(env)

def _bin_has_native_libs_test_impl(ctx):
env = analysistest.begin(ctx)
tut = analysistest.target_under_test(env)
action = tut.actions[0]
assert_argv_contains_prefix_suffix(env, action, "link-arg=", "/native_deps/" + _native_dep_lib_name(ctx))
assert_argv_contains_prefix_suffix(env, action, "-Lnative=", "/native_deps")
assert_argv_contains(env, action, "-lstatic=native_dep")
assert_argv_contains_prefix(env, action, "--codegen=linker=")
return analysistest.end(env)

Expand All @@ -84,25 +80,25 @@ def _bin_has_native_dep_and_alwayslink_test_impl(ctx):
compilation_mode = ctx.var["COMPILATION_MODE"]
if ctx.target_platform_has_constraint(ctx.attr._macos_constraint[platform_common.ConstraintValueInfo]):
want = [
"link-arg=bazel-out/darwin-{}/bin/test/unit/native_deps/libnative_dep.a".format(compilation_mode),
"-lstatic=native_dep",
"link-arg=-Wl,-force_load,bazel-out/darwin-{}/bin/test/unit/native_deps/libalwayslink.lo".format(compilation_mode),
]
elif ctx.target_platform_has_constraint(ctx.attr._windows_constraint[platform_common.ConstraintValueInfo]):
want = [
"link-arg=bazel-out/x64_windows-{}/bin/test/unit/native_deps/native_dep.lib".format(compilation_mode),
"-lstatic=native_dep",
"link-arg=/WHOLEARCHIVE:bazel-out/x64_windows-{}/bin/test/unit/native_deps/alwayslink.lo.lib".format(compilation_mode),
]
else:
want = [
"link-arg=bazel-out/k8-{}/bin/test/unit/native_deps/libnative_dep.a".format(compilation_mode),
"-lstatic=native_dep",
"link-arg=-Wl,--whole-archive",
"link-arg=bazel-out/k8-{}/bin/test/unit/native_deps/libalwayslink.lo".format(compilation_mode),
"link-arg=-Wl,--no-whole-archive",
]
individual_link_args = [
arg
for arg in _extract_linker_args(action.argv)
if arg.startswith("link-arg=")
if arg.startswith("link-arg=") or arg.startswith("-lstatic=")
]
asserts.equals(env, want, individual_link_args)
return analysistest.end(env)
Expand All @@ -119,17 +115,17 @@ def _cdylib_has_native_dep_and_alwayslink_test_impl(ctx):
pic_suffix = ".pic" if compilation_mode == "opt" else ""
if ctx.target_platform_has_constraint(ctx.attr._macos_constraint[platform_common.ConstraintValueInfo]):
want = [
"link-arg=bazel-out/darwin-{}/bin/test/unit/native_deps/libnative_dep{}.a".format(compilation_mode, pic_suffix),
"-lstatic=native_dep",
"link-arg=-Wl,-force_load,bazel-out/darwin-{}/bin/test/unit/native_deps/libalwayslink{}.lo".format(compilation_mode, pic_suffix),
]
elif ctx.target_platform_has_constraint(ctx.attr._windows_constraint[platform_common.ConstraintValueInfo]):
want = [
"link-arg=bazel-out/x64_windows-{}/bin/test/unit/native_deps/native_dep.lib".format(compilation_mode),
"-lstatic=native_dep",
"link-arg=/WHOLEARCHIVE:bazel-out/x64_windows-{}/bin/test/unit/native_deps/alwayslink.lo.lib".format(compilation_mode),
]
else:
want = [
"link-arg=bazel-out/k8-{}/bin/test/unit/native_deps/libnative_dep{}.a".format(compilation_mode, pic_suffix),
"-lstatic=native_dep",
"link-arg=-Wl,--whole-archive",
"link-arg=bazel-out/k8-{}/bin/test/unit/native_deps/libalwayslink{}.lo".format(compilation_mode, pic_suffix),
"link-arg=-Wl,--no-whole-archive",
Expand All @@ -138,22 +134,10 @@ def _cdylib_has_native_dep_and_alwayslink_test_impl(ctx):
return analysistest.end(env)

rlib_has_no_native_libs_test = analysistest.make(_rlib_has_no_native_libs_test_impl)
staticlib_has_native_libs_test = analysistest.make(_staticlib_has_native_libs_test_impl, attrs = {
"_macos_constraint": attr.label(default = Label("@platforms//os:macos")),
"_windows_constraint": attr.label(default = Label("@platforms//os:windows")),
})
cdylib_has_native_libs_test = analysistest.make(_cdylib_has_native_libs_test_impl, attrs = {
"_macos_constraint": attr.label(default = Label("@platforms//os:macos")),
"_windows_constraint": attr.label(default = Label("@platforms//os:windows")),
})
proc_macro_has_native_libs_test = analysistest.make(_proc_macro_has_native_libs_test_impl, attrs = {
"_macos_constraint": attr.label(default = Label("@platforms//os:macos")),
"_windows_constraint": attr.label(default = Label("@platforms//os:windows")),
})
bin_has_native_libs_test = analysistest.make(_bin_has_native_libs_test_impl, attrs = {
"_macos_constraint": attr.label(default = Label("@platforms//os:macos")),
"_windows_constraint": attr.label(default = Label("@platforms//os:windows")),
})
staticlib_has_native_libs_test = analysistest.make(_staticlib_has_native_libs_test_impl)
cdylib_has_native_libs_test = analysistest.make(_cdylib_has_native_libs_test_impl)
proc_macro_has_native_libs_test = analysistest.make(_proc_macro_has_native_libs_test_impl)
bin_has_native_libs_test = analysistest.make(_bin_has_native_libs_test_impl)
bin_has_native_dep_and_alwayslink_test = analysistest.make(_bin_has_native_dep_and_alwayslink_test_impl, attrs = {
"_macos_constraint": attr.label(default = Label("@platforms//os:macos")),
"_windows_constraint": attr.label(default = Label("@platforms//os:windows")),
Expand Down

0 comments on commit 4a4d217

Please sign in to comment.