circuitpython/ports/stm32/mboot/version.c
Victor Rajewski 61e2931f86 stm32/mboot: Add mboot version string.
Adds a configurable version string to a known location at the end of mboot
flash section.  Also stores the options mboot was built with, eg usb and
which filesystems are supported.

A board can override the defaults, or disable the version string entirely
by setting MBOOT_VERSION_ALLOCATED_BYTES=0.

Signed-off-by: Victor Rajewski <victor@allumeenergy.com.au>
2025-01-02 12:59:14 +11:00

62 lines
1.7 KiB
C

#include "mboot.h"
#include "genhdr/mpversion.h"
#if defined(MBOOT_VERSION_ALLOCATED_BYTES) && MBOOT_VERSION_ALLOCATED_BYTES > 0
#ifndef MBOOT_VERSION
#define MBOOT_VERSION "mboot-" MICROPY_GIT_TAG
#endif
#if MBOOT_VERSION_INCLUDE_OPTIONS // if this is defined, append a list of build options e.g. fat.lfs2
#define MBOOT_VERSION_USB MBOOT_VERSION "+usb" // USB is always included
#if defined(MBOOT_I2C_SCL)
#define MBOOT_VERSION_I2C MBOOT_VERSION_USB ".i2c"
#else
#define MBOOT_VERSION_I2C MBOOT_VERSION_USB
#endif
#if MBOOT_ADDRESS_SPACE_64BIT
#define MBOOT_VERSION_64BIT MBOOT_VERSION_I2C ".64"
#else
#define MBOOT_VERSION_64BIT MBOOT_VERSION_I2C
#endif
#if MBOOT_VFS_FAT
#define MBOOT_VERSION_FAT MBOOT_VERSION_64BIT ".fat"
#else
#define MBOOT_VERSION_FAT MBOOT_VERSION_64BIT
#endif
#if MBOOT_VFS_LFS1
#define MBOOT_VERSION_LFS1 MBOOT_VERSION_FAT ".lfs1"
#else
#define MBOOT_VERSION_LFS1 MBOOT_VERSION_FAT
#endif
#if MBOOT_VFS_LFS2
#define MBOOT_VERSION_LFS2 MBOOT_VERSION_LFS1 ".lfs2"
#else
#define MBOOT_VERSION_LFS2 MBOOT_VERSION_LFS1
#endif
#if MBOOT_VFS_RAW
#define MBOOT_VERSION_RAW MBOOT_VERSION_LFS2 ".raw"
#else
#define MBOOT_VERSION_RAW MBOOT_VERSION_LFS2
#endif
#define MBOOT_VERSION_FINAL MBOOT_VERSION_RAW
#else // MBOOT_VERSION_INCLUDE_OPTIONS
#define MBOOT_VERSION_FINAL MBOOT_VERSION
#endif // MBOOT_VERSION_INCLUDE_OPTIONS
// Ensure we don't overrun the allocated space
_Static_assert(sizeof(MBOOT_VERSION_FINAL) <= MBOOT_VERSION_ALLOCATED_BYTES + 1, "mboot version string is too long");
// Cuts off the null terminator
const char mboot_version[sizeof(MBOOT_VERSION_FINAL) - 1] __attribute__((section(".mboot_version"))) __attribute__ ((__used__)) = MBOOT_VERSION_FINAL;
#endif