Skip to content

Commit f0ceaf2

Browse files
move ArchiveCompiledFiles in the builder
1 parent c004b42 commit f0ceaf2

File tree

4 files changed

+67
-78
lines changed

4 files changed

+67
-78
lines changed

Diff for: arduino/builder/archive_compiled_files.go

+65
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package builder
2+
3+
import (
4+
"github.com/arduino/arduino-cli/arduino/builder/internal/utils"
5+
"github.com/arduino/go-paths-helper"
6+
"github.com/pkg/errors"
7+
)
8+
9+
// ArchiveCompiledFiles fixdoc
10+
func (b *Builder) archiveCompiledFiles(archiveFile *paths.Path, objectFilesToArchive paths.PathList) (*paths.Path, error) {
11+
archiveFilePath := b.coreBuildPath.JoinPath(archiveFile)
12+
13+
if b.onlyUpdateCompilationDatabase {
14+
if b.logger.Verbose() {
15+
b.logger.Info(tr("Skipping archive creation of: %[1]s", archiveFilePath))
16+
}
17+
return archiveFilePath, nil
18+
}
19+
20+
if archiveFileStat, err := archiveFilePath.Stat(); err == nil {
21+
rebuildArchive := false
22+
for _, objectFile := range objectFilesToArchive {
23+
objectFileStat, err := objectFile.Stat()
24+
if err != nil || objectFileStat.ModTime().After(archiveFileStat.ModTime()) {
25+
// need to rebuild the archive
26+
rebuildArchive = true
27+
break
28+
}
29+
}
30+
31+
// something changed, rebuild the core archive
32+
if rebuildArchive {
33+
if err := archiveFilePath.Remove(); err != nil {
34+
return nil, errors.WithStack(err)
35+
}
36+
} else {
37+
if b.logger.Verbose() {
38+
b.logger.Info(tr("Using previously compiled file: %[1]s", archiveFilePath))
39+
}
40+
return archiveFilePath, nil
41+
}
42+
}
43+
44+
for _, objectFile := range objectFilesToArchive {
45+
properties := b.buildProperties.Clone()
46+
properties.Set("archive_file", archiveFilePath.Base())
47+
properties.SetPath("archive_file_path", archiveFilePath)
48+
properties.SetPath("object_file", objectFile)
49+
50+
command, err := utils.PrepareCommandForRecipe(properties, "recipe.ar.pattern", false)
51+
if err != nil {
52+
return nil, errors.WithStack(err)
53+
}
54+
55+
verboseInfo, _, _, err := utils.ExecCommand(b.logger.Verbose(), b.logger.Stdout(), b.logger.Stderr(), command, utils.ShowIfVerbose /* stdout */, utils.Show /* stderr */)
56+
if b.logger.Verbose() {
57+
b.logger.Info(string(verboseInfo))
58+
}
59+
if err != nil {
60+
return nil, errors.WithStack(err)
61+
}
62+
}
63+
64+
return archiveFilePath, nil
65+
}

Diff for: arduino/builder/core.go

+1-7
Original file line numberDiff line numberDiff line change
@@ -134,13 +134,7 @@ func (b *Builder) compileCore() (*paths.Path, paths.PathList, error) {
134134
return nil, nil, errors.WithStack(err)
135135
}
136136

137-
archiveFile, verboseInfo, err := utils.ArchiveCompiledFiles(
138-
b.coreBuildPath, paths.New("core.a"), coreObjectFiles, b.buildProperties,
139-
b.onlyUpdateCompilationDatabase, b.logger.Verbose(), b.logger.Stdout(), b.logger.Stderr(),
140-
)
141-
if b.logger.Verbose() {
142-
b.logger.Info(string(verboseInfo))
143-
}
137+
archiveFile, err := b.archiveCompiledFiles(paths.New("core.a"), coreObjectFiles)
144138
if err != nil {
145139
return nil, nil, errors.WithStack(err)
146140
}

Diff for: arduino/builder/internal/utils/utils.go

