Skip to content

Commit c471416

Browse files
balthildmessense
andauthored
Use zig lib instead of zig ar for msvc targets (#314)
* Use `zig lib` instead of `zig ar` for msvc targets * Fix clap subcommand name for `zig lib` * Update src/zig.rs --------- Co-authored-by: messense <messense@icloud.com>
1 parent 0c406f5 commit c471416

File tree

2 files changed

+22
-1
lines changed

2 files changed

+22
-1
lines changed

src/bin/cargo-zigbuild.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,11 @@ fn main() -> anyhow::Result<()> {
4646
args: args.collect(),
4747
};
4848
zig.execute()?;
49+
} else if program_name.eq_ignore_ascii_case("lib") {
50+
let zig = Zig::Lib {
51+
args: args.collect(),
52+
};
53+
zig.execute()?;
4954
} else {
5055
let opt = Opt::parse();
5156
match opt {

src/zig.rs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,13 @@ pub enum Zig {
4949
#[arg(num_args = 1.., trailing_var_arg = true)]
5050
args: Vec<String>,
5151
},
52+
/// `zig lib` wrapper
53+
#[command(name = "lib")]
54+
Lib {
55+
/// `zig lib` arguments
56+
#[arg(num_args = 1.., trailing_var_arg = true)]
57+
args: Vec<String>,
58+
},
5259
}
5360

5461
struct TargetInfo {
@@ -95,6 +102,7 @@ impl Zig {
95102
Zig::Cxx { args } => self.execute_compiler("c++", args),
96103
Zig::Ar { args } => self.execute_tool("ar", args),
97104
Zig::Ranlib { args } => self.execute_compiler("ranlib", args),
105+
Zig::Lib { args } => self.execute_compiler("lib", args),
98106
}
99107
}
100108

@@ -553,7 +561,11 @@ impl Zig {
553561
// Only setup AR when explicitly asked to
554562
// because it need special executable name handling, see src/bin/cargo-zigbuild.rs
555563
if enable_zig_ar {
556-
Self::add_env_if_missing(cmd, format!("AR_{env_target}"), &zig_wrapper.ar);
564+
if parsed_target.contains("msvc") {
565+
Self::add_env_if_missing(cmd, format!("AR_{env_target}"), &zig_wrapper.lib);
566+
} else {
567+
Self::add_env_if_missing(cmd, format!("AR_{env_target}"), &zig_wrapper.ar);
568+
}
557569
}
558570

559571
Self::setup_os_deps(manifest_path, release, cargo)?;
@@ -1073,6 +1085,7 @@ pub struct ZigWrapper {
10731085
pub cxx: PathBuf,
10741086
pub ar: PathBuf,
10751087
pub ranlib: PathBuf,
1088+
pub lib: PathBuf,
10761089
}
10771090

10781091
#[derive(Debug, Clone, Default, PartialEq)]
@@ -1354,12 +1367,15 @@ pub fn prepare_zig_linker(target: &str) -> Result<ZigWrapper> {
13541367
let exe_ext = if cfg!(windows) { ".exe" } else { "" };
13551368
let zig_ar = zig_linker_dir.join(format!("ar{exe_ext}"));
13561369
symlink_wrapper(&zig_ar)?;
1370+
let zig_lib = zig_linker_dir.join(format!("lib{exe_ext}"));
1371+
symlink_wrapper(&zig_lib)?;
13571372

13581373
Ok(ZigWrapper {
13591374
cc: zig_cc,
13601375
cxx: zig_cxx,
13611376
ar: zig_ar,
13621377
ranlib: zig_ranlib,
1378+
lib: zig_lib,
13631379
})
13641380
}
13651381

0 commit comments

Comments
 (0)