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