Skip to content

Commit 12ad224

Browse files
author
Federico Fissore
committedNov 25, 2015
Variant files must NOT be included in core.a, they MUST be passed to linker
one by one. Fixes #72 Signed-off-by: Federico Fissore <[email protected]>
·
1.6.11.3.0
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)
Please sign in to comment.