Files
brightstone/Common/def.h
T
2026-10-07 11:21:21 +03:00

58 lines
1.5 KiB
C

/*
Compiler definitions helpers, for portability.
We assume only modern GCC and Clang here.
*/
#ifndef COM_DEF_H
#define COM_DEF_H
#define COM_DEF_COMPILER_CLANG 1
#define COM_DEF_COMPILER_GCC 2
#if defined(__GNUC__) && !defined(__clang__)
#define COM_DEF_COMPILER COM_DEF_COMPILER_GCC
#elif defined(__clang__)
#define COM_DEF_COMPILER COM_DEF_COMPILER_CLANG
#endif
#define COM_DEF_TARGET_LINUX 1
#define COM_DEF_TARGET_WASM 2
#if defined(__wasm__)
#define COM_DEF_TARGET COM_DEF_TARGET_WASM
#define com_def_export_sym(m_s) __attribute__((export_name(m_s)))
#elif defined(__linux__)
#define COM_DEF_TARGET COM_DEF_TARGET_LINUX
#define com_def_export_sym(m_s) __attribute__((visibility("default")))
#else
#error Unknown target.
#endif
#define COM_DEF_CPU_AMD64 1
#define COM_DEF_CPU_X86 2
#define COM_DEF_CPU_WASM32 3
#if defined(__wasm__)
#define COM_DEF_CPU COM_DEF_CPU_WASM32
#define COM_DEF_ALIGNMENT 16
#define COM_DEF_CPU_LITEND 1
#elif defined(__x86_64__) || defined(__amd64__)
#define COM_DEF_CPU COM_DEF_CPU_AMD64
#define COM_DEF_CPU_LITEND 1
#define COM_DEF_ALIGNMENT 32
#elif defined(__i386__)
#define COM_DEF_CPU COM_DEF_CPU_X86
#define COM_DEF_ALIGNMENT 16
#define COM_DEF_CPU_LITEND 1
#else
#error Unknown cpu.
#endif
#define com_def_alignedas(v_as) _Alignas(v_as)
#define com_def_vector(v_t, v_v, v_b) v_t v_v __attribute__((vector_size(v_b)))
// #define COM_DEF_PROFILE_VAR volatile /* Sadly, doesn't work in some cases */
#define com_def_profile_sink(m_v) __asm__ volatile("" ::"r"(m_v) : "memory")
#endif