Filaman/create_combined_binary.py

68 lines
2.2 KiB
Python

Import("env")
from os.path import join, exists
import shutil
import os
def combine_binaries(source, target, env):
# Define paths for binary files
build_dir = env.subst("$BUILD_DIR")
project_dir = env.subst("$PROJECT_DIR")
combined_bin = join(build_dir, "combined.bin")
firmware_bin = join(build_dir, "firmware.bin")
spiffs_bin = join(build_dir, "spiffs.bin")
# Define target firmware path
firmware_dir = join(project_dir, "firmware")
target_firmware = join(firmware_dir, "filaman.bin")
# Build firmware if it doesn't exist
if not exists(firmware_bin):
print("Building firmware...")
env.Execute("pio run -t buildprog")
# Build SPIFFS if it doesn't exist
if not exists(spiffs_bin):
print("Building SPIFFS image...")
env.Execute("pio run -t buildfs")
# Check if files exist after build attempts
if not exists(firmware_bin):
raise Exception("Firmware binary not found at: " + firmware_bin)
if not exists(spiffs_bin):
raise Exception("SPIFFS binary not found at: " + spiffs_bin)
print("Found firmware at:", firmware_bin)
print("Found SPIFFS at:", spiffs_bin)
# Command to merge firmware and SPIFFS
merge_command = (
"esptool.py --chip esp32 merge_bin -o {combined_bin} "
"--flash_mode dio --flash_freq 40m --flash_size 4MB "
"0x10000 {firmware_bin} 0x310000 {spiffs_bin}"
).format(
combined_bin=combined_bin,
firmware_bin=firmware_bin,
spiffs_bin=spiffs_bin
)
print("Executing merge command:", merge_command)
env.Execute(merge_command)
# Create firmware directory if it doesn't exist
if not exists(firmware_dir):
os.makedirs(firmware_dir)
# Move combined binary to target location
print(f"Moving combined binary to {target_firmware}")
shutil.copy2(combined_bin, target_firmware)
print(f"Binary successfully moved to {target_firmware}")
# Register the custom target with explicit dependencies
env.AddCustomTarget(
name="combine_binaries",
dependencies=["buildfs", "buildprog"],
actions=[combine_binaries],
title="Combine Firmware & SPIFFS",
description="Combines firmware.bin and spiffs.bin into a single binary"
)