config_assert.c (8701B)
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_ARM32_ENABLED + KIT_ARCH_RV32_ENABLED + 8 KIT_ARCH_RV64_ENABLED + KIT_ARCH_WASM_ENABLED + 9 KIT_ARCH_C_TARGET_ENABLED >= 10 1, 11 "at least one backend architecture must be enabled"); 12 13 _Static_assert(KIT_OBJ_ELF_ENABLED + KIT_OBJ_MACHO_ENABLED + 14 KIT_OBJ_COFF_ENABLED + KIT_OBJ_WASM_ENABLED >= 15 1, 16 "at least one object/image format must be enabled"); 17 18 #define KIT_ASSERT_BOOL(flag) \ 19 _Static_assert((flag) == 0 || (flag) == 1, #flag " must be 0 or 1") 20 21 KIT_ASSERT_BOOL(KIT_ARCH_AA64_ENABLED); 22 KIT_ASSERT_BOOL(KIT_ARCH_X64_ENABLED); 23 KIT_ASSERT_BOOL(KIT_ARCH_ARM32_ENABLED); 24 KIT_ASSERT_BOOL(KIT_ARCH_RV32_ENABLED); 25 KIT_ASSERT_BOOL(KIT_ARCH_RV64_ENABLED); 26 KIT_ASSERT_BOOL(KIT_ARCH_WASM_ENABLED); 27 KIT_ASSERT_BOOL(KIT_ARCH_C_TARGET_ENABLED); 28 KIT_ASSERT_BOOL(KIT_OBJ_ELF_ENABLED); 29 KIT_ASSERT_BOOL(KIT_OBJ_MACHO_ENABLED); 30 KIT_ASSERT_BOOL(KIT_OBJ_COFF_ENABLED); 31 KIT_ASSERT_BOOL(KIT_OBJ_WASM_ENABLED); 32 KIT_ASSERT_BOOL(KIT_LANG_ASM_ENABLED); 33 KIT_ASSERT_BOOL(KIT_LANG_CPP_ENABLED); 34 KIT_ASSERT_BOOL(KIT_LANG_C_ENABLED); 35 KIT_ASSERT_BOOL(KIT_LANG_TOY_ENABLED); 36 KIT_ASSERT_BOOL(KIT_LANG_WASM_ENABLED); 37 _Static_assert(KIT_OPT_ENABLED == 0 || KIT_OPT_ENABLED == 1, 38 "KIT_OPT_ENABLED must be 0 or 1"); 39 KIT_ASSERT_BOOL(KIT_AR_ENABLED); 40 KIT_ASSERT_BOOL(KIT_DISASM_ENABLED); 41 KIT_ASSERT_BOOL(KIT_DWARF_ENABLED); 42 KIT_ASSERT_BOOL(KIT_LINK_ENABLED); 43 KIT_ASSERT_BOOL(KIT_JIT_ENABLED); 44 KIT_ASSERT_BOOL(KIT_DBG_ENABLED); 45 KIT_ASSERT_BOOL(KIT_EMU_ENABLED); 46 KIT_ASSERT_BOOL(KIT_CAS_ENABLED); 47 KIT_ASSERT_BOOL(KIT_PKG_ENABLED); 48 KIT_ASSERT_BOOL(KIT_BUILD_ENABLED); 49 KIT_ASSERT_BOOL(KIT_COMPRESS_ENABLED); 50 KIT_ASSERT_BOOL(KIT_MAKE_ENABLED); 51 KIT_ASSERT_BOOL(KIT_GRAM_ENABLED); 52 KIT_ASSERT_BOOL(KIT_INTERP_ENABLED); 53 KIT_ASSERT_BOOL(KIT_INTERP_THREADED); 54 55 KIT_ASSERT_BOOL(KIT_TOOL_CC_ENABLED); 56 KIT_ASSERT_BOOL(KIT_TOOL_CHECK_ENABLED); 57 KIT_ASSERT_BOOL(KIT_TOOL_BUILD_EXE_ENABLED); 58 KIT_ASSERT_BOOL(KIT_TOOL_BUILD_LIB_ENABLED); 59 KIT_ASSERT_BOOL(KIT_TOOL_BUILD_OBJ_ENABLED); 60 KIT_ASSERT_BOOL(KIT_TOOL_BUILD_ENABLED); 61 KIT_ASSERT_BOOL(KIT_TOOL_MAKE_ENABLED); 62 KIT_ASSERT_BOOL(KIT_TOOL_INSTALL_ENABLED); 63 KIT_ASSERT_BOOL(KIT_TOOL_CPP_ENABLED); 64 KIT_ASSERT_BOOL(KIT_TOOL_AS_ENABLED); 65 KIT_ASSERT_BOOL(KIT_TOOL_LD_ENABLED); 66 KIT_ASSERT_BOOL(KIT_TOOL_AR_ENABLED); 67 KIT_ASSERT_BOOL(KIT_TOOL_RANLIB_ENABLED); 68 KIT_ASSERT_BOOL(KIT_TOOL_STRIP_ENABLED); 69 KIT_ASSERT_BOOL(KIT_TOOL_OBJCOPY_ENABLED); 70 KIT_ASSERT_BOOL(KIT_TOOL_OBJDUMP_ENABLED); 71 KIT_ASSERT_BOOL(KIT_TOOL_DBG_ENABLED); 72 KIT_ASSERT_BOOL(KIT_TOOL_RUN_ENABLED); 73 KIT_ASSERT_BOOL(KIT_TOOL_EMU_ENABLED); 74 KIT_ASSERT_BOOL(KIT_TOOL_NM_ENABLED); 75 KIT_ASSERT_BOOL(KIT_TOOL_SIZE_ENABLED); 76 KIT_ASSERT_BOOL(KIT_TOOL_ADDR2LINE_ENABLED); 77 KIT_ASSERT_BOOL(KIT_TOOL_SYMBOLIZE_ENABLED); 78 KIT_ASSERT_BOOL(KIT_TOOL_STRINGS_ENABLED); 79 KIT_ASSERT_BOOL(KIT_TOOL_CAS_ENABLED); 80 KIT_ASSERT_BOOL(KIT_TOOL_PKG_ENABLED); 81 KIT_ASSERT_BOOL(KIT_TOOL_XXD_ENABLED); 82 KIT_ASSERT_BOOL(KIT_TOOL_CMP_ENABLED); 83 KIT_ASSERT_BOOL(KIT_TOOL_HASH_ENABLED); 84 KIT_ASSERT_BOOL(KIT_TOOL_COMPRESS_ENABLED); 85 KIT_ASSERT_BOOL(KIT_TOOL_DISAS_ENABLED); 86 KIT_ASSERT_BOOL(KIT_TOOL_MC_ENABLED); 87 KIT_ASSERT_BOOL(KIT_TOOL_GRAM_ENABLED); 88 KIT_ASSERT_BOOL(KIT_TOOL_UPDATE_ENABLED); 89 KIT_ASSERT_BOOL(KIT_TOOL_TARGETS_ENABLED); 90 91 #undef KIT_ASSERT_BOOL 92 93 _Static_assert(!KIT_LANG_C_ENABLED || KIT_LANG_CPP_ENABLED, 94 "KIT_LANG_C_ENABLED requires KIT_LANG_CPP_ENABLED"); 95 _Static_assert(!KIT_ARCH_WASM_ENABLED || KIT_OBJ_WASM_ENABLED, 96 "KIT_ARCH_WASM_ENABLED requires KIT_OBJ_WASM_ENABLED"); 97 98 _Static_assert(!KIT_JIT_ENABLED || KIT_LINK_ENABLED, 99 "KIT_JIT_ENABLED requires KIT_LINK_ENABLED"); 100 _Static_assert(!KIT_DBG_ENABLED || (KIT_JIT_ENABLED && KIT_DWARF_ENABLED), 101 "KIT_DBG_ENABLED requires KIT_JIT_ENABLED and " 102 "KIT_DWARF_ENABLED"); 103 _Static_assert(!KIT_EMU_ENABLED || (KIT_JIT_ENABLED && KIT_LINK_ENABLED && 104 KIT_DISASM_ENABLED && KIT_OBJ_ELF_ENABLED), 105 "KIT_EMU_ENABLED requires JIT, link, disasm, and ELF " 106 "support"); 107 _Static_assert(!KIT_INTERP_ENABLED || KIT_OPT_ENABLED, 108 "KIT_INTERP_ENABLED requires KIT_OPT_ENABLED"); 109 _Static_assert(!KIT_PKG_ENABLED || KIT_CAS_ENABLED, 110 "KIT_PKG_ENABLED requires KIT_CAS_ENABLED"); 111 _Static_assert(!KIT_BUILD_ENABLED || KIT_CAS_ENABLED, 112 "KIT_BUILD_ENABLED requires KIT_CAS_ENABLED"); 113 114 _Static_assert(!KIT_TOOL_CC_ENABLED || 115 (KIT_LANG_C_ENABLED && KIT_LINK_ENABLED && KIT_AR_ENABLED), 116 "KIT_TOOL_CC_ENABLED requires C, link, and ar support"); 117 _Static_assert(!KIT_TOOL_CHECK_ENABLED || KIT_LANG_C_ENABLED, 118 "KIT_TOOL_CHECK_ENABLED requires C support"); 119 /* The build-* verbs share build.c, which drives kit_build_link and the 120 * archive engine unconditionally; every BUILD_* subset needs link + ar. */ 121 _Static_assert(!KIT_TOOL_BUILD_EXE_ENABLED || 122 (KIT_LINK_ENABLED && KIT_AR_ENABLED), 123 "KIT_TOOL_BUILD_EXE_ENABLED requires link and ar support"); 124 _Static_assert(!KIT_TOOL_BUILD_LIB_ENABLED || 125 (KIT_LINK_ENABLED && KIT_AR_ENABLED), 126 "KIT_TOOL_BUILD_LIB_ENABLED requires link and ar support"); 127 _Static_assert(!KIT_TOOL_BUILD_OBJ_ENABLED || 128 (KIT_LINK_ENABLED && KIT_AR_ENABLED), 129 "KIT_TOOL_BUILD_OBJ_ENABLED requires link and ar support"); 130 _Static_assert(!KIT_TOOL_BUILD_ENABLED || KIT_BUILD_ENABLED, 131 "KIT_TOOL_BUILD_ENABLED requires build coordinator support"); 132 _Static_assert(!KIT_TOOL_MAKE_ENABLED || KIT_MAKE_ENABLED, 133 "KIT_TOOL_MAKE_ENABLED requires make subsystem support"); 134 _Static_assert(!KIT_TOOL_CPP_ENABLED || KIT_LANG_CPP_ENABLED, 135 "KIT_TOOL_CPP_ENABLED requires C preprocessor support"); 136 _Static_assert(!KIT_TOOL_LD_ENABLED || KIT_LINK_ENABLED, 137 "KIT_TOOL_LD_ENABLED requires link support"); 138 _Static_assert(!KIT_TOOL_AR_ENABLED || KIT_AR_ENABLED, 139 "KIT_TOOL_AR_ENABLED requires ar support"); 140 _Static_assert(!KIT_TOOL_RANLIB_ENABLED || KIT_AR_ENABLED, 141 "KIT_TOOL_RANLIB_ENABLED requires ar support"); 142 _Static_assert(!KIT_TOOL_STRIP_ENABLED || KIT_AR_ENABLED, 143 "KIT_TOOL_STRIP_ENABLED requires ar support"); 144 _Static_assert(!KIT_TOOL_OBJCOPY_ENABLED || KIT_AR_ENABLED, 145 "KIT_TOOL_OBJCOPY_ENABLED requires ar support"); 146 _Static_assert(!KIT_TOOL_OBJDUMP_ENABLED || KIT_DISASM_ENABLED, 147 "KIT_TOOL_OBJDUMP_ENABLED requires disasm support"); 148 _Static_assert(!KIT_TOOL_RUN_ENABLED || (KIT_JIT_ENABLED && KIT_LINK_ENABLED), 149 "KIT_TOOL_RUN_ENABLED requires JIT and link support"); 150 _Static_assert(!KIT_TOOL_DBG_ENABLED || KIT_DBG_ENABLED, 151 "KIT_TOOL_DBG_ENABLED requires debugger support"); 152 _Static_assert(!KIT_TOOL_EMU_ENABLED || KIT_EMU_ENABLED, 153 "KIT_TOOL_EMU_ENABLED requires emulator support"); 154 _Static_assert(!KIT_TOOL_NM_ENABLED || KIT_AR_ENABLED, 155 "KIT_TOOL_NM_ENABLED requires ar support"); 156 _Static_assert(!KIT_TOOL_SIZE_ENABLED || KIT_AR_ENABLED, 157 "KIT_TOOL_SIZE_ENABLED requires ar support"); 158 _Static_assert(!KIT_TOOL_ADDR2LINE_ENABLED || KIT_DWARF_ENABLED, 159 "KIT_TOOL_ADDR2LINE_ENABLED requires DWARF support"); 160 _Static_assert(!KIT_TOOL_SYMBOLIZE_ENABLED || KIT_DWARF_ENABLED, 161 "KIT_TOOL_SYMBOLIZE_ENABLED requires DWARF support"); 162 _Static_assert(!KIT_TOOL_CAS_ENABLED || KIT_CAS_ENABLED, 163 "KIT_TOOL_CAS_ENABLED requires CAS support"); 164 _Static_assert(!KIT_TOOL_PKG_ENABLED || KIT_PKG_ENABLED, 165 "KIT_TOOL_PKG_ENABLED requires PKG support"); 166 _Static_assert(!KIT_TOOL_COMPRESS_ENABLED || KIT_COMPRESS_ENABLED, 167 "KIT_TOOL_COMPRESS_ENABLED requires compression support"); 168 _Static_assert(!KIT_TOOL_DISAS_ENABLED || KIT_DISASM_ENABLED, 169 "KIT_TOOL_DISAS_ENABLED requires disasm support"); 170 _Static_assert(!KIT_TOOL_MC_ENABLED || KIT_DISASM_ENABLED, 171 "KIT_TOOL_MC_ENABLED requires disasm support"); 172 _Static_assert(!KIT_TOOL_GRAM_ENABLED || KIT_GRAM_ENABLED, 173 "KIT_TOOL_GRAM_ENABLED requires gram support"); 174 _Static_assert(!KIT_TOOL_UPDATE_ENABLED || (KIT_PKG_ENABLED && KIT_CAS_ENABLED), 175 "KIT_TOOL_UPDATE_ENABLED requires package + CAS support");