#ifndef XTF_X86_CONFIG_H
#define XTF_X86_CONFIG_H
+#include <xtf/macro_magic.h>
+
#if defined(CONFIG_ENV_pv64)
-#define CONFIG_PV
+#define CONFIG_PV 1
#define CONFIG_PAGING_LEVELS 4
#define ENVIRONMENT_DESCRIPTION "PV 64bit (Long mode 4 levels)"
#elif defined(CONFIG_ENV_pv32pae)
-#define CONFIG_PV
+#define CONFIG_PV 1
#define CONFIG_PAGING_LEVELS 3
#define ENVIRONMENT_DESCRIPTION "PV 32bit (PAE 3 levels)"
#elif defined(CONFIG_ENV_hvm64)
-#define CONFIG_HVM
+#define CONFIG_HVM 1
#define CONFIG_PAGING_LEVELS 4
#define ENVIRONMENT_DESCRIPTION "HVM 64bit (Long mode 4 levels)"
#elif defined(CONFIG_ENV_hvm32pae)
-#define CONFIG_HVM
+#define CONFIG_HVM 1
#define CONFIG_PAGING_LEVELS 3
#define ENVIRONMENT_DESCRIPTION "HVM 32bit (PAE 3 levels)"
#elif defined(CONFIG_ENV_hvm32pse)
-#define CONFIG_HVM
+#define CONFIG_HVM 1
#define CONFIG_PAGING_LEVELS 2
#define ENVIRONMENT_DESCRIPTION "HVM 32bit (PSE 2 levels)"
#elif defined(CONFIG_ENV_hvm32)
-#define CONFIG_HVM
+#define CONFIG_HVM 1
#define CONFIG_PAGING_LEVELS 0
#define ENVIRONMENT_DESCRIPTION "HVM 32bit (No paging)"
#define VAR_MACRO_C1(macro, c1, ...) \
VAR_MACRO_C1_(macro, c1, VA_NARGS(__VA_ARGS__), ##__VA_ARGS__)
+/**
+ * Evalute whether the CONFIG_ token @p x is defined
+ *
+ * Suitable for use in an `if ()` condition, even if @p x is not defined.
+ * Will strictly evaluate to 0 or 1.
+ */
+#define IS_DEFINED(x) _IS_DEFINED(x)
+/** @cond */
+#define _IS_DEFINED_PARTIAL_1 0,
+#define _IS_DEFINED(x) __IS_DEFINED(_IS_DEFINED_PARTIAL_ ## x)
+#define __IS_DEFINED(y) ___IS_DEFINED(y 1, 0)
+#define ___IS_DEFINED(maybe, val, ...) val
+/** @endcond */
+
#endif /* XTF_MACRO_MAGIC_H */
/*