| package actions |
| |
| import ( |
| goflag "flag" |
| "os" |
| |
| "cos.googlesource.com/cos/tools.git/src/pkg/kernel" |
| "github.com/golang/glog" |
| "github.com/spf13/cobra" |
| flag "github.com/spf13/pflag" |
| ) |
| |
| var arch, build, board, configFile string |
| var useRegional bool |
| var staging bool |
| |
| var rootCmd = &cobra.Command{ |
| Use: "cos-kernel [action]", |
| Short: "cos-kernel - Tool for interacting with the COS kernel", |
| Long: `The cos-kernel tool performs common COS kernel development operations. |
| |
| It supports workflows such as: |
| * Building a COS kernel from a local source tree. |
| * Building a COS kernel variant (e.g., lakitu-arm64, kselftest). |
| * Running arbitrary make commands using the COS toolchain. |
| * Downloading the COS C toolchain and kernel headers. |
| * Preparing patches for a new kernel feature.`, |
| SilenceUsage: true, |
| PersistentPreRun: func(cmd *cobra.Command, args []string) { |
| if staging { |
| os.Setenv("CLOUDSDK_API_CLIENT_OVERRIDES_COMPUTE", "staging_v1") |
| os.Setenv("CLOUDSDK_CORE_DISABLE_WARNINGS", "1") |
| kernel.GcloudExecutable = "/google/data/ro/teams/cloud-sdk/gcloud" |
| } |
| }, |
| } |
| |
| func addCommonFlags(flags *flag.FlagSet) { |
| flags.StringVarP(&arch, "arch", "a", "", |
| "the compiler architecture (e.g., x86_64, aarch64; defaults to the arch of the running kernel)") |
| flags.StringVar(&build, "build", "", |
| "the kernel build; this can be either a build number (e.g., 12345.01.02) or a branch (e.g., release-R117)") |
| flags.StringVar(&board, "board", "", |
| "the kernel board") |
| flags.BoolVar(&useRegional, "use-regional-bucket", true, |
| "use regional GCS buckets (e.g. cos-tools-us-central1) for downloading artifacts") |
| } |
| |
| func init() { |
| flag.CommandLine.AddGoFlagSet(goflag.CommandLine) |
| rootCmd.PersistentFlags().BoolVar(&staging, "staging", false, "use gcloud staging") |
| } |
| |
| func Execute() { |
| if err := rootCmd.Execute(); err != nil { |
| glog.Exitf("%v", err) |
| } |
| } |