@@ -5,7 +5,7 @@ mod intrinsic;
5
5
mod json_parser;
6
6
mod types;
7
7
8
- use std:: fs:: File ;
8
+ use std:: fs;
9
9
10
10
use rayon:: prelude:: * ;
11
11
@@ -69,28 +69,35 @@ impl SupportedArchitectureTest for ArmArchitectureTest {
69
69
70
70
let ( chunk_size, chunk_count) = chunk_info ( self . intrinsics . len ( ) ) ;
71
71
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
+ }
73
79
74
80
let notice = & build_notices ( "// " ) ;
75
81
self . intrinsics
76
82
. par_chunks ( chunk_size)
77
83
. enumerate ( )
78
84
. map ( |( i, chunk) | {
79
85
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 ( ) ;
81
87
write_mod_cpp ( & mut file, notice, c_target, platform_headers, chunk) . unwrap ( ) ;
82
88
83
89
// 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
+ }
88
95
Ok ( ( ) )
89
96
} )
90
97
. collect :: < Result < ( ) , std:: io:: Error > > ( )
91
98
. unwrap ( ) ;
92
99
93
- let mut file = File :: create ( "c_programs/main.cpp" ) . unwrap ( ) ;
100
+ let mut file = fs :: File :: create ( "c_programs/main.cpp" ) . unwrap ( ) ;
94
101
write_main_cpp (
95
102
& mut file,
96
103
c_target,
@@ -100,20 +107,22 @@ impl SupportedArchitectureTest for ArmArchitectureTest {
100
107
. unwrap ( ) ;
101
108
102
109
// 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
+ }
117
126
118
127
true
119
128
}
0 commit comments