summaryrefslogtreecommitdiff
path: root/include/tinyff/compat.h
diff options
context:
space:
mode:
authorWatson Wheeler <git@tazy.dev>2026-06-28 20:23:29 +1000
committerWatson Wheeler <git@tazy.dev>2026-07-02 19:39:07 +1000
commitc6f5ecdbbd82989f4641fe193e9d76de97446d03 (patch)
treec93ccbb6bcc5a3357b3b8057d8ea8b213fd528db /include/tinyff/compat.h
parentf65b49d05c1fe1ef1a31616cb171a52579836d2d (diff)
feat(compat): Check system and processor compatibility
Signed-off-by: Watson Wheeler <git@tazy.dev>
Diffstat (limited to 'include/tinyff/compat.h')
-rw-r--r--include/tinyff/compat.h43
1 files changed, 43 insertions, 0 deletions
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 <limits.h>
+#include <stdint.h>
+
+#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 <assert.h>
+#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