Skip to main content

veryl_metadata/
build.rs

1use serde::{Deserialize, Serialize};
2use std::path::PathBuf;
3
4#[derive(Clone, Debug, Serialize, Deserialize)]
5#[serde(deny_unknown_fields)]
6pub struct Build {
7    #[serde(default)]
8    pub clock_type: ClockType,
9    #[serde(default)]
10    pub reset_type: ResetType,
11    pub clock_posedge_prefix: Option<String>,
12    pub clock_posedge_suffix: Option<String>,
13    pub clock_negedge_prefix: Option<String>,
14    pub clock_negedge_suffix: Option<String>,
15    pub reset_high_prefix: Option<String>,
16    pub reset_high_suffix: Option<String>,
17    pub reset_low_prefix: Option<String>,
18    pub reset_low_suffix: Option<String>,
19    #[serde(default)]
20    pub filelist_type: FilelistType,
21    #[serde(default = "default_source")]
22    pub source: PathBuf,
23    #[serde(default = "default_sources")]
24    pub sources: Vec<PathBuf>,
25    #[serde(default)]
26    pub target: Target,
27    #[serde(default)]
28    pub implicit_parameter_types: Vec<BuiltinType>,
29    #[serde(default)]
30    pub omit_project_prefix: bool,
31    #[serde(default)]
32    pub strip_comments: bool,
33    #[serde(default)]
34    pub sourcemap_target: SourceMapTarget,
35    #[serde(default)]
36    pub expand_inside_operation: bool,
37    #[serde(default)]
38    pub exclude_std: bool,
39    #[serde(default)]
40    pub emit_cond_type: bool,
41    #[serde(default = "default_instance_depth_limit")]
42    pub instance_depth_limit: usize,
43    #[serde(default = "default_instance_total_limit")]
44    pub instance_total_limit: usize,
45    #[serde(default = "default_function_instance_depth_limit")]
46    pub function_instance_depth_limit: usize,
47    #[serde(default = "default_symbol_eval_depth_limit")]
48    pub symbol_eval_depth_limit: usize,
49    #[serde(default = "default_evaluate_size_limit")]
50    pub evaluate_size_limit: usize,
51    #[serde(default = "default_evaluate_array_limit")]
52    pub evaluate_array_limit: usize,
53    #[serde(default)]
54    pub flatten_array_interface: bool,
55    #[serde(default)]
56    pub hashed_mangled_name: bool,
57    #[serde(default = "default_incremental")]
58    pub incremental: bool,
59    #[serde(default)]
60    pub error_count_limit: u32,
61}
62
63fn default_source() -> PathBuf {
64    PathBuf::new()
65}
66
67fn default_sources() -> Vec<PathBuf> {
68    vec![PathBuf::new()]
69}
70
71fn default_instance_depth_limit() -> usize {
72    128
73}
74
75fn default_function_instance_depth_limit() -> usize {
76    24
77}
78
79/// A cyclic `const` is caught by `cyclic_type_dependency`, so this bound
80/// guards nothing but the native stack: it is sized against where a debug
81/// build actually aborts, and a larger one turns a clean diagnostic into a
82/// SIGABRT.
83fn default_symbol_eval_depth_limit() -> usize {
84    48
85}
86
87fn default_instance_total_limit() -> usize {
88    1024 * 1024
89}
90
91fn default_evaluate_size_limit() -> usize {
92    1024 * 1024
93}
94
95fn default_evaluate_array_limit() -> usize {
96    128
97}
98
99fn default_incremental() -> bool {
100    // TODO false by default until stabilizing incremental
101    false
102}
103
104impl Default for Build {
105    fn default() -> Self {
106        toml::from_str("").unwrap()
107    }
108}
109
110#[derive(Clone, Copy, Debug, Default, Serialize, Deserialize, PartialEq, Eq)]
111pub enum ClockType {
112    #[default]
113    #[serde(rename = "posedge")]
114    PosEdge,
115    #[serde(rename = "negedge")]
116    NegEdge,
117}
118
119#[derive(Clone, Copy, Debug, Default, Serialize, Deserialize, PartialEq, Eq)]
120pub enum ResetType {
121    #[default]
122    #[serde(rename = "async_low")]
123    AsyncLow,
124    #[serde(rename = "async_high")]
125    AsyncHigh,
126    #[serde(rename = "sync_low")]
127    SyncLow,
128    #[serde(rename = "sync_high")]
129    SyncHigh,
130}
131
132#[derive(Clone, Copy, Debug, Default, Serialize, Deserialize, PartialEq, Eq)]
133pub enum FilelistType {
134    #[default]
135    #[serde(rename = "absolute")]
136    Absolute,
137    #[serde(rename = "relative")]
138    Relative,
139    #[serde(rename = "flgen")]
140    Flgen,
141}
142
143#[derive(Clone, Debug, Default, Serialize, Deserialize, PartialEq, Eq)]
144#[serde(tag = "type")]
145pub enum Target {
146    #[default]
147    #[serde(rename = "source")]
148    Source,
149    #[serde(rename = "directory")]
150    Directory { path: PathBuf },
151    #[serde(rename = "bundle")]
152    Bundle { path: PathBuf },
153}
154
155#[derive(Clone, Debug, Default, Serialize, Deserialize, PartialEq, Eq)]
156#[serde(tag = "type")]
157pub enum SourceMapTarget {
158    #[default]
159    #[serde(rename = "target")]
160    Target,
161    #[serde(rename = "directory")]
162    Directory { path: PathBuf },
163    #[serde(rename = "none")]
164    None,
165}
166
167#[derive(Clone, Copy, Debug, Serialize, Deserialize, PartialEq, Eq)]
168pub enum BuiltinType {
169    #[serde(rename = "u32")]
170    U32,
171    #[serde(rename = "u64")]
172    U64,
173    #[serde(rename = "i32")]
174    I32,
175    #[serde(rename = "i64")]
176    I64,
177    #[serde(rename = "f32")]
178    F32,
179    #[serde(rename = "f64")]
180    F64,
181    #[serde(rename = "string")]
182    String,
183    #[serde(rename = "type")]
184    Type,
185}