Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 76b0c499 authored by Cole Faust's avatar Cole Faust Committed by Gerrit Code Review
Browse files

Merge "Generate board-specific launchers in mk2rbc"

parents fc06a599 6ed7cb49
Loading
Loading
Loading
Loading
+23 −5
Original line number Diff line number Diff line
@@ -53,10 +53,12 @@ var (
	// TODO(asmundak): this option is for debugging
	allInSource           = flag.Bool("all", false, "convert all product config makefiles in the tree under //")
	outputTop             = flag.String("outdir", "", "write output files into this directory hierarchy")
	launcher              = flag.String("launcher", "", "generated launcher path. If set, the non-flag argument is _product_name_")
	launcher              = flag.String("launcher", "", "generated launcher path.")
	boardlauncher         = flag.String("boardlauncher", "", "generated board configuration launcher path.")
	printProductConfigMap = flag.Bool("print_product_config_map", false, "print product config map and exit")
	cpuProfile            = flag.String("cpu_profile", "", "write cpu profile to file")
	traceCalls            = flag.Bool("trace_calls", false, "trace function calls")
	inputVariables        = flag.String("input_variables", "", "starlark file containing product config and global variables")
)

func init() {
@@ -87,8 +89,7 @@ func main() {
	flag.Usage = func() {
		cmd := filepath.Base(os.Args[0])
		fmt.Fprintf(flag.CommandLine.Output(),
			"Usage: %[1]s flags file...\n"+
				"or:    %[1]s flags --launcher=PATH PRODUCT\n", cmd)
			"Usage: %[1]s flags file...\n", cmd)
		flag.PrintDefaults()
	}
	flag.Parse()
@@ -188,6 +189,23 @@ func main() {
			ok = false
		}
	}
	if *boardlauncher != "" {
		if len(files) != 1 {
			quit(fmt.Errorf("a launcher can be generated only for a single product"))
		}
		if *inputVariables == "" {
			quit(fmt.Errorf("the board launcher requires an input variables file"))
		}
		if !convertOne(*inputVariables) {
			quit(fmt.Errorf("the board launcher input variables file failed to convert"))
		}
		err := writeGenerated(*boardlauncher, mk2rbc.BoardLauncher(
			outputFilePath(files[0]), outputFilePath(*inputVariables)))
		if err != nil {
			fmt.Fprintf(os.Stderr, "%s: %s", files[0], err)
			ok = false
		}
	}

	printStats()
	if *errstat {
+13 −0
Original line number Diff line number Diff line
@@ -52,7 +52,9 @@ const (
	// And here are the functions and variables:
	cfnGetCfg          = baseName + ".cfg"
	cfnMain            = baseName + ".product_configuration"
	cfnBoardMain       = baseName + ".board_configuration"
	cfnPrintVars       = baseName + ".printvars"
	cfnPrintGlobals    = baseName + ".printglobals"
	cfnWarning         = baseName + ".warning"
	cfnLocalAppend     = baseName + ".local_append"
	cfnLocalSetDefault = baseName + ".local_set_default"
@@ -1702,6 +1704,17 @@ func Launcher(mainModuleUri, versionDefaultsUri, mainModuleName string) string {
	return buf.String()
}

func BoardLauncher(mainModuleUri string, inputVariablesUri string) string {
	var buf bytes.Buffer
	fmt.Fprintf(&buf, "load(%q, %q)\n", baseUri, baseName)
	fmt.Fprintf(&buf, "load(%q, \"init\")\n", mainModuleUri)
	fmt.Fprintf(&buf, "load(%q, input_variables_init = \"init\")\n", inputVariablesUri)
	fmt.Fprintf(&buf, "globals, cfg, globals_base = %s(init, input_variables_init)\n", cfnBoardMain)
	fmt.Fprintf(&buf, "# TODO: Some product config variables need to be printed, but most are readonly so we can't just print cfg here.\n")
	fmt.Fprintf(&buf, "%s(globals, globals_base)\n", cfnPrintGlobals)
	return buf.String()
}

func MakePath2ModuleName(mkPath string) string {
	return strings.TrimSuffix(mkPath, filepath.Ext(mkPath))
}