# # Processing ... # platform = env.subst("$PIOPLATFORM") root_dir = join(FRAMEWORK_DIR, "lib") variant = MCU if platform == "titiva": env.Append(CPPDEFINES=["LM4F"]) root_dir = join(root_dir, "lm4f") elif platform == "ststm32": variant = MCU[0:7] root_dir = join(root_dir, "stm32", MCU[5:7]) env.AppendUnique(CPPDEFINES=[variant.upper()]) elif platform == "nxplpc": variant = MCU[0:5] + "xx" root_dir = join(root_dir, variant) env.AppendUnique(CPPDEFINES=[variant.upper()]) elif platform == "siliconlabsefm32": root_dir = join(root_dir, "efm32", MCU[5:7]) env.AppendUnique(CPPDEFINES=[MCU[0:7].upper()]) generate_nvic_files() env.Append( ASFLAGS=["-x", "assembler-with-cpp"], CFLAGS=[ "-Wimplicit-function-declaration", "-Wmissing-prototypes", "-Wstrict-prototypes"
if (build_core in ("MiniCore", "MegaCore", "MightyCore", "MajorCore") and board.get("hardware.uart", "uart0") != "no_bootloader"): upload_section = board.get("upload") upload_section["maximum_size"] -= board.get("bootloader.size", get_bootloader_size()) elif build_core in ("tiny", "tinymodern"): flatten_defines = env.Flatten(env["CPPDEFINES"]) extra_defines = [] if "CLOCK_SOURCE" not in flatten_defines: extra_defines.append(("CLOCK_SOURCE", 0)) if "NEOPIXELPORT" not in flatten_defines: extra_defines.append(("NEOPIXELPORT", "PORTA")) if extra_defines: env.AppendUnique(CPPDEFINES=extra_defines) # copy CCFLAGS to ASFLAGS (-x assembler-with-cpp mode) env.Append(ASFLAGS=env.get("CCFLAGS", [])[:]) # # Target: Build Core Library # libs = [] if "build.variant" in board: variants_dir = join( "$PROJECT_DIR", board.get("build.variants_dir")) if board.get( "build.variants_dir", "") else join(FRAMEWORK_DIR, "variants")
except Exception as exc: sys.stderr.write("mbed build API internal error\n") print(exc) env.Exit(1) env.Replace(AS="$CC", ASCOM="$ASPPCOM") for scope in ("asm", "c", "cxx"): if "-c" in configuration.get("build_flags").get(scope, []): configuration.get("build_flags").get(scope).remove("-c") env.AppendUnique( ASFLAGS=configuration.get("build_flags").get("asm"), CFLAGS=configuration.get("build_flags").get("c"), CCFLAGS=["-includembed_config.h"] + configuration.get("build_flags").get("common"), CPPDEFINES=configuration.get("build_symbols"), CPPPATH=[FRAMEWORK_DIR, "$BUILD_DIR", "$PROJECTSRC_DIR"], CXXFLAGS=configuration.get("build_flags").get("cxx"), LINKFLAGS=configuration.get("build_flags").get("ld"), LIBS=configuration.get("libs") + configuration.get("syslibs"), ) # Note: this line should be called before appending CCFLAGS to ASFLAGS env.Append(**get_inc_flags()) env.Append( ASFLAGS=env.get("CCFLAGS", [])[:], LIBPATH=[ p if os.path.isabs(p) else os.path.join(FRAMEWORK_DIR, p) for p in configuration.get("lib_paths") ], LIBS=["c", "gcc"], # Fixes linker issues in some cases
"-include", "chips/pulpissimo/config.h", "-fno-jump-tables", "-fno-tree-loop-distribute-patterns", "-U__riscv__" ], CPPDEFINES=[ "RV_ISA_RV32", ("__PLATFORM__", "ARCHI_PLATFORM_FPGA"), ("CONFIG_IO_UART", 0), ("CONFIG_IO_UART_BAUDRATE", 115200), ("CONFIG_IO_UART_ITF", 0) ], CPPPATH=[ os.path.join(RUNTIME_DIR, "include", "chips", "pulpissimo"), os.path.join(RUNTIME_DIR, "lib", "libc", "minimal", "include"), os.path.join(RUNTIME_DIR, "include"), os.path.join(RUNTIME_DIR, "kernel"), ]) env.AppendUnique(ASFLAGS=env.get("CCFLAGS", [])[:]) if not board_config.get("build.ldscript", ""): env.Append( LIBPATH=[os.path.join(RUNTIME_DIR, "kernel", "chips", "pulpissimo")]) env.Replace(LDSCRIPT_PATH="link.ld") libs = [] libs.append( env.BuildLibrary( os.path.join("$BUILD_DIR", "kernel"), os.path.join(RUNTIME_DIR, "kernel"), src_filter=[ "+<*>", "-<cluster.c>",
) # Allow user to override via pre:script if env.get("PROGNAME", "program") == "program": env.Replace(PROGNAME="firmware") if not env.get("PIOFRAMEWORK"): env.SConscript("frameworks/_bare.py", exports="env") # Pass memory mode flags to linker if env.get("BUILD_FLAGS"): memmode = [ "-mcog", "-mlmm", "-mcmm", "-mxmmc", "-mxmm-single", "-mxmm-split" ] env.AppendUnique(LINKFLAGS=[i for i in memmode if i in env.get("BUILD_FLAGS")]) # Auto disable cache if env.GetBuildType() == "debug": if "-mfcache" in env.get("CCFLAGS"): env.get("CCFLAGS").remove("-mfcache") # # Target: Build executable and linkable firmware # target_elf = None if "nobuild" in COMMAND_LINE_TARGETS: target_elf = join("$BUILD_DIR", "${PROGNAME}.elf") target_firm = target_elf else: target_elf = env.BuildProgram()