Unverified Commit fbd35df6 authored by Cristian Maglie's avatar Cristian Maglie Committed by GitHub

Added dry-run mode in Compile command (#619)

* Added dry-run mode in Compile command

* Update cli/compile/compile.go
Co-Authored-By: default avatarRoberto Sora <r.sora@arduino.cc>
Co-authored-by: default avatarRoberto Sora <r.sora@arduino.cc>
parent f855feaa
......@@ -47,6 +47,7 @@ var (
port string // Upload port, e.g.: COM10 or /dev/ttyACM0.
verify bool // Upload, verify uploaded binary after the upload.
exportFile string // The compiled binary is written to this file
dryRun bool // Use this flag to now write the output file
libraries []string // List of custom libraries paths separated by commas. Or can be used multiple times for multiple libraries paths.
optimizeForDebug bool // Optimize compile output for debug, not for release
)
......@@ -67,6 +68,7 @@ func NewCommand() *cobra.Command {
command.Flags().BoolVar(&preprocess, "preprocess", false, "Print preprocessed code to stdout instead of compiling.")
command.Flags().StringVar(&buildCachePath, "build-cache-path", "", "Builds of 'core.a' are saved into this path to be cached and reused.")
command.Flags().StringVarP(&exportFile, "output", "o", "", "Filename of the compile output.")
command.Flags().BoolVarP(&dryRun, "dry-run", "n", false, "Perform the build but do not copy the compile output file.")
command.Flags().StringVar(&buildPath, "build-path", "",
"Path where to save compiled files. If omitted, a directory will be created in the default temporary path of your OS.")
command.Flags().StringSliceVar(&buildProperties, "build-properties", []string{},
......@@ -114,6 +116,7 @@ func run(cmd *cobra.Command, args []string) {
Quiet: quiet,
VidPid: vidPid,
ExportFile: exportFile,
DryRun: dryRun,
Libraries: libraries,
OptimizeForDebug: optimizeForDebug,
}, os.Stdout, os.Stderr, viper.GetString("logging.level") == "debug")
......
......@@ -196,59 +196,61 @@ func Compile(ctx context.Context, req *rpc.CompileReq, outStream, errStream io.W
return nil, err
}
// FIXME: Make a function to obtain these info...
outputPath := paths.New(
builderCtx.BuildProperties.ExpandPropsInString("{build.path}/{recipe.output.tmp_file}")) // "/build/path/sketch.ino.bin"
ext := outputPath.Ext() // ".hex" | ".bin"
base := outputPath.Base() // "sketch.ino.hex"
base = base[:len(base)-len(ext)] // "sketch.ino"
// FIXME: Make a function to produce a better name...
// Make the filename without the FQBN configs part
fqbn.Configs = properties.NewMap()
fqbnSuffix := strings.Replace(fqbn.String(), ":", ".", -1)
var exportPath *paths.Path
var exportFile string
if req.GetExportFile() == "" {
if sketch.FullPath.IsDir() {
exportPath = sketch.FullPath
if !req.GetDryRun() {
// FIXME: Make a function to obtain these info...
outputPath := paths.New(
builderCtx.BuildProperties.ExpandPropsInString("{build.path}/{recipe.output.tmp_file}")) // "/build/path/sketch.ino.bin"
ext := outputPath.Ext() // ".hex" | ".bin"
base := outputPath.Base() // "sketch.ino.hex"
base = base[:len(base)-len(ext)] // "sketch.ino"
// FIXME: Make a function to produce a better name...
// Make the filename without the FQBN configs part
fqbn.Configs = properties.NewMap()
fqbnSuffix := strings.Replace(fqbn.String(), ":", ".", -1)
var exportPath *paths.Path
var exportFile string
if req.GetExportFile() == "" {
if sketch.FullPath.IsDir() {
exportPath = sketch.FullPath
} else {
exportPath = sketch.FullPath.Parent()
}
exportFile = sketch.Name + "." + fqbnSuffix // "sketch.arduino.avr.uno"
} else {
exportPath = sketch.FullPath.Parent()
}
exportFile = sketch.Name + "." + fqbnSuffix // "sketch.arduino.avr.uno"
} else {
exportPath = paths.New(req.GetExportFile()).Parent()
exportFile = paths.New(req.GetExportFile()).Base()
if strings.HasSuffix(exportFile, ext) {
exportFile = exportFile[:len(exportFile)-len(ext)]
exportPath = paths.New(req.GetExportFile()).Parent()
exportFile = paths.New(req.GetExportFile()).Base()
if strings.HasSuffix(exportFile, ext) {
exportFile = exportFile[:len(exportFile)-len(ext)]
}
}
}
// Copy "sketch.ino.*.hex" / "sketch.ino.*.bin" artifacts to sketch directory
srcDir, err := outputPath.Parent().ReadDir() // read "/build/path/*"
if err != nil {
return nil, fmt.Errorf("reading build directory: %s", err)
}
srcDir.FilterPrefix(base + ".")
srcDir.FilterSuffix(ext)
for _, srcOutput := range srcDir {
srcFilename := srcOutput.Base() // "sketch.ino.*.bin"
srcFilename = srcFilename[len(base):] // ".*.bin"
dstOutput := exportPath.Join(exportFile + srcFilename)
logrus.WithField("from", srcOutput).WithField("to", dstOutput).Debug("copying sketch build output")
if err = srcOutput.CopyTo(dstOutput); err != nil {
return nil, fmt.Errorf("copying output file: %s", err)
// Copy "sketch.ino.*.hex" / "sketch.ino.*.bin" artifacts to sketch directory
srcDir, err := outputPath.Parent().ReadDir() // read "/build/path/*"
if err != nil {
return nil, fmt.Errorf("reading build directory: %s", err)
}
srcDir.FilterPrefix(base + ".")
srcDir.FilterSuffix(ext)
for _, srcOutput := range srcDir {
srcFilename := srcOutput.Base() // "sketch.ino.*.bin"
srcFilename = srcFilename[len(base):] // ".*.bin"
dstOutput := exportPath.Join(exportFile + srcFilename)
logrus.WithField("from", srcOutput).WithField("to", dstOutput).Debug("copying sketch build output")
if err = srcOutput.CopyTo(dstOutput); err != nil {
return nil, fmt.Errorf("copying output file: %s", err)
}
}
}
// Copy .elf file to sketch directory
srcElf := outputPath.Parent().Join(base + ".elf")
if srcElf.Exist() {
dstElf := exportPath.Join(exportFile + ".elf")
logrus.WithField("from", srcElf).WithField("to", dstElf).Debug("copying sketch build output")
if err = srcElf.CopyTo(dstElf); err != nil {
return nil, fmt.Errorf("copying elf file: %s", err)
// Copy .elf file to sketch directory
srcElf := outputPath.Parent().Join(base + ".elf")
if srcElf.Exist() {
dstElf := exportPath.Join(exportFile + ".elf")
logrus.WithField("from", srcElf).WithField("to", dstElf).Debug("copying sketch build output")
if err = srcElf.CopyTo(dstElf); err != nil {
return nil, fmt.Errorf("copying elf file: %s", err)
}
}
}
......
......@@ -37,6 +37,7 @@ type CompileReq struct {
Jobs int32 `protobuf:"varint,14,opt,name=jobs,proto3" json:"jobs,omitempty"`
Libraries []string `protobuf:"bytes,15,rep,name=libraries,proto3" json:"libraries,omitempty"`
OptimizeForDebug bool `protobuf:"varint,16,opt,name=optimizeForDebug,proto3" json:"optimizeForDebug,omitempty"`
DryRun bool `protobuf:"varint,17,opt,name=dryRun,proto3" json:"dryRun,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
......@@ -179,6 +180,13 @@ func (m *CompileReq) GetOptimizeForDebug() bool {
return false
}
func (m *CompileReq) GetDryRun() bool {
if m != nil {
return m.DryRun
}
return false
}
type CompileResp struct {
OutStream []byte `protobuf:"bytes,1,opt,name=out_stream,json=outStream,proto3" json:"out_stream,omitempty"`
ErrStream []byte `protobuf:"bytes,2,opt,name=err_stream,json=errStream,proto3" json:"err_stream,omitempty"`
......@@ -234,32 +242,33 @@ func init() {
func init() { proto.RegisterFile("commands/compile.proto", fileDescriptor_86bc582849c76c3d) }
var fileDescriptor_86bc582849c76c3d = []byte{
// 426 bytes of a gzipped FileDescriptorProto
// 437 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x92, 0xc1, 0x6f, 0xd3, 0x30,
0x14, 0xc6, 0x95, 0xad, 0xed, 0x9a, 0xd7, 0xb1, 0x4d, 0x16, 0x0c, 0x6b, 0x02, 0x14, 0x76, 0x40,
0x11, 0x68, 0xa9, 0x04, 0x67, 0x2e, 0x0c, 0x4d, 0x42, 0x5c, 0xaa, 0x70, 0xe3, 0x82, 0x12, 0xe7,
0xd1, 0x18, 0x92, 0xd8, 0x7d, 0x76, 0x36, 0xc4, 0x7f, 0xc2, 0x7f, 0x8b, 0xf2, 0xd2, 0x34, 0x55,
0x11, 0x27, 0xfb, 0xfd, 0xde, 0xe7, 0xcf, 0xcf, 0xd6, 0x07, 0x97, 0xca, 0xd4, 0x75, 0xd6, 0x14,
0x6e, 0xa9, 0x4c, 0x6d, 0x75, 0x85, 0x89, 0x25, 0xe3, 0x8d, 0x78, 0xaa, 0x54, 0x92, 0x51, 0xd1,
0xea, 0xc6, 0x24, 0xaa, 0xd2, 0xc9, 0x20, 0xbb, 0x7a, 0xb2, 0x7f, 0xa0, 0x36, 0x4d, 0xaf, 0xbf,
0xfe, 0x33, 0x01, 0xb8, 0xed, 0x1d, 0x52, 0xdc, 0x88, 0xf7, 0x30, 0xd7, 0x8d, 0xf3, 0x59, 0xa3,
0x50, 0x06, 0x51, 0x10, 0x2f, 0xde, 0xbe, 0x4c, 0xfe, 0xe3, 0x98, 0x7c, 0xda, 0x0a, 0xd3, 0xdd,
0x11, 0x21, 0x60, 0xf2, 0x7d, 0x93, 0x37, 0xf2, 0x28, 0x0a, 0xe2, 0x30, 0xe5, 0xbd, 0x78, 0x01,
0xe0, 0x7e, 0xa2, 0x57, 0xe5, 0x2a, 0xf3, 0xa5, 0x3c, 0xe6, 0xce, 0x1e, 0x11, 0xaf, 0xe0, 0xcc,
0x95, 0xe6, 0x61, 0x45, 0xc6, 0x22, 0x79, 0x8d, 0x4e, 0x4e, 0xa2, 0x20, 0x9e, 0xa7, 0x07, 0xb4,
0xf3, 0xb1, 0x84, 0x96, 0x8c, 0x42, 0xe7, 0xe4, 0x94, 0x35, 0x7b, 0xa4, 0xf3, 0xc9, 0x5b, 0x5d,
0x15, 0xb7, 0x99, 0x2a, 0x91, 0xef, 0x9a, 0xf1, 0x5d, 0x07, 0x54, 0x3c, 0x83, 0x90, 0x09, 0x4b,
0x4e, 0x58, 0x32, 0x02, 0x11, 0xc3, 0x79, 0x5f, 0x8c, 0xe3, 0xcc, 0xa3, 0xe3, 0x38, 0x4c, 0x0f,
0xb1, 0xb8, 0x82, 0xf9, 0x43, 0x46, 0x8d, 0x6e, 0xd6, 0x4e, 0x86, 0x6c, 0xb3, 0xab, 0x85, 0x84,
0x93, 0x7b, 0xa4, 0xdc, 0x38, 0x94, 0xc0, 0x83, 0x0e, 0xa5, 0x78, 0x0c, 0xd3, 0x4d, 0xab, 0xd1,
0xcb, 0x05, 0xf3, 0xbe, 0x10, 0x97, 0x30, 0xbb, 0xd7, 0xc5, 0x4a, 0x17, 0xf2, 0x94, 0x9d, 0xb6,
0x55, 0xf7, 0x66, 0xfc, 0x65, 0x0d, 0xf9, 0x3b, 0x5d, 0xa1, 0x7c, 0xd4, 0xff, 0xdd, 0x48, 0xba,
0xff, 0xfe, 0x61, 0x72, 0x27, 0xcf, 0xa2, 0x20, 0x9e, 0xa6, 0xbc, 0xef, 0xde, 0x57, 0xe9, 0x9c,
0x32, 0xea, 0x66, 0x3f, 0xe7, 0xd9, 0x47, 0x20, 0x5e, 0xc3, 0x85, 0xb1, 0x5e, 0xd7, 0xfa, 0x37,
0xde, 0x19, 0xfa, 0x88, 0x79, 0xbb, 0x96, 0x17, 0x3c, 0xca, 0x3f, 0xfc, 0xfa, 0x33, 0x2c, 0x76,
0xd1, 0x70, 0x56, 0x3c, 0x07, 0x30, 0xad, 0xff, 0xe6, 0x3c, 0x61, 0x56, 0x73, 0x3a, 0x4e, 0xd3,
0xd0, 0xb4, 0xfe, 0x0b, 0x83, 0xae, 0x8d, 0x44, 0x43, 0xfb, 0xa8, 0x6f, 0x23, 0x51, 0xdf, 0xfe,
0x70, 0xf3, 0xf5, 0xcd, 0x5a, 0xfb, 0xb2, 0xcd, 0xbb, 0x00, 0x2d, 0xb7, 0x81, 0x1a, 0xd6, 0x1b,
0x55, 0xe9, 0x25, 0x59, 0xb5, 0x1c, 0xc2, 0x95, 0xcf, 0x38, 0x9e, 0xef, 0xfe, 0x06, 0x00, 0x00,
0xff, 0xff, 0x89, 0xd3, 0x60, 0xf6, 0xe8, 0x02, 0x00, 0x00,
0x14, 0xc6, 0x95, 0xad, 0xed, 0x9a, 0xd7, 0xb1, 0x0d, 0x0b, 0x86, 0x35, 0x01, 0x0a, 0x3b, 0xa0,
0x08, 0xb4, 0x54, 0x82, 0x33, 0x17, 0x86, 0x26, 0x21, 0x2e, 0x55, 0xb8, 0x71, 0x41, 0x89, 0xf3,
0x68, 0x0c, 0x49, 0x9c, 0x3e, 0x3b, 0x2b, 0xf0, 0x5f, 0xf1, 0x1f, 0x22, 0xbf, 0x34, 0x6d, 0x55,
0xc4, 0xc9, 0x7e, 0xbf, 0xf7, 0xf9, 0xf9, 0xb3, 0xf5, 0xc1, 0xa5, 0x32, 0x75, 0x9d, 0x35, 0x85,
0x9d, 0x2b, 0x53, 0xb7, 0xba, 0xc2, 0xa4, 0x25, 0xe3, 0x8c, 0x78, 0xa2, 0x54, 0x92, 0x51, 0xd1,
0xe9, 0xc6, 0x24, 0xaa, 0xd2, 0xc9, 0x20, 0xbb, 0x7a, 0xbc, 0x7f, 0xa0, 0x36, 0x4d, 0xaf, 0xbf,
0xfe, 0x33, 0x02, 0xb8, 0xed, 0x27, 0xa4, 0xb8, 0x12, 0xef, 0x60, 0xaa, 0x1b, 0xeb, 0xb2, 0x46,
0xa1, 0x0c, 0xa2, 0x20, 0x9e, 0xbd, 0x79, 0x91, 0xfc, 0x67, 0x62, 0xf2, 0x71, 0x23, 0x4c, 0xb7,
0x47, 0x84, 0x80, 0xd1, 0xb7, 0x55, 0xde, 0xc8, 0xa3, 0x28, 0x88, 0xc3, 0x94, 0xf7, 0xe2, 0x39,
0x80, 0xfd, 0x81, 0x4e, 0x95, 0x8b, 0xcc, 0x95, 0xf2, 0x98, 0x3b, 0x7b, 0x44, 0xbc, 0x84, 0x33,
0x5b, 0x9a, 0xf5, 0x82, 0x4c, 0x8b, 0xe4, 0x34, 0x5a, 0x39, 0x8a, 0x82, 0x78, 0x9a, 0x1e, 0x50,
0x3f, 0xa7, 0x25, 0x6c, 0xc9, 0x28, 0xb4, 0x56, 0x8e, 0x59, 0xb3, 0x47, 0xfc, 0x9c, 0xbc, 0xd3,
0x55, 0x71, 0x9b, 0xa9, 0x12, 0xf9, 0xae, 0x09, 0xdf, 0x75, 0x40, 0xc5, 0x53, 0x08, 0x99, 0xb0,
0xe4, 0x84, 0x25, 0x3b, 0x20, 0x62, 0x38, 0xef, 0x8b, 0x9d, 0x9d, 0x69, 0x74, 0x1c, 0x87, 0xe9,
0x21, 0x16, 0x57, 0x30, 0x5d, 0x67, 0xd4, 0xe8, 0x66, 0x69, 0x65, 0xc8, 0x63, 0xb6, 0xb5, 0x90,
0x70, 0x72, 0x8f, 0x94, 0x1b, 0x8b, 0x12, 0xd8, 0xe8, 0x50, 0x8a, 0x47, 0x30, 0x5e, 0x75, 0x1a,
0x9d, 0x9c, 0x31, 0xef, 0x0b, 0x71, 0x09, 0x93, 0x7b, 0x5d, 0x2c, 0x74, 0x21, 0x4f, 0x79, 0xd2,
0xa6, 0xf2, 0x6f, 0xc6, 0x9f, 0xad, 0x21, 0x77, 0xa7, 0x2b, 0x94, 0x0f, 0xfa, 0xbf, 0xdb, 0x11,
0xff, 0xdf, 0xdf, 0x4d, 0x6e, 0xe5, 0x59, 0x14, 0xc4, 0xe3, 0x94, 0xf7, 0xfe, 0x7d, 0x95, 0xce,
0x29, 0x23, 0xef, 0xfd, 0x9c, 0xbd, 0xef, 0x80, 0x78, 0x05, 0x17, 0xa6, 0x75, 0xba, 0xd6, 0xbf,
0xf1, 0xce, 0xd0, 0x07, 0xcc, 0xbb, 0xa5, 0xbc, 0x60, 0x2b, 0xff, 0x70, 0xef, 0xaa, 0xa0, 0x5f,
0x69, 0xd7, 0xc8, 0x87, 0xac, 0xd8, 0x54, 0xd7, 0x9f, 0x60, 0xb6, 0x8d, 0x8c, 0x6d, 0xc5, 0x33,
0x00, 0xd3, 0xb9, 0xaf, 0xd6, 0x11, 0x66, 0x35, 0xa7, 0xe6, 0x34, 0x0d, 0x4d, 0xe7, 0x3e, 0x33,
0xf0, 0x6d, 0x24, 0x1a, 0xda, 0x47, 0x7d, 0x1b, 0x89, 0xfa, 0xf6, 0xfb, 0x9b, 0x2f, 0xaf, 0x97,
0xda, 0x95, 0x5d, 0xee, 0x83, 0x35, 0xdf, 0x04, 0x6d, 0x58, 0x6f, 0x54, 0xa5, 0xe7, 0xd4, 0xaa,
0xf9, 0x10, 0xba, 0x7c, 0xc2, 0xb1, 0x7d, 0xfb, 0x37, 0x00, 0x00, 0xff, 0xff, 0xda, 0x5b, 0x4b,
0x18, 0x00, 0x03, 0x00, 0x00,
}
......@@ -38,6 +38,7 @@ message CompileReq {
int32 jobs = 14; // The max number of concurrent compiler instances to run (as make -jx)
repeated string libraries = 15; // List of custom libraries paths separated by commas. Or can be used multiple times for multiple libraries paths.
bool optimizeForDebug = 16; // Optimize compile output for debug, not for release
bool dryRun = 17; // When set to true the compiled binary will not be copied to the export directory
}
message CompileResp {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment