mirror of
https://github.com/tinygo-org/tinygo.git
synced 2026-08-11 14:33:41 +00:00
* Add -o flag support to flash command. Fixes #4937 * Remove empty outpath check in validateOutputFormat --------- Co-authored-by: rdon <you@example.com>
This commit is contained in:
@@ -340,8 +340,17 @@ func dirsToModuleRootAbs(maindir, modroot string) []string {
|
|||||||
return dirs
|
return dirs
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// validateOutputFormat checks if the output file extension matches the expected format
|
||||||
|
func validateOutputFormat(outpath, expectedExt string) error {
|
||||||
|
actualExt := filepath.Ext(outpath)
|
||||||
|
if actualExt != expectedExt {
|
||||||
|
return fmt.Errorf("output format %s does not match target format %s", actualExt, expectedExt)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// Flash builds and flashes the built binary to the given serial port.
|
// Flash builds and flashes the built binary to the given serial port.
|
||||||
func Flash(pkgName, port string, options *compileopts.Options) error {
|
func Flash(pkgName, port, outpath string, options *compileopts.Options) error {
|
||||||
config, err := builder.NewConfig(options)
|
config, err := builder.NewConfig(options)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@@ -390,13 +399,24 @@ func Flash(pkgName, port string, options *compileopts.Options) error {
|
|||||||
if !options.Work {
|
if !options.Work {
|
||||||
defer os.RemoveAll(tmpdir)
|
defer os.RemoveAll(tmpdir)
|
||||||
}
|
}
|
||||||
|
// Validate output format before building
|
||||||
|
if outpath != "" {
|
||||||
|
if err := validateOutputFormat(outpath, fileExt); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
// Build the binary.
|
// Build the binary.
|
||||||
result, err := builder.Build(pkgName, fileExt, tmpdir, config)
|
result, err := builder.Build(pkgName, fileExt, tmpdir, config)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Save output file if specified (after build, before flashing)
|
||||||
|
if outpath != "" {
|
||||||
|
if err := copyFile(result.Binary, outpath); err != nil {
|
||||||
|
return fmt.Errorf("failed to save output file: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
// do we need port reset to put MCU into bootloader mode?
|
// do we need port reset to put MCU into bootloader mode?
|
||||||
if config.Target.PortReset == "true" && flashMethod != "openocd" {
|
if config.Target.PortReset == "true" && flashMethod != "openocd" {
|
||||||
port, err := getDefaultPort(port, config.Target.SerialPort)
|
port, err := getDefaultPort(port, config.Target.SerialPort)
|
||||||
@@ -1298,6 +1318,11 @@ extension at all.`
|
|||||||
(https://tinygo.org/docs/reference/microcontrollers/).
|
(https://tinygo.org/docs/reference/microcontrollers/).
|
||||||
Examples: "arduino-nano", "d1mini", "xiao".
|
Examples: "arduino-nano", "d1mini", "xiao".
|
||||||
|
|
||||||
|
-o={filename}:
|
||||||
|
Save the built binary to the specified output file. The file
|
||||||
|
format must match the target's expected format (e.g., .hex,
|
||||||
|
.uf2). Both flashing and saving will be performed.
|
||||||
|
|
||||||
-monitor:
|
-monitor:
|
||||||
Start the serial monitor (see below) immediately after
|
Start the serial monitor (see below) immediately after
|
||||||
flashing. However, some microcontrollers need a split second
|
flashing. However, some microcontrollers need a split second
|
||||||
@@ -1628,7 +1653,7 @@ func main() {
|
|||||||
flag.BoolVar(&flagTest, "test", false, "supply -test flag to go list")
|
flag.BoolVar(&flagTest, "test", false, "supply -test flag to go list")
|
||||||
}
|
}
|
||||||
var outpath string
|
var outpath string
|
||||||
if command == "help" || command == "build" || command == "test" {
|
if command == "help" || command == "build" || command == "test" || command == "flash" {
|
||||||
flag.StringVar(&outpath, "o", "", "output filename")
|
flag.StringVar(&outpath, "o", "", "output filename")
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1779,7 +1804,7 @@ func main() {
|
|||||||
case "flash", "gdb", "lldb":
|
case "flash", "gdb", "lldb":
|
||||||
pkgName := filepath.ToSlash(flag.Arg(0))
|
pkgName := filepath.ToSlash(flag.Arg(0))
|
||||||
if command == "flash" {
|
if command == "flash" {
|
||||||
err := Flash(pkgName, *port, options)
|
err := Flash(pkgName, *port, outpath, options)
|
||||||
printBuildOutput(err, *flagJSON)
|
printBuildOutput(err, *flagJSON)
|
||||||
} else {
|
} else {
|
||||||
if !options.Debug {
|
if !options.Debug {
|
||||||
|
|||||||
Reference in New Issue
Block a user