22
33use log:: error;
44use std:: path:: PathBuf ;
5- use svd_parser as svd;
5+ use svd_parser:: svd;
66
77mod generate;
88mod util;
@@ -78,6 +78,12 @@ fn run() -> Result<()> {
7878 . short ( "m" )
7979 . help ( "Create mod.rs instead of lib.rs, without inner attributes" ) ,
8080 )
81+ . arg (
82+ Arg :: with_name ( "strict" )
83+ . long ( "strict" )
84+ . short ( "s" )
85+ . help ( "Make advanced checks due to parsing SVD" ) ,
86+ )
8187 . arg (
8288 Arg :: with_name ( "log_level" )
8389 . long ( "log" )
@@ -120,8 +126,6 @@ fn run() -> Result<()> {
120126
121127 setup_logging ( & cfg) ;
122128
123- let device = svd:: parse ( xml) ?;
124-
125129 let target = cfg
126130 . grab ( )
127131 . arg ( "target" )
@@ -140,6 +144,7 @@ fn run() -> Result<()> {
140144 cfg. bool_flag ( "const_generic" , Filter :: Arg ) || cfg. bool_flag ( "const_generic" , Filter :: Conf ) ;
141145 let ignore_groups =
142146 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 ) ;
143148
144149 let config = Config {
145150 target,
@@ -148,9 +153,19 @@ fn run() -> Result<()> {
148153 make_mod,
149154 const_generic,
150155 ignore_groups,
156+ strict,
151157 output_dir : path. clone ( ) ,
152158 } ;
153159
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+
154169 let mut device_x = String :: new ( ) ;
155170 let items = generate:: device:: render ( & device, & config, & mut device_x) ?;
156171 let filename = if make_mod { "mod.rs" } else { "lib.rs" } ;
0 commit comments