Files
libretiny/builder/frameworks/arduino.py
2023-03-13 22:18:02 +01:00

90 lines
2.3 KiB
Python

# Copyright (c) Kuba Szczodrzyński 2022-04-23.
from os.path import join
import click
from ltchiptool import Family
from SCons.Script import DefaultEnvironment, Environment
# Let everyone know we're using the Arduino framework
env: Environment = DefaultEnvironment()
env["ARDUINO"] = True
family: Family = env["FAMILY_OBJ"]
# Add base cores' sources first
env.SConscript("base.py")
# Build a safe environment for this script
queue = env.AddLibraryQueue("arduino", prepend_includes=True)
# Add sources common among all families
env.AddCoreSources(
queue=queue,
name="common_arduino",
path=join("$COMMON_DIR", "arduino", "src"),
)
env.AddArduinoLibraries(
queue=queue,
name="common_arduino",
path=join("$COMMON_DIR", "arduino", "libraries"),
)
# Add sources for this family and each parent
found = False
for f in family.inheritance:
code = f"{f.code}_arduino"
path = join("$CORES_DIR", f.name, "arduino")
found = found or env.AddCoreSources(queue, name=code, path=join(path, "src"))
env.AddArduinoLibraries(queue, name=code, path=join(path, "libraries"))
if f.short_name:
env.Prepend(CPPDEFINES=[(f"ARDUINO_ARCH_{f.short_name}", "1")])
if f.code:
env.Prepend(CPPDEFINES=[(f"ARDUINO_ARCH_{f.code.upper()}", "1")])
# Fail if Arduino core wasn't found
if not found:
click.secho(
f"Platform '{family.name}' doesn't support Arduino framework - "
"the Arduino core source files are absent.",
fg="red",
)
exit(1)
# Sources - ArduinoCore-API
queue.AddExternalLibrary("arduino-api")
# Sources - board variant
queue.AddLibrary(
name="board_${VARIANT}",
base_dir="$VARIANTS_DIR",
srcs=[
"+<${VARIANT}.cpp>",
],
# not adding includes since they're added with the base core
)
# Flags & linker options
queue.AppendPublic(
CPPDEFINES=[
("LIBRETUYA_ARDUINO", 1),
("ARDUINO", 10812),
("ARDUINO_SDK", 1),
],
LINKFLAGS=[
"--specs=nosys.specs",
"-Wl,--as-needed",
"-Wl,--build-id=none",
"-Wl,--cref",
"-Wl,--no-enum-size-warning",
"-Wl,--no-undefined",
"-Wl,--warn-common",
# wrappers from posix/time.c
"-Wl,-wrap,gettimeofday",
"-Wl,-wrap,settimeofday",
],
)
# Build all libraries
queue.BuildLibraries()