* Forward declaration of enum in C++ requires explicit underlying type definitions.
* This fixes the issue at: http://dpdk.org/ml/archives/dev/2015-April/017065.html Signed-off-by: Joongi Kim <joongi at an.kaist.ac.kr> --- lib/librte_eal/common/include/arch/x86/rte_cpuflags.h | 4 ++-- lib/librte_eal/common/include/generic/rte_cpuflags.h | 12 ++++++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/lib/librte_eal/common/include/arch/x86/rte_cpuflags.h b/lib/librte_eal/common/include/arch/x86/rte_cpuflags.h index dd56553..df1834c 100644 --- a/lib/librte_eal/common/include/arch/x86/rte_cpuflags.h +++ b/lib/librte_eal/common/include/arch/x86/rte_cpuflags.h @@ -45,7 +45,7 @@ extern "C" { #include "generic/rte_cpuflags.h" -enum rte_cpu_flag_t { +enum rte_cpu_flag_t __RTE_CPUFLAG_UNDERLYING_TYPE { /* (EAX 01h) ECX features*/ RTE_CPUFLAG_SSE3 = 0, /**< SSE3 */ RTE_CPUFLAG_PCLMULQDQ, /**< PCLMULQDQ */ @@ -150,7 +150,7 @@ enum rte_cpu_flag_t { RTE_CPUFLAG_NUMFLAGS, /**< This should always be the last! */ }; -enum cpu_register_t { +enum cpu_register_t __RTE_REGISTER_UNDERLYING_TYPE { RTE_REG_EAX = 0, RTE_REG_EBX, RTE_REG_ECX, diff --git a/lib/librte_eal/common/include/generic/rte_cpuflags.h b/lib/librte_eal/common/include/generic/rte_cpuflags.h index 61c4db1..5352cbc 100644 --- a/lib/librte_eal/common/include/generic/rte_cpuflags.h +++ b/lib/librte_eal/common/include/generic/rte_cpuflags.h @@ -44,15 +44,23 @@ #include <errno.h> #include <stdint.h> +#ifdef __cplusplus +#define __RTE_CPUFLAG_UNDERLYING_TYPE : unsigned int +#define __RTE_REGISTER_UNDERLYING_TYPE : unsigned int +#else +#define __RTE_CPUFLAG_UNDERLYING_TYPE +#define __RTE_REGISTER_UNDERLYING_TYPE +#endif + /** * Enumeration of all CPU features supported */ -enum rte_cpu_flag_t; +enum rte_cpu_flag_t __RTE_CPUFLAG_UNDERLYING_TYPE; /** * Enumeration of CPU registers */ -enum cpu_register_t; +enum cpu_register_t __RTE_REGISTER_UNDERLYING_TYPE; typedef uint32_t cpuid_registers_t[4]; -- 1.9.1