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_evaluate_size_limit")]
46 pub evaluate_size_limit: usize,
47 #[serde(default = "default_evaluate_array_limit")]
48 pub evaluate_array_limit: usize,
49 #[serde(default)]
50 pub flatten_array_interface: bool,
51 #[serde(default)]
52 pub hashed_mangled_name: bool,
53 #[serde(default = "default_incremental")]
54 pub incremental: bool,
55 #[serde(default)]
56 pub error_count_limit: u32,
57}
58
59fn default_source() -> PathBuf {
60 PathBuf::new()
61}
62
63fn default_sources() -> Vec<PathBuf> {
64 vec![PathBuf::new()]
65}
66
67fn default_instance_depth_limit() -> usize {
68 128
69}
70
71fn default_instance_total_limit() -> usize {
72 1024 * 1024
73}
74
75fn default_evaluate_size_limit() -> usize {
76 1024 * 1024
77}
78
79fn default_evaluate_array_limit() -> usize {
80 128
81}
82
83fn default_incremental() -> bool {
84 false
86}
87
88impl Default for Build {
89 fn default() -> Self {
90 toml::from_str("").unwrap()
91 }
92}
93
94#[derive(Clone, Copy, Debug, Default, Serialize, Deserialize, PartialEq, Eq)]
95pub enum ClockType {
96 #[default]
97 #[serde(rename = "posedge")]
98 PosEdge,
99 #[serde(rename = "negedge")]
100 NegEdge,
101}
102
103#[derive(Clone, Copy, Debug, Default, Serialize, Deserialize, PartialEq, Eq)]
104pub enum ResetType {
105 #[default]
106 #[serde(rename = "async_low")]
107 AsyncLow,
108 #[serde(rename = "async_high")]
109 AsyncHigh,
110 #[serde(rename = "sync_low")]
111 SyncLow,
112 #[serde(rename = "sync_high")]
113 SyncHigh,
114}
115
116#[derive(Clone, Copy, Debug, Default, Serialize, Deserialize, PartialEq, Eq)]
117pub enum FilelistType {
118 #[default]
119 #[serde(rename = "absolute")]
120 Absolute,
121 #[serde(rename = "relative")]
122 Relative,
123 #[serde(rename = "flgen")]
124 Flgen,
125}
126
127#[derive(Clone, Debug, Default, Serialize, Deserialize, PartialEq, Eq)]
128#[serde(tag = "type")]
129pub enum Target {
130 #[default]
131 #[serde(rename = "source")]
132 Source,
133 #[serde(rename = "directory")]
134 Directory { path: PathBuf },
135 #[serde(rename = "bundle")]
136 Bundle { path: PathBuf },
137}
138
139#[derive(Clone, Debug, Default, Serialize, Deserialize, PartialEq, Eq)]
140#[serde(tag = "type")]
141pub enum SourceMapTarget {
142 #[default]
143 #[serde(rename = "target")]
144 Target,
145 #[serde(rename = "directory")]
146 Directory { path: PathBuf },
147 #[serde(rename = "none")]
148 None,
149}
150
151#[derive(Clone, Copy, Debug, Serialize, Deserialize, PartialEq, Eq)]
152pub enum BuiltinType {
153 #[serde(rename = "u32")]
154 U32,
155 #[serde(rename = "u64")]
156 U64,
157 #[serde(rename = "i32")]
158 I32,
159 #[serde(rename = "i64")]
160 I64,
161 #[serde(rename = "f32")]
162 F32,
163 #[serde(rename = "f64")]
164 F64,
165 #[serde(rename = "string")]
166 String,
167 #[serde(rename = "type")]
168 Type,
169}