xref: /aosp_15_r20/external/crosvm/protos/build.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 use std::env;
6*bb4ee6a4SAndroid Build Coastguard Worker use std::error::Error;
7*bb4ee6a4SAndroid Build Coastguard Worker use std::path::PathBuf;
8*bb4ee6a4SAndroid Build Coastguard Worker 
9*bb4ee6a4SAndroid Build Coastguard Worker type Result<T> = std::result::Result<T, Box<dyn Error>>;
10*bb4ee6a4SAndroid Build Coastguard Worker 
11*bb4ee6a4SAndroid Build Coastguard Worker struct LocalProto {
12*bb4ee6a4SAndroid Build Coastguard Worker     // Corresponding to the input file src/$module.proto.
13*bb4ee6a4SAndroid Build Coastguard Worker     module: &'static str,
14*bb4ee6a4SAndroid Build Coastguard Worker }
15*bb4ee6a4SAndroid Build Coastguard Worker 
16*bb4ee6a4SAndroid Build Coastguard Worker static LOCAL_PROTOS: &[LocalProto] = &[
17*bb4ee6a4SAndroid Build Coastguard Worker     #[cfg(feature = "plugin")]
18*bb4ee6a4SAndroid Build Coastguard Worker     LocalProto { module: "plugin" },
19*bb4ee6a4SAndroid Build Coastguard Worker     #[cfg(feature = "composite-disk")]
20*bb4ee6a4SAndroid Build Coastguard Worker     LocalProto {
21*bb4ee6a4SAndroid Build Coastguard Worker         module: "cdisk_spec",
22*bb4ee6a4SAndroid Build Coastguard Worker     },
23*bb4ee6a4SAndroid Build Coastguard Worker     LocalProto {
24*bb4ee6a4SAndroid Build Coastguard Worker         module: "registered_events",
25*bb4ee6a4SAndroid Build Coastguard Worker     },
26*bb4ee6a4SAndroid Build Coastguard Worker ];
27*bb4ee6a4SAndroid Build Coastguard Worker 
main() -> Result<()>28*bb4ee6a4SAndroid Build Coastguard Worker fn main() -> Result<()> {
29*bb4ee6a4SAndroid Build Coastguard Worker     let out_dir = PathBuf::from(env::var("OUT_DIR")?);
30*bb4ee6a4SAndroid Build Coastguard Worker 
31*bb4ee6a4SAndroid Build Coastguard Worker     // Compile protos from the local src directory.
32*bb4ee6a4SAndroid Build Coastguard Worker     let mut proto_paths = Vec::new();
33*bb4ee6a4SAndroid Build Coastguard Worker     for proto in LOCAL_PROTOS {
34*bb4ee6a4SAndroid Build Coastguard Worker         proto_paths.push(
35*bb4ee6a4SAndroid Build Coastguard Worker             ["src", &format!("{}.proto", proto.module)]
36*bb4ee6a4SAndroid Build Coastguard Worker                 .iter()
37*bb4ee6a4SAndroid Build Coastguard Worker                 .collect::<PathBuf>(),
38*bb4ee6a4SAndroid Build Coastguard Worker         );
39*bb4ee6a4SAndroid Build Coastguard Worker     }
40*bb4ee6a4SAndroid Build Coastguard Worker     proto_build_tools::build_protos(&out_dir, proto_paths.as_slice());
41*bb4ee6a4SAndroid Build Coastguard Worker 
42*bb4ee6a4SAndroid Build Coastguard Worker     Ok(())
43*bb4ee6a4SAndroid Build Coastguard Worker }
44