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