From 3cd5c358e15e285fa62b5b49b27120cf84bf4b08 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Mon, 21 Nov 2016 16:33:19 +0100 Subject: [PATCH] Use previously compiled "core.a" if core files are unmodified Solves #193 Needs to add -MMD to .S.flags targets on all cores (otherwise the core gets recompiled everytime) Signed-off-by: Martino Facchin --- src/arduino.cc/builder/builder_utils/utils.go | 29 ++++++++++++++++--- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/src/arduino.cc/builder/builder_utils/utils.go b/src/arduino.cc/builder/builder_utils/utils.go index a7ee060a..d790576c 100644 --- a/src/arduino.cc/builder/builder_utils/utils.go +++ b/src/arduino.cc/builder/builder_utils/utils.go @@ -260,10 +260,31 @@ func nonEmptyString(s string) bool { func ArchiveCompiledFiles(buildPath string, archiveFile string, objectFiles []string, buildProperties properties.Map, verbose bool, logger i18n.Logger) (string, error) { archiveFilePath := filepath.Join(buildPath, archiveFile) - if _, err := os.Stat(archiveFilePath); err == nil { - err = os.Remove(archiveFilePath) - if err != nil { - return "", i18n.WrapError(err) + + rebuildArchive := false + + if archiveFileStat, err := os.Stat(archiveFilePath); err == nil { + + for _, objectFile := range objectFiles { + objectFileStat, _ := os.Stat(objectFile) + if objectFileStat.ModTime().After(archiveFileStat.ModTime()) { + // need to rebuild the archive + rebuildArchive = true + break + } + } + + // something changed, rebuild the core archive + if rebuildArchive { + err = os.Remove(archiveFilePath) + if err != nil { + return "", i18n.WrapError(err) + } + } else { + if verbose { + logger.Println(constants.LOG_LEVEL_INFO, constants.MSG_USING_PREVIOUS_COMPILED_FILE, archiveFilePath) + } + return archiveFilePath, nil } }