build: nicer build script messages
This commit is contained in:
parent
6e60dd6fa0
commit
e0c97f77b4
20
Cargo.lock
generated
20
Cargo.lock
generated
|
@ -403,6 +403,15 @@ dependencies = [
|
||||||
"wayland-client",
|
"wayland-client",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "carlog"
|
||||||
|
version = "0.1.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "95faf7476605bbef1fdf740eaa3f7f2b97b70fbed0aada1ee0c040cff66c84cf"
|
||||||
|
dependencies = [
|
||||||
|
"colored",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cbindgen"
|
name = "cbindgen"
|
||||||
version = "0.26.0"
|
version = "0.26.0"
|
||||||
|
@ -567,6 +576,16 @@ version = "1.1.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b"
|
checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "colored"
|
||||||
|
version = "2.1.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "cbf2150cce219b664a8a70df7a1f933836724b503f8a413af9365b4dcc4d90b8"
|
||||||
|
dependencies = [
|
||||||
|
"lazy_static",
|
||||||
|
"windows-sys 0.48.0",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "com"
|
name = "com"
|
||||||
version = "0.6.0"
|
version = "0.6.0"
|
||||||
|
@ -1476,6 +1495,7 @@ dependencies = [
|
||||||
name = "librashader-build-script"
|
name = "librashader-build-script"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"carlog",
|
||||||
"cbindgen",
|
"cbindgen",
|
||||||
"clap 4.1.0",
|
"clap 4.1.0",
|
||||||
]
|
]
|
||||||
|
|
|
@ -252,7 +252,7 @@ in both the Rust and C API without an increase to either `LIBRASHADER_CURRENT_VE
|
||||||
When building against nightly Rust, the following MSRV policy is enforced for unstable library features.
|
When building against nightly Rust, the following MSRV policy is enforced for unstable library features.
|
||||||
|
|
||||||
* Windows and macOS: **latest** nightly
|
* Windows and macOS: **latest** nightly
|
||||||
* Linux: **1.74**
|
* Linux: **1.76**
|
||||||
|
|
||||||
A CI job runs weekly to ensure librashader continues to build on nightly.
|
A CI job runs weekly to ensure librashader continues to build on nightly.
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@ publish = false
|
||||||
[dependencies]
|
[dependencies]
|
||||||
cbindgen = "0.26.0"
|
cbindgen = "0.26.0"
|
||||||
clap = { version = "=4.1.0", features = ["derive"] }
|
clap = { version = "=4.1.0", features = ["derive"] }
|
||||||
|
carlog = "0.1.0"
|
||||||
|
|
||||||
[package.metadata.release]
|
[package.metadata.release]
|
||||||
release = false
|
release = false
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
use carlog::*;
|
||||||
use clap::Parser;
|
use clap::Parser;
|
||||||
use std::fs::File;
|
use std::fs::File;
|
||||||
use std::io::{BufWriter, Write};
|
use std::io::{BufWriter, Write};
|
||||||
|
@ -29,7 +30,7 @@ pub fn main() -> ExitCode {
|
||||||
let profile = args.profile;
|
let profile = args.profile;
|
||||||
|
|
||||||
let crate_dir = Path::new("librashader-capi");
|
let crate_dir = Path::new("librashader-capi");
|
||||||
println!("INFO: Building librashader C API...");
|
carlog_info!("Building", "librashader C API");
|
||||||
|
|
||||||
let mut cmd = Command::new("cargo");
|
let mut cmd = Command::new("cargo");
|
||||||
cmd.arg("build");
|
cmd.arg("build");
|
||||||
|
@ -49,14 +50,25 @@ pub fn main() -> ExitCode {
|
||||||
}
|
}
|
||||||
|
|
||||||
if args.stable {
|
if args.stable {
|
||||||
println!("WARN: Building librashader with stable Rust compatibility. C headers will not be generated.");
|
carlog_warning!(
|
||||||
|
"building librashader with stable Rust compatibility"
|
||||||
|
);
|
||||||
|
carlog_warning!(
|
||||||
|
"C headers will not be generated"
|
||||||
|
);
|
||||||
cmd.args(["--features", "stable"]);
|
cmd.args(["--features", "stable"]);
|
||||||
}
|
}
|
||||||
if !args.cargoflags.is_empty() {
|
if !args.cargoflags.is_empty() {
|
||||||
cmd.args(args.cargoflags);
|
cmd.args(args.cargoflags);
|
||||||
}
|
}
|
||||||
|
|
||||||
let status = cmd.status().expect("Failed to build librashader-capi");
|
let Ok(status) = cmd.status().inspect_err(|err| {
|
||||||
|
carlog_error!("failed to build librashader-capi");
|
||||||
|
carlog_error!(format!("{err}"));
|
||||||
|
}) else {
|
||||||
|
return ExitCode::FAILURE;
|
||||||
|
};
|
||||||
|
|
||||||
if !status.success() {
|
if !status.success() {
|
||||||
return ExitCode::from(status.code().unwrap_or(1) as u8);
|
return ExitCode::from(status.code().unwrap_or(1) as u8);
|
||||||
}
|
}
|
||||||
|
@ -66,43 +78,76 @@ pub fn main() -> ExitCode {
|
||||||
output_dir = PathBuf::from(format!("target/{}/{}", target, profile));
|
output_dir = PathBuf::from(format!("target/{}/{}", target, profile));
|
||||||
}
|
}
|
||||||
|
|
||||||
let output_dir = output_dir
|
let Ok(output_dir) = output_dir.canonicalize() else {
|
||||||
.canonicalize()
|
carlog_error!("could not find output directory");
|
||||||
.expect("Could not find output directory.");
|
println!("help: are you running the build script from the repository root?");
|
||||||
|
return ExitCode::FAILURE;
|
||||||
|
};
|
||||||
|
|
||||||
if args.stable {
|
if args.stable {
|
||||||
println!("WARN: C header generation is not supported when building for stable Rust.");
|
carlog_warning!("generating C headers is not supported when building for stable Rust");
|
||||||
} else {
|
} else {
|
||||||
println!("INFO: Generating C headers...");
|
carlog_info!("Generating", "librashader C API headers");
|
||||||
|
|
||||||
// Create headers.
|
// Create headers.
|
||||||
let mut buf = BufWriter::new(Vec::new());
|
let mut buf = BufWriter::new(Vec::new());
|
||||||
cbindgen::generate(crate_dir)
|
let Ok(bindings) = cbindgen::generate(crate_dir).inspect_err(|err| {
|
||||||
.expect("Unable to generate bindings")
|
carlog_error!("unable to generate C API headers");
|
||||||
.write(&mut buf);
|
carlog_error!(format!("{err}"));
|
||||||
|
}) else {
|
||||||
|
return ExitCode::FAILURE;
|
||||||
|
};
|
||||||
|
|
||||||
|
bindings.write(&mut buf);
|
||||||
let bytes = buf.into_inner().expect("Unable to extract bytes");
|
let bytes = buf.into_inner().expect("Unable to extract bytes");
|
||||||
let string = String::from_utf8(bytes).expect("Unable to create string");
|
let string = String::from_utf8(bytes).expect("Unable to create string");
|
||||||
File::create(output_dir.join("librashader.h"))
|
|
||||||
.expect("Unable to open file")
|
let Ok(mut file) = File::create(output_dir.join("librashader.h")).inspect_err(|err| {
|
||||||
.write_all(string.as_bytes())
|
carlog_error!("unable to open librashader.h");
|
||||||
.expect("Unable to write bindings.");
|
carlog_error!(format!("{err}"));
|
||||||
|
}) else {
|
||||||
|
return ExitCode::FAILURE;
|
||||||
|
};
|
||||||
|
|
||||||
|
let Ok(_) = file.write_all(string.as_bytes()).inspect_err(|err| {
|
||||||
|
carlog_error!("unable to write to librashader.h");
|
||||||
|
carlog_error!(format!("{err}"));
|
||||||
|
}) else {
|
||||||
|
return ExitCode::FAILURE;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
println!("INFO: Moving artifacts...");
|
carlog_info!("Moving", "built artifacts");
|
||||||
if cfg!(target_os = "macos") {
|
if cfg!(target_os = "macos") {
|
||||||
let artifacts = &["liblibrashader_capi.dylib", "liblibrashader_capi.a"];
|
let artifacts = &["liblibrashader_capi.dylib", "liblibrashader_capi.a"];
|
||||||
for artifact in artifacts {
|
for artifact in artifacts {
|
||||||
let ext = artifact.strip_prefix("lib").unwrap();
|
let ext = artifact.strip_prefix("lib").unwrap();
|
||||||
let ext = ext.replace("_capi", "");
|
let ext = ext.replace("_capi", "");
|
||||||
fs::rename(output_dir.join(artifact), output_dir.join(ext)).unwrap();
|
|
||||||
|
let Ok(_) =
|
||||||
|
fs::rename(output_dir.join(artifact), output_dir.join(&ext)).inspect_err(|err| {
|
||||||
|
carlog_error!(format!("Unable to rename {artifact} to {}", &ext));
|
||||||
|
carlog_error!(format!("{err}"));
|
||||||
|
})
|
||||||
|
else {
|
||||||
|
return ExitCode::FAILURE;
|
||||||
|
};
|
||||||
|
carlog_ok!("Renamed", format!("{artifact} to {}", &ext));
|
||||||
}
|
}
|
||||||
} else if cfg!(target_family = "unix") {
|
} else if cfg!(target_family = "unix") {
|
||||||
let artifacts = &["liblibrashader_capi.so", "liblibrashader_capi.a"];
|
let artifacts = &["liblibrashader_capi.so", "liblibrashader_capi.a"];
|
||||||
for artifact in artifacts {
|
for artifact in artifacts {
|
||||||
let ext = artifact.strip_prefix("lib").unwrap();
|
let ext = artifact.strip_prefix("lib").unwrap();
|
||||||
let ext = ext.replace("_capi", "");
|
let ext = ext.replace("_capi", "");
|
||||||
fs::rename(output_dir.join(artifact), output_dir.join(ext)).unwrap();
|
let Ok(_) =
|
||||||
|
fs::rename(output_dir.join(artifact), output_dir.join(&ext)).inspect_err(|err| {
|
||||||
|
carlog_error!(format!("Unable to rename {artifact} to {}", &ext));
|
||||||
|
carlog_error!(format!("{err}"));
|
||||||
|
})
|
||||||
|
else {
|
||||||
|
return ExitCode::FAILURE;
|
||||||
|
};
|
||||||
|
carlog_ok!("Renamed", format!("{artifact} to {}", &ext));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -116,17 +161,24 @@ pub fn main() -> ExitCode {
|
||||||
];
|
];
|
||||||
for artifact in artifacts {
|
for artifact in artifacts {
|
||||||
let ext = artifact.replace("_capi", "");
|
let ext = artifact.replace("_capi", "");
|
||||||
println!("INFO: Renaming {artifact} to {ext}");
|
let Ok(_) =
|
||||||
fs::rename(output_dir.join(artifact), output_dir.join(ext)).unwrap();
|
fs::rename(output_dir.join(artifact), output_dir.join(&ext)).inspect_err(|err| {
|
||||||
|
carlog_error!(format!("Unable to rename {artifact} to {}", &ext));
|
||||||
|
carlog_error!(format!("{err}"));
|
||||||
|
})
|
||||||
|
else {
|
||||||
|
return ExitCode::FAILURE;
|
||||||
|
};
|
||||||
|
carlog_ok!("Renamed", format!("{artifact} to {}", &ext));
|
||||||
}
|
}
|
||||||
|
|
||||||
if output_dir.join("librashader_capi.pdb").exists() {
|
if output_dir.join("librashader_capi.pdb").exists() {
|
||||||
println!("INFO: Renaming librashader_capi.pdb to librashader.pdb");
|
|
||||||
fs::rename(
|
fs::rename(
|
||||||
output_dir.join("librashader_capi.pdb"),
|
output_dir.join("librashader_capi.pdb"),
|
||||||
output_dir.join("librashader.pdb"),
|
output_dir.join("librashader.pdb"),
|
||||||
)
|
)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
carlog_ok!("Renamed", "librashader_capi.pdb to librashader.pdb");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue