diff --git a/cmd/picomap/main.go b/cmd/picomap/main.go index 566b389..ed6083c 100644 --- a/cmd/picomap/main.go +++ b/cmd/picomap/main.go @@ -204,25 +204,28 @@ func boardSerial(id [8]byte) string { id[0], id[1], id[2], id[3], id[4], id[5], id[6], id[7]) } -func buildFirmware(buildDir string) error { - slog.Info("configuring") - cmake := exec.Command("cmake", "-S", filepath.Join(filepath.Dir(buildDir)), "-B", buildDir) - cmake.Stdout = os.Stdout - cmake.Stderr = os.Stderr - if err := cmake.Run(); err != nil { - return fmt.Errorf("cmake failed: %w", err) +func runCmd(name string, args ...string) error { + cmd := exec.Command(name, args...) + out, err := cmd.CombinedOutput() + if len(out) > 0 { + for _, line := range strings.Split(strings.TrimSpace(string(out)), "\n") { + slog.Info(name, "msg", line) + } } - - slog.Info("building") - cmd := exec.Command("make", "-C", buildDir) - cmd.Stdout = os.Stdout - cmd.Stderr = os.Stderr - if err := cmd.Run(); err != nil { - return fmt.Errorf("build failed: %w", err) + if err != nil { + return fmt.Errorf("%s failed: %w", name, err) } return nil } +func buildFirmware(buildDir string) error { + srcDir := filepath.Dir(buildDir) + if err := runCmd("cmake", "-S", srcDir, "-B", buildDir); err != nil { + return err + } + return runCmd("cmake", "--build", buildDir) +} + func cmdLoad(args []string) error { fs := flag.NewFlagSet("load", flag.ExitOnError) tf := addTargetFlags(fs) @@ -297,7 +300,7 @@ func cmdLoad(args []string) error { errs := make([]error, len(devices)) var wg sync.WaitGroup for i := range devices { - log := slog.With("serial", devices[i].serial) + log := slog.With("dev", devices[i].target.name, "serial", devices[i].serial) wg.Go(func() { log.Info("flashing", "uf2", devices[i].fw.name) errs[i] = flashDevice(devices[i].target.client, devices[i].fw.uf2, *dryRun, log)