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_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    // TODO false by default until stabilizing incremental
91    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}