else: target_elf = env.BuildProgram() target_firm = env.ElfToHex(join("$BUILD_DIR", "${PROGNAME}"), target_elf) env.Depends(target_firm, "checkprogsize") AlwaysBuild(env.Alias("nobuild", target_firm)) target_buildprog = env.Alias("buildprog", target_firm, target_firm) # # Target: Print binary size # target_size = env.AddPlatformTarget( "size", target_elf, env.VerboseAction("$SIZEPRINTCMD", "Calculating size $SOURCE"), "Program Size", "Calculate program size", ) # # Target: Upload by default .hex file # upload_protocol = env.subst("$UPLOAD_PROTOCOL") if upload_protocol == "micronucleus": env.Replace( UPLOADER="micronucleus", UPLOADERFLAGS=[ "--no-ansi",
env.Depends(target_firm, "checkprogsize") AlwaysBuild(env.Alias("nobuild", target_firm)) target_buildprog = env.Alias("buildprog", target_firm, target_firm) if "DFUBOOTHEX" in env: env.Append( # Check the linker script for the correct location BOOT_SETTING_ADDR=board.get("build.bootloader.settings_addr", "0x7F000")) env.AddPlatformTarget( "dfu", env.PackageDfu( join("$BUILD_DIR", "${PROGNAME}"), env.ElfToHex(join("$BUILD_DIR", "${PROGNAME}"), target_elf), ), target_firm, "Generate DFU Image", ) env.AddPlatformTarget( "bootloader", None, [ env.VerboseAction( "nrfjprog --program $DFUBOOTHEX -f nrf52 --chiperase", "Uploading $DFUBOOTHEX", ), env.VerboseAction( "nrfjprog --erasepage $BOOT_SETTING_ADDR -f nrf52",
target_firm = join("$BUILD_DIR", "${ESP32_SPIFFS_IMAGE_NAME}.bin") else: target_firm = join("$BUILD_DIR", "${PROGNAME}.bin") else: target_elf = env.BuildProgram() if set(["buildfs", "uploadfs", "uploadfsota"]) & set(COMMAND_LINE_TARGETS): target_firm = env.DataToBin( join("$BUILD_DIR", "${ESP32_SPIFFS_IMAGE_NAME}"), "$PROJECTDATA_DIR") env.NoCache(target_firm) AlwaysBuild(target_firm) else: target_firm = env.ElfToBin(join("$BUILD_DIR", "${PROGNAME}"), target_elf) env.AddPlatformTarget("buildfs", target_firm, None, "Build Filesystem Image") AlwaysBuild(env.Alias("nobuild", target_firm)) target_buildprog = env.Alias("buildprog", target_firm, target_firm) # update max upload size based on CSV file if env.get("PIOMAINPROG"): env.AddPreAction( "checkprogsize", env.VerboseAction( lambda source, target, env: _update_max_upload_size(env), "Retrieving maximum program size $SOURCES")) # remove after PIO Core 3.6 release elif set(["checkprogsize", "upload"]) & set(COMMAND_LINE_TARGETS): _update_max_upload_size(env) #
AlwaysBuild(env.Alias("nobuild", target_bin)) target_buildprog = env.Alias("buildprog", target_bin, target_bin) env.AddPostAction( target_elf, env.VerboseAction(generate_disassembly, "Generating disassembly")) # # Target: Print binary size # target_size = env.AddPlatformTarget( "size", target_elf, env.VerboseAction("$SIZEPRINTCMD", "Calculating size $SOURCE"), "Program Size", "Calculate program size", ) # # Target: Program FPGA # # Note: there is a precompiled bitstream in framework-wd-riscv-sdk package bitstream_file = os.path.abspath( board_config.get("build.bitstream_file", "swervolf_0.bit")) if "program_fpga" in COMMAND_LINE_TARGETS and not os.path.isfile( bitstream_file): sys.stderr.write("Error: Couldn't find bitstream file.\n")
app_includes = get_app_includes(elf_config) project_lib_includes = get_project_lib_includes(env) # # Compile bootloader # env.Depends("$BUILD_DIR/$PROGNAME$PROGSUFFIX", build_bootloader()) # # Target: ESP-IDF menuconfig # env.AddPlatformTarget( "menuconfig", None, [env.VerboseAction(RunMenuconfig, "Running menuconfig...")], "Run Menuconfig", ) # # Process main parts of the framework # libs = find_lib_deps(framework_components_map, elf_config, link_args, [project_target_name]) # Extra flags which need to be explicitly specified in LINKFLAGS section because SCons # cannot merge them correctly extra_flags = filter_args(link_args["LINKFLAGS"], ["-T", "-u"]) link_args["LINKFLAGS"] = sorted( list(set(link_args["LINKFLAGS"]) - set(extra_flags)))
target_firm = join("$BUILD_DIR", "${PROGNAME}.hex") else: target_elf = env.BuildProgram() target_firm = env.ElfToHex(join("$BUILD_DIR", "${PROGNAME}"), target_elf) AlwaysBuild(env.Alias("nobuild", target_firm)) target_buildprog = env.Alias("buildprog", target_firm, target_firm) # # Target: Print binary size # target_size = env.AddPlatformTarget( "size", target_elf, env.VerboseAction("$SIZEPRINTCMD", "Calculating size $SOURCE"), "Program Size", "Calculate program size", ) # # Target: Setup fuses # fuses_action = None if "fuses" in COMMAND_LINE_TARGETS: fuses_action = env.SConscript("fuses.py", exports="env") env.AddPlatformTarget("fuses", None, fuses_action, "Set Fuses") # # Target: Upload bootloader
env.Append(ARFLAGS=[], ASFLAGS=[], CCFLAGS=[], CXXFLAGS=[], LINKFLAGS=[], CPPDEFINES=[], LIBS=[], BUILDERS=dict(ElfToBin=Builder(action=" ".join( ["$OBJCOPY", "-O", "binary", "$SOURCES", "$TARGET"]), suffix=".bin"))) # # Target: Build executable and linkable firmware # target_elf = env.BuildProgram() # # Target: Build the .bin file # target_bin = env.ElfToBin(join("$BUILD_DIR", "firmware"), target_elf) # # Target: Upload firmware # upload = env.AddPlatformTarget("upload", target_bin, upload_actions, "Upload") # # Target: Define targets # Default([target_bin, upload])
target_firm = join("$BUILD_DIR", "${PROGNAME}.hex") else: target_elf = env.BuildProgram() target_firm = env.ElfToHex(join("$BUILD_DIR", "${PROGNAME}"), target_elf) AlwaysBuild(env.Alias("nobuild", target_firm)) target_buildprog = env.Alias("buildprog", target_firm, target_firm) # # Target: Print binary size # target_size = env.AddPlatformTarget( "size", target_elf, env.VerboseAction("$SIZEPRINTCMD", "Calculating size $SOURCE"), "Program Size", "Calculate program size", ) # # Target: Upload by default .hex file # upload_protocol = env.subst("$UPLOAD_PROTOCOL") if upload_protocol == "custom": upload_actions = [env.VerboseAction("$UPLOADCMD", "Uploading $SOURCE")] elif upload_protocol == "xplainedmini_updi": env.Append(UPLOADERFLAGS=["-P", "usb", "-e", "-b", "$UPLOAD_SPEED"]) upload_actions = [env.VerboseAction("$UPLOADCMD", "Uploading $SOURCE")]
if "nobuild" in COMMAND_LINE_TARGETS: target_elf = join("$BUILD_DIR", "${PROGNAME}.elf") else: target_elf = env.BuildProgram() if "uploadfs" in COMMAND_LINE_TARGETS: data_dir = env.subst("$PROJECTDATA_DIR") if not (isdir(data_dir) and listdir(data_dir)): sys.stderr.write( "Please create `data` directory in a project and put some files\n") env.Exit(1) target_firm = env.DataToBin(join("$BUILD_DIR", "data"), target_elf) else: target_firm = target_elf env.AddPlatformTarget("buildfs", target_firm, None, "Build Filesystem Image") AlwaysBuild(env.Alias("nobuild", target_firm)) target_buildprog = env.Alias("buildprog", target_firm, target_firm) # # Target: Print binary size # target_size = env.AddPlatformTarget( "size", target_elf, env.VerboseAction("$SIZEPRINTCMD", "Calculating size $SOURCE"), "Program Size", "Calculate program size", )
AlwaysBuild(env.Alias("nobuild", target_bin)) target_buildprog = env.Alias("buildprog", target_bin, target_bin) env.AddPostAction( target_elf, env.VerboseAction(generate_disassembly, "Generating disassembly")) # # Target: Print binary size # target_size = env.AddPlatformTarget( "size", target_elf, env.VerboseAction("$SIZEPRINTCMD", "Calculating size $SOURCE"), "Program Size", "Calculate program size", ) # # Target: Program FPGA # bitstream_file = os.path.abspath( board_config.get("build.bitstream_file", "bistream.bit")) if not os.path.isfile(bitstream_file): bitstream_file = os.path.join(platform.get_dir(), "misc", "bitstream", "cv32e40p_nexys.bit")
else: target_firm = env.ElfToHex(join("$BUILD_DIR", "${PROGNAME}"), target_elf) env.Depends(target_firm, "checkprogsize") AlwaysBuild(env.Alias("nobuild", target_firm)) target_buildprog = env.Alias("buildprog", target_firm, target_firm) # # Target: Print binary size # target_size = env.AddPlatformTarget( "size", target_elf, env.VerboseAction("$SIZEPRINTCMD", "Calculating size $SOURCE"), "Program Size", "Calculate program size", ) # # Target: Upload by default .bin file # upload_protocol = env.subst("$UPLOAD_PROTOCOL") debug_tools = board.get("debug.tools", {}) upload_actions = [] if upload_protocol == "mbed": upload_actions = [ env.VerboseAction(env.AutodetectUploadPort,
) AlwaysBuild(target_size) # Target: Upload env.Replace(UPLOAD_PORT='"Launchpad Pro"') upload = env.VerboseAction( ' '.join(['python3', '$SENDSYSEX', '-p', '$UPLOAD_PORT', '$SOURCE']), 'Uploading $SOURCE') env.AddPlatformTarget( 'upload', target_syx, upload, 'Upload', 'Send firmware to Launchpad Pro over MIDI', ) # Target: Restore env.AddPlatformTarget( 'restore', join(PLATFORM_DIR, 'resources/Launchpad Pro.syx'), upload, 'Restore', 'Restore Launchpad Pro original firmware', ) # Default Targets
if "nobuild" in COMMAND_LINE_TARGETS: target_ihx = join("$BUILD_DIR", "${PROGNAME}.elf") target_bin = join("$BUILD_DIR", "${PROGNAME}.bin") else: target_ihx = env.BuildProgram() target_bin = env.Command(join("$BUILD_DIR", "${PROGNAME}.bin"), target_ihx, "$OBJCOPY -p $SOURCES $TARGET") # # Target: Print binary size # target_size = env.AddPlatformTarget( "size", target_bin, sizePrintCMD, "Program Size", "Calculate program size", ) # # Target: Upload firmware # upload_protocol = env.subst("$UPLOAD_PROTOCOL") upload_port = env.subst("$UPLOAD_PORT") upload_actions = [] if upload_protocol == "easy-pdk-programmer": env.Replace(UPLOADER="easypdkprog", UPLOADERFLAGS=['-n', board_config.get("build.mcu")],