@@ -5,7 +5,7 @@ mod intrinsic;
55mod  json_parser; 
66mod  types; 
77
8- use  std:: fs:: File ; 
8+ use  std:: fs; 
99
1010use  rayon:: prelude:: * ; 
1111
@@ -69,28 +69,35 @@ impl SupportedArchitectureTest for ArmArchitectureTest {
6969
7070        let  ( chunk_size,  chunk_count)  = chunk_info ( self . intrinsics . len ( ) ) ; 
7171
72-         let  cpp_compiler = compile:: build_cpp_compilation ( & self . cli_options ) . unwrap ( ) ; 
72+         let  cpp_compiler = compile:: build_cpp_compilation ( & self . cli_options ) ; 
73+ 
74+         match  fs:: exists ( "c_programs" )  { 
75+             Ok ( false )  => fs:: create_dir ( "c_programs" ) . unwrap ( ) , 
76+             Ok ( true )  => { } 
77+             _ => return  false , 
78+         } 
7379
7480        let  notice = & build_notices ( "// " ) ; 
7581        self . intrinsics 
7682            . par_chunks ( chunk_size) 
7783            . enumerate ( ) 
7884            . map ( |( i,  chunk) | { 
7985                let  c_filename = format ! ( "c_programs/mod_{i}.cpp" ) ; 
80-                 let  mut  file = File :: create ( & c_filename) . unwrap ( ) ; 
86+                 let  mut  file = fs :: File :: create ( & c_filename) . unwrap ( ) ; 
8187                write_mod_cpp ( & mut  file,  notice,  c_target,  platform_headers,  chunk) . unwrap ( ) ; 
8288
8389                // compile this cpp file into a .o file 
84-                 let  output = cpp_compiler
85-                     . compile_object_file ( & format ! ( "mod_{i}.cpp" ) ,  & format ! ( "mod_{i}.o" ) ) ?; 
86-                 assert ! ( output. status. success( ) ,  "{output:?}" ) ; 
87- 
90+                 if  let  Some ( compiler)  = cpp_compiler. as_ref ( )  { 
91+                     let  output = compiler
92+                         . compile_object_file ( & format ! ( "mod_{i}.cpp" ) ,  & format ! ( "mod_{i}.o" ) ) ?; 
93+                     assert ! ( output. status. success( ) ,  "{output:?}" ) ; 
94+                 } 
8895                Ok ( ( ) ) 
8996            } ) 
9097            . collect :: < Result < ( ) ,  std:: io:: Error > > ( ) 
9198            . unwrap ( ) ; 
9299
93-         let  mut  file = File :: create ( "c_programs/main.cpp" ) . unwrap ( ) ; 
100+         let  mut  file = fs :: File :: create ( "c_programs/main.cpp" ) . unwrap ( ) ; 
94101        write_main_cpp ( 
95102            & mut  file, 
96103            c_target, 
@@ -100,20 +107,22 @@ impl SupportedArchitectureTest for ArmArchitectureTest {
100107        . unwrap ( ) ; 
101108
102109        // compile this cpp file into a .o file 
103-         info ! ( "compiling main.cpp" ) ; 
104-         let  output = cpp_compiler
105-             . compile_object_file ( "main.cpp" ,  "intrinsic-test-programs.o" ) 
106-             . unwrap ( ) ; 
107-         assert ! ( output. status. success( ) ,  "{output:?}" ) ; 
108- 
109-         let  object_files = ( 0 ..chunk_count) 
110-             . map ( |i| format ! ( "mod_{i}.o" ) ) 
111-             . chain ( [ "intrinsic-test-programs.o" . to_owned ( ) ] ) ; 
112- 
113-         let  output = cpp_compiler
114-             . link_executable ( object_files,  "intrinsic-test-programs" ) 
115-             . unwrap ( ) ; 
116-         assert ! ( output. status. success( ) ,  "{output:?}" ) ; 
110+         if  let  Some ( compiler)  = cpp_compiler. as_ref ( )  { 
111+             info ! ( "compiling main.cpp" ) ; 
112+             let  output = compiler
113+                 . compile_object_file ( "main.cpp" ,  "intrinsic-test-programs.o" ) 
114+                 . unwrap ( ) ; 
115+             assert ! ( output. status. success( ) ,  "{output:?}" ) ; 
116+ 
117+             let  object_files = ( 0 ..chunk_count) 
118+                 . map ( |i| format ! ( "mod_{i}.o" ) ) 
119+                 . chain ( [ "intrinsic-test-programs.o" . to_owned ( ) ] ) ; 
120+ 
121+             let  output = compiler
122+                 . link_executable ( object_files,  "intrinsic-test-programs" ) 
123+                 . unwrap ( ) ; 
124+             assert ! ( output. status. success( ) ,  "{output:?}" ) ; 
125+         } 
117126
118127        true 
119128    } 
0 commit comments