@@ -452,7 +452,7 @@ fn build_multiple_ciphers(target: &str, out_path: &Path) {
452
452
let bundled_dir = format ! ( "{out_dir}/sqlite3mc" ) ;
453
453
let sqlite3mc_build_dir = env:: current_dir ( ) . unwrap ( ) . join ( out_dir) . join ( "sqlite3mc" ) ;
454
454
455
- let mut cmake_opts: Vec < & str > = vec ! [ ] ;
455
+ let mut cmake_opts: Vec < String > = vec ! [ ] ;
456
456
457
457
let target_postfix = target. to_string ( ) . replace ( "-" , "_" ) ;
458
458
let cross_cc_var_name = format ! ( "CC_{}" , target_postfix) ;
@@ -462,8 +462,15 @@ fn build_multiple_ciphers(target: &str, out_path: &Path) {
462
462
let cross_cxx_var_name = format ! ( "CXX_{}" , target_postfix) ;
463
463
let cross_cxx = env:: var ( & cross_cxx_var_name) . ok ( ) ;
464
464
465
- let toolchain_path = sqlite3mc_build_dir. join ( "toolchain.cmake" ) ;
466
- let cmake_toolchain_opt = "-DCMAKE_TOOLCHAIN_FILE=toolchain.cmake" . to_string ( ) ;
465
+ let ndk_cmake_toolchain_path = env:: var ( "CARGO_NDK_CMAKE_TOOLCHAIN_PATH" ) . ok ( ) ;
466
+ let toolchain_path = ndk_cmake_toolchain_path
467
+ . clone ( )
468
+ . map ( PathBuf :: from)
469
+ . unwrap_or_else ( || sqlite3mc_build_dir. join ( "toolchain.cmake" ) ) ;
470
+ let cmake_toolchain_opt = ndk_cmake_toolchain_path
471
+ . clone ( )
472
+ . map ( |path| format ! ( "-DCMAKE_TOOLCHAIN_FILE={}" , path) )
473
+ . unwrap_or_else ( || "-DCMAKE_TOOLCHAIN_FILE=toolchain.cmake" . to_string ( ) ) ;
467
474
468
475
let mut toolchain_file = OpenOptions :: new ( )
469
476
. create ( true )
@@ -493,7 +500,7 @@ fn build_multiple_ciphers(target: &str, out_path: &Path) {
493
500
panic ! ( "Unsupported cross target {}" , cc)
494
501
} ;
495
502
496
- cmake_opts. push ( & cmake_toolchain_opt) ;
503
+ cmake_opts. push ( cmake_toolchain_opt. clone ( ) ) ;
497
504
writeln ! ( toolchain_file, "set(CMAKE_SYSTEM_NAME \" {}\" )" , system_name) . unwrap ( ) ;
498
505
writeln ! (
499
506
toolchain_file,
@@ -508,20 +515,57 @@ fn build_multiple_ciphers(target: &str, out_path: &Path) {
508
515
writeln ! ( toolchain_file, "set(CMAKE_CXX_COMPILER {})" , cxx) . unwrap ( ) ;
509
516
}
510
517
511
- cmake_opts. push ( "-DCMAKE_BUILD_TYPE=Release" ) ;
512
- cmake_opts. push ( "-DSQLITE3MC_STATIC=ON" ) ;
513
- cmake_opts. push ( "-DCODEC_TYPE=AES256" ) ;
514
- cmake_opts. push ( "-DSQLITE3MC_BUILD_SHELL=OFF" ) ;
515
- cmake_opts. push ( "-DSQLITE_SHELL_IS_UTF8=OFF" ) ;
516
- cmake_opts. push ( "-DSQLITE_USER_AUTHENTICATION=OFF" ) ;
517
- cmake_opts. push ( "-DSQLITE_SECURE_DELETE=OFF" ) ;
518
- cmake_opts. push ( "-DSQLITE_ENABLE_COLUMN_METADATA=ON" ) ;
519
- cmake_opts. push ( "-DSQLITE_USE_URI=ON" ) ;
520
- cmake_opts. push ( "-DCMAKE_POSITION_INDEPENDENT_CODE=ON" ) ;
518
+ cmake_opts. push ( "-DCMAKE_BUILD_TYPE=Release" . to_string ( ) ) ;
519
+ cmake_opts. push ( "-DSQLITE3MC_STATIC=ON" . to_string ( ) ) ;
520
+ cmake_opts. push ( "-DCODEC_TYPE=AES256" . to_string ( ) ) ;
521
+ cmake_opts. push ( "-DSQLITE3MC_BUILD_SHELL=OFF" . to_string ( ) ) ;
522
+ cmake_opts. push ( "-DSQLITE_SHELL_IS_UTF8=OFF" . to_string ( ) ) ;
523
+ cmake_opts. push ( "-DSQLITE_USER_AUTHENTICATION=OFF" . to_string ( ) ) ;
524
+ cmake_opts. push ( "-DSQLITE_SECURE_DELETE=OFF" . to_string ( ) ) ;
525
+ cmake_opts. push ( "-DSQLITE_ENABLE_COLUMN_METADATA=ON" . to_string ( ) ) ;
526
+ cmake_opts. push ( "-DSQLITE_USE_URI=ON" . to_string ( ) ) ;
527
+ cmake_opts. push ( "-DCMAKE_POSITION_INDEPENDENT_CODE=ON" . to_string ( ) ) ;
521
528
522
529
if target. contains ( "musl" ) {
523
- cmake_opts. push ( "-DCMAKE_C_FLAGS=\" -U_FORTIFY_SOURCE\" -D_FILE_OFFSET_BITS=32" ) ;
524
- cmake_opts. push ( "-DCMAKE_CXX_FLAGS=\" -U_FORTIFY_SOURCE\" -D_FILE_OFFSET_BITS=32" ) ;
530
+ cmake_opts. push ( "-DCMAKE_C_FLAGS=\" -U_FORTIFY_SOURCE\" -D_FILE_OFFSET_BITS=32" . to_string ( ) ) ;
531
+ cmake_opts. push ( "-DCMAKE_CXX_FLAGS=\" -U_FORTIFY_SOURCE\" -D_FILE_OFFSET_BITS=32" . to_string ( ) ) ;
532
+ }
533
+
534
+ if target. contains ( "android" ) {
535
+ let android_abi = match target {
536
+ "aarch64-linux-android" => "arm64-v8a" ,
537
+ "armv7-linux-androideabi" => "armeabi-v7a" ,
538
+ "i686-linux-android" => "x86" ,
539
+ "x86_64-linux-android" => "x86_64" ,
540
+ _ => panic ! ( "Unsupported Android target: {}" , target) ,
541
+ } ;
542
+ let android_platform = std:: env:: var ( "ANDROID_PLATFORM" )
543
+ . expect ( "ANDROID_PLATFORM environment variable must be set" ) ;
544
+
545
+ cmake_opts. push ( cmake_toolchain_opt) ;
546
+ cmake_opts. push ( format ! ( "-DANDROID_ABI={}" , android_abi) ) ;
547
+ cmake_opts. push ( format ! ( "-DANDROID_PLATFORM=android-{}" , android_platform) ) ;
548
+ }
549
+
550
+ if target. contains ( "ios" ) {
551
+ cmake_opts. push ( "-DCMAKE_SYSTEM_NAME=iOS" . to_string ( ) ) ;
552
+
553
+ let ( arch, processor, sysroot) = if target. contains ( "x86_64" ) {
554
+ ( "x86_64" , "x86_64" , "iphonesimulator" )
555
+ } else if target. contains ( "aarch64" ) {
556
+ let sysroot = if target. contains ( "sim" ) {
557
+ "iphonesimulator"
558
+ } else {
559
+ "iphoneos"
560
+ } ;
561
+ ( "arm64" , "arm64" , sysroot)
562
+ } else {
563
+ panic ! ( "Unsupported iOS target: {}" , target) ;
564
+ } ;
565
+
566
+ cmake_opts. push ( format ! ( "-DCMAKE_OSX_ARCHITECTURES={}" , arch) ) ;
567
+ cmake_opts. push ( format ! ( "-DCMAKE_SYSTEM_PROCESSOR={}" , processor) ) ;
568
+ cmake_opts. push ( format ! ( "-DCMAKE_OSX_SYSROOT={}" , sysroot) ) ;
525
569
}
526
570
527
571
let mut cmake = Command :: new ( "cmake" ) ;
0 commit comments