@@ -2,28 +2,36 @@ use std::env;
22
33use cargo_hyperlight:: cargo;
44
5+ mod perf;
6+
57const VERSION : & str = env ! ( "CARGO_PKG_VERSION" ) ;
68const GIT_HASH : & str = env ! ( "GIT_HASH" ) ;
79const GIT_DATE : & str = env ! ( "GIT_DATE" ) ;
810
911fn main ( ) {
10- if env:: args ( ) . any ( |arg| arg == "--version" || arg == "-V" ) {
11- println ! ( "cargo-hyperlight {} ({} {})" , VERSION , GIT_HASH , GIT_DATE ) ;
12- return ;
12+ // Skip binary name; when invoked as `cargo hyperlight`, cargo passes
13+ // "hyperlight" as argv[1] — skip that too.
14+ let mut args = env:: args_os ( ) . skip ( 1 ) . peekable ( ) ;
15+ if args. peek ( ) . is_some_and ( |a| a == "hyperlight" ) {
16+ args. next ( ) ;
1317 }
1418
15- let args = env:: args_os ( ) . enumerate ( ) . filter_map ( |( i, arg) | {
16- // skip the binary name and the "hyperlight" subcommand if present
17- if i == 0 || ( i == 1 && arg == "hyperlight" ) {
18- None
19- } else {
20- Some ( arg)
19+ match args. peek ( ) . map ( |a| a. to_os_string ( ) ) {
20+ Some ( a) if a == "--version" || a == "-V" => {
21+ println ! ( "cargo-hyperlight {} ({} {})" , VERSION , GIT_HASH , GIT_DATE ) ;
2122 }
22- } ) ;
23-
24- cargo ( )
25- . expect ( "Failed to create cargo command" )
26- . args ( args)
27- . status ( )
28- . expect ( "Failed to execute cargo" )
23+ Some ( a) if a == "perf" => {
24+ if let Err ( e) = perf:: run ( args) {
25+ eprintln ! ( "{e:?}" ) ;
26+ std:: process:: exit ( 1 ) ;
27+ }
28+ }
29+ _ => {
30+ cargo ( )
31+ . expect ( "Failed to create cargo command" )
32+ . args ( args)
33+ . status ( )
34+ . expect ( "Failed to execute cargo" ) ;
35+ }
36+ }
2937}
0 commit comments