From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Monjalon Subject: Re: [PATCH] fm10k: fix the compilation on big endian platforms Date: Mon, 03 Aug 2015 11:06:49 +0200 Message-ID: <1533915.C0IUmFEqd8@xps13> References: <1438583517-19035-1-git-send-email-chaozhu@linux.vnet.ibm.com> <1438583517-19035-2-git-send-email-chaozhu@linux.vnet.ibm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7Bit Cc: dev@dpdk.org To: Chao Zhu Return-path: Received: from mail-wi0-f170.google.com (mail-wi0-f170.google.com [209.85.212.170]) by dpdk.org (Postfix) with ESMTP id 2D4EC255 for ; Mon, 3 Aug 2015 11:08:03 +0200 (CEST) Received: by wibud3 with SMTP id ud3so127109541wib.1 for ; Mon, 03 Aug 2015 02:08:03 -0700 (PDT) In-Reply-To: <1438583517-19035-2-git-send-email-chaozhu@linux.vnet.ibm.com> List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" 2015-08-03 14:31, Chao Zhu: > The rte_cpu_to_le_32 function can't be used to define const variables > because it has different implementation on big endian platforms. If > doing so, it will cause 'initializer element is not constant' compiling > error. This patch fixes this problem. > --- a/drivers/net/fm10k/base/fm10k_tlv.c > +++ b/drivers/net/fm10k/base/fm10k_tlv.c You cannot change a base driver file except the osdep header where FM10K_CPU_TO_LE32 is defined. I don't understand why it doesn't give you a constant, given this definition: #define rte_bswap32(x) ((uint32_t)(__builtin_constant_p(x) ? \ rte_constant_bswap32(x) : \ rte_arch_bswap32(x))) Have you tried CONFIG_RTE_FORCE_INTRINSICS=y ? It should trigger this definition: #define rte_bswap32(x) __builtin_bswap32(x) > -STATIC const __le32 test_le[2] = { FM10K_CPU_TO_LE32(0x12345678), > - FM10K_CPU_TO_LE32(0x9abcdef0)}; > +#if RTE_BYTE_ORDER == RTE_BIG_ENDIAN > +STATIC const __le32 test_le[2] = {0x78563412,0xf0debc9a}; > +#else > +STATIC const __le32 test_le[2] = {0x12345678,0x9abcdef0}; > +#endif