From e02b56fb53d8db1d40a76ccaac4237d496240433 Mon Sep 17 00:00:00 2001 From: Rosica Dejanovska Date: Wed, 1 Dec 2021 15:52:10 +0100 Subject: [PATCH 1/6] Don't add dylibs to runfiles of rlibs --- rust/private/rustc.bzl | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/rust/private/rustc.bzl b/rust/private/rustc.bzl index 4021122d4a..a899713163 100644 --- a/rust/private/rustc.bzl +++ b/rust/private/rustc.bzl @@ -774,7 +774,14 @@ 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)] + dylibs = [] + if crate_info.type not in ["rlib", "lib"]: + 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", []), From c03cc41841287aeb23062c1b790b19410ee3e04d Mon Sep 17 00:00:00 2001 From: Rosica Dejanovska Date: Wed, 1 Dec 2021 15:57:08 +0100 Subject: [PATCH 2/6] Run buildifier --- rust/private/rustc.bzl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rust/private/rustc.bzl b/rust/private/rustc.bzl index a899713163..73a3dc0c82 100644 --- a/rust/private/rustc.bzl +++ b/rust/private/rustc.bzl @@ -779,10 +779,10 @@ 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) + for lib in linker_input.libraries + if _is_dylib(lib) ] - runfiles = ctx.runfiles( files = dylibs + getattr(ctx.files, "data", []), collect_data = True, From 188dc7564613c17e4358d418c780f5def8c41122 Mon Sep 17 00:00:00 2001 From: Rosica Dejanovska Date: Thu, 2 Dec 2021 12:48:19 +0100 Subject: [PATCH 3/6] Remove dylibs altogether --- rust/private/rustc.bzl | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/rust/private/rustc.bzl b/rust/private/rustc.bzl index 73a3dc0c82..f5c8256392 100644 --- a/rust/private/rustc.bzl +++ b/rust/private/rustc.bzl @@ -774,17 +774,8 @@ def rustc_compile_action( ), ) - dylibs = [] - if crate_info.type not in ["rlib", "lib"]: - 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, ) From f80664134f101d44a122162c7b9669d037b051f9 Mon Sep 17 00:00:00 2001 From: Rosica Dejanovska Date: Thu, 2 Dec 2021 13:27:09 +0100 Subject: [PATCH 4/6] Add tests --- test/unit/check_runfiles/BUILD.bazel | 4 + test/unit/check_runfiles/bar.cc | 1 + .../check_runfiles/check_runfiles_test.bzl | 96 +++++++++++++++++++ test/unit/check_runfiles/foo.rs | 1 + 4 files changed, 102 insertions(+) create mode 100644 test/unit/check_runfiles/BUILD.bazel create mode 100644 test/unit/check_runfiles/bar.cc create mode 100644 test/unit/check_runfiles/check_runfiles_test.bzl create mode 100644 test/unit/check_runfiles/foo.rs diff --git a/test/unit/check_runfiles/BUILD.bazel b/test/unit/check_runfiles/BUILD.bazel new file mode 100644 index 0000000000..0dfcfcc972 --- /dev/null +++ b/test/unit/check_runfiles/BUILD.bazel @@ -0,0 +1,4 @@ +load(":check_runfiles_test.bzl", "check_runfiles_test_suite") + +############################ UNIT TESTS ############################# +check_runfiles_test_suite(name = "check_runfiles_test_suite") diff --git a/test/unit/check_runfiles/bar.cc b/test/unit/check_runfiles/bar.cc new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/test/unit/check_runfiles/bar.cc @@ -0,0 +1 @@ + diff --git a/test/unit/check_runfiles/check_runfiles_test.bzl b/test/unit/check_runfiles/check_runfiles_test.bzl new file mode 100644 index 0000000000..845a873896 --- /dev/null +++ b/test/unit/check_runfiles/check_runfiles_test.bzl @@ -0,0 +1,96 @@ +"""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.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", + ], + ) diff --git a/test/unit/check_runfiles/foo.rs b/test/unit/check_runfiles/foo.rs new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/test/unit/check_runfiles/foo.rs @@ -0,0 +1 @@ + From 51e4f7985ec6314763853faa0ed17f66d439dcf1 Mon Sep 17 00:00:00 2001 From: Rosica Dejanovska Date: Thu, 2 Dec 2021 13:31:06 +0100 Subject: [PATCH 5/6] Add main functions --- test/unit/check_runfiles/bar.cc | 2 +- test/unit/check_runfiles/check_runfiles_test.bzl | 3 ++- test/unit/check_runfiles/foo.rs | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/test/unit/check_runfiles/bar.cc b/test/unit/check_runfiles/bar.cc index 8b13789179..237c8ce181 100644 --- a/test/unit/check_runfiles/bar.cc +++ b/test/unit/check_runfiles/bar.cc @@ -1 +1 @@ - +int main() {} diff --git a/test/unit/check_runfiles/check_runfiles_test.bzl b/test/unit/check_runfiles/check_runfiles_test.bzl index 845a873896..228d9d97f2 100644 --- a/test/unit/check_runfiles/check_runfiles_test.bzl +++ b/test/unit/check_runfiles/check_runfiles_test.bzl @@ -12,9 +12,10 @@ load( 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): diff --git a/test/unit/check_runfiles/foo.rs b/test/unit/check_runfiles/foo.rs index 8b13789179..f328e4d9d0 100644 --- a/test/unit/check_runfiles/foo.rs +++ b/test/unit/check_runfiles/foo.rs @@ -1 +1 @@ - +fn main() {} From ef79ae0502c8eeb57dd0303878f6fcc2a506769f Mon Sep 17 00:00:00 2001 From: Rosica Dejanovska Date: Thu, 2 Dec 2021 13:40:04 +0100 Subject: [PATCH 6/6] Fix clippy warnings --- test/unit/check_runfiles/check_runfiles_test.bzl | 2 +- test/unit/check_runfiles/foo.rs | 2 +- test/unit/check_runfiles/foo_main.rs | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) create mode 100644 test/unit/check_runfiles/foo_main.rs diff --git a/test/unit/check_runfiles/check_runfiles_test.bzl b/test/unit/check_runfiles/check_runfiles_test.bzl index 228d9d97f2..94ee3d7aeb 100644 --- a/test/unit/check_runfiles/check_runfiles_test.bzl +++ b/test/unit/check_runfiles/check_runfiles_test.bzl @@ -35,7 +35,7 @@ def _check_runfiles_test(): rust_binary( name = "foo_bin", - srcs = ["foo.rs"], + srcs = ["foo_main.rs"], deps = [":libbar.so"], ) diff --git a/test/unit/check_runfiles/foo.rs b/test/unit/check_runfiles/foo.rs index f328e4d9d0..8b13789179 100644 --- a/test/unit/check_runfiles/foo.rs +++ b/test/unit/check_runfiles/foo.rs @@ -1 +1 @@ -fn main() {} + diff --git a/test/unit/check_runfiles/foo_main.rs b/test/unit/check_runfiles/foo_main.rs new file mode 100644 index 0000000000..f328e4d9d0 --- /dev/null +++ b/test/unit/check_runfiles/foo_main.rs @@ -0,0 +1 @@ +fn main() {}