diff --git a/rust/private/rustc.bzl b/rust/private/rustc.bzl index bed2c1b291..aac1c20a27 100644 --- a/rust/private/rustc.bzl +++ b/rust/private/rustc.bzl @@ -837,9 +837,14 @@ def _get_crate_dirname(crate): def _portable_link_flags(lib): if lib.static_library or lib.pic_static_library: - return ["-lstatic=%s" % get_lib_name(get_preferred_artifact(lib))] + return ["-C", "link-arg=%s" % get_preferred_artifact(lib).path] elif _is_dylib(lib): - return ["-ldylib=%s" % get_lib_name(get_preferred_artifact(lib))] + # TODO: Consider switching dylibs to use -Clink-arg as above. + return [ + "-Lnative=%s" % get_preferred_artifact(lib).dirname, + "-ldylib=%s" % get_lib_name(get_preferred_artifact(lib)), + ] + return [] def _make_link_flags_windows(linker_input): @@ -894,8 +899,6 @@ def _add_native_link_flags(args, dep_info, crate_type, toolchain, cc_toolchain, feature_configuration (FeatureConfiguration): feature configuration to use with cc_toolchain """ - args.add_all(dep_info.transitive_noncrates, map_each = _libraries_dirnames, uniquify = True, format_each = "-Lnative=%s") - if crate_type in ["lib", "rlib"]: return diff --git a/test/unit/native_deps/native_deps_test.bzl b/test/unit/native_deps/native_deps_test.bzl index 72b3eeb3c3..220c8bcbca 100644 --- a/test/unit/native_deps/native_deps_test.bzl +++ b/test/unit/native_deps/native_deps_test.bzl @@ -5,6 +5,12 @@ load("@rules_cc//cc:defs.bzl", "cc_library") load("//rust:defs.bzl", "rust_binary", "rust_library", "rust_proc_macro", "rust_shared_library", "rust_static_library") load("//test/unit:common.bzl", "assert_argv_contains", "assert_argv_contains_not", "assert_argv_contains_prefix_suffix") +def _native_dep_lib_name(ctx): + if ctx.target_platform_has_constraint(ctx.attr._windows_constraint[platform_common.ConstraintValueInfo]): + return "native_dep.lib" + else: + return "libnative_dep.a" + def _lib_has_no_native_libs_test_impl(ctx): env = analysistest.begin(ctx) tut = analysistest.target_under_test(env) @@ -22,7 +28,6 @@ def _rlib_has_no_native_libs_test_impl(ctx): actions = analysistest.target_actions(env) action = actions[0] assert_argv_contains(env, action, "--crate-type=rlib") - assert_argv_contains_prefix_suffix(env, action, "-Lnative=", "/native_deps") assert_argv_contains_not(env, action, "-lstatic=native_dep") assert_argv_contains_not(env, action, "-ldylib=native_dep") return analysistest.end(env) @@ -32,7 +37,6 @@ def _dylib_has_native_libs_test_impl(ctx): tut = analysistest.target_under_test(env) actions = analysistest.target_actions(env) action = actions[0] - assert_argv_contains_prefix_suffix(env, action, "-Lnative=", "/native_deps") assert_argv_contains(env, action, "--crate-type=dylib") assert_argv_contains(env, action, "-lstatic=native_dep") return analysistest.end(env) @@ -42,9 +46,8 @@ def _cdylib_has_native_libs_test_impl(ctx): tut = analysistest.target_under_test(env) actions = analysistest.target_actions(env) action = actions[0] - assert_argv_contains_prefix_suffix(env, action, "-Lnative=", "/native_deps") assert_argv_contains(env, action, "--crate-type=cdylib") - assert_argv_contains(env, action, "-lstatic=native_dep") + assert_argv_contains_prefix_suffix(env, action, "link-arg=", "/native_deps/" + _native_dep_lib_name(ctx)) return analysistest.end(env) def _staticlib_has_native_libs_test_impl(ctx): @@ -52,9 +55,8 @@ def _staticlib_has_native_libs_test_impl(ctx): tut = analysistest.target_under_test(env) actions = analysistest.target_actions(env) action = actions[0] - assert_argv_contains_prefix_suffix(env, action, "-Lnative=", "/native_deps") assert_argv_contains(env, action, "--crate-type=staticlib") - assert_argv_contains(env, action, "-lstatic=native_dep") + assert_argv_contains_prefix_suffix(env, action, "link-arg=", "/native_deps/" + _native_dep_lib_name(ctx)) return analysistest.end(env) def _proc_macro_has_native_libs_test_impl(ctx): @@ -63,9 +65,8 @@ def _proc_macro_has_native_libs_test_impl(ctx): actions = analysistest.target_actions(env) asserts.equals(env, 1, len(actions)) action = actions[0] - assert_argv_contains_prefix_suffix(env, action, "-Lnative=", "/native_deps") assert_argv_contains(env, action, "--crate-type=proc-macro") - assert_argv_contains(env, action, "-lstatic=native_dep") + assert_argv_contains_prefix_suffix(env, action, "link-arg=", "/native_deps/" + _native_dep_lib_name(ctx)) return analysistest.end(env) def _bin_has_native_libs_test_impl(ctx): @@ -73,8 +74,7 @@ def _bin_has_native_libs_test_impl(ctx): tut = analysistest.target_under_test(env) actions = analysistest.target_actions(env) action = actions[0] - assert_argv_contains_prefix_suffix(env, action, "-Lnative=", "/native_deps") - assert_argv_contains(env, action, "-lstatic=native_dep") + assert_argv_contains_prefix_suffix(env, action, "link-arg=", "/native_deps/" + _native_dep_lib_name(ctx)) return analysistest.end(env) def _extract_linker_args(argv): @@ -88,17 +88,17 @@ def _bin_has_native_dep_and_alwayslink_test_impl(ctx): if ctx.target_platform_has_constraint(ctx.attr._macos_constraint[platform_common.ConstraintValueInfo]): want = [ - "-lstatic=native_dep", + "link-arg=bazel-out/darwin-fastbuild/bin/test/unit/native_deps/libnative_dep.a", "link-arg=-Wl,-force_load,bazel-out/darwin-fastbuild/bin/test/unit/native_deps/libalwayslink.lo", ] elif ctx.target_platform_has_constraint(ctx.attr._windows_constraint[platform_common.ConstraintValueInfo]): want = [ - "-lstatic=native_dep", + "link-arg=bazel-out/x64_windows-fastbuild/bin/test/unit/native_deps/native_dep.lib", "link-arg=/WHOLEARCHIVE:bazel-out/x64_windows-fastbuild/bin/test/unit/native_deps/alwayslink.lo.lib", ] else: want = [ - "-lstatic=native_dep", + "link-arg=bazel-out/k8-fastbuild/bin/test/unit/native_deps/libnative_dep.a", "link-arg=-Wl,--whole-archive", "link-arg=bazel-out/k8-fastbuild/bin/test/unit/native_deps/libalwayslink.lo", "link-arg=-Wl,--no-whole-archive", @@ -124,7 +124,7 @@ def _cdylib_has_native_dep_and_alwayslink_test_impl(ctx): ] else: want = [ - "-lstatic=native_dep", + "link-arg=bazel-out/k8-fastbuild/bin/test/unit/native_deps/libnative_dep.a", "link-arg=-Wl,--whole-archive", "link-arg=bazel-out/k8-fastbuild/bin/test/unit/native_deps/libalwayslink.lo", "link-arg=-Wl,--no-whole-archive", @@ -133,10 +133,22 @@ 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) -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) +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")), +}) 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")),