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
79fn 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 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}