2
2
3
3
use log:: error;
4
4
use std:: path:: PathBuf ;
5
- use svd_parser as svd;
5
+ use svd_parser:: svd;
6
6
7
7
mod generate;
8
8
mod util;
@@ -78,6 +78,12 @@ fn run() -> Result<()> {
78
78
. short ( "m" )
79
79
. help ( "Create mod.rs instead of lib.rs, without inner attributes" ) ,
80
80
)
81
+ . arg (
82
+ Arg :: with_name ( "strict" )
83
+ . long ( "strict" )
84
+ . short ( "s" )
85
+ . help ( "Make advanced checks due to parsing SVD" ) ,
86
+ )
81
87
. arg (
82
88
Arg :: with_name ( "log_level" )
83
89
. long ( "log" )
@@ -120,8 +126,6 @@ fn run() -> Result<()> {
120
126
121
127
setup_logging ( & cfg) ;
122
128
123
- let device = svd:: parse ( xml) ?;
124
-
125
129
let target = cfg
126
130
. grab ( )
127
131
. arg ( "target" )
@@ -140,6 +144,7 @@ fn run() -> Result<()> {
140
144
cfg. bool_flag ( "const_generic" , Filter :: Arg ) || cfg. bool_flag ( "const_generic" , Filter :: Conf ) ;
141
145
let ignore_groups =
142
146
cfg. bool_flag ( "ignore_groups" , Filter :: Arg ) || cfg. bool_flag ( "ignore_groups" , Filter :: Conf ) ;
147
+ let strict = cfg. bool_flag ( "strict" , Filter :: Arg ) || cfg. bool_flag ( "strict" , Filter :: Conf ) ;
143
148
144
149
let config = Config {
145
150
target,
@@ -148,9 +153,19 @@ fn run() -> Result<()> {
148
153
make_mod,
149
154
const_generic,
150
155
ignore_groups,
156
+ strict,
151
157
output_dir : path. clone ( ) ,
152
158
} ;
153
159
160
+ let mut parser_config = svd_parser:: Config :: default ( ) ;
161
+ parser_config. validate_level = if strict {
162
+ svd:: ValidateLevel :: Strict
163
+ } else {
164
+ svd:: ValidateLevel :: Weak
165
+ } ;
166
+
167
+ let device = svd_parser:: parse_with_config ( xml, & parser_config) ?;
168
+
154
169
let mut device_x = String :: new ( ) ;
155
170
let items = generate:: device:: render ( & device, & config, & mut device_x) ?;
156
171
let filename = if make_mod { "mod.rs" } else { "lib.rs" } ;
0 commit comments