mirror of
https://github.com/wled/WLED.git
synced 2026-04-25 16:42:44 +00:00
Rather than append a linker file, we edit the upstream supplied ones to add our section to the binaries. Works better on all platforms. Co-Authored-By: Claude <noreply@anthropic.com>
24 lines
1.3 KiB
C
24 lines
1.3 KiB
C
/* dynarray.h
|
|
|
|
Macros for generating a "dynamic array", a static array of objects declared in different translation units
|
|
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
// Declare the beginning and ending elements of a dynamic array of 'type'.
|
|
// This must be used in only one translation unit in your program for any given array.
|
|
#define DECLARE_DYNARRAY(type, array_name) \
|
|
static type const DYNARRAY_BEGIN(array_name)[0] __attribute__((__section__(DYNARRAY_SECTION "." #array_name ".0"), unused)) = {}; \
|
|
static type const DYNARRAY_END(array_name)[0] __attribute__((__section__(DYNARRAY_SECTION "." #array_name ".99999"), unused)) = {};
|
|
|
|
// Declare an object that is a member of a dynamic array. "member name" must be unique; "array_section" is an integer for ordering items.
|
|
// It is legal to define multiple items with the same section name; the order of those items will be up to the linker.
|
|
#define DYNARRAY_MEMBER(type, array_name, member_name, array_section) type const member_name __attribute__((__section__(DYNARRAY_SECTION "." #array_name "." #array_section), used))
|
|
|
|
#define DYNARRAY_BEGIN(array_name) array_name##_begin
|
|
#define DYNARRAY_END(array_name) array_name##_end
|
|
#define DYNARRAY_LENGTH(array_name) (&DYNARRAY_END(array_name)[0] - &DYNARRAY_BEGIN(array_name)[0])
|
|
|
|
#define DYNARRAY_SECTION ".dynarray"
|