Skip to content

Commit 12ad224

Browse files
author
Federico Fissore
committed
Variant files must NOT be included in core.a, they MUST be passed to linker
one by one. Fixes arduino#72 Signed-off-by: Federico Fissore <f.fissore@arduino.cc>
1 parent d1ebf85 commit 12ad224

File tree

4 files changed

+19
-11
lines changed

4 files changed

+19
-11
lines changed

src/arduino.cc/builder/constants/constants.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ const CTX_LIBRARY_RESOLUTION_RESULTS = "libraryResolutionResults"
113113
const CTX_LINE_OFFSET = "lineOffset"
114114
const CTX_LINE_WHERE_TO_INSERT_PROTOTYPES = "lineWhereToInsertPrototypes"
115115
const CTX_LOGGER = "logger"
116+
const CTX_OBJECT_FILES_CORE = "objectFilesCore"
116117
const CTX_OBJECT_FILES_LIBRARIES = "objectFilesLibraries"
117118
const CTX_OBJECT_FILES_SKETCH = "objectFilesSketch"
118119
const CTX_OTHER_LIBRARIES_FOLDERS = "otherLibrariesFolders"

src/arduino.cc/builder/phases/core_builder.go

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -50,21 +50,22 @@ func (s *CoreBuilder) Run(context map[string]interface{}) error {
5050
return utils.WrapError(err)
5151
}
5252

53-
archiveFile, err := compileCore(coreBuildPath, buildProperties, verbose, warningsLevel, logger)
53+
archiveFile, objectFiles, err := compileCore(coreBuildPath, buildProperties, verbose, warningsLevel, logger)
5454
if err != nil {
5555
return utils.WrapError(err)
5656
}
5757

5858
context[constants.CTX_ARCHIVE_FILE_PATH_CORE] = archiveFile
59+
context[constants.CTX_OBJECT_FILES_CORE] = objectFiles
5960

6061
return nil
6162
}
6263

63-
func compileCore(buildPath string, buildProperties map[string]string, verbose bool, warningsLevel string, logger i18n.Logger) (string, error) {
64+
func compileCore(buildPath string, buildProperties map[string]string, verbose bool, warningsLevel string, logger i18n.Logger) (string, []string, error) {
6465
coreFolder := buildProperties[constants.BUILD_PROPERTIES_BUILD_CORE_PATH]
6566
variantFolder := buildProperties[constants.BUILD_PROPERTIES_BUILD_VARIANT_PATH]
6667

67-
var includes []string
68+
includes := []string{}
6869
includes = append(includes, coreFolder)
6970
if variantFolder != constants.EMPTY_STRING {
7071
includes = append(includes, variantFolder)
@@ -73,25 +74,23 @@ func compileCore(buildPath string, buildProperties map[string]string, verbose bo
7374

7475
var err error
7576

76-
var variantObjectFiles []string
77+
variantObjectFiles := []string{}
7778
if variantFolder != constants.EMPTY_STRING {
7879
variantObjectFiles, err = builder_utils.CompileFiles(variantObjectFiles, variantFolder, true, buildPath, buildProperties, includes, verbose, warningsLevel, logger)
7980
if err != nil {
80-
return "", utils.WrapError(err)
81+
return "", nil, utils.WrapError(err)
8182
}
8283
}
8384

8485
coreObjectFiles, err := builder_utils.CompileFiles([]string{}, coreFolder, true, buildPath, buildProperties, includes, verbose, warningsLevel, logger)
8586
if err != nil {
86-
return "", utils.WrapError(err)
87+
return "", nil, utils.WrapError(err)
8788
}
8889

89-
objectFiles := append(coreObjectFiles, variantObjectFiles...)
90-
91-
archiveFile, err := builder_utils.ArchiveCompiledFiles(buildPath, "core.a", objectFiles, buildProperties, verbose, logger)
90+
archiveFile, err := builder_utils.ArchiveCompiledFiles(buildPath, "core.a", coreObjectFiles, buildProperties, verbose, logger)
9291
if err != nil {
93-
return "", utils.WrapError(err)
92+
return "", nil, utils.WrapError(err)
9493
}
9594

96-
return archiveFile, nil
95+
return archiveFile, variantObjectFiles, nil
9796
}

src/arduino.cc/builder/phases/linker.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,12 @@ type Linker struct{}
4343
func (s *Linker) Run(context map[string]interface{}) error {
4444
objectFilesSketch := context[constants.CTX_OBJECT_FILES_SKETCH].([]string)
4545
objectFilesLibraries := context[constants.CTX_OBJECT_FILES_LIBRARIES].([]string)
46+
objectFilesCore := context[constants.CTX_OBJECT_FILES_CORE].([]string)
4647

4748
var objectFiles []string
4849
objectFiles = append(objectFiles, objectFilesSketch...)
4950
objectFiles = append(objectFiles, objectFilesLibraries...)
51+
objectFiles = append(objectFiles, objectFilesCore...)
5052

5153
coreArchiveFilePath := context[constants.CTX_ARCHIVE_FILE_PATH_CORE].(string)
5254
buildPath := context[constants.CTX_BUILD_PATH].(string)

src/arduino.cc/builder/test/builder_test.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import (
3434
"arduino.cc/builder/constants"
3535
"github.com/stretchr/testify/require"
3636
"os"
37+
"os/exec"
3738
"path/filepath"
3839
"testing"
3940
)
@@ -216,6 +217,11 @@ func TestBuilderBridgeSAM(t *testing.T) {
216217
NoError(t, err)
217218
_, err = os.Stat(filepath.Join(buildPath, constants.FOLDER_LIBRARIES, "Bridge", "Mailbox.cpp.o"))
218219
NoError(t, err)
220+
221+
cmd := exec.Command(filepath.Join("downloaded_tools", "arm-none-eabi-gcc", "4.8.3-2014q1", "bin", "arm-none-eabi-objdump"), "-f", filepath.Join(buildPath, constants.FOLDER_CORE, "core.a"))
222+
bytes, err := cmd.CombinedOutput()
223+
NoError(t, err)
224+
require.NotContains(t, string(bytes), "variant.cpp.o")
219225
}
220226

221227
func TestBuilderBridgeRedBearLab(t *testing.T) {

0 commit comments

Comments
 (0)