diff --git a/rust/private/rustc.bzl b/rust/private/rustc.bzl index af627fe50..d1c5142cb 100644 --- a/rust/private/rustc.bzl +++ b/rust/private/rustc.bzl @@ -560,9 +560,12 @@ def _symlink_for_ambiguous_lib(actions, toolchain, crate_info, lib): # Take the absolute value of hash() since it could be negative. path_hash = abs(hash(lib.path)) - lib_name = get_lib_name_for_windows(lib) if toolchain.target_os.startswith("windows") else get_lib_name_default(lib) - - if toolchain.target_os.startswith("windows"): + if toolchain.target_os.startswith("windows") and toolchain.target_abi == "msvc": + lib_name = get_lib_name_for_windows(lib) + else: + lib_name = get_lib_name_default(lib) + + if toolchain.target_os.startswith("windows") and toolchain.target_abi == "msvc": prefix = "" extension = ".lib" elif lib_name.endswith(".pic"): @@ -1495,7 +1498,7 @@ def rustc_compile_action( pdb_file = None dsym_folder = None if crate_info.type in ("cdylib", "bin") and not experimental_use_cc_common_link: - if toolchain.target_os == "windows" and compilation_mode.strip_level == "none": + if toolchain.target_os == "windows" and toolchain.target_abi == "msvc" and compilation_mode.strip_level == "none": pdb_file = ctx.actions.declare_file(crate_info.output.basename[:-len(crate_info.output.extension)] + "pdb", sibling = crate_info.output) action_outputs.append(pdb_file) elif toolchain.target_os in ["macos", "darwin"]: @@ -1626,7 +1629,7 @@ def rustc_compile_action( additional_linker_outputs = [] - if crate_info.type in ("cdylib", "bin") and cc_common.is_enabled(feature_configuration = feature_configuration, feature_name = "generate_pdb_file"): + if crate_info.type in ("cdylib", "bin") and toolchain.target_abi == "msvc" and cc_common.is_enabled(feature_configuration = feature_configuration, feature_name = "generate_pdb_file"): pdb_file = ctx.actions.declare_file(crate_info.output.basename[:-len(crate_info.output.extension)] + "pdb", sibling = crate_info.output) additional_linker_outputs.append(pdb_file) @@ -2248,8 +2251,8 @@ def _portable_link_flags(lib, use_pic, ambiguous_libs, get_lib_name, for_windows ] else: return [ - "-lstatic=%s" % get_lib_name(artifact), - "-Clink-arg=-l{}".format(artifact.basename), + "-lstatic=%s" % get_lib_name(artifact), + "-Clink-arg=-l{}".format(get_lib_name(artifact)), ] else: return [ @@ -2281,7 +2284,8 @@ def _make_link_flags_windows(make_link_flags_args, flavor_msvc, use_direct_drive ("-Clink-arg=%s--no-whole-archive" % prefix), ]) elif include_link_flags: - ret.extend(_portable_link_flags(lib, use_pic, ambiguous_libs, get_lib_name_for_windows, for_windows = True, flavor_msvc = flavor_msvc)) + get_name_fn = get_lib_name_for_windows if flavor_msvc else get_lib_name_default + ret.extend(_portable_link_flags(lib, use_pic, ambiguous_libs, get_name_fn, for_windows = True, flavor_msvc = flavor_msvc)) _add_user_link_flags(ret, linker_input) return ret