xref: /aosp_15_r20/external/crosvm/fuzz/src/lib.rs (revision bb4ee6a4ae7042d18b07a98463b9c8b875e44b39)
1*bb4ee6a4SAndroid Build Coastguard Worker // Copyright 2019 The ChromiumOS Authors
2*bb4ee6a4SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*bb4ee6a4SAndroid Build Coastguard Worker // found in the LICENSE file.
4*bb4ee6a4SAndroid Build Coastguard Worker 
5*bb4ee6a4SAndroid Build Coastguard Worker pub mod rand;
6*bb4ee6a4SAndroid Build Coastguard Worker 
7*bb4ee6a4SAndroid Build Coastguard Worker cfg_if::cfg_if! {
8*bb4ee6a4SAndroid Build Coastguard Worker     if #[cfg(not(fuzzing))] {
9*bb4ee6a4SAndroid Build Coastguard Worker         /// A stub implementation that ensures the fuzzer code can be compiled but does not provide
10*bb4ee6a4SAndroid Build Coastguard Worker         /// any fuzzing functionality.
11*bb4ee6a4SAndroid Build Coastguard Worker         /// This allows the fuzzer code to be verified in CI without a nightly cargo toolchain.
12*bb4ee6a4SAndroid Build Coastguard Worker         #[macro_export]
13*bb4ee6a4SAndroid Build Coastguard Worker         macro_rules! fuzz_target {
14*bb4ee6a4SAndroid Build Coastguard Worker             (|$bytes:ident| $body:block) => {
15*bb4ee6a4SAndroid Build Coastguard Worker                 // fuzzers are configured with no_main. To make the binary compile, we manually
16*bb4ee6a4SAndroid Build Coastguard Worker                 // provide the main function with no_mangle.
17*bb4ee6a4SAndroid Build Coastguard Worker                 #[no_mangle]
18*bb4ee6a4SAndroid Build Coastguard Worker                 pub extern fn main($bytes: &[u8]) {
19*bb4ee6a4SAndroid Build Coastguard Worker                     $body
20*bb4ee6a4SAndroid Build Coastguard Worker                 }
21*bb4ee6a4SAndroid Build Coastguard Worker             };
22*bb4ee6a4SAndroid Build Coastguard Worker             (|$bytes:ident: &[u8]| $body:block) => {
23*bb4ee6a4SAndroid Build Coastguard Worker                 fuzz_target!(|$bytes| $body);
24*bb4ee6a4SAndroid Build Coastguard Worker             };
25*bb4ee6a4SAndroid Build Coastguard Worker         }
26*bb4ee6a4SAndroid Build Coastguard Worker     } else {
27*bb4ee6a4SAndroid Build Coastguard Worker         pub use libfuzzer_sys::fuzz_target;
28*bb4ee6a4SAndroid Build Coastguard Worker     }
29*bb4ee6a4SAndroid Build Coastguard Worker }
30