-63
Original file line numberDiff line numberDiff line change
@@ -566,66 +566,3 @@ func compileFileWithRecipe(
566566

567567
return objectFile, verboseInfo.Bytes(), verboseStdout.Bytes(), errOut.Bytes(), nil
568568
}
569-
570-
// ArchiveCompiledFiles fixdoc
571-
func ArchiveCompiledFiles(
572-
buildPath *paths.Path, archiveFile *paths.Path, objectFilesToArchive paths.PathList, buildProperties *properties.Map,
573-
onlyUpdateCompilationDatabase, verbose bool,
574-
stdoutWriter, stderrWriter io.Writer,
575-
) (*paths.Path, []byte, error) {
576-
verboseInfobuf := &bytes.Buffer{}
577-
archiveFilePath := buildPath.JoinPath(archiveFile)
578-
579-
if onlyUpdateCompilationDatabase {
580-
if verbose {
581-
verboseInfobuf.WriteString(tr("Skipping archive creation of: %[1]s", archiveFilePath))
582-
}
583-
return archiveFilePath, verboseInfobuf.Bytes(), nil
584-
}
585-
586-
if archiveFileStat, err := archiveFilePath.Stat(); err == nil {
587-
rebuildArchive := false
588-
for _, objectFile := range objectFilesToArchive {
589-
objectFileStat, err := objectFile.Stat()
590-
if err != nil || objectFileStat.ModTime().After(archiveFileStat.ModTime()) {
591-
// need to rebuild the archive
592-
rebuildArchive = true
593-
break
594-
}
595-
}
596-
597-
// something changed, rebuild the core archive
598-
if rebuildArchive {
599-
if err := archiveFilePath.Remove(); err != nil {
600-
return nil, nil, errors.WithStack(err)
601-
}
602-
} else {
603-
if verbose {
604-
verboseInfobuf.WriteString(tr("Using previously compiled file: %[1]s", archiveFilePath))
605-
}
606-
return archiveFilePath, verboseInfobuf.Bytes(), nil
607-
}
608-
}
609-
610-
for _, objectFile := range objectFilesToArchive {
611-
properties := buildProperties.Clone()
612-
properties.Set("archive_file", archiveFilePath.Base())
613-
properties.SetPath("archive_file_path", archiveFilePath)
614-
properties.SetPath("object_file", objectFile)
615-
616-
command, err := PrepareCommandForRecipe(properties, "recipe.ar.pattern", false)
617-
if err != nil {
618-
return nil, verboseInfobuf.Bytes(), errors.WithStack(err)
619-
}
620-
621-
verboseInfo, _, _, err := ExecCommand(verbose, stdoutWriter, stderrWriter, command, ShowIfVerbose /* stdout */, Show /* stderr */)
622-
if verbose {
623-
verboseInfobuf.WriteString(string(verboseInfo))
624-
}
625-
if err != nil {
626-
return nil, verboseInfobuf.Bytes(), errors.WithStack(err)
627-
}
628-
}
629-
630-
return archiveFilePath, verboseInfobuf.Bytes(), nil
631-
}

Diff for: arduino/builder/libraries.go

+1-8
Original file line numberDiff line numberDiff line change
@@ -202,14 +202,7 @@ func (b *Builder) compileLibrary(library *libraries.Library, includes []string)
202202
return nil, errors.WithStack(err)
203203
}
204204
if library.DotALinkage {
205-
archiveFile, verboseInfo, err := utils.ArchiveCompiledFiles(
206-
libraryBuildPath, paths.New(library.DirName+".a"), libObjectFiles, b.buildProperties,
207-
b.onlyUpdateCompilationDatabase, b.logger.Verbose(),
208-
b.logger.Stdout(), b.logger.Stderr(),
209-
)
210-
if b.logger.Verbose() {
211-
b.logger.Info(string(verboseInfo))
212-
}
205+
archiveFile, err := b.archiveCompiledFiles(paths.New(library.DirName+".a"), libObjectFiles)
213206
if err != nil {
214207
return nil, errors.WithStack(err)
215208
}

0 commit comments

Comments
 (0)