From 827aa7b4ff17bbeb8ca5071f9c65b51543195543 Mon Sep 17 00:00:00 2001 From: 191220029 <191220029@smail.nju.edu.cn> Date: Tue, 21 May 2024 16:58:14 +0800 Subject: [PATCH] src_code_analyze frame Signed-off-by: 191220029 <191220029@smail.nju.edu.cn> src_code_analyze frame Signed-off-by: 191220029 <191220029@smail.nju.edu.cn> cargo lock reader Signed-off-by: 191220029 <191220029@smail.nju.edu.cn> cargo lock reader Signed-off-by: 191220029 <191220029@smail.nju.edu.cn> src_code_analyze frame Signed-off-by: 191220029 <191220029@smail.nju.edu.cn> src-code-analyze frame Signed-off-by: 191220029 <191220029@smail.nju.edu.cn> src code analyze frame Signed-off-by: 191220029 <191220029@smail.nju.edu.cn> s Signed-off-by: 191220029 <191220029@smail.nju.edu.cn> --- collector/src/execute/mod.rs | 7 + collector/src/main.rs | 18 +- collector/src/src_code_analyze/analyzer.rs | 70 + collector/src/src_code_analyze/dependancy.rs | 924 +++++++++ collector/src/src_code_analyze/entry.rs | 40 + collector/src/src_code_analyze/mod.rs | 4 + .../ops/count_slice_from_raw_parts.rs | 6 + collector/src/src_code_analyze/ops/mod.rs | 7 + collector/src/toolchain.rs | 15 + .../cargo_lock_reader/cargolock.txt | 1791 +++++++++++++++++ 10 files changed, 2881 insertions(+), 1 deletion(-) create mode 100644 collector/src/src_code_analyze/analyzer.rs create mode 100644 collector/src/src_code_analyze/dependancy.rs create mode 100644 collector/src/src_code_analyze/entry.rs create mode 100644 collector/src/src_code_analyze/mod.rs create mode 100644 collector/src/src_code_analyze/ops/count_slice_from_raw_parts.rs create mode 100644 collector/src/src_code_analyze/ops/mod.rs create mode 100644 collector/test/src_code_analyze/cargo_lock_reader/cargolock.txt diff --git a/collector/src/execute/mod.rs b/collector/src/execute/mod.rs index cbd463d..08b2acd 100644 --- a/collector/src/execute/mod.rs +++ b/collector/src/execute/mod.rs @@ -93,6 +93,13 @@ impl Stats { pub fn insert(&mut self, stat: String, value: f64) { self.stats.insert(stat, value); } + + pub fn add_or_insert(&mut self, stat: String, value: f64) { + match self.stats.get_mut(&stat) { + Some(e) => *e += value, + None => self.insert(stat, value), + } + } } impl Add for Stats { diff --git a/collector/src/main.rs b/collector/src/main.rs index 85ecb7e..1d97603 100644 --- a/collector/src/main.rs +++ b/collector/src/main.rs @@ -5,7 +5,7 @@ use std::{ process::{self, Command}, }; -use anyhow::{Context, Ok}; +use anyhow::{bail, Context, Ok}; use benchmark::scenario::Scenario; use clap::Parser; use compile_time::{ @@ -18,6 +18,7 @@ use compile_time::{ }; use mir_analyze::mir_generate::generate_mir; use runtime::bench_runtime; +use src_code_analyze::entry::src_code_analyze; use toolchain::{Cli, Commands, ResultWriter}; use crate::{ @@ -35,6 +36,7 @@ mod morpheme_miner; mod pca_analysis; mod perf_analyze; mod runtime; +mod src_code_analyze; mod statistics; mod toolchain; mod utils; @@ -307,6 +309,20 @@ fn main_result() -> anyhow::Result { Ok(0) } + Commands::SourceCodeAnalyze { + bench_dir, + dependency_dir, + out_path, + } => match src_code_analyze(bench_dir, dependency_dir, out_path) { + anyhow::Result::Ok(p) => { + println!( + "Write analyze result to {}.", + p.as_os_str().to_str().unwrap() + ); + Ok(0) + } + Err(e) => bail!("{}", e), + }, } } diff --git a/collector/src/src_code_analyze/analyzer.rs b/collector/src/src_code_analyze/analyzer.rs new file mode 100644 index 0000000..3fdc5e6 --- /dev/null +++ b/collector/src/src_code_analyze/analyzer.rs @@ -0,0 +1,70 @@ +use std::collections::HashSet; +use std::fs::File; +use std::io::{BufReader, Read}; +use std::path::PathBuf; + +use crate::execute::Stats; + +use crate::{ + benchmark::{benchmark::Benchamrk, profile::Profile, scenario::Scenario}, + statistics::compile_time_stat::CompileTimeResult, +}; + +use super::dependancy::read_dependencies; + +pub fn analyze_benchmark( + benchmark: &Benchamrk, + dependency_dir: &PathBuf, + ops: &Vec (String, f64)>>, +) -> CompileTimeResult { + eprintln!( + "analyzing benchmark {} {}", + benchmark.name, + benchmark.path.to_str().unwrap() + ); + let stats = analyze_dir(&benchmark.path, dependency_dir, ops, &mut HashSet::new()).unwrap(); + CompileTimeResult::new( + benchmark.name.clone(), + 0, + Profile::Check, + Scenario::Full, + stats, + ) +} + +fn analyze_dir( + p: &PathBuf, + dependency_dir: &PathBuf, + ops: &Vec (String, f64)>>, + analyzed_dependency: &mut HashSet, +) -> anyhow::Result { + let mut stats = Stats::new(); + for entry in p.read_dir()? { + let entry = entry?; + if entry.file_type()?.is_dir() { + stats += analyze_dir(&entry.path(), dependency_dir, ops, analyzed_dependency)?; + } else if entry.file_type()?.is_file() { + if entry.file_name().to_str().unwrap().ends_with(".rs") { + let mut reader = BufReader::new(File::open(entry.path())?); + let mut buf = vec![]; + reader.read_to_end(&mut buf)?; + if let Ok(buf) = String::from_utf8(buf) { + ops.iter().for_each(|op| { + let t = op(&buf); + stats.add_or_insert(t.0, t.1) + }); + } + } else if entry.file_name().to_str().unwrap().eq("Cargo.lock") { + for d in read_dependencies(&entry.path())? { + let path = &d.path(dependency_dir); + if path.exists() && !analyzed_dependency.contains(path) { + println!(" |---analyzing {}", d); + analyzed_dependency.insert(path.clone()); + stats += analyze_dir(path, dependency_dir, ops, analyzed_dependency)?; + } + } + } + } + } + Ok(stats) +} diff --git a/collector/src/src_code_analyze/dependancy.rs b/collector/src/src_code_analyze/dependancy.rs new file mode 100644 index 0000000..402aa4c --- /dev/null +++ b/collector/src/src_code_analyze/dependancy.rs @@ -0,0 +1,924 @@ +use std::{ + fmt::Display, + fs::File, + io::{BufRead, BufReader, Read}, + path::{Path, PathBuf}, +}; + +pub fn read_dependencies(path: &Path) -> anyhow::Result> { + let mut reader = BufReader::new(File::open(path)?); + let mut dependencies = vec![]; + + while let Some(d) = Dependency::from_reader(&mut reader) { + dependencies.push(d) + } + Ok(dependencies) +} + +/// Cargo dependecies +#[derive(Debug)] +pub struct Dependency { + name: String, + version: String, +} + +impl Dependency { + pub fn path(&self, base: &PathBuf) -> PathBuf { + base.join(format!("{}-{}", self.name, self.version)) + } + + fn from_reader(reader: &mut BufReader) -> Option { + let mut buf = String::new(); + let mut name = String::new(); + let mut version = String::new(); + + let mut state = ReaderState::default(); + while let Ok(s) = reader.read_line(&mut buf) { + if s == 0 { + break; + } + + match state { + ReaderState::Init => { + if buf.eq("[[package]]\n") { + state = ReaderState::ReadName; + } + } + ReaderState::ReadName => { + let name_specifier = "name = \""; + if buf.starts_with(name_specifier) { + name = buf.split_off(name_specifier.len()); + let _ = name.split_off(name.len() - 2); + state = ReaderState::ReadVersion; + } else { + state = ReaderState::Final; + } + } + ReaderState::ReadVersion => { + let version_specifier = "version = \""; + if buf.starts_with(version_specifier) { + version = buf.split_off(version_specifier.len()); + let _ = version.split_off(version.len() - 2); + } + state = ReaderState::Final; + } + ReaderState::Final => { + if buf.eq("\n") { + break; + } + } + } + + buf.clear(); + } + + let v = Self { name, version }; + if v.is_valid() { + Some(v) + } else { + None + } + } + + fn is_valid(&self) -> bool { + !(self.name.is_empty() || self.version.is_empty()) + } +} + +impl Display for Dependency { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.write_str(&format!( + "Dependency {{name: \"{}\", version: \"{}\"}}", + self.name, self.version + )) + } +} + +enum ReaderState { + Init, + ReadName, + ReadVersion, + Final, +} + +impl Default for ReaderState { + fn default() -> Self { + Self::Init + } +} + +#[cfg(test)] +mod test_cargo_lock_reader { + use std::{fs::File, io::BufReader, path::PathBuf}; + + use super::Dependency; + + impl PartialEq for Dependency { + fn eq(&self, other: &Self) -> bool { + self.name.eq(&other.name) && self.version.eq(&other.version) + } + } + + #[test] + fn test_cargo_lock_reader() { + let lock_file = PathBuf::from("test/src_code_analyze/cargo_lock_reader/cargolock.txt"); + let mut r = BufReader::new(File::open(lock_file).unwrap()); + + let mut dependencies = vec![ + Dependency { + name: "adler".to_string(), + version: "1.0.2".to_string(), + }, + Dependency { + name: "aho-corasick".to_string(), + version: "1.1.2".to_string(), + }, + Dependency { + name: "android-tzdata".to_string(), + version: "0.1.1".to_string(), + }, + Dependency { + name: "android_system_properties".to_string(), + version: "0.1.5".to_string(), + }, + Dependency { + name: "anyhow".to_string(), + version: "1.0.75".to_string(), + }, + Dependency { + name: "approx".to_string(), + version: "0.5.1".to_string(), + }, + Dependency { + name: "ascii-canvas".to_string(), + version: "3.0.0".to_string(), + }, + Dependency { + name: "atty".to_string(), + version: "0.2.14".to_string(), + }, + Dependency { + name: "autocfg".to_string(), + version: "1.1.0".to_string(), + }, + Dependency { + name: "bit-set".to_string(), + version: "0.5.3".to_string(), + }, + Dependency { + name: "bit-vec".to_string(), + version: "0.6.3".to_string(), + }, + Dependency { + name: "bitflags".to_string(), + version: "1.3.2".to_string(), + }, + Dependency { + name: "bitflags".to_string(), + version: "2.4.1".to_string(), + }, + Dependency { + name: "bumpalo".to_string(), + version: "3.15.3".to_string(), + }, + Dependency { + name: "bytemuck".to_string(), + version: "1.14.3".to_string(), + }, + Dependency { + name: "byteorder".to_string(), + version: "1.5.0".to_string(), + }, + Dependency { + name: "camino".to_string(), + version: "1.1.6".to_string(), + }, + Dependency { + name: "cargo-platform".to_string(), + version: "0.1.5".to_string(), + }, + Dependency { + name: "cargo_metadata".to_string(), + version: "0.18.1".to_string(), + }, + Dependency { + name: "cc".to_string(), + version: "1.0.88".to_string(), + }, + Dependency { + name: "cfg-if".to_string(), + version: "1.0.0".to_string(), + }, + Dependency { + name: "chrono".to_string(), + version: "0.4.34".to_string(), + }, + Dependency { + name: "clap".to_string(), + version: "3.2.25".to_string(), + }, + Dependency { + name: "clap_derive".to_string(), + version: "3.2.25".to_string(), + }, + Dependency { + name: "clap_lex".to_string(), + version: "0.2.4".to_string(), + }, + Dependency { + name: "collector".to_string(), + version: "0.1.0".to_string(), + }, + Dependency { + name: "color_quant".to_string(), + version: "1.1.0".to_string(), + }, + Dependency { + name: "const-cstr".to_string(), + version: "0.3.0".to_string(), + }, + Dependency { + name: "core-foundation".to_string(), + version: "0.9.4".to_string(), + }, + Dependency { + name: "core-foundation-sys".to_string(), + version: "0.8.6".to_string(), + }, + Dependency { + name: "core-graphics".to_string(), + version: "0.22.3".to_string(), + }, + Dependency { + name: "core-graphics-types".to_string(), + version: "0.1.3".to_string(), + }, + Dependency { + name: "core-text".to_string(), + version: "19.2.0".to_string(), + }, + Dependency { + name: "crc32fast".to_string(), + version: "1.4.0".to_string(), + }, + Dependency { + name: "crossbeam-deque".to_string(), + version: "0.8.3".to_string(), + }, + Dependency { + name: "crossbeam-epoch".to_string(), + version: "0.9.15".to_string(), + }, + Dependency { + name: "crossbeam-utils".to_string(), + version: "0.8.16".to_string(), + }, + Dependency { + name: "crunchy".to_string(), + version: "0.2.2".to_string(), + }, + Dependency { + name: "csv".to_string(), + version: "1.3.0".to_string(), + }, + Dependency { + name: "csv-core".to_string(), + version: "0.1.11".to_string(), + }, + Dependency { + name: "dirs-next".to_string(), + version: "2.0.0".to_string(), + }, + Dependency { + name: "dirs-sys-next".to_string(), + version: "0.1.2".to_string(), + }, + Dependency { + name: "dlib".to_string(), + version: "0.5.2".to_string(), + }, + Dependency { + name: "dwrote".to_string(), + version: "0.11.0".to_string(), + }, + Dependency { + name: "either".to_string(), + version: "1.11.0".to_string(), + }, + Dependency { + name: "ena".to_string(), + version: "0.14.2".to_string(), + }, + Dependency { + name: "env_logger".to_string(), + version: "0.10.1".to_string(), + }, + Dependency { + name: "equivalent".to_string(), + version: "1.0.1".to_string(), + }, + Dependency { + name: "errno".to_string(), + version: "0.3.8".to_string(), + }, + Dependency { + name: "fastrand".to_string(), + version: "2.0.1".to_string(), + }, + Dependency { + name: "fdeflate".to_string(), + version: "0.3.4".to_string(), + }, + Dependency { + name: "filetime".to_string(), + version: "0.2.22".to_string(), + }, + Dependency { + name: "fixedbitset".to_string(), + version: "0.4.2".to_string(), + }, + Dependency { + name: "flate2".to_string(), + version: "1.0.29".to_string(), + }, + Dependency { + name: "float-ord".to_string(), + version: "0.2.0".to_string(), + }, + Dependency { + name: "font-kit".to_string(), + version: "0.11.0".to_string(), + }, + Dependency { + name: "foreign-types".to_string(), + version: "0.3.2".to_string(), + }, + Dependency { + name: "foreign-types-shared".to_string(), + version: "0.1.1".to_string(), + }, + Dependency { + name: "freetype".to_string(), + version: "0.7.2".to_string(), + }, + Dependency { + name: "freetype-sys".to_string(), + version: "0.20.1".to_string(), + }, + Dependency { + name: "getrandom".to_string(), + version: "0.2.12".to_string(), + }, + Dependency { + name: "gif".to_string(), + version: "0.12.0".to_string(), + }, + Dependency { + name: "hashbrown".to_string(), + version: "0.12.3".to_string(), + }, + Dependency { + name: "hashbrown".to_string(), + version: "0.14.3".to_string(), + }, + Dependency { + name: "heck".to_string(), + version: "0.4.1".to_string(), + }, + Dependency { + name: "hermit-abi".to_string(), + version: "0.1.19".to_string(), + }, + Dependency { + name: "hermit-abi".to_string(), + version: "0.3.3".to_string(), + }, + Dependency { + name: "humantime".to_string(), + version: "2.1.0".to_string(), + }, + Dependency { + name: "iana-time-zone".to_string(), + version: "0.1.60".to_string(), + }, + Dependency { + name: "iana-time-zone-haiku".to_string(), + version: "0.1.2".to_string(), + }, + Dependency { + name: "image".to_string(), + version: "0.24.9".to_string(), + }, + Dependency { + name: "indexmap".to_string(), + version: "1.9.3".to_string(), + }, + Dependency { + name: "indexmap".to_string(), + version: "2.2.6".to_string(), + }, + Dependency { + name: "is-terminal".to_string(), + version: "0.4.9".to_string(), + }, + Dependency { + name: "itertools".to_string(), + version: "0.11.0".to_string(), + }, + Dependency { + name: "itoa".to_string(), + version: "1.0.9".to_string(), + }, + Dependency { + name: "jobserver".to_string(), + version: "0.1.27".to_string(), + }, + Dependency { + name: "jpeg-decoder".to_string(), + version: "0.3.1".to_string(), + }, + Dependency { + name: "js-sys".to_string(), + version: "0.3.69".to_string(), + }, + Dependency { + name: "lalrpop".to_string(), + version: "0.20.2".to_string(), + }, + Dependency { + name: "lalrpop-util".to_string(), + version: "0.20.2".to_string(), + }, + Dependency { + name: "lazy_static".to_string(), + version: "1.4.0".to_string(), + }, + Dependency { + name: "libc".to_string(), + version: "0.2.153".to_string(), + }, + Dependency { + name: "libloading".to_string(), + version: "0.8.3".to_string(), + }, + Dependency { + name: "libredox".to_string(), + version: "0.0.1".to_string(), + }, + Dependency { + name: "linux-raw-sys".to_string(), + version: "0.4.13".to_string(), + }, + Dependency { + name: "lock_api".to_string(), + version: "0.4.12".to_string(), + }, + Dependency { + name: "log".to_string(), + version: "0.4.20".to_string(), + }, + Dependency { + name: "matrixmultiply".to_string(), + version: "0.3.8".to_string(), + }, + Dependency { + name: "memchr".to_string(), + version: "2.6.4".to_string(), + }, + Dependency { + name: "memoffset".to_string(), + version: "0.9.0".to_string(), + }, + Dependency { + name: "miniz_oxide".to_string(), + version: "0.7.2".to_string(), + }, + Dependency { + name: "miow".to_string(), + version: "0.6.0".to_string(), + }, + Dependency { + name: "nalgebra".to_string(), + version: "0.32.5".to_string(), + }, + Dependency { + name: "nalgebra-macros".to_string(), + version: "0.2.1".to_string(), + }, + Dependency { + name: "new_debug_unreachable".to_string(), + version: "1.0.6".to_string(), + }, + Dependency { + name: "num-complex".to_string(), + version: "0.4.5".to_string(), + }, + Dependency { + name: "num-integer".to_string(), + version: "0.1.46".to_string(), + }, + Dependency { + name: "num-rational".to_string(), + version: "0.4.1".to_string(), + }, + Dependency { + name: "num-traits".to_string(), + version: "0.2.18".to_string(), + }, + Dependency { + name: "once_cell".to_string(), + version: "1.18.0".to_string(), + }, + Dependency { + name: "os_str_bytes".to_string(), + version: "6.6.1".to_string(), + }, + Dependency { + name: "parking_lot".to_string(), + version: "0.12.2".to_string(), + }, + Dependency { + name: "parking_lot_core".to_string(), + version: "0.9.10".to_string(), + }, + Dependency { + name: "paste".to_string(), + version: "1.0.14".to_string(), + }, + Dependency { + name: "pathfinder_geometry".to_string(), + version: "0.5.1".to_string(), + }, + Dependency { + name: "pathfinder_simd".to_string(), + version: "0.5.3".to_string(), + }, + Dependency { + name: "petgraph".to_string(), + version: "0.6.4".to_string(), + }, + Dependency { + name: "phf_shared".to_string(), + version: "0.10.0".to_string(), + }, + Dependency { + name: "pico-args".to_string(), + version: "0.5.0".to_string(), + }, + Dependency { + name: "pkg-config".to_string(), + version: "0.3.30".to_string(), + }, + Dependency { + name: "plotters".to_string(), + version: "0.3.5".to_string(), + }, + Dependency { + name: "plotters-backend".to_string(), + version: "0.3.5".to_string(), + }, + Dependency { + name: "plotters-bitmap".to_string(), + version: "0.3.3".to_string(), + }, + Dependency { + name: "plotters-svg".to_string(), + version: "0.3.5".to_string(), + }, + Dependency { + name: "png".to_string(), + version: "0.17.13".to_string(), + }, + Dependency { + name: "precomputed-hash".to_string(), + version: "0.1.1".to_string(), + }, + Dependency { + name: "proc-macro-error".to_string(), + version: "1.0.4".to_string(), + }, + Dependency { + name: "proc-macro-error-attr".to_string(), + version: "1.0.4".to_string(), + }, + Dependency { + name: "proc-macro2".to_string(), + version: "1.0.70".to_string(), + }, + Dependency { + name: "quote".to_string(), + version: "1.0.33".to_string(), + }, + Dependency { + name: "rawpointer".to_string(), + version: "0.2.1".to_string(), + }, + Dependency { + name: "rayon".to_string(), + version: "1.8.0".to_string(), + }, + Dependency { + name: "rayon-core".to_string(), + version: "1.12.0".to_string(), + }, + Dependency { + name: "redox_syscall".to_string(), + version: "0.3.5".to_string(), + }, + Dependency { + name: "redox_syscall".to_string(), + version: "0.4.1".to_string(), + }, + Dependency { + name: "redox_syscall".to_string(), + version: "0.5.1".to_string(), + }, + Dependency { + name: "redox_users".to_string(), + version: "0.4.4".to_string(), + }, + Dependency { + name: "regex".to_string(), + version: "1.10.2".to_string(), + }, + Dependency { + name: "regex-automata".to_string(), + version: "0.4.3".to_string(), + }, + Dependency { + name: "regex-syntax".to_string(), + version: "0.8.2".to_string(), + }, + Dependency { + name: "rustc_version".to_string(), + version: "0.4.0".to_string(), + }, + Dependency { + name: "rustix".to_string(), + version: "0.38.31".to_string(), + }, + Dependency { + name: "rustversion".to_string(), + version: "1.0.14".to_string(), + }, + Dependency { + name: "ryu".to_string(), + version: "1.0.15".to_string(), + }, + Dependency { + name: "safe_arch".to_string(), + version: "0.7.1".to_string(), + }, + Dependency { + name: "same-file".to_string(), + version: "1.0.6".to_string(), + }, + Dependency { + name: "scopeguard".to_string(), + version: "1.2.0".to_string(), + }, + Dependency { + name: "semver".to_string(), + version: "1.0.20".to_string(), + }, + Dependency { + name: "serde".to_string(), + version: "1.0.193".to_string(), + }, + Dependency { + name: "serde_derive".to_string(), + version: "1.0.193".to_string(), + }, + Dependency { + name: "serde_json".to_string(), + version: "1.0.108".to_string(), + }, + Dependency { + name: "simba".to_string(), + version: "0.8.1".to_string(), + }, + Dependency { + name: "simd-adler32".to_string(), + version: "0.3.7".to_string(), + }, + Dependency { + name: "siphasher".to_string(), + version: "0.3.11".to_string(), + }, + Dependency { + name: "smallvec".to_string(), + version: "1.13.2".to_string(), + }, + Dependency { + name: "string_cache".to_string(), + version: "0.8.7".to_string(), + }, + Dependency { + name: "strsim".to_string(), + version: "0.10.0".to_string(), + }, + Dependency { + name: "syn".to_string(), + version: "1.0.109".to_string(), + }, + Dependency { + name: "syn".to_string(), + version: "2.0.39".to_string(), + }, + Dependency { + name: "tempfile".to_string(), + version: "3.8.1".to_string(), + }, + Dependency { + name: "term".to_string(), + version: "0.7.0".to_string(), + }, + Dependency { + name: "termcolor".to_string(), + version: "1.4.0".to_string(), + }, + Dependency { + name: "textwrap".to_string(), + version: "0.16.0".to_string(), + }, + Dependency { + name: "thiserror".to_string(), + version: "1.0.50".to_string(), + }, + Dependency { + name: "thiserror-impl".to_string(), + version: "1.0.50".to_string(), + }, + Dependency { + name: "tiny-keccak".to_string(), + version: "2.0.2".to_string(), + }, + Dependency { + name: "ttf-parser".to_string(), + version: "0.17.1".to_string(), + }, + Dependency { + name: "typenum".to_string(), + version: "1.17.0".to_string(), + }, + Dependency { + name: "unicode-ident".to_string(), + version: "1.0.12".to_string(), + }, + Dependency { + name: "unicode-xid".to_string(), + version: "0.2.4".to_string(), + }, + Dependency { + name: "version_check".to_string(), + version: "0.9.4".to_string(), + }, + Dependency { + name: "walkdir".to_string(), + version: "2.4.0".to_string(), + }, + Dependency { + name: "wasi".to_string(), + version: "0.11.0+wasi-snapshot-preview1".to_string(), + }, + Dependency { + name: "wasm-bindgen".to_string(), + version: "0.2.92".to_string(), + }, + Dependency { + name: "wasm-bindgen-backend".to_string(), + version: "0.2.92".to_string(), + }, + Dependency { + name: "wasm-bindgen-macro".to_string(), + version: "0.2.92".to_string(), + }, + Dependency { + name: "wasm-bindgen-macro-support".to_string(), + version: "0.2.92".to_string(), + }, + Dependency { + name: "wasm-bindgen-shared".to_string(), + version: "0.2.92".to_string(), + }, + Dependency { + name: "web-sys".to_string(), + version: "0.3.69".to_string(), + }, + Dependency { + name: "weezl".to_string(), + version: "0.1.8".to_string(), + }, + Dependency { + name: "wide".to_string(), + version: "0.7.16".to_string(), + }, + Dependency { + name: "winapi".to_string(), + version: "0.3.9".to_string(), + }, + Dependency { + name: "winapi-i686-pc-windows-gnu".to_string(), + version: "0.4.0".to_string(), + }, + Dependency { + name: "winapi-util".to_string(), + version: "0.1.6".to_string(), + }, + Dependency { + name: "winapi-x86_64-pc-windows-gnu".to_string(), + version: "0.4.0".to_string(), + }, + Dependency { + name: "windows-core".to_string(), + version: "0.52.0".to_string(), + }, + Dependency { + name: "windows-sys".to_string(), + version: "0.48.0".to_string(), + }, + Dependency { + name: "windows-sys".to_string(), + version: "0.52.0".to_string(), + }, + Dependency { + name: "windows-targets".to_string(), + version: "0.48.5".to_string(), + }, + Dependency { + name: "windows-targets".to_string(), + version: "0.52.0".to_string(), + }, + Dependency { + name: "windows_aarch64_gnullvm".to_string(), + version: "0.48.5".to_string(), + }, + Dependency { + name: "windows_aarch64_gnullvm".to_string(), + version: "0.52.0".to_string(), + }, + Dependency { + name: "windows_aarch64_msvc".to_string(), + version: "0.48.5".to_string(), + }, + Dependency { + name: "windows_aarch64_msvc".to_string(), + version: "0.52.0".to_string(), + }, + Dependency { + name: "windows_i686_gnu".to_string(), + version: "0.48.5".to_string(), + }, + Dependency { + name: "windows_i686_gnu".to_string(), + version: "0.52.0".to_string(), + }, + Dependency { + name: "windows_i686_msvc".to_string(), + version: "0.48.5".to_string(), + }, + Dependency { + name: "windows_i686_msvc".to_string(), + version: "0.52.0".to_string(), + }, + Dependency { + name: "windows_x86_64_gnu".to_string(), + version: "0.48.5".to_string(), + }, + Dependency { + name: "windows_x86_64_gnu".to_string(), + version: "0.52.0".to_string(), + }, + Dependency { + name: "windows_x86_64_gnullvm".to_string(), + version: "0.48.5".to_string(), + }, + Dependency { + name: "windows_x86_64_gnullvm".to_string(), + version: "0.52.0".to_string(), + }, + Dependency { + name: "windows_x86_64_msvc".to_string(), + version: "0.48.5".to_string(), + }, + Dependency { + name: "windows_x86_64_msvc".to_string(), + version: "0.52.0".to_string(), + }, + Dependency { + name: "wio".to_string(), + version: "0.2.2".to_string(), + }, + Dependency { + name: "yeslogic-fontconfig-sys".to_string(), + version: "3.2.0".to_string(), + }, + ] + .into_iter(); + + while let Some(d) = Dependency::from_reader(&mut r) { + assert_eq!(dependencies.next().unwrap(), d,) + } + assert_eq!(dependencies.next(), None); + } +} diff --git a/collector/src/src_code_analyze/entry.rs b/collector/src/src_code_analyze/entry.rs new file mode 100644 index 0000000..68df816 --- /dev/null +++ b/collector/src/src_code_analyze/entry.rs @@ -0,0 +1,40 @@ +use std::fs::{create_dir, create_dir_all, File}; +use std::io::BufWriter; +use std::path::PathBuf; + +use crate::src_code_analyze::ops::analyze_ops; +use crate::statistics::compile_time_stat::{CompileTimeBenchResult, CompileTimeResultSet}; + +use crate::{compile_time::discover_benchmark_suit, src_code_analyze::analyzer::analyze_benchmark}; + +pub fn src_code_analyze( + bench_dir: PathBuf, + dependency_dir: PathBuf, + out_path: PathBuf, +) -> anyhow::Result { + assert!(dependency_dir.exists()); + let benchmarks = discover_benchmark_suit(&bench_dir)?; + + let ops = analyze_ops(); + + let mut results = vec![]; + + for b in benchmarks { + results.push(CompileTimeBenchResult { + benchmark: b.name.clone(), + iterations: 0, + result_vec: vec![analyze_benchmark(&b, &dependency_dir, &ops)], + }); + } + + let results = CompileTimeResultSet::new(0.to_string(), results); + create_dir_all(&out_path)?; + serde_json::to_writer( + BufWriter::new(File::create( + &out_path.join("src-code-analyze-results.json"), + )?), + &results, + )?; + + Ok(out_path) +} diff --git a/collector/src/src_code_analyze/mod.rs b/collector/src/src_code_analyze/mod.rs new file mode 100644 index 0000000..805323e --- /dev/null +++ b/collector/src/src_code_analyze/mod.rs @@ -0,0 +1,4 @@ +mod analyzer; +mod dependancy; +pub(crate) mod entry; +mod ops; diff --git a/collector/src/src_code_analyze/ops/count_slice_from_raw_parts.rs b/collector/src/src_code_analyze/ops/count_slice_from_raw_parts.rs new file mode 100644 index 0000000..62dd9a4 --- /dev/null +++ b/collector/src/src_code_analyze/ops/count_slice_from_raw_parts.rs @@ -0,0 +1,6 @@ +pub fn count_slice_from_raw_parts(input: &String) -> (String, f64) { + ( + "slice_from_raw_parts".to_string(), + input.matches("slice::from_raw_parts").count() as f64, + ) +} diff --git a/collector/src/src_code_analyze/ops/mod.rs b/collector/src/src_code_analyze/ops/mod.rs new file mode 100644 index 0000000..3e290cf --- /dev/null +++ b/collector/src/src_code_analyze/ops/mod.rs @@ -0,0 +1,7 @@ +use crate::src_code_analyze::ops::count_slice_from_raw_parts::count_slice_from_raw_parts; + +mod count_slice_from_raw_parts; + +pub fn analyze_ops() -> Vec (String, f64)>> { + vec![Box::new(count_slice_from_raw_parts)] +} diff --git a/collector/src/toolchain.rs b/collector/src/toolchain.rs index 0a4634c..199dce3 100644 --- a/collector/src/toolchain.rs +++ b/collector/src/toolchain.rs @@ -379,6 +379,21 @@ pub enum Commands { #[clap(long = "out-path", default_value = "results")] out_path: PathBuf, }, + + /// Analyze source codes of benchmarks. + SourceCodeAnalyze { + /// The path of benchmark dir + #[clap(long = "bench-dir", default_value = "../benchmarks/compile-time")] + bench_dir: PathBuf, + + /// The path of local cargo dependencies dir. + #[clap(long = "dependency-dir")] + dependency_dir: PathBuf, + + /// The path of output directory. + #[clap(long = "out-dir", default_value = "results")] + out_path: PathBuf, + }, } #[derive(Debug)] diff --git a/collector/test/src_code_analyze/cargo_lock_reader/cargolock.txt b/collector/test/src_code_analyze/cargo_lock_reader/cargolock.txt new file mode 100644 index 0000000..24ca02a --- /dev/null +++ b/collector/test/src_code_analyze/cargo_lock_reader/cargolock.txt @@ -0,0 +1,1791 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "aho-corasick" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" +dependencies = [ + "memchr", +] + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "anyhow" +version = "1.0.75" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" + +[[package]] +name = "approx" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6" +dependencies = [ + "num-traits", +] + +[[package]] +name = "ascii-canvas" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8824ecca2e851cec16968d54a01dd372ef8f95b244fb84b84e70128be347c3c6" +dependencies = [ + "term", +] + +[[package]] +name = "atty" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +dependencies = [ + "hermit-abi 0.1.19", + "libc", + "winapi", +] + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "bit-set" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" + +[[package]] +name = "bumpalo" +version = "3.15.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ea184aa71bb362a1157c896979544cc23974e08fd265f29ea96b59f0b4a555b" + +[[package]] +name = "bytemuck" +version = "1.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2ef034f05691a48569bd920a96c81b9d91bbad1ab5ac7c4616c1f6ef36cb79f" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "camino" +version = "1.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9c" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo-platform" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e34637b3140142bdf929fb439e8aa4ebad7651ebf7b1080b3930aa16ac1459ff" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo_metadata" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" +dependencies = [ + "camino", + "cargo-platform", + "semver", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "cc" +version = "1.0.88" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02f341c093d19155a6e41631ce5971aac4e9a868262212153124c15fa22d1cdc" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "chrono" +version = "0.4.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5bc015644b92d5890fab7489e49d21f879d5c990186827d42ec511919404f38b" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "js-sys", + "num-traits", + "wasm-bindgen", + "windows-targets 0.52.0", +] + +[[package]] +name = "clap" +version = "3.2.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ea181bf566f71cb9a5d17a59e1871af638180a18fb0035c92ae62b705207123" +dependencies = [ + "atty", + "bitflags 1.3.2", + "clap_derive", + "clap_lex", + "indexmap 1.9.3", + "once_cell", + "strsim", + "termcolor", + "textwrap", +] + +[[package]] +name = "clap_derive" +version = "3.2.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae6371b8bdc8b7d3959e9cf7b22d4435ef3e79e138688421ec654acf8c81b008" +dependencies = [ + "heck", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "clap_lex" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5" +dependencies = [ + "os_str_bytes", +] + +[[package]] +name = "collector" +version = "0.1.0" +dependencies = [ + "anyhow", + "cargo_metadata", + "clap", + "crossbeam-utils", + "csv", + "env_logger", + "filetime", + "jobserver", + "lalrpop", + "lalrpop-util", + "lazy_static", + "libc", + "log", + "miow", + "nalgebra", + "plotters", + "rayon", + "regex", + "serde", + "serde_json", + "tempfile", + "thiserror", + "walkdir", + "windows-sys 0.52.0", +] + +[[package]] +name = "color_quant" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" + +[[package]] +name = "const-cstr" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed3d0b5ff30645a68f35ece8cea4556ca14ef8a1651455f789a099a0513532a6" + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" + +[[package]] +name = "core-graphics" +version = "0.22.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "core-graphics-types", + "foreign-types", + "libc", +] + +[[package]] +name = "core-graphics-types" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "libc", +] + +[[package]] +name = "core-text" +version = "19.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99d74ada66e07c1cefa18f8abfba765b486f250de2e4a999e5727fc0dd4b4a25" +dependencies = [ + "core-foundation", + "core-graphics", + "foreign-types", + "libc", +] + +[[package]] +name = "crc32fast" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3855a8a784b474f333699ef2bbca9db2c4a1f6d9088a90a2d25b1eb53111eaa" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" +dependencies = [ + "cfg-if", + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7" +dependencies = [ + "autocfg", + "cfg-if", + "crossbeam-utils", + "memoffset", + "scopeguard", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + +[[package]] +name = "csv" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac574ff4d437a7b5ad237ef331c17ccca63c46479e5b5453eb8e10bb99a759fe" +dependencies = [ + "csv-core", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "csv-core" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5efa2b3d7902f4b634a20cae3c9c4e6209dc4779feb6863329607560143efa70" +dependencies = [ + "memchr", +] + +[[package]] +name = "dirs-next" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" +dependencies = [ + "cfg-if", + "dirs-sys-next", +] + +[[package]] +name = "dirs-sys-next" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" +dependencies = [ + "libc", + "redox_users", + "winapi", +] + +[[package]] +name = "dlib" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412" +dependencies = [ + "libloading", +] + +[[package]] +name = "dwrote" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439a1c2ba5611ad3ed731280541d36d2e9c4ac5e7fb818a27b604bdc5a6aa65b" +dependencies = [ + "lazy_static", + "libc", + "winapi", + "wio", +] + +[[package]] +name = "either" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a47c1c47d2f5964e29c61246e81db715514cd532db6b5116a25ea3c03d6780a2" + +[[package]] +name = "ena" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c533630cf40e9caa44bd91aadc88a75d75a4c3a12b4cfde353cbed41daa1e1f1" +dependencies = [ + "log", +] + +[[package]] +name = "env_logger" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95b3f3e67048839cb0d0781f445682a35113da7121f7c949db0e2be96a4fbece" +dependencies = [ + "humantime", + "is-terminal", + "log", + "regex", + "termcolor", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "errno" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "fastrand" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" + +[[package]] +name = "fdeflate" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f9bfee30e4dedf0ab8b422f03af778d9612b63f502710fc500a334ebe2de645" +dependencies = [ + "simd-adler32", +] + +[[package]] +name = "filetime" +version = "0.2.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4029edd3e734da6fe05b6cd7bd2960760a616bd2ddd0d59a0124746d6272af0" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall 0.3.5", + "windows-sys 0.48.0", +] + +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + +[[package]] +name = "flate2" +version = "1.0.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4556222738635b7a3417ae6130d8f52201e45a0c4d1a907f0826383adb5f85e7" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "float-ord" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bad48618fdb549078c333a7a8528acb57af271d0433bdecd523eb620628364e" + +[[package]] +name = "font-kit" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21fe28504d371085fae9ac7a3450f0b289ab71e07c8e57baa3fb68b9e57d6ce5" +dependencies = [ + "bitflags 1.3.2", + "byteorder", + "core-foundation", + "core-graphics", + "core-text", + "dirs-next", + "dwrote", + "float-ord", + "freetype", + "lazy_static", + "libc", + "log", + "pathfinder_geometry", + "pathfinder_simd", + "walkdir", + "winapi", + "yeslogic-fontconfig-sys", +] + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "freetype" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a440748e063798e4893ceb877151e84acef9bea9a8c6800645cf3f1b3a7806e" +dependencies = [ + "freetype-sys", + "libc", +] + +[[package]] +name = "freetype-sys" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e7edc5b9669349acfda99533e9e0bcf26a51862ab43b08ee7745c55d28eb134" +dependencies = [ + "cc", + "libc", + "pkg-config", +] + +[[package]] +name = "getrandom" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "gif" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80792593675e051cf94a4b111980da2ba60d4a83e43e0048c5693baab3977045" +dependencies = [ + "color_quant", + "weezl", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "hashbrown" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "hermit-abi" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +dependencies = [ + "libc", +] + +[[package]] +name = "hermit-abi" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7" + +[[package]] +name = "humantime" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" + +[[package]] +name = "iana-time-zone" +version = "0.1.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "image" +version = "0.24.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5690139d2f55868e080017335e4b94cb7414274c74f1669c84fb5feba2c9f69d" +dependencies = [ + "bytemuck", + "byteorder", + "color_quant", + "jpeg-decoder", + "num-traits", + "png", +] + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", +] + +[[package]] +name = "indexmap" +version = "2.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +dependencies = [ + "equivalent", + "hashbrown 0.14.3", +] + +[[package]] +name = "is-terminal" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b" +dependencies = [ + "hermit-abi 0.3.3", + "rustix", + "windows-sys 0.48.0", +] + +[[package]] +name = "itertools" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" + +[[package]] +name = "jobserver" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c37f63953c4c63420ed5fd3d6d398c719489b9f872b9fa683262f8edd363c7d" +dependencies = [ + "libc", +] + +[[package]] +name = "jpeg-decoder" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5d4a7da358eff58addd2877a45865158f0d78c911d43a5784ceb7bbf52833b0" + +[[package]] +name = "js-sys" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "lalrpop" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55cb077ad656299f160924eb2912aa147d7339ea7d69e1b5517326fdcec3c1ca" +dependencies = [ + "ascii-canvas", + "bit-set", + "ena", + "itertools", + "lalrpop-util", + "petgraph", + "pico-args", + "regex", + "regex-syntax", + "string_cache", + "term", + "tiny-keccak", + "unicode-xid", + "walkdir", +] + +[[package]] +name = "lalrpop-util" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "507460a910eb7b32ee961886ff48539633b788a36b65692b95f225b844c82553" +dependencies = [ + "regex-automata", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "libc" +version = "0.2.153" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" + +[[package]] +name = "libloading" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c2a198fb6b0eada2a8df47933734e6d35d350665a33a3593d7164fa52c75c19" +dependencies = [ + "cfg-if", + "windows-targets 0.52.0", +] + +[[package]] +name = "libredox" +version = "0.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8" +dependencies = [ + "bitflags 2.4.1", + "libc", + "redox_syscall 0.4.1", +] + +[[package]] +name = "linux-raw-sys" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" + +[[package]] +name = "lock_api" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" + +[[package]] +name = "matrixmultiply" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7574c1cf36da4798ab73da5b215bbf444f50718207754cb522201d78d1cd0ff2" +dependencies = [ + "autocfg", + "rawpointer", +] + +[[package]] +name = "memchr" +version = "2.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" + +[[package]] +name = "memoffset" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" +dependencies = [ + "autocfg", +] + +[[package]] +name = "miniz_oxide" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" +dependencies = [ + "adler", + "simd-adler32", +] + +[[package]] +name = "miow" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "359f76430b20a79f9e20e115b3428614e654f04fab314482fc0fda0ebd3c6044" +dependencies = [ + "windows-sys 0.48.0", +] + +[[package]] +name = "nalgebra" +version = "0.32.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ea4908d4f23254adda3daa60ffef0f1ac7b8c3e9a864cf3cc154b251908a2ef" +dependencies = [ + "approx", + "matrixmultiply", + "nalgebra-macros", + "num-complex", + "num-rational", + "num-traits", + "simba", + "typenum", +] + +[[package]] +name = "nalgebra-macros" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91761aed67d03ad966ef783ae962ef9bbaca728d2dd7ceb7939ec110fffad998" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "new_debug_unreachable" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" + +[[package]] +name = "num-complex" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23c6602fda94a57c990fe0df199a035d83576b496aa29f4e634a8ac6004e68a6" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" +dependencies = [ + "autocfg", +] + +[[package]] +name = "once_cell" +version = "1.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" + +[[package]] +name = "os_str_bytes" +version = "6.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2355d85b9a3786f481747ced0e0ff2ba35213a1f9bd406ed906554d7af805a1" + +[[package]] +name = "parking_lot" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e4af0ca4f6caed20e900d564c242b8e5d4903fdacf31d3daf527b66fe6f42fb" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall 0.5.1", + "smallvec", + "windows-targets 0.52.0", +] + +[[package]] +name = "paste" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" + +[[package]] +name = "pathfinder_geometry" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b7e7b4ea703700ce73ebf128e1450eb69c3a8329199ffbfb9b2a0418e5ad3" +dependencies = [ + "log", + "pathfinder_simd", +] + +[[package]] +name = "pathfinder_simd" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebf45976c56919841273f2a0fc684c28437e2f304e264557d9c72be5d5a718be" +dependencies = [ + "rustc_version", +] + +[[package]] +name = "petgraph" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" +dependencies = [ + "fixedbitset", + "indexmap 2.2.6", +] + +[[package]] +name = "phf_shared" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" +dependencies = [ + "siphasher", +] + +[[package]] +name = "pico-args" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315" + +[[package]] +name = "pkg-config" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" + +[[package]] +name = "plotters" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2c224ba00d7cadd4d5c660deaf2098e5e80e07846537c51f9cfa4be50c1fd45" +dependencies = [ + "chrono", + "font-kit", + "image", + "lazy_static", + "num-traits", + "pathfinder_geometry", + "plotters-backend", + "plotters-bitmap", + "plotters-svg", + "ttf-parser", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "plotters-backend" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e76628b4d3a7581389a35d5b6e2139607ad7c75b17aed325f210aa91f4a9609" + +[[package]] +name = "plotters-bitmap" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cebbe1f70205299abc69e8b295035bb52a6a70ee35474ad10011f0a4efb8543" +dependencies = [ + "gif", + "image", + "plotters-backend", +] + +[[package]] +name = "plotters-svg" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38f6d39893cca0701371e3c27294f09797214b86f1fb951b89ade8ec04e2abab" +dependencies = [ + "plotters-backend", +] + +[[package]] +name = "png" +version = "0.17.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06e4b0d3d1312775e782c86c91a111aa1f910cbb65e1337f9975b5f9a554b5e1" +dependencies = [ + "bitflags 1.3.2", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide", +] + +[[package]] +name = "precomputed-hash" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn 1.0.109", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro2" +version = "1.0.70" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39278fbbf5fb4f646ce651690877f89d1c5811a3d4acb27700c1cb3cdb78fd3b" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rawpointer" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" + +[[package]] +name = "rayon" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "redox_syscall" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "redox_syscall" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "redox_syscall" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "469052894dcb553421e483e4209ee581a45100d31b4018de03e5a7ad86374a7e" +dependencies = [ + "bitflags 2.4.1", +] + +[[package]] +name = "redox_users" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4" +dependencies = [ + "getrandom", + "libredox", + "thiserror", +] + +[[package]] +name = "regex" +version = "1.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] + +[[package]] +name = "rustix" +version = "0.38.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ea3e1a662af26cd7a3ba09c0297a31af215563ecf42817c98df621387f4e949" +dependencies = [ + "bitflags 2.4.1", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustversion" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" + +[[package]] +name = "ryu" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" + +[[package]] +name = "safe_arch" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f398075ce1e6a179b46f51bd88d0598b92b00d3551f1a2d4ac49e771b56ac354" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "semver" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090" +dependencies = [ + "serde", +] + +[[package]] +name = "serde" +version = "1.0.193" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.193" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "serde_json" +version = "1.0.108" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "simba" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "061507c94fc6ab4ba1c9a0305018408e312e17c041eb63bef8aa726fa33aceae" +dependencies = [ + "approx", + "num-complex", + "num-traits", + "paste", + "wide", +] + +[[package]] +name = "simd-adler32" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" + +[[package]] +name = "siphasher" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" + +[[package]] +name = "smallvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" + +[[package]] +name = "string_cache" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b" +dependencies = [ + "new_debug_unreachable", + "once_cell", + "parking_lot", + "phf_shared", + "precomputed-hash", +] + +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "tempfile" +version = "3.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5" +dependencies = [ + "cfg-if", + "fastrand", + "redox_syscall 0.4.1", + "rustix", + "windows-sys 0.48.0", +] + +[[package]] +name = "term" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c59df8ac95d96ff9bede18eb7300b0fda5e5d8d90960e76f8e14ae765eedbf1f" +dependencies = [ + "dirs-next", + "rustversion", + "winapi", +] + +[[package]] +name = "termcolor" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff1bc3d3f05aff0403e8ac0d92ced918ec05b666a43f83297ccef5bea8a3d449" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "textwrap" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" + +[[package]] +name = "thiserror" +version = "1.0.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "tiny-keccak" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" +dependencies = [ + "crunchy", +] + +[[package]] +name = "ttf-parser" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "375812fa44dab6df41c195cd2f7fecb488f6c09fbaafb62807488cefab642bff" + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "unicode-xid" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "walkdir" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.39", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" + +[[package]] +name = "web-sys" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "weezl" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082" + +[[package]] +name = "wide" +version = "0.7.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81a1851a719f11d1d2fea40e15c72f6c00de8c142d7ac47c1441cc7e4d0d5bc6" +dependencies = [ + "bytemuck", + "safe_arch", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" +dependencies = [ + "winapi", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.0", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.0", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" +dependencies = [ + "windows_aarch64_gnullvm 0.52.0", + "windows_aarch64_msvc 0.52.0", + "windows_i686_gnu 0.52.0", + "windows_i686_msvc 0.52.0", + "windows_x86_64_gnu 0.52.0", + "windows_x86_64_gnullvm 0.52.0", + "windows_x86_64_msvc 0.52.0", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" + +[[package]] +name = "wio" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d129932f4644ac2396cb456385cbf9e63b5b30c6e8dc4820bdca4eb082037a5" +dependencies = [ + "winapi", +] + +[[package]] +name = "yeslogic-fontconfig-sys" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2bbd69036d397ebbff671b1b8e4d918610c181c5a16073b96f984a38d08c386" +dependencies = [ + "const-cstr", + "dlib", + "once_cell", + "pkg-config", +]