Skip to content

Commit

Permalink
Don't add dylibs to runfiles manually (#1052)
Browse files Browse the repository at this point in the history
We actually don't need to manually add dylibs to runfiles at all, as we create runfiles with `collect_data = True`.
  • Loading branch information
scentini committed Dec 2, 2021
1 parent 506c1f6 commit 65b558c
Show file tree
Hide file tree
Showing 6 changed files with 105 additions and 3 deletions.
4 changes: 1 addition & 3 deletions rust/private/rustc.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -774,10 +774,8 @@ def rustc_compile_action(
),
)

dylibs = [get_preferred_artifact(lib) for linker_input in dep_info.transitive_noncrates.to_list() for lib in linker_input.libraries if _is_dylib(lib)]

runfiles = ctx.runfiles(
files = dylibs + getattr(ctx.files, "data", []),
files = getattr(ctx.files, "data", []),
collect_data = True,
)

Expand Down
4 changes: 4 additions & 0 deletions test/unit/check_runfiles/BUILD.bazel
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
load(":check_runfiles_test.bzl", "check_runfiles_test_suite")

############################ UNIT TESTS #############################
check_runfiles_test_suite(name = "check_runfiles_test_suite")
1 change: 1 addition & 0 deletions test/unit/check_runfiles/bar.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
int main() {}
97 changes: 97 additions & 0 deletions test/unit/check_runfiles/check_runfiles_test.bzl
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
"""Unittests for rust rules."""

load("@bazel_skylib//lib:unittest.bzl", "analysistest", "asserts")
load(
"//rust:defs.bzl",
"rust_binary",
"rust_library",
"rust_shared_library",
"rust_static_library",
)

def _check_runfiles_test_impl(ctx):
env = analysistest.begin(ctx)
tut = analysistest.target_under_test(env)
runfiles = tut[DefaultInfo].default_runfiles.files.to_list()

asserts.true(env, _is_in_runfiles("libbar.so", runfiles))

return analysistest.end(env)

def _is_in_runfiles(name, runfiles):
for file in runfiles:
if file.basename == name:
return True
return False

check_runfiles_test = analysistest.make(_check_runfiles_test_impl)

def _check_runfiles_test():
rust_library(
name = "foo_lib",
srcs = ["foo.rs"],
deps = [":libbar.so"],
)

rust_binary(
name = "foo_bin",
srcs = ["foo_main.rs"],
deps = [":libbar.so"],
)

rust_shared_library(
name = "foo_dylib",
srcs = ["foo.rs"],
deps = [":libbar.so"],
)

rust_static_library(
name = "foo_static",
srcs = ["foo.rs"],
deps = [":libbar.so"],
)

# buildifier: disable=native-cc
native.cc_binary(
name = "libbar.so",
srcs = ["bar.cc"],
linkshared = True,
)

check_runfiles_test(
name = "check_runfiles_lib_test",
target_under_test = ":foo_lib",
)

check_runfiles_test(
name = "check_runfiles_bin_test",
target_under_test = ":foo_bin",
)

check_runfiles_test(
name = "check_runfiles_dylib_test",
target_under_test = ":foo_dylib",
)

check_runfiles_test(
name = "check_runfiles_static_test",
target_under_test = ":foo_static",
)

def check_runfiles_test_suite(name):
"""Entry-point macro called from the BUILD file.
Args:
name: Name of the macro.
"""
_check_runfiles_test()

native.test_suite(
name = name,
tests = [
":check_runfiles_lib_test",
":check_runfiles_bin_test",
":check_runfiles_dylib_test",
":check_runfiles_static_test",
],
)
1 change: 1 addition & 0 deletions test/unit/check_runfiles/foo.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@

1 change: 1 addition & 0 deletions test/unit/check_runfiles/foo_main.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
fn main() {}

0 comments on commit 65b558c

Please sign in to comment.