From a506280b1819f103eeb404957083ca9d6f448128 Mon Sep 17 00:00:00 2001 From: Peter Fors Date: Thu, 9 Oct 2025 22:08:16 +0200 Subject: missed one --- incbin.h | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 incbin.h (limited to 'incbin.h') diff --git a/incbin.h b/incbin.h new file mode 100644 index 0000000..5951656 --- /dev/null +++ b/incbin.h @@ -0,0 +1,67 @@ +#define STR2(x) #x +#define STR(x) STR2(x) + +#ifdef _WIN32 +# define INCBIN_SECTION ".data, \"aw\"" +#else +# define INCBIN_SECTION ".data" +#endif + +/* Core raw incbin (unchanged semantics) */ +#define INCBIN_RAW(name, file) \ + __asm__(".section " INCBIN_SECTION "\n" \ + ".global " STR(name) "_data\n" \ + ".balign 64\n" \ + STR(name) "_data:\n" \ + ".incbin " STR(file) "\n" \ + ".zero 64\n" \ + ".global " STR(name) "_end\n" \ + ".balign 1\n" \ + STR(name) "_end:\n"); \ + extern __attribute__((aligned(64))) unsigned char name##_data[]; \ + extern unsigned char name##_end[]; + +/* Size helper (no storage) */ +#define INCBIN_SIZE(name) ((size_t)((name##_end) - (name##_data))) + +/* Typed wrappers (create a typed pointer variable named exactly ) */ +#define INCBIN_T(name, file, type) \ + INCBIN_RAW(name, file) \ + static type * name = (type*)(name##_data) + +/* Ready-made flavors */ +#define INCBIN_UGG(name, file) INCBIN_T(name, file, struct ugg) +#define INCBIN_BYTES(name, file) INCBIN_T(name, file, unsigned char) + +// Shader variant: prepends version, then incbins header & shader. +// Exports _data and _end (char[]); use _data as source. +#define INCBIN_SHADER(name, version_str, header_file, shader_file) \ + __asm__(".section " INCBIN_SECTION "\n" \ + ".global " STR(name) "_data\n" \ + ".balign 64\n" \ + STR(name) "_data:\n" \ + ".ascii \"" version_str "\\n\"\n" \ + ".incbin \"" header_file "\"\n" \ + ".incbin \"" shader_file "\"\n" \ + ".byte 0\n" \ + ".global " STR(name) "_end\n" \ + ".balign 1\n" \ + STR(name) "_end:\n"); \ + extern __attribute__((aligned(64))) char name##_data[]; \ + extern char name##_end[]; + +// Shader without header +#define INCBIN_SHADER_NOHEADER(name, version_str, shader_file) \ + __asm__(".section " INCBIN_SECTION "\n" \ + ".global " STR(name) "_data\n" \ + ".balign 64\n" \ + STR(name) "_data:\n" \ + ".ascii \"" version_str "\\n\"\n" \ + ".incbin \"" shader_file "\"\n" \ + ".byte 0\n" \ + ".global " STR(name) "_end\n" \ + ".balign 1\n" \ + STR(name) "_end:\n"); \ + extern __attribute__((aligned(64))) char name##_data[]; \ + extern char name##_end[]; + -- cgit v1.2.3