From c6f5ecdbbd82989f4641fe193e9d76de97446d03 Mon Sep 17 00:00:00 2001 From: Watson Wheeler Date: Sun, 28 Jun 2026 20:23:29 +1000 Subject: feat(compat): Check system and processor compatibility Signed-off-by: Watson Wheeler --- include/tinyff/common.h | 3 ++- include/tinyff/compat.h | 43 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 include/tinyff/compat.h (limited to 'include/tinyff') diff --git a/include/tinyff/common.h b/include/tinyff/common.h index 6d93a70..5d070a4 100644 --- a/include/tinyff/common.h +++ b/include/tinyff/common.h @@ -7,6 +7,7 @@ #include #include #include +#include #ifdef USE_THREAD #include @@ -142,4 +143,4 @@ typedef struct ff_ctx { ff_ctx* ff_init(ff_allocator* allocator); void ff_cleanup(ff_ctx* ctx); -#endif \ No newline at end of file +#endif diff --git a/include/tinyff/compat.h b/include/tinyff/compat.h new file mode 100644 index 0000000..0199513 --- /dev/null +++ b/include/tinyff/compat.h @@ -0,0 +1,43 @@ +#ifndef TINYFF_COMPAT_H_ +#define TINYFF_COMPAT_H_ + +#if defined(__STDC_HOSTED__) && !(__STDC_HOSTED__ == 0) +# define COMPAT_HOSTED 1 +#else +# define COMPAT_HOSTED 0 +#endif + +#if !defined(__STDC_VERSION__) || __STDC_VERSION__ < 199901L +# error "compat: ISO C99 or newer compiler required." +#endif + +#include +#include + +#if INT_MAX < 32767 +# error "compat: 8-bit 'int' architectures are not supported." +#endif + +#if INTPTR_MAX == INT32_MAX +# define COMPAT_SZ_32 1 +#elif INTPTR_MAX == INT64_MAX +# define COMPAT_SZ_64 1 +#endif + +// Static assertion fallback for c99 +#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L + // static_assert already in version +# include +#else + // c99 dummy +# define COMPAT_STATIC_ASSERT(expr, msg) \ + typedef char compat_assertion_failed##__LINE__[(expr) ? 1 : -1] + +# undef static_assert +# define static_assert(expr, msg) COMPAT_STATIC_ASSERT(expr, msg) +#endif + +static_assert(sizeof(uint8_t) == 1, "compat: broken uint8_t width"); +static_assert(sizeof(uint32_t) == 4, "compat: broken uint32_t width"); + +#endif -- cgit v1.2.3