@@ -110,6 +110,7 @@ struct Device<'a> {
110
110
pub target : & ' a str ,
111
111
pub defines : Vec < ( String , Option < String > ) > ,
112
112
pub cflags : Vec < & ' a str > ,
113
+ pub glyphs_folders : Vec < PathBuf > ,
113
114
}
114
115
115
116
impl std:: fmt:: Display for DeviceName {
@@ -316,6 +317,31 @@ fn clone_sdk(devicename: &DeviceName) -> PathBuf {
316
317
c_sdk
317
318
}
318
319
320
+ pub fn generate_glyphs ( c_sdk : & PathBuf , glyphs_folders : & [ PathBuf ] ) {
321
+ let icon2glyph = c_sdk. join ( "lib_nbgl/tools/icon2glyph.py" ) ;
322
+
323
+ let out_path = PathBuf :: from ( env:: var ( "OUT_DIR" ) . unwrap ( ) ) ;
324
+ let dest_path = out_path. join ( "glyphs" ) ;
325
+ if !dest_path. exists ( ) {
326
+ fs:: create_dir_all ( & dest_path) . ok ( ) ;
327
+ }
328
+
329
+ let mut cmd = Command :: new ( icon2glyph. as_os_str ( ) ) ;
330
+ cmd. arg ( "--glyphcheader" )
331
+ . arg ( dest_path. join ( "glyphs.h" ) . as_os_str ( ) )
332
+ . arg ( "--glyphcfile" )
333
+ . arg ( dest_path. join ( "glyphs.c" ) . as_os_str ( ) ) ;
334
+
335
+ for folder in glyphs_folders. iter ( ) {
336
+ for file in std:: fs:: read_dir ( folder) . unwrap ( ) {
337
+ let path = file. unwrap ( ) . path ( ) ;
338
+ let path_str = path. to_str ( ) . unwrap ( ) . to_string ( ) ;
339
+ cmd. arg ( path_str) ;
340
+ }
341
+ }
342
+ let _ = cmd. output ( ) ;
343
+ }
344
+
319
345
#[ derive( Debug ) ]
320
346
enum SDKBuildError {
321
347
UnsupportedDevice ,
@@ -361,7 +387,6 @@ struct SDKBuilder<'a> {
361
387
api_level : u32 ,
362
388
gcc_toolchain : PathBuf ,
363
389
device : Device < ' a > ,
364
- glyphs_folders : Vec < PathBuf > ,
365
390
cxdefines : Vec < String > ,
366
391
}
367
392
@@ -371,7 +396,6 @@ impl SDKBuilder<'_> {
371
396
api_level : 0 ,
372
397
gcc_toolchain : PathBuf :: new ( ) ,
373
398
device : Device :: default ( ) ,
374
- glyphs_folders : Vec :: new ( ) ,
375
399
cxdefines : Vec :: new ( ) ,
376
400
}
377
401
}
@@ -412,6 +436,7 @@ impl SDKBuilder<'_> {
412
436
target : "thumbv6m-none-eabi" ,
413
437
defines : header2define ( "csdk_nanos.h" ) ,
414
438
cflags : Vec :: from ( CFLAGS_NANOS ) ,
439
+ glyphs_folders : Vec :: new ( ) ,
415
440
} ,
416
441
"nanosplus" => Device {
417
442
name : DeviceName :: NanoSPlus ,
@@ -431,6 +456,7 @@ impl SDKBuilder<'_> {
431
456
v
432
457
} ,
433
458
cflags : Vec :: from ( CFLAGS_NANOSPLUS ) ,
459
+ glyphs_folders : Vec :: new ( ) ,
434
460
} ,
435
461
"nanox" => Device {
436
462
name : DeviceName :: NanoX ,
@@ -450,20 +476,23 @@ impl SDKBuilder<'_> {
450
476
v
451
477
} ,
452
478
cflags : Vec :: from ( CFLAGS_NANOX ) ,
479
+ glyphs_folders : Vec :: new ( ) ,
453
480
} ,
454
481
"stax" => Device {
455
482
name : DeviceName :: Stax ,
456
483
c_sdk : Default :: default ( ) ,
457
484
target : "thumbv8m.main-none-eabi" ,
458
485
defines : header2define ( "csdk_stax.h" ) ,
459
486
cflags : Vec :: from ( CFLAGS_STAX ) ,
487
+ glyphs_folders : Vec :: new ( ) ,
460
488
} ,
461
489
"flex" => Device {
462
490
name : DeviceName :: Flex ,
463
491
c_sdk : Default :: default ( ) ,
464
492
target : "thumbv8m.main-none-eabi" ,
465
493
defines : header2define ( "csdk_flex.h" ) ,
466
494
cflags : Vec :: from ( CFLAGS_FLEX ) ,
495
+ glyphs_folders : Vec :: new ( ) ,
467
496
} ,
468
497
_ => {
469
498
return Err ( SDKBuildError :: UnsupportedDevice ) ;
@@ -476,6 +505,37 @@ impl SDKBuilder<'_> {
476
505
Ok ( path) => PathBuf :: from ( path) ,
477
506
} ;
478
507
508
+ // set glyphs folders
509
+ match self . device . name {
510
+ DeviceName :: Flex => {
511
+ self . device
512
+ . glyphs_folders
513
+ . push ( self . device . c_sdk . join ( "lib_nbgl/glyphs/wallet" ) ) ;
514
+ self . device
515
+ . glyphs_folders
516
+ . push ( self . device . c_sdk . join ( "lib_nbgl/glyphs/64px" ) ) ;
517
+ self . device
518
+ . glyphs_folders
519
+ . push ( self . device . c_sdk . join ( "lib_nbgl/glyphs/40px" ) ) ;
520
+ }
521
+ DeviceName :: Stax => {
522
+ self . device
523
+ . glyphs_folders
524
+ . push ( self . device . c_sdk . join ( "lib_nbgl/glyphs/wallet" ) ) ;
525
+ self . device
526
+ . glyphs_folders
527
+ . push ( self . device . c_sdk . join ( "lib_nbgl/glyphs/64px" ) ) ;
528
+ self . device
529
+ . glyphs_folders
530
+ . push ( self . device . c_sdk . join ( "lib_nbgl/glyphs/32px" ) ) ;
531
+ }
532
+ _ => {
533
+ self . device
534
+ . glyphs_folders
535
+ . push ( self . device . c_sdk . join ( "lib_nbgl/glyphs/nano" ) ) ;
536
+ }
537
+ }
538
+
479
539
// export TARGET into env for 'infos.rs'
480
540
println ! ( "cargo:rustc-env=TARGET={}" , self . device. name) ;
481
541
println ! ( "cargo:warning=Device is {:?}" , self . device. name) ;
@@ -499,30 +559,6 @@ impl SDKBuilder<'_> {
499
559
}
500
560
}
501
561
502
- // set glyphs folders
503
- match self . device . name {
504
- DeviceName :: Flex => {
505
- self . glyphs_folders
506
- . push ( self . device . c_sdk . join ( "lib_nbgl/glyphs/wallet" ) ) ;
507
- self . glyphs_folders
508
- . push ( self . device . c_sdk . join ( "lib_nbgl/glyphs/64px" ) ) ;
509
- self . glyphs_folders
510
- . push ( self . device . c_sdk . join ( "lib_nbgl/glyphs/40px" ) ) ;
511
- }
512
- DeviceName :: Stax => {
513
- self . glyphs_folders
514
- . push ( self . device . c_sdk . join ( "lib_nbgl/glyphs/wallet" ) ) ;
515
- self . glyphs_folders
516
- . push ( self . device . c_sdk . join ( "lib_nbgl/glyphs/64px" ) ) ;
517
- self . glyphs_folders
518
- . push ( self . device . c_sdk . join ( "lib_nbgl/glyphs/32px" ) ) ;
519
- }
520
- _ => {
521
- self . glyphs_folders
522
- . push ( self . device . c_sdk . join ( "lib_nbgl/glyphs/nano" ) ) ;
523
- }
524
- }
525
-
526
562
// Export other SDK infos into env for 'infos.rs'
527
563
println ! ( "cargo:rustc-env=TARGET_ID={}" , sdk_info. target_id) ;
528
564
println ! ( "cargo:warning=TARGET_ID is {}" , sdk_info. target_id) ;
@@ -556,38 +592,12 @@ impl SDKBuilder<'_> {
556
592
Ok ( ( ) )
557
593
}
558
594
559
- pub fn generate_glyphs ( & self ) -> Result < ( ) , SDKBuildError > {
560
- if self . device . name == DeviceName :: NanoS {
561
- return Err ( SDKBuildError :: UnsupportedDevice ) ;
562
- }
563
-
564
- let icon2glyph = self . device . c_sdk . join ( "lib_nbgl/tools/icon2glyph.py" ) ;
565
-
566
- let out_path = PathBuf :: from ( env:: var ( "OUT_DIR" ) . unwrap ( ) ) ;
567
- let dest_path = out_path. join ( "glyphs" ) ;
568
- if !dest_path. exists ( ) {
569
- fs:: create_dir_all ( & dest_path) . ok ( ) ;
570
- }
571
-
572
- let mut cmd = Command :: new ( icon2glyph. as_os_str ( ) ) ;
573
- cmd. arg ( "--glyphcheader" )
574
- . arg ( dest_path. join ( "glyphs.h" ) . as_os_str ( ) )
575
- . arg ( "--glyphcfile" )
576
- . arg ( dest_path. join ( "glyphs.c" ) . as_os_str ( ) ) ;
577
-
578
- for folder in self . glyphs_folders . iter ( ) {
579
- for file in std:: fs:: read_dir ( folder) . unwrap ( ) {
580
- let path = file. unwrap ( ) . path ( ) ;
581
- let path_str = path. to_str ( ) . unwrap ( ) . to_string ( ) ;
582
- cmd. arg ( path_str) ;
583
- }
595
+ pub fn build_c_sdk ( & self ) -> Result < ( ) , SDKBuildError > {
596
+ // Generate glyphs
597
+ if self . device . name != DeviceName :: NanoS {
598
+ generate_glyphs ( & self . device . c_sdk , & self . device . glyphs_folders ) ;
584
599
}
585
600
586
- let _ = cmd. output ( ) ;
587
- Ok ( ( ) )
588
- }
589
-
590
- pub fn build_c_sdk ( & self ) -> Result < ( ) , SDKBuildError > {
591
601
let mut command = cc:: Build :: new ( ) ;
592
602
if env:: var_os ( "CC" ) . is_none ( ) {
593
603
command. compiler ( "clang" ) ;
@@ -842,7 +852,6 @@ fn main() {
842
852
sdk_builder. device ( ) . unwrap ( ) ;
843
853
sdk_builder. get_info ( ) . unwrap ( ) ;
844
854
sdk_builder. cxdefines ( ) . unwrap ( ) ;
845
- sdk_builder. generate_glyphs ( ) . unwrap ( ) ;
846
855
sdk_builder. build_c_sdk ( ) . unwrap ( ) ;
847
856
sdk_builder. generate_bindings ( ) . unwrap ( ) ;
848
857
sdk_builder. generate_heap_size ( ) . unwrap ( ) ;
0 commit comments