33#pragma message("[Translation Unit Diagnostics]")
35#pragma message("PLATFORM(s):")
36#pragma message("- Android: " STR(MOCHI_PLATFORM_ANDROID))
37#pragma message("- Linux: " STR(MOCHI_PLATFORM_LINUX))
38#pragma message("- MacOS: " STR(MOCHI_PLATFORM_MACOS))
39#pragma message("- Windows: " STR(MOCHI_PLATFORM_WINDOWS))
41#pragma message("COMPILER(s):")
42#pragma message("- MSVC: " STR(MOCHI_COMPILER_MSVC))
43#pragma message("- CLANG: " STR(MOCHI_COMPILER_CLANG))
44#pragma message("- GCC: " STR(MOCHI_COMPILER_GCC))
45#pragma message("- CUDA CPU: " STR(MOCHI_COMPILER_CUDA_CPU))
46#pragma message("- CUDA GPU: " STR(MOCHI_COMPILER_CUDA_GPU))
48#pragma message("Architecture:")
49#pragma message("- CPU: " STR(MOCHI_ARCH_CPU))
50#pragma message("- GPU: " STR(MOCHI_ARCH_GPU))
51#pragma message("- ARM: " STR(MOCHI_ARCH_ARM))
52#pragma message("- ARM NEON: " STR(MOCHI_ARCH_ARM_NEON))
53#pragma message("- ARM SVE: " STR(MOCHI_ARCH_ARM_SVE))
54#pragma message("- ARM SME: " STR(MOCHI_ARCH_ARM_SME))
55#pragma message("- X64: " STR(MOCHI_ARCH_X64))
56#pragma message("- X64 AVX2: " STR(MOCHI_ARCH_X64_AVX2))
57#pragma message("- X64 FMA: " STR(MOCHI_ARCH_X64_FMA))
58#pragma message("- X64 SVML: " STR(MOCHI_ARCH_X64_SVML))
79#if MOCHI_ASSERT_ENABLED
81#define MOCHI_ASSERT(condition_without_side_effects, ...) \
82 MOCHI_ASSERT_IMPL(condition_without_side_effects __VA_OPT__(, )##__VA_ARGS__)
84#define MOCHI_ASSERT(condition_without_side_effects, ...) \
85 MOCHI_ASSERT_IMPL(condition_without_side_effects, ##__VA_ARGS__)
88#define MOCHI_ASSERT(...)
100#if MOCHI_ASSERT_VERBOSE_ENABLED
102#define MOCHI_ASSERT_VERBOSE(condition_without_side_effects, ...) \
103 MOCHI_ASSERT_IMPL(condition_without_side_effects __VA_OPT__(, )##__VA_ARGS__)
105#define MOCHI_ASSERT_VERBOSE(condition_without_side_effects, ...) \
106 MOCHI_ASSERT_IMPL(condition_without_side_effects, ##__VA_ARGS__)
109#define MOCHI_ASSERT_VERBOSE(...)
113#define MOCHI_NOT_IMPLEMENTED() MOCHI_ASSERT(false, "%s not implemented", __FUNCTION__)
117#define MOCHI_ASSERT_EIGEN()
119#define MOCHI_ASSERT_EIGEN() \
122 "This feature requires Eigen. To enable, add the Eigen dependency to your build configuration and define MOCHI_USE_EIGEN=1.")
129template <
class DstPtrT,
class SrcT>
131template <
class DstRefT,
class SrcT>
141 std::function<bool(
char const* condition,
char const* message,
char const* file,
int line)>;
150void SetAssertionFailureCallback(
OnAssertFn fn);
154bool OnAssertionFailure(
char const* file,
int line,
char const* condition,
char const* msg);
158template <
typename... Args>
159MOCHI_NO_INLINE
bool OnAssertionFailure(
162 char const* condition,
bool IsDebuggerAttached()
Return true if we can detect that a debugger is attached to this process.
std::function< bool(char const *condition, char const *message, char const *file, int line)> OnAssertFn
Callback invoked when an assertion fails.