config_assert.c (5974B)
1 /* Build-time invariants on the component configuration in 2 * include/kit/config.h. Kept in its own TU so the asserts always 3 * compile, regardless of which other sources are gated out. */ 4 #include "kit/config.h" 5 6 _Static_assert(KIT_ARCH_AA64_ENABLED + KIT_ARCH_X64_ENABLED + 7 KIT_ARCH_RV64_ENABLED + KIT_ARCH_WASM_ENABLED + 8 KIT_ARCH_C_TARGET_ENABLED >= 9 1, 10 "at least one backend architecture must be enabled"); 11 12 _Static_assert(KIT_OBJ_ELF_ENABLED + KIT_OBJ_MACHO_ENABLED + 13 KIT_OBJ_COFF_ENABLED + KIT_OBJ_WASM_ENABLED >= 14 1, 15 "at least one object/image format must be enabled"); 16 17 #define KIT_ASSERT_BOOL(flag) \ 18 _Static_assert((flag) == 0 || (flag) == 1, #flag " must be 0 or 1") 19 20 KIT_ASSERT_BOOL(KIT_ARCH_AA64_ENABLED); 21 KIT_ASSERT_BOOL(KIT_ARCH_X64_ENABLED); 22 KIT_ASSERT_BOOL(KIT_ARCH_RV64_ENABLED); 23 KIT_ASSERT_BOOL(KIT_ARCH_WASM_ENABLED); 24 KIT_ASSERT_BOOL(KIT_ARCH_C_TARGET_ENABLED); 25 KIT_ASSERT_BOOL(KIT_OBJ_ELF_ENABLED); 26 KIT_ASSERT_BOOL(KIT_OBJ_MACHO_ENABLED); 27 KIT_ASSERT_BOOL(KIT_OBJ_COFF_ENABLED); 28 KIT_ASSERT_BOOL(KIT_OBJ_WASM_ENABLED); 29 KIT_ASSERT_BOOL(KIT_LANG_ASM_ENABLED); 30 KIT_ASSERT_BOOL(KIT_LANG_CPP_ENABLED); 31 KIT_ASSERT_BOOL(KIT_LANG_C_ENABLED); 32 KIT_ASSERT_BOOL(KIT_LANG_TOY_ENABLED); 33 KIT_ASSERT_BOOL(KIT_LANG_WASM_ENABLED); 34 _Static_assert(KIT_OPT_ENABLED == 0 || KIT_OPT_ENABLED == 1, 35 "KIT_OPT_ENABLED must be 0 or 1"); 36 KIT_ASSERT_BOOL(KIT_AR_ENABLED); 37 KIT_ASSERT_BOOL(KIT_DISASM_ENABLED); 38 KIT_ASSERT_BOOL(KIT_DWARF_ENABLED); 39 KIT_ASSERT_BOOL(KIT_LINK_ENABLED); 40 KIT_ASSERT_BOOL(KIT_JIT_ENABLED); 41 KIT_ASSERT_BOOL(KIT_DBG_ENABLED); 42 KIT_ASSERT_BOOL(KIT_EMU_ENABLED); 43 KIT_ASSERT_BOOL(KIT_INTERP_ENABLED); 44 KIT_ASSERT_BOOL(KIT_INTERP_THREADED); 45 46 KIT_ASSERT_BOOL(KIT_TOOL_CC_ENABLED); 47 KIT_ASSERT_BOOL(KIT_TOOL_CHECK_ENABLED); 48 KIT_ASSERT_BOOL(KIT_TOOL_CPP_ENABLED); 49 KIT_ASSERT_BOOL(KIT_TOOL_AS_ENABLED); 50 KIT_ASSERT_BOOL(KIT_TOOL_LD_ENABLED); 51 KIT_ASSERT_BOOL(KIT_TOOL_AR_ENABLED); 52 KIT_ASSERT_BOOL(KIT_TOOL_RANLIB_ENABLED); 53 KIT_ASSERT_BOOL(KIT_TOOL_STRIP_ENABLED); 54 KIT_ASSERT_BOOL(KIT_TOOL_OBJCOPY_ENABLED); 55 KIT_ASSERT_BOOL(KIT_TOOL_OBJDUMP_ENABLED); 56 KIT_ASSERT_BOOL(KIT_TOOL_DBG_ENABLED); 57 KIT_ASSERT_BOOL(KIT_TOOL_RUN_ENABLED); 58 KIT_ASSERT_BOOL(KIT_TOOL_EMU_ENABLED); 59 KIT_ASSERT_BOOL(KIT_TOOL_NM_ENABLED); 60 KIT_ASSERT_BOOL(KIT_TOOL_SIZE_ENABLED); 61 KIT_ASSERT_BOOL(KIT_TOOL_ADDR2LINE_ENABLED); 62 KIT_ASSERT_BOOL(KIT_TOOL_SYMBOLIZE_ENABLED); 63 KIT_ASSERT_BOOL(KIT_TOOL_STRINGS_ENABLED); 64 KIT_ASSERT_BOOL(KIT_TOOL_CAS_ENABLED); 65 KIT_ASSERT_BOOL(KIT_TOOL_PKG_ENABLED); 66 67 #undef KIT_ASSERT_BOOL 68 69 _Static_assert(!KIT_LANG_C_ENABLED || KIT_LANG_CPP_ENABLED, 70 "KIT_LANG_C_ENABLED requires KIT_LANG_CPP_ENABLED"); 71 _Static_assert(!KIT_ARCH_WASM_ENABLED || KIT_OBJ_WASM_ENABLED, 72 "KIT_ARCH_WASM_ENABLED requires KIT_OBJ_WASM_ENABLED"); 73 74 _Static_assert(!KIT_JIT_ENABLED || KIT_LINK_ENABLED, 75 "KIT_JIT_ENABLED requires KIT_LINK_ENABLED"); 76 _Static_assert(!KIT_DBG_ENABLED || (KIT_JIT_ENABLED && KIT_DWARF_ENABLED), 77 "KIT_DBG_ENABLED requires KIT_JIT_ENABLED and " 78 "KIT_DWARF_ENABLED"); 79 _Static_assert(!KIT_EMU_ENABLED || (KIT_JIT_ENABLED && KIT_LINK_ENABLED && 80 KIT_DISASM_ENABLED && KIT_OBJ_ELF_ENABLED), 81 "KIT_EMU_ENABLED requires JIT, link, disasm, and ELF " 82 "support"); 83 _Static_assert(!KIT_INTERP_ENABLED || KIT_OPT_ENABLED, 84 "KIT_INTERP_ENABLED requires KIT_OPT_ENABLED"); 85 _Static_assert(!KIT_PKG_ENABLED || KIT_CAS_ENABLED, 86 "KIT_PKG_ENABLED requires KIT_CAS_ENABLED"); 87 88 _Static_assert(!KIT_TOOL_CC_ENABLED || 89 (KIT_LANG_C_ENABLED && KIT_LINK_ENABLED && KIT_AR_ENABLED), 90 "KIT_TOOL_CC_ENABLED requires C, link, and ar support"); 91 _Static_assert(!KIT_TOOL_CHECK_ENABLED || KIT_LANG_C_ENABLED, 92 "KIT_TOOL_CHECK_ENABLED requires C support"); 93 _Static_assert(!KIT_TOOL_CPP_ENABLED || KIT_LANG_CPP_ENABLED, 94 "KIT_TOOL_CPP_ENABLED requires C preprocessor support"); 95 _Static_assert(!KIT_TOOL_LD_ENABLED || KIT_LINK_ENABLED, 96 "KIT_TOOL_LD_ENABLED requires link support"); 97 _Static_assert(!KIT_TOOL_AR_ENABLED || KIT_AR_ENABLED, 98 "KIT_TOOL_AR_ENABLED requires ar support"); 99 _Static_assert(!KIT_TOOL_RANLIB_ENABLED || KIT_AR_ENABLED, 100 "KIT_TOOL_RANLIB_ENABLED requires ar support"); 101 _Static_assert(!KIT_TOOL_STRIP_ENABLED || KIT_AR_ENABLED, 102 "KIT_TOOL_STRIP_ENABLED requires ar support"); 103 _Static_assert(!KIT_TOOL_OBJCOPY_ENABLED || KIT_AR_ENABLED, 104 "KIT_TOOL_OBJCOPY_ENABLED requires ar support"); 105 _Static_assert(!KIT_TOOL_OBJDUMP_ENABLED || KIT_DISASM_ENABLED, 106 "KIT_TOOL_OBJDUMP_ENABLED requires disasm support"); 107 _Static_assert(!KIT_TOOL_RUN_ENABLED || (KIT_JIT_ENABLED && KIT_LINK_ENABLED), 108 "KIT_TOOL_RUN_ENABLED requires JIT and link support"); 109 _Static_assert(!KIT_TOOL_DBG_ENABLED || KIT_DBG_ENABLED, 110 "KIT_TOOL_DBG_ENABLED requires debugger support"); 111 _Static_assert(!KIT_TOOL_EMU_ENABLED || KIT_EMU_ENABLED, 112 "KIT_TOOL_EMU_ENABLED requires emulator support"); 113 _Static_assert(!KIT_TOOL_NM_ENABLED || KIT_AR_ENABLED, 114 "KIT_TOOL_NM_ENABLED requires ar support"); 115 _Static_assert(!KIT_TOOL_SIZE_ENABLED || KIT_AR_ENABLED, 116 "KIT_TOOL_SIZE_ENABLED requires ar support"); 117 _Static_assert(!KIT_TOOL_ADDR2LINE_ENABLED || KIT_DWARF_ENABLED, 118 "KIT_TOOL_ADDR2LINE_ENABLED requires DWARF support"); 119 _Static_assert(!KIT_TOOL_SYMBOLIZE_ENABLED || KIT_DWARF_ENABLED, 120 "KIT_TOOL_SYMBOLIZE_ENABLED requires DWARF support"); 121 _Static_assert(!KIT_TOOL_CAS_ENABLED || KIT_CAS_ENABLED, 122 "KIT_TOOL_CAS_ENABLED requires CAS support"); 123 _Static_assert(!KIT_TOOL_PKG_ENABLED || KIT_PKG_ENABLED, 124 "KIT_TOOL_PKG_ENABLED requires PKG support");