@@ -17,29 +17,34 @@ limitations under the License.
1717// Benchmarks are only meaningful and should only run with optimized builds.
1818// Unoptimized builds have different performance characteristics and would not provide
1919// useful benchmarking data for performance regression testing.
20- #[ cfg( unoptimized_build) ]
21- compile_error ! (
22- "Benchmarks must be run with optimized builds only. Use `cargo bench --release` or `just bench`."
23- ) ;
2420
21+ #[ cfg( optimized_build) ]
2522use criterion:: { Criterion , criterion_group, criterion_main} ;
23+ #[ cfg( optimized_build) ]
2624use hyperlight_host:: GuestBinary ;
25+ #[ cfg( optimized_build) ]
2726use hyperlight_host:: sandbox:: {
2827 Callable , MultiUseSandbox , SandboxConfiguration , UninitializedSandbox ,
2928} ;
29+ #[ cfg( optimized_build) ]
3030use hyperlight_host:: sandbox_state:: sandbox:: EvolvableSandbox ;
31+ #[ cfg( optimized_build) ]
3132use hyperlight_host:: sandbox_state:: transition:: Noop ;
33+ #[ cfg( optimized_build) ]
3234use hyperlight_testing:: simple_guest_as_string;
3335
36+ #[ cfg( optimized_build) ]
3437fn create_uninit_sandbox ( ) -> UninitializedSandbox {
3538 let path = simple_guest_as_string ( ) . unwrap ( ) ;
3639 UninitializedSandbox :: new ( GuestBinary :: FilePath ( path) , None ) . unwrap ( )
3740}
3841
42+ #[ cfg( optimized_build) ]
3943fn create_multiuse_sandbox ( ) -> MultiUseSandbox {
4044 create_uninit_sandbox ( ) . evolve ( Noop :: default ( ) ) . unwrap ( )
4145}
4246
47+ #[ cfg( optimized_build) ]
4348fn guest_call_benchmark ( c : & mut Criterion ) {
4449 let mut group = c. benchmark_group ( "guest_functions" ) ;
4550
@@ -87,6 +92,7 @@ fn guest_call_benchmark(c: &mut Criterion) {
8792 group. finish ( ) ;
8893}
8994
95+ #[ cfg( optimized_build) ]
9096fn guest_call_benchmark_large_param ( c : & mut Criterion ) {
9197 let mut group = c. benchmark_group ( "guest_functions_with_large_parameters" ) ;
9298 #[ cfg( target_os = "windows" ) ]
@@ -122,6 +128,7 @@ fn guest_call_benchmark_large_param(c: &mut Criterion) {
122128 group. finish ( ) ;
123129}
124130
131+ #[ cfg( optimized_build) ]
125132fn sandbox_benchmark ( c : & mut Criterion ) {
126133 let mut group = c. benchmark_group ( "sandboxes" ) ;
127134
@@ -161,9 +168,19 @@ fn sandbox_benchmark(c: &mut Criterion) {
161168 group. finish ( ) ;
162169}
163170
171+ #[ cfg( optimized_build) ]
164172criterion_group ! {
165173 name = benches;
166174 config = Criterion :: default ( ) ;
167175 targets = guest_call_benchmark, sandbox_benchmark, guest_call_benchmark_large_param
168176}
177+
178+ #[ cfg( optimized_build) ]
169179criterion_main ! ( benches) ;
180+
181+ // For unoptimized builds, provide a minimal main function that explains benchmarks are not available
182+ #[ cfg( unoptimized_build) ]
183+ fn main ( ) {
184+ eprintln ! ( "Benchmarks are only available in optimized builds. Use `cargo bench --release` or `just bench`." ) ;
185+ std:: process:: exit ( 1 ) ;
186+ }
0 commit comments