68 lines
2.2 KiB
Python
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"
|
|
) |