Skip to content

Commit

Permalink
Use zig lib instead of zig ar for msvc targets (#314)
Browse files Browse the repository at this point in the history
* 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 <[email protected]>
  • Loading branch information
balthild and messense authored Feb 5, 2025
1 parent 0c406f5 commit c471416
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 1 deletion.
5 changes: 5 additions & 0 deletions src/bin/cargo-zigbuild.rs
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,11 @@ fn main() -> anyhow::Result<()> {
args: args.collect(),
};
zig.execute()?;
} else if program_name.eq_ignore_ascii_case("lib") {
let zig = Zig::Lib {
args: args.collect(),
};
zig.execute()?;
} else {
let opt = Opt::parse();
match opt {
Expand Down
18 changes: 17 additions & 1 deletion src/zig.rs
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,13 @@ pub enum Zig {
#[arg(num_args = 1.., trailing_var_arg = true)]
args: Vec<String>,
},
/// `zig lib` wrapper
#[command(name = "lib")]
Lib {
/// `zig lib` arguments
#[arg(num_args = 1.., trailing_var_arg = true)]
args: Vec<String>,
},
}

struct TargetInfo {
Expand Down Expand Up @@ -95,6 +102,7 @@ impl Zig {
Zig::Cxx { args } => self.execute_compiler("c++", args),
Zig::Ar { args } => self.execute_tool("ar", args),
Zig::Ranlib { args } => self.execute_compiler("ranlib", args),
Zig::Lib { args } => self.execute_compiler("lib", args),
}
}

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

Self::setup_os_deps(manifest_path, release, cargo)?;
Expand Down Expand Up @@ -1073,6 +1085,7 @@ pub struct ZigWrapper {
pub cxx: PathBuf,
pub ar: PathBuf,
pub ranlib: PathBuf,
pub lib: PathBuf,
}

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

Ok(ZigWrapper {
cc: zig_cc,
cxx: zig_cxx,
ar: zig_ar,
ranlib: zig_ranlib,
lib: zig_lib,
})
}

Expand Down

0 comments on commit c471416

Please sign in to comment.