env.SConscript(join(platform.get_package_dir("framework-zephyr"), "scripts", "platformio", "platformio-build-pre.py"), exports={"env": env}) upload_protocol = env.subst("$UPLOAD_PROTOCOL") target_elf = None if "nobuild" in COMMAND_LINE_TARGETS: target_elf = join("$BUILD_DIR", "${PROGNAME}.elf") target_firm = join("$BUILD_DIR", "${PROGNAME}.hex") else: target_elf = env.BuildProgram() if "SOFTDEVICEHEX" in env: target_firm = env.MergeHex( join("$BUILD_DIR", "${PROGNAME}"), env.ElfToHex(join("$BUILD_DIR", "userfirmware"), target_elf)) elif "nrfutil" == upload_protocol and use_adafruit: target_firm = env.PackageDfu( join("$BUILD_DIR", "${PROGNAME}"), env.ElfToHex(join("$BUILD_DIR", "${PROGNAME}"), target_elf)) elif "nrfjprog" == upload_protocol: target_firm = env.ElfToHex(join("$BUILD_DIR", "${PROGNAME}"), target_elf) elif "sam-ba" == upload_protocol: target_firm = env.ElfToBin(join("$BUILD_DIR", "${PROGNAME}"), target_elf) else: if "DFUBOOTHEX" in env: target_firm = env.SignBin( join("$BUILD_DIR", "${PROGNAME}"), env.ElfToBin(join("$BUILD_DIR", "${PROGNAME}"), target_elf))
if "BOARD" in env and "fuses" in env.BoardConfig(): env.Replace(FUSESCMD=" ".join(["avrdude", "$UPLOADERFLAGS", "-e"] + [ "-U%s:w:%s:m" % (k, v) for k, v in env.BoardConfig().get("fuses", {}).items() ])) # # Target: Build executable and linkable firmware # target_elf = None if "nobuild" in COMMAND_LINE_TARGETS: 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.Alias( "size", target_elf, env.VerboseAction("$SIZEPRINTCMD", "Calculating size $SOURCE")) AlwaysBuild(target_size) # # Target: Upload by default .hex file
suffix=".hex"))) # # Target: Build executable and linkable firmware # target_elf = env.BuildProgram() # # Target: Build the .hex # if "uploadlazy" in COMMAND_LINE_TARGETS: target_firm = join("$BUILD_DIR", "firmware.hex") else: target_firm = env.ElfToHex(join("$BUILD_DIR", "firmware"), target_elf) # # Target: Print binary size # target_size = env.Alias("size", target_elf, "$SIZEPRINTCMD") AlwaysBuild(target_size) # # Target: Upload firmware # upload = env.Alias(["upload", "uploadlazy"], target_firm, "$UPLOADCMD") AlwaysBuild(upload)
# # Target: Build executable and linkable firmware # target_elf = env.BuildProgram() AlwaysBuild(target_elf) # # Target: Build the .bin file # _name = env.get("PROGNAME") target_bin = env.ElfToBin(join("$BUILD_DIR", _name), target_elf) # Target: Build the .hex file # target_hex = env.ElfToHex(join("$BUILD_DIR", _name), target_elf) # Target: Build the .lst file # target_lst = env.ElfToLst(join("$BUILD_DIR", _name), target_elf) # # Target: Upload firmware # upload = env.Alias(["upload"], target_bin, "$UPLOADCMD") AlwaysBuild(upload) # # Target: Print binary size # target_size = env.Alias(
env.Replace(LINKFLAGS=_new_linkflags) env.Append(LINKFLAGS=[ "-Wl,--script=chipKIT-application-COMMON%s.ld" % ("-MZ" if "MZ" in env.get("BOARD_OPTIONS", {}).get("build", {}).get("mcu") else "") ]) # # Target: Build the .hex # if "uploadlazy" in COMMAND_LINE_TARGETS: target_firm = join("$BUILD_DIR", "firmware.hex") else: target_firm = env.ElfToHex(target_elf) # # Target: Print binary size # target_size = env.Alias("size", target_elf, "$SIZEPRINTCMD") AlwaysBuild(target_size) # # Target: Upload firmware # upload = env.Alias(["upload", "uploadlazy"], target_firm, [env.AutodetectUploadPort, "$UPLOADCMD"]) AlwaysBuild(upload)
env.Replace( __jlink_cmd_script=_jlink_cmd_script, UPLOADER="JLink.exe" if system() == "Windows" else "JLinkExe", UPLOADERFLAGS=[ "-device", board.get("debug", {}).get("jlink_device"), "-speed", env.GetProjectOption("debug_speed", "4000"), "-if", ("jtag" if upload_protocol == "jlink-jtag" else "swd"), "-autoconnect", "1", "-NoGui", "1" ], UPLOADCMD= '$UPLOADER $UPLOADERFLAGS -CommanderScript "${__jlink_cmd_script(__env__, SOURCE)}"' ) upload_actions = [env.VerboseAction("$UPLOADCMD", "Uploading $SOURCE")] upload_source = env.ElfToHex(join("$BUILD_DIR", "${PROGNAME}"), target_elf) elif upload_protocol in debug_tools: openocd_args = ["-d%d" % (2 if int(ARGUMENTS.get("PIOVERBOSE", 0)) else 1)] openocd_args.extend( debug_tools.get(upload_protocol).get("server").get("arguments", [])) if env.GetProjectOption("debug_speed"): openocd_args.extend( ["-c", "adapter speed %s" % env.GetProjectOption("debug_speed")]) openocd_args.extend([ "-c", "program {$SOURCE} %s verify reset; shutdown;" % board.get("upload.offset_address", "") ]) openocd_args = [
# target_firm_elf = None target_firm_hex = None object_dump_dis = None if "nobuild" in COMMAND_LINE_TARGETS: target_firm_elf = join("$BUILD_DIR", "${PROGNAME}.elf") target_firm_hex = join("$BUILD_DIR", "${PROGNAME}.hex") target_firm = join("$BUILD_DIR", "${PROGNAME}.bin") else: target_firm_elf = env.BuildProgram() if "SOFTDEVICEHEX" in env: merged_softdevice_hex = env.MergeHex( join("$BUILD_DIR", "${PROGNAME}"), env.ElfToHex(join("$BUILD_DIR", "user_${PROGNAME}"), target_firm_elf)) target_firm_hex = join("$BUILD_DIR", "user_${PROGNAME}.hex") else: target_firm_hex = env.ElfToHex(join("$BUILD_DIR", "${PROGNAME}"), target_firm_elf) object_dump_dis = env.ObjectDump(join("$BUILD_DIR", "${PROGNAME}"), target_firm_elf) target_firm = env.ElfToBin(join("$BUILD_DIR", "${PROGNAME}"), target_firm_elf) # # Target: Upload by default .bin file # if env.subst("$UPLOAD_PROTOCOL") == "teensy-gui" and not isfile( join(
suffix='.hex'), HexToSyx=Builder(action=env.VerboseAction( ' '.join(['python3', '$HEXTOSYX', '$SOURCES', '$TARGET']), 'Building $TARGET'), suffix='.syx'), ), ) # Target: Build if 'nobuild' in COMMAND_LINE_TARGETS: target_elf = join('$BUILD_DIR', '${PROGNAME}.elf') target_hex = join('$BUILD_DIR', '${PROGNAME}.hex') target_syx = join('$BUILD_DIR', '${PROGNAME}.syx') else: target_elf = env.BuildProgram() target_hex = env.ElfToHex(join('$BUILD_DIR', '${PROGNAME}'), target_elf) target_syx = env.HexToSyx(join('$BUILD_DIR', '${PROGNAME}'), target_hex) AlwaysBuild(env.Alias('nobuild', target_syx)) # Target: Print binary size env.Replace( SIZETOOL='arm-none-eabi-size', SIZEPROGREGEXP= r"^(?:\.text|\.data|\.rodata|\.text.align|\.ARM.exidx)\s+(\d+).*", SIZEDATAREGEXP=r"^(?:\.data|\.bss|\.noinit)\s+(\d+).*", SIZECHECKCMD="$SIZETOOL -A -d $SOURCES", SIZEPRINTCMD='$SIZETOOL -B -d $SOURCES', )