launcherlauncher is a system to combine several programs into a single binary, to save memory and disk space. Each program can be written in its own directory and run independently.
The Fuchsia operating system will maintain one VMO containing the launcher binary image, and will serve that VMO to each package which uses one of the programs that were combined to make the launcher binary.
This project should be automatically included in builds by including any project that uses it.
To convert a program to use launcher, you will build a library instead of a binary; include the library in the launcher binary; link to the launcher binary from the component that used to use your program's binary; and adjust your .cml files slightly.
In your program's directory:
main.rs to lib.rsargh command-line arg struct, for example pub struct CommandLine. (If you don't use command line args, add an empty struct with #[derive(FromArgs, Debug, PartialEq)].)#[argh(subcommand, name = "your-choice")].pub const PROGRAM_NAME: &str = "your-choice";main funtion with this signature: pub async fn main(args: CommandLine) -> Result<(), Error>#[fasync::run_singlethreaded] or similar lines.import("//build/rust/rustc_library.gni"), change rustc_bin to rustc_lib, and replace main.rs with lib.rs in sources._bin_test to _lib_test.In //src/diagnostics/launcher:
deps in BUILD.gnCommandLine struct to the ChildArgs enum in main.rsPROGRAM_NAME to the first match in main()main from the second match in main()To invoke a program that has been integrated in launcher:
"//src/diagnostics/launcher:bin" instead of the original binary.program -> binary -> “bin/launcher”.your-choice in this example) to the .cml file as the first args item.launcher will be integration-tested by every program that uses it. No unit tests are currently contemplated.