launcher
launcher
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.rs
argh
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.