Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

propagate additional inputs from native dependencies #858

Merged
merged 9 commits into from
Jul 30, 2021
7 changes: 7 additions & 0 deletions rust/private/rustc.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -290,6 +290,12 @@ def collect_inputs(

linker_depset = cc_toolchain.all_files

additional_transitive_inputs = depset([
additional_input
for linker_input in dep_info.transitive_noncrates.to_list()
krasimirgg marked this conversation as resolved.
Show resolved Hide resolved
for additional_input in linker_input.additional_inputs
])

compile_inputs = depset(
getattr(files, "data", []) +
[toolchain.rustc] +
Expand All @@ -303,6 +309,7 @@ def collect_inputs(
linker_depset,
crate_info.srcs,
dep_info.transitive_libs,
additional_transitive_inputs,
crate_info.compile_data,
],
)
Expand Down
2 changes: 2 additions & 0 deletions test/unit/native_deps/dynamic.lds
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
{
};
31 changes: 31 additions & 0 deletions test/unit/native_deps/native_deps_test.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -293,6 +293,35 @@ def _linkopts_test():
target_under_test = ":linkopts_rust_bin",
)

def _additional_deps_test_impl(ctx):
env = analysistest.begin(ctx)
tut = analysistest.target_under_test(env)
action = tut.actions[0]
additional_inputs = [inp.basename for inp in action.inputs.to_list()]
asserts.true(env, "dynamic.lds" in additional_inputs)
return analysistest.end(env)

additional_deps_test = analysistest.make(_additional_deps_test_impl)

def _additional_deps_test():
rust_binary(
name = "additional_deps_rust_bin",
srcs = ["bin_using_native_dep.rs"],
deps = [":additional_deps_cc"],
)

cc_library(
name = "additional_deps_cc",
srcs = ["native_dep.cc"],
linkopts = ["-L$(location :dynamic.lds)"],
deps = [":dynamic.lds"],
)

additional_deps_test(
name = "additional_deps_test",
target_under_test = ":additional_deps_rust_bin",
)

def native_deps_test_suite(name):
"""Entry-point macro called from the BUILD file.

Expand All @@ -301,6 +330,7 @@ def native_deps_test_suite(name):
"""
_native_dep_test()
_linkopts_test()
_additional_deps_test()

native.test_suite(
name = name,
Expand All @@ -313,5 +343,6 @@ def native_deps_test_suite(name):
":bin_has_native_dep_and_alwayslink_test",
":cdylib_has_native_dep_and_alwayslink_test",
":native_linkopts_propagate_test",
":additional_deps_test",
],
)