aboutsummaryrefslogtreecommitdiff
path: root/src/main.hh
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.hh')
-rw-r--r--src/main.hh78
1 files changed, 78 insertions, 0 deletions
diff --git a/src/main.hh b/src/main.hh
new file mode 100644
index 0000000..ad4f3ca
--- /dev/null
+++ b/src/main.hh
@@ -0,0 +1,78 @@
+#ifndef TIBIA_MAIN_HH_
+#define TIBIA_MAIN_HH_ 1
+
+#include <float.h>
+#include <limits.h>
+#include <stddef.h>
+#include <stdarg.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+typedef uint8_t uint8;
+typedef uint16_t uint16;
+typedef uint32_t uint32;
+typedef uintptr_t uintptr;
+typedef size_t usize;
+
+#define STATIC_ASSERT(expr) static_assert((expr), "static assertion failed: " #expr)
+#define NARRAY(arr) (sizeof(arr) / sizeof(arr[0]))
+#define ISPOW2(x) ((x) != 0 && ((x) & ((x) - 1)) == 0)
+#define KB(x) ((usize)(x) << 10)
+#define MB(x) ((usize)(x) << 20)
+#define GB(x) ((usize)(x) << 30)
+
+// TODO(fusion): We might not actually compile the output for the decompilation
+// step but if we did, we'd need to make sure we're compiling in 32 bits mode.
+STATIC_ASSERT(sizeof(bool) == 1);
+STATIC_ASSERT(sizeof(int) == 4);
+//STATIC_ASSERT(sizeof(void*) == 4);
+
+#if !OS_WINDOWS && !OS_LINUX
+# if defined(_WIN32)
+# define OS_WINDOWS 1
+# elif defined(__linux__) || defined(__gnu_linux__)
+# define OS_LINUX 1
+# else
+# error "Operating system not supported."
+# endif
+#endif
+
+#if !COMPILER_MSVC && !COMPILER_GCC && !COMPILER_CLANG
+# if defined(_MSC_VER)
+# define COMPILER_MSVC 1
+# elif defined(__GNUC__)
+# define COMPILER_GCC 1
+# elif defined(__clang__)
+# define COMPILER_CLANG 1
+# endif
+#endif
+
+// NOTE(fusion): Compiler attributes.
+#if COMPILER_GCC || COMPILER_CLANG
+# define ATTR_FALLTHROUGH __attribute__((fallthrough))
+# define ATTR_PRINTF(x, y) __attribute__((format(printf, x, y)))
+#else
+# define ATTR_FALLTHROUGH
+# define ATTR_PRINTF(x, y)
+#endif
+
+#if COMPILER_MSVC
+# define TRAP() __debugbreak();
+#elif COMPILER_GCC || COMPILER_CLANG
+# define TRAP() __builtin_trap()
+#else
+# define TRAP() abort()
+#endif
+
+#define ASSERT_ALWAYS(expr) if(!(expr)) { TRAP(); }
+#if BUILD_DEBUG
+# define ASSERT(expr) ASSERT_ALWAYS(expr)
+#else
+# define ASSERT(expr) ((void)(expr))
+#endif
+
+void error(char *Text, ...) ATTR_PRINTF(1, 2);
+
+#endif //TIBIA_MAIN_HH_