1
+ use anyhow:: { Error , Result } ;
1
2
use std:: env;
2
3
use std:: fs:: File ;
3
4
use std:: io:: { BufRead , BufReader } ;
4
5
use std:: path:: Path ;
5
6
use std:: str:: FromStr ;
6
- pub type Error = Box < dyn std:: error:: Error > ;
7
- pub type Result < T , E = Error > = std:: result:: Result < T , E > ;
7
+ // pub type Error = Box<dyn std::error::Error>;
8
+ // pub type Result<T, E = Error> = std::result::Result<T, E>;
8
9
9
10
static MANIFEST_DIR : & str = env ! ( "CARGO_MANIFEST_DIR" ) ;
10
11
@@ -146,13 +147,13 @@ mod compile {
146
147
}
147
148
148
149
impl FromStr for JpegLib {
149
- type Err = String ;
150
+ type Err = Error ;
150
151
151
152
fn from_str ( s : & str ) -> Result < Self , Self :: Err > {
152
153
match s {
153
154
"jpeg8" => Ok ( JpegLib :: Jpeg8 ) ,
154
155
"jpeg7" => Ok ( JpegLib :: Jpeg7 ) ,
155
- _ => Err ( format ! ( "Unknown jpeg lib: {}" , s) ) ,
156
+ _ => Err ( anyhow :: anyhow !( "Unknown jpeg lib: {}" , s) ) ,
156
157
}
157
158
}
158
159
}
@@ -169,10 +170,10 @@ mod compile {
169
170
. strip_prefix ( "set(VERSION " )
170
171
. and_then ( |s| s. strip_suffix ( ')' ) )
171
172
. map ( |s| s. to_string ( ) )
172
- . ok_or_else ( || "Unable to get version from CMakeLists.txt" . into ( ) ) ;
173
+ . ok_or_else ( || anyhow :: anyhow! ( "Unable to get version from CMakeLists.txt" ) ) ;
173
174
}
174
175
}
175
- Err ( "Unable to get version from CMakeLists.txt" . into ( ) )
176
+ anyhow :: bail! ( "Unable to get version from CMakeLists.txt" )
176
177
}
177
178
178
179
fn turbo_version ( ) -> Result < ( u32 , u32 , u32 ) > {
@@ -411,7 +412,7 @@ mod compile {
411
412
None
412
413
}
413
414
} )
414
- . ok_or_else ( || -> Box < dyn std :: error :: Error > { "failed to find inline" . into ( ) } ) ?)
415
+ . ok_or_else ( || anyhow :: anyhow! ( "failed to find inline" ) ) ?)
415
416
}
416
417
417
418
fn try_build_c ( c : & str ) -> Result < bool > {
@@ -454,19 +455,15 @@ mod compile {
454
455
pub fn simd ( ) -> Result < ( PathBuf , String ) > {
455
456
let target_arch = env:: var ( "CARGO_CFG_TARGET_ARCH" ) ?;
456
457
match target_arch. as_str ( ) {
457
- "x86_64" => todo ! ( ) ,
458
+ "x86_64" => simd_x86_64 ( ) ,
458
459
"i386" => todo ! ( ) ,
459
460
"aarch64" => simd_neon ( ) ,
460
- _ => Err ( "Unsupported arch for simd" . into ( ) ) ,
461
+ _ => Err ( anyhow :: anyhow! ( "Unsupported arch for simd" ) ) ,
461
462
}
462
463
}
463
464
464
- pub fn simd_x86_64 ( ) -> Result < ( ) > {
465
- let simd = PathBuf :: from ( std:: env:: var ( "OUT_DIR" ) ?)
466
- . join ( "libjpeg" )
467
- . join ( "simd" ) ;
468
- env:: set_current_dir ( simd) ?;
469
- let asm_sources = [
465
+ pub fn simd_x86_64 ( ) -> Result < ( PathBuf , String ) > {
466
+ let sources = [
470
467
"x86_64/jsimdcpu.asm" ,
471
468
"x86_64/jfdctflt-sse.asm" ,
472
469
"x86_64/jccolor-sse2.asm" ,
@@ -495,11 +492,25 @@ mod compile {
495
492
"x86_64/jidctint-avx2.asm" ,
496
493
"x86_64/jquanti-avx2.asm" ,
497
494
] ;
495
+
496
+ let sources: Vec < PathBuf > = sources
497
+ . iter ( )
498
+ . map ( |s| {
499
+ PathBuf :: from ( MANIFEST_DIR )
500
+ . join ( "vendor" )
501
+ . join ( "simd" )
502
+ . join ( s)
503
+ } )
504
+ . collect ( ) ;
505
+
506
+ // let sources = sources.iter_mut().map(|src| {
507
+ // });
508
+
498
509
let mut simd = cc:: Build :: new ( ) ;
499
- simd. files ( asm_sources ) ;
510
+ simd. files ( sources ) ;
500
511
simd. flag ( "-E" ) ;
501
- simd. compile ( "sss " ) ;
502
- Ok ( ( ) )
512
+ simd. compile ( "sus " ) ;
513
+ todo ! ( )
503
514
}
504
515
505
516
pub fn simd_neon ( ) -> Result < ( PathBuf , String ) > {
0 commit comments