Skip to content

Commit f0a30c7

Browse files
committed
Update linker script and upload program locations
1 parent 6992ab4 commit f0a30c7

13 files changed

+140
-51
lines changed

.helpers/board_file_generator.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,13 +52,15 @@
5252
arduino_v1 = """
5353
{{
5454
"variant": "{arduino_v1_variant}",
55-
"extra_flags": "{arduino_v1_extra_flags}"
55+
"extra_flags": "{arduino_v1_extra_flags}",
56+
"linker_script": "artemis_sbl_svl_app.ld"
5657
}}
5758
"""
5859
arduino_v2 = """
5960
{{
6061
"variant": "{arduino_v2_variant}",
61-
"extra_flags": "{arduino_v2_extra_flags}"
62+
"extra_flags": "{arduino_v2_extra_flags}",
63+
"linker_script": "0x10000.ld"
6264
}}
6365
6466
"""

boards/SparkFun_Artemis_Development_Kit.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,13 @@
1010
"arduino": {
1111
"v1": {
1212
"variant": "artemis_dk",
13-
"extra_flags": "-DAM_AP3_SFE_ARTEMIS_DK"
13+
"extra_flags": "-DAM_AP3_SFE_ARTEMIS_DK",
14+
"linker_script": "artemis_sbl_svl_app.ld"
1415
},
1516
"v2": {
1617
"variant": "TARGET_SFE_ARTEMIS_DK",
17-
"extra_flags": "-DAPOLLO3_SFE_ARTEMIS_DK"
18+
"extra_flags": "-DAPOLLO3_SFE_ARTEMIS_DK",
19+
"linker_script": "0x10000.ld"
1820
}
1921
},
2022
"ambiqsdk-sfe": {

boards/SparkFun_Artemis_Module.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,13 @@
1010
"arduino": {
1111
"v1": {
1212
"variant": "artemis",
13-
"extra_flags": "-DSFE_ARTEMIS"
13+
"extra_flags": "-DSFE_ARTEMIS",
14+
"linker_script": "artemis_sbl_svl_app.ld"
1415
},
1516
"v2": {
1617
"variant": "TARGET_SFE_ARTEMIS_MODULE",
17-
"extra_flags": "-DARDUINO_APOLLO3_SFE_ARTEMIS_MODULE"
18+
"extra_flags": "-DARDUINO_APOLLO3_SFE_ARTEMIS_MODULE",
19+
"linker_script": "0x10000.ld"
1820
}
1921
},
2022
"ambiqsdk-sfe": {

boards/SparkFun_Edge.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,13 @@
1010
"arduino": {
1111
"v1": {
1212
"variant": "edge",
13-
"extra_flags": "-DSFE_EDGE"
13+
"extra_flags": "-DSFE_EDGE",
14+
"linker_script": "artemis_sbl_svl_app.ld"
1415
},
1516
"v2": {
1617
"variant": "TARGET_SFE_EDGE",
17-
"extra_flags": "-DARDUINO_APOLLO3_SFE_EDGE"
18+
"extra_flags": "-DARDUINO_APOLLO3_SFE_EDGE",
19+
"linker_script": "0x10000.ld"
1820
}
1921
},
2022
"ambiqsdk-sfe": {

boards/SparkFun_Edge2.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,13 @@
1010
"arduino": {
1111
"v1": {
1212
"variant": "edge2",
13-
"extra_flags": "-DSFE_EDGE2"
13+
"extra_flags": "-DSFE_EDGE2",
14+
"linker_script": "artemis_sbl_svl_app.ld"
1415
},
1516
"v2": {
1617
"variant": "TARGET_SFE_EDGE2",
17-
"extra_flags": "-DARDUINO_APOLLO3_SFE_EDGE"
18+
"extra_flags": "-DARDUINO_APOLLO3_SFE_EDGE",
19+
"linker_script": "0x10000.ld"
1820
}
1921
},
2022
"ambiqsdk-sfe": {

boards/SparkFun_MicroMod_Artemis_Processor.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,13 @@
1010
"arduino": {
1111
"v1": {
1212
"variant": "artemis_micromod",
13-
"extra_flags": "-DAM_AP3_SFE_ARTEMIS_MICROMOD"
13+
"extra_flags": "-DAM_AP3_SFE_ARTEMIS_MICROMOD",
14+
"linker_script": "artemis_sbl_svl_app.ld"
1415
},
1516
"v2": {
1617
"variant": "TARGET_SFE_ARTEMIS_MM_PB",
17-
"extra_flags": "-DAPOLLO3_SFE_ARTEMIS_MM_PB"
18+
"extra_flags": "-DAPOLLO3_SFE_ARTEMIS_MM_PB",
19+
"linker_script": "0x10000.ld"
1820
}
1921
}
2022
}

boards/SparkFun_RedBoard_Artemis.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,13 @@
1010
"arduino": {
1111
"v1": {
1212
"variant": "redboard_artemis",
13-
"extra_flags": "-DAM_AP3_SFE_BB_ARTEMIS"
13+
"extra_flags": "-DAM_AP3_SFE_BB_ARTEMIS",
14+
"linker_script": "artemis_sbl_svl_app.ld"
1415
},
1516
"v2": {
1617
"variant": "TARGET_SFE_ARTEMIS",
17-
"extra_flags": "-DARDUINO_APOLLO3_SFE_ARTEMIS"
18+
"extra_flags": "-DARDUINO_APOLLO3_SFE_ARTEMIS",
19+
"linker_script": "0x10000.ld"
1820
}
1921
},
2022
"ambiqsdk-sfe": {

boards/SparkFun_RedBoard_Artemis_ATP.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,13 @@
1010
"arduino": {
1111
"v1": {
1212
"variant": "redboard_artemis_atp",
13-
"extra_flags": "-DARDUINO_AM_AP3_SFE_BB_ARTEMIS_ATP"
13+
"extra_flags": "-DARDUINO_AM_AP3_SFE_BB_ARTEMIS_ATP",
14+
"linker_script": "artemis_sbl_svl_app.ld"
1415
},
1516
"v2": {
1617
"variant": "TARGET_SFE_ARTEMIS_ATP",
17-
"extra_flags": "-DARDUINO_APOLLO3_SFE_ARTEMIS_ATP"
18+
"extra_flags": "-DARDUINO_APOLLO3_SFE_ARTEMIS_ATP",
19+
"linker_script": "0x10000.ld"
1820
}
1921
},
2022
"ambiqsdk-sfe": {

boards/SparkFun_Redboard_Artemis_Nano.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,13 @@
1010
"arduino": {
1111
"v1": {
1212
"variant": "redboard_artemis_nano",
13-
"extra_flags": "-DAM_AP3_SFE_BB_ARTEMIS_NANO"
13+
"extra_flags": "-DAM_AP3_SFE_BB_ARTEMIS_NANO",
14+
"linker_script": "artemis_sbl_svl_app.ld"
1415
},
1516
"v2": {
1617
"variant": "TARGET_SFE_ARTEMIS_NANO",
17-
"extra_flags": "-DARDUINO_APOLLO3_SFE_ARTEMIS_NANO"
18+
"extra_flags": "-DARDUINO_APOLLO3_SFE_ARTEMIS_NANO",
19+
"linker_script": "0x10000.ld"
1820
}
1921
},
2022
"ambiqsdk-sfe": {

boards/SparkFun_Thing_Plus.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,13 @@
1010
"arduino": {
1111
"v1": {
1212
"variant": "artemis_thing_plus",
13-
"extra_flags": "-DAM_AP3_SFE_THING_PLUS"
13+
"extra_flags": "-DAM_AP3_SFE_THING_PLUS",
14+
"linker_script": "artemis_sbl_svl_app.ld"
1415
},
1516
"v2": {
1617
"variant": "TARGET_SFE_ARTEMIS_THING_PLUS",
17-
"extra_flags": "-DARDUINO_APOLLO3_SFE_ARTEMIS_THING_PLUS"
18+
"extra_flags": "-DARDUINO_APOLLO3_SFE_ARTEMIS_THING_PLUS",
19+
"linker_script": "0x10000.ld"
1820
}
1921
},
2022
"ambiqsdk-sfe": {

boards/SparkFun_Thing_Plus_expLoRaBLE.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@
1010
"arduino": {
1111
"v2": {
1212
"variant": "TARGET_LoRa_THING_PLUS_expLoRaBLE",
13-
"extra_flags": "-DARDUINO_AM_AP3_THING_PLUS_expLoRaBLE"
13+
"extra_flags": "-DARDUINO_AM_AP3_THING_PLUS_expLoRaBLE",
14+
"linker_script": "0x10000.ld"
1415
}
1516
}
1617
}

builder/frameworks/arduino/core_v1.py

Lines changed: 46 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@
1313
# See the License for the specific language governing permissions and
1414
# limitations under the License.
1515

16-
17-
from os.path import isdir, join
16+
from os.path import isdir, join, exists
1817
from SCons.Script import DefaultEnvironment
1918
import platform as sys_pf
19+
import sys
2020

2121
env = DefaultEnvironment()
2222
platform = env.PioPlatform()
@@ -38,23 +38,58 @@
3838
VARIANTS_DIR = join(FRAMEWORK_DIR, "variants")
3939
BOARD_VARIANTS_DIR = join(VARIANTS_DIR, board.get("build.framework.arduino.v1.variant"))
4040

41-
linker_scripts = {
42-
"asb": "ambiq_sbl_app.ld",
43-
"svl": "artemis_sbl_svl_app.ld"
44-
}
45-
46-
upload_protocol = env.subst("$UPLOAD_PROTOCOL")
47-
linker_script = linker_scripts[upload_protocol]
48-
41+
PROJECT_DIR = env.subst("$PROJECT_DIR")
42+
43+
# =======================================================
44+
# Linker Script
45+
linker_script = None
46+
linker_script_fn = board.get("build.framework.arduino.v1.linker_script")
47+
user_linker_script_fn = board.get("build.linker_script", "")
48+
49+
if len(user_linker_script_fn) == 0:
50+
user_linker_script_fn = None
51+
52+
framework_linker_dir = join(VARIANTS_DIR, board.get("build.framework.arduino.v1.variant"), "linker_scripts", "gcc")
53+
if user_linker_script_fn is not None:
54+
if exists(join(PROJECT_DIR, user_linker_script_fn)):
55+
linker_script = join(PROJECT_DIR, user_linker_script_fn)
56+
sys.stderr.write("Using linker script: %s\n"%user_linker_script_fn)
57+
else:
58+
sys.stderr.write("\nError: Could not find linker script: %s\n" % linker_script_fn)
59+
sys.stderr.write("Searched in:\n")
60+
sys.stderr.write("\t%s\n" % PROJECT_DIR)
61+
env.Exit(1)
62+
63+
elif exists(join(framework_linker_dir, linker_script_fn)):
64+
linker_script = join(framework_linker_dir, linker_script_fn)
65+
if not exists(linker_script):
66+
sys.stderr.write("\nError: Could not find linker script: %s\n" % linker_script)
67+
env.Exit(1)
68+
else:
69+
sys.stderr.write("Error: Could not find linker script: %s\n"%linker_script_fn)
70+
sys.stderr.write("\tSearched in:\n")
71+
sys.stderr.write("\t\t%s\n"%framework_linker_dir)
72+
env.Exit(1)
73+
74+
env.Replace(LDSCRIPT_PATH=linker_script)
75+
# =======================================================
76+
77+
# =======================================================
78+
# Uploader Binary Locations
4979
system_type = sys_pf.system().lower() if sys_pf.system() != "Darwin" else "macosx"
5080
env.Replace(SVL_UPLOADER=join(FRAMEWORK_DIR, "tools", "artemis", system_type, "artemis_svl"))
5181
env.Replace(ASB_UPLOADER=join(FRAMEWORK_DIR, "tools", "ambiq", system_type, "ambiq_bin2board"))
82+
# =======================================================
83+
84+
# =======================================================
85+
# Bootloader location
86+
env.Replace(SVL_BOOTLOADER_BIN=join(FRAMEWORK_DIR, "tools", "bootloaders", "artemis", "artemis_svl.bin"))
87+
# =======================================================
5288

5389
env.Append(
5490
ASFLAGS=[
5591
"-c", "-g", "-MMD",
5692
"-x", "assembler-with-cpp",
57-
5893
],
5994

6095
CFLAGS=[
@@ -69,10 +104,8 @@
69104
"-fdata-sections",
70105
"-Os",
71106
"-ffunction-sections",
72-
73107
"-nostdlib",
74108
"--param", "max-inline-insns-single=500",
75-
76109
"-fno-exceptions",
77110
"-mcpu=%s" % board.get("build.cpu")
78111
],
@@ -118,7 +151,6 @@
118151
],
119152

120153
LINKFLAGS=[
121-
"-T%s" % join(VARIANTS_DIR, board.get("build.framework.arduino.v1.variant"), "linker_scripts", "gcc", linker_script),
122154
# "-Os",
123155
"-mthumb",
124156
"-mcpu=%s" % board.get("build.cpu"),
@@ -158,7 +190,6 @@
158190
libs.append(env.BuildLibrary(
159191
join("$BUILD_DIR", "apollo3_sdk_mcu"),
160192
join(SDK_DIR, "mcu"),
161-
# join(SDK_DIR, "devices")]
162193
))
163194

164195
libs.append(env.BuildLibrary(

builder/frameworks/arduino/core_v2.py

Lines changed: 52 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,10 @@
1313
# See the License for the specific language governing permissions and
1414
# limitations under the License.
1515

16-
from os.path import isdir, join
16+
from os.path import isdir, join, exists
1717
from SCons.Script import DefaultEnvironment
1818
import platform as system_platform
19+
import sys
1920

2021
env = DefaultEnvironment()
2122
platform = env.PioPlatform()
@@ -37,21 +38,58 @@
3738
VARIANTS_DIR = join(FRAMEWORK_DIR, "variants")
3839
BOARD_VARIANTS_DIR = join(VARIANTS_DIR, board.get("build.framework.arduino.v2.variant").replace("TARGET_", "", 1))
3940

40-
linker_scripts = {
41-
"asb": "0xC000.ld",
42-
"svl": "0x10000.ld",
43-
"jlink": "0x10000.ld",
44-
}
45-
upload_protocol = env.subst("$UPLOAD_PROTOCOL")
46-
linker_script = linker_scripts[upload_protocol]
41+
PROJECT_DIR = env.subst("$PROJECT_DIR")
42+
TOOLS_DIR = join(FRAMEWORK_DIR, "tools")
4743

48-
if upload_protocol == "jlink": upload_protocol = "svl"
44+
upload_protocol = env.subst("$UPLOAD_PROTOCOL")
4945

50-
TOOLS_DIR = join(FRAMEWORK_DIR, "tools")
46+
# =======================================================
47+
# Linker Script
48+
linker_script_dir = {
49+
"0xC000.ld": "asb",
50+
"0x10000.ld": "svl",
51+
}
5152

53+
linker_script_fn = board.get("build.framework.arduino.v2.linker_script")
54+
user_linker_script_fn = board.get("build.linker_script", "")
55+
56+
if len(user_linker_script_fn) == 0:
57+
user_linker_script_fn = None
58+
59+
linker_script = None
60+
61+
if user_linker_script_fn is not None:
62+
if exists(join(PROJECT_DIR, user_linker_script_fn)):
63+
linker_script = join(PROJECT_DIR, user_linker_script_fn)
64+
sys.stderr.write("Using linker script: %s\n" % user_linker_script_fn)
65+
else:
66+
sys.stderr.write("\nError: Could not find linker script: %s\n" % user_linker_script_fn)
67+
sys.stderr.write("Searched in:\n")
68+
sys.stderr.write("\t%s\n" % PROJECT_DIR)
69+
env.Exit(1)
70+
71+
elif linker_script_fn in linker_script_dir:
72+
linker_script = join(TOOLS_DIR, "uploaders", linker_script_dir[linker_script_fn], linker_script_fn)
73+
if not exists(linker_script):
74+
sys.stderr.write("\nError: Could not find linker script: %s\n" % linker_script)
75+
env.Exit(1)
76+
else:
77+
sys.stderr.write("\nError: Could not find linker script: %s\n" % linker_script_fn)
78+
env.Exit(1)
79+
80+
env.Replace(LDSCRIPT_PATH=linker_script)
81+
82+
# =======================================================
83+
# Bootloader location
84+
env.Replace(SVL_BOOTLOADER_BIN=join(TOOLS_DIR, "uploaders", "svl", "bootloader", "gcc", "artemis_module", "bin", "svl.bin"))
85+
# =======================================================
86+
87+
# =======================================================
88+
# Uploader Binary Locations
5289
system_type = system_platform.system().lower() if system_platform.system() != "Darwin" else "macosx"
53-
env.Replace(SVL_UPLOADER=join(FRAMEWORK_DIR, "tools", "uploaders", upload_protocol, "dist", system_type, "svl"))
54-
env.Replace(ASB_UPLOADER=join(FRAMEWORK_DIR, "tools", "uploaders", upload_protocol, "dist", system_type, "asb"))
90+
env.Replace(SVL_UPLOADER=join(FRAMEWORK_DIR, "tools", "uploaders", "svl", "dist", system_type, "svl"))
91+
env.Replace(ASB_UPLOADER=join(FRAMEWORK_DIR, "tools", "uploaders", "asb", "dist", system_type, "asb"))
92+
# =======================================================
5593

5694
env.Append(
5795
ASFLAGS=[
@@ -60,7 +98,7 @@
6098
],
6199

62100
CFLAGS=[
63-
"-MMD",
101+
"-MMD",
64102
"-include", join(BOARD_VARIANTS_DIR, "mbed", "mbed_config.h"),
65103
"-iprefix{}/".format(BASE_CORE_DIR),
66104
join("@{}".format(BOARD_VARIANTS_DIR), "mbed", ".c-flags"),
@@ -73,7 +111,7 @@
73111
],
74112

75113
CXXFLAGS=[
76-
"-MMD",
114+
"-MMD",
77115
"-include", join(BOARD_VARIANTS_DIR, "mbed", "mbed_config.h"),
78116
"-include", join(CORE_DIR, "sdk", "ArduinoSDK.h"),
79117
"-iprefix{}/".format(BASE_CORE_DIR),
@@ -100,7 +138,6 @@
100138
],
101139

102140
LINKFLAGS=[
103-
"-T%s" % join(TOOLS_DIR, "uploaders", upload_protocol, linker_script),
104141
join("@{}".format(BOARD_VARIANTS_DIR), "mbed", ".ld-flags"),
105142
join("@{}".format(BOARD_VARIANTS_DIR), "mbed", ".ld-symbols"),
106143
"-Wl,--whole-archive",

0 commit comments

Comments
 (0)