WIP ci: experiment with clang check

This commit is contained in:
Hendrik Eeckhaut
2024-01-18 14:03:38 +01:00
parent 1a5465eff1
commit d4c2d8b717
3 changed files with 67 additions and 0 deletions

View File

@@ -77,9 +77,16 @@ console_error_panic_hook = {version = "0.1.7"}
[dev-dependencies]
wasm-bindgen-test = "0.3.34"
rstest = "0.18.2"
[profile.release]
# Tell `rustc` to optimize for small code size.
[package.metadata.wasm-pack.profile.release]
wasm-opt = false
[build-dependencies]
regex = "1.10.2"
[package.metadata.build-script]
name = "build.rs"

58
wasm/prover/build.rs Normal file
View File

@@ -0,0 +1,58 @@
use regex::Regex;
use std::{error::Error, process::Command};
fn main() {
let raw_output = Command::new("clang")
.arg("--version")
.output()
.expect("Could not verify clang version. Is clang installed?") //TODO add url here
.stdout;
let clang_version_str = std::str::from_utf8(&raw_output)
.expect("Could not verify clang version. Is clang installed?");
let clang_version = get_major_version(clang_version_str)
.expect(format!("Could not verify clang version. {:?}?", &clang_version_str).as_str());
if clang_version < 16 {
panic!("Please install clang version 16.0 or newer.");
}
}
fn get_major_version(clang_raw_version_output: &str) -> Result<u32, Box<dyn Error>> {
let version_pattern = r#"version (\d+(\.\d+)+)"#;
let re = Regex::new(version_pattern).unwrap();
if let Some(captures) = re.captures(clang_raw_version_output) {
let version = captures.get(1).map_or("", |m| m.as_str());
if let Some(major_vesrion) = version.split('.').next() {
return Ok(major_vesrion.parse::<u32>().unwrap());
}
}
return Err(format!(
"Could not verify clang version. {:?}?",
&clang_raw_version_output
)
.into());
}
#[cfg(test)]
mod tests {
use super::*;
use rstest::rstest;
#[rstest]
#[case("Apple clang version 15.0.0 (clang-1500.0.40.1)
Target: arm64-apple-darwin23.1.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin", "15.0.0")]
#[case(
"Homebrew clang version 17.0.5
Target: arm64-apple-darwin23.1.0
Thread model: posix
InstalledDir: /opt/homebrew/Cellar/llvm/17.0.5/bin",
"17.0.5"
)]
fn test_get_version(#[case] clang_output: &str, #[case] expected: &str) {
assert_eq!(get_major_version(clang_output), Some(expected));
}
}

2
wasm/prover/check.sh Executable file
View File

@@ -0,0 +1,2 @@
#!/bin/sh
cargo check --target "wasm32-unknown-unknown"