Skip to content

Commit 43b84e1

Browse files
committed
Allow .cxx and .cc extensions
1 parent 086b77a commit 43b84e1

File tree

3 files changed

+20
-9
lines changed

3 files changed

+20
-9
lines changed

Diff for: arduino/globals/globals.go

+11-5
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ var (
3535
".hpp": empty,
3636
".hh": empty,
3737
".cpp": empty,
38+
".cxx": empty,
39+
".cc": empty,
3840
".S": empty,
3941
".adoc": empty,
4042
".md": empty,
@@ -43,11 +45,15 @@ var (
4345
".ipp": empty,
4446
}
4547

46-
// SourceFilesValidExtensions lists valid extensions for source files (no headers)
47-
SourceFilesValidExtensions = map[string]struct{}{
48-
".c": empty,
49-
".cpp": empty,
50-
".S": empty,
48+
// SourceFilesValidExtensions lists valid extensions for source files (no headers).
49+
// If a platform do not provide a compile recipe for a specific file extension, this
50+
// map provides the equivalent extension to use as a fallback.
51+
SourceFilesValidExtensions = map[string]string{
52+
".c": "",
53+
".cpp": "",
54+
".cxx": ".cpp",
55+
".cc": ".cpp",
56+
".S": "",
5157
}
5258

5359
// HeaderFilesValidExtensions lists valid extensions for header files

Diff for: docs/platform-specification.md

+6-4
Original file line numberDiff line numberDiff line change
@@ -172,12 +172,14 @@ These properties can be overwritten respectively with `--keys-keychain`, `--sign
172172
#### Recipes to compile source code
173173

174174
We said that the Arduino development software determines a list of files to compile. Each file can be source code
175-
written in C (.c files), C++ (.cpp files) or Assembly (.S files). Every language is compiled using its respective
175+
written in C (.c files), C++ (.cpp/.cxx/.cc files) or Assembly (.S files). Every language is compiled using its respective
176176
**recipe**:
177177

178-
- `recipe.c.o.pattern`: for C files
179-
- `recipe.cpp.o.pattern`: for CPP files
180-
- `recipe.S.o.pattern`: for Assembly files
178+
- `recipe.c.o.pattern`: for C files (.c)
179+
- `recipe.cpp.o.pattern`: for CPP files (.cpp/.cxx/.cc)
180+
- `recipe.S.o.pattern`: for Assembly files (.S)
181+
182+
(an optional `recipe.cxx.o.pattern` and `recipe.cc.o.pattern` may be provided, if `.cxx` or `.cc` needs special handling, but it's not required and we do not recommend it)
181183

182184
The recipes can be built concatenating the following automatically generated properties (for each file compiled):
183185

Diff for: legacy/builder/builder_utils/utils.go

+3
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,9 @@ func compileFiles(ctx *types.Context, sourcePath *paths.Path, recurse bool, buil
109109
queue := make(chan *paths.Path)
110110
job := func(source *paths.Path) {
111111
recipe := fmt.Sprintf("recipe%s.o.pattern", source.Ext())
112+
if !buildProperties.ContainsKey(recipe) {
113+
recipe = fmt.Sprintf("recipe%s.o.pattern", globals.SourceFilesValidExtensions[source.Ext()])
114+
}
112115
objectFile, err := compileFileWithRecipe(ctx, sourcePath, source, buildPath, buildProperties, includes, recipe)
113116
if err != nil {
114117
errorsMux.Lock()

0 commit comments

Comments
 (0)