[dpdk-dev] net/mlx: update C compliance standard

Message ID 4bc47a8c50dc528f8061d95cdd0c0934e4e40b38.1498843072.git.adrien.mazarguil@6wind.com (mailing list archive)
State Accepted, archived
Delegated to: Ferruh Yigit
Headers

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation fail Compilation issues

Commit Message

Adrien Mazarguil June 30, 2017, 5:19 p.m. UTC
  This commit addresses a compilation issue against Glibc >= 2.25, which
implements assert() through a nonstandard ({ }) construct. Such constructs
can normally not be used without __extension__ keyword when -pedantic is
enabled, as is the case when compiling mlx4 and mlx5 PMDs in debug mode.

While assert.h checks for the compiler ability to support GNU extensions,
Clang, unlike GCC, does not allow the above syntax when combining
-std=gnu99 with -pedantic.

Work around missing keyword by moving these PMDs to a stricter compliance
standard without GNU extensions but properly checked by Glibc. Doing so is
supported on the DPDK side since includes have been cleaned up.

Signed-off-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>
---
 drivers/net/mlx4/Makefile | 2 +-
 drivers/net/mlx5/Makefile | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)
  

Comments

Ferruh Yigit June 30, 2017, 5:47 p.m. UTC | #1
On 6/30/2017 6:19 PM, Adrien Mazarguil wrote:
> This commit addresses a compilation issue against Glibc >= 2.25, which
> implements assert() through a nonstandard ({ }) construct. Such constructs
> can normally not be used without __extension__ keyword when -pedantic is
> enabled, as is the case when compiling mlx4 and mlx5 PMDs in debug mode.
> 
> While assert.h checks for the compiler ability to support GNU extensions,
> Clang, unlike GCC, does not allow the above syntax when combining
> -std=gnu99 with -pedantic.
> 
> Work around missing keyword by moving these PMDs to a stricter compliance
> standard without GNU extensions but properly checked by Glibc. Doing so is
> supported on the DPDK side since includes have been cleaned up.
> 
> Signed-off-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>

Applied to dpdk-next-net/master, thanks.
  
Yongseok Koh June 30, 2017, 6:14 p.m. UTC | #2
> On Jun 30, 2017, at 10:47 AM, Ferruh Yigit <ferruh.yigit@intel.com> wrote:
> 
> On 6/30/2017 6:19 PM, Adrien Mazarguil wrote:
>> This commit addresses a compilation issue against Glibc >= 2.25, which
>> implements assert() through a nonstandard ({ }) construct. Such constructs
>> can normally not be used without __extension__ keyword when -pedantic is
>> enabled, as is the case when compiling mlx4 and mlx5 PMDs in debug mode.
>> 
>> While assert.h checks for the compiler ability to support GNU extensions,
>> Clang, unlike GCC, does not allow the above syntax when combining
>> -std=gnu99 with -pedantic.
>> 
>> Work around missing keyword by moving these PMDs to a stricter compliance
>> standard without GNU extensions but properly checked by Glibc. Doing so is
>> supported on the DPDK side since includes have been cleaned up.
>> 
>> Signed-off-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>
> 
> Applied to dpdk-next-net/master, thanks.
This breaks debug-enabled build of mlx5 as mlx5 isn't ready yet!

Thanks,
Yongseok
  
Yongseok Koh June 30, 2017, 6:25 p.m. UTC | #3
Hi,



Thanks,
Yongseok

> On Jun 30, 2017, at 11:14 AM, Yongseok Koh <yskoh@mellanox.com> wrote:

> 

> 

>> On Jun 30, 2017, at 10:47 AM, Ferruh Yigit <ferruh.yigit@intel.com> wrote:

>> 

>> On 6/30/2017 6:19 PM, Adrien Mazarguil wrote:

>>> This commit addresses a compilation issue against Glibc >= 2.25, which

>>> implements assert() through a nonstandard ({ }) construct. Such constructs

>>> can normally not be used without __extension__ keyword when -pedantic is

>>> enabled, as is the case when compiling mlx4 and mlx5 PMDs in debug mode.

>>> 

>>> While assert.h checks for the compiler ability to support GNU extensions,

>>> Clang, unlike GCC, does not allow the above syntax when combining

>>> -std=gnu99 with -pedantic.

>>> 

>>> Work around missing keyword by moving these PMDs to a stricter compliance

>>> standard without GNU extensions but properly checked by Glibc. Doing so is

>>> supported on the DPDK side since includes have been cleaned up.

>>> 

>>> Signed-off-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>

>> 

>> Applied to dpdk-next-net/master, thanks.

> This breaks debug-enabled build of mlx5 as mlx5 isn't ready yet!

Specifically, the following errors happen. It might be better to later make the
change for mlx5 with further cleanup.

  CC mlx5_flow.o
In file included from /.autodirect/swgwork/yskoh/git/mellanox/dpdk.org/drivers/net/mlx5/mlx5.h:68:0,
                 from /.autodirect/swgwork/yskoh/git/mellanox/dpdk.org/drivers/net/mlx5/mlx5_rxtx_vec_sse.c:62:
/.autodirect/swgwork/yskoh/git/mellanox/dpdk.org/drivers/net/mlx5/mlx5_rxtx.h:258:2: error: type of bit-field ‘elts_n’ is a GCC extension [-Werror=pedantic]
  uint16_t elts_n:4; /* (*elts)[] length (in log2). */
  ^
In file included from /.autodirect/swgwork/yskoh/git/mellanox/dpdk.org/drivers/net/mlx5/mlx5.h:68:0,
                 from /.autodirect/swgwork/yskoh/git/mellanox/dpdk.org/drivers/net/mlx5/mlx5_rxtx.c:65:
/.autodirect/swgwork/yskoh/git/mellanox/dpdk.org/drivers/net/mlx5/mlx5_rxtx.h:258:2: error: type of bit-field ‘elts_n’ is a GCC extension [-Werror=pedantic]
  uint16_t elts_n:4; /* (*elts)[] length (in log2). */
  ^
In file included from /.autodirect/swgwork/yskoh/git/mellanox/dpdk.org/drivers/net/mlx5/mlx5.h:68:0,
                 from /.autodirect/swgwork/yskoh/git/mellanox/dpdk.org/drivers/net/mlx5/mlx5_rxq.c:67:
/.autodirect/swgwork/yskoh/git/mellanox/dpdk.org/drivers/net/mlx5/mlx5_rxtx.h:258:2: error: type of bit-field ‘elts_n’ is a GCC extension [-Werror=pedantic]
  uint16_t elts_n:4; /* (*elts)[] length (in log2). */

Thanks,
Yongseok
  
Ferruh Yigit July 1, 2017, 3:58 p.m. UTC | #4
On 6/30/2017 7:25 PM, Yongseok Koh wrote:
> 
> Hi,
> 
> 
> 
> Thanks,
> Yongseok
> 
>> On Jun 30, 2017, at 11:14 AM, Yongseok Koh <yskoh@mellanox.com> wrote:
>>
>>
>>> On Jun 30, 2017, at 10:47 AM, Ferruh Yigit <ferruh.yigit@intel.com> wrote:
>>>
>>> On 6/30/2017 6:19 PM, Adrien Mazarguil wrote:
>>>> This commit addresses a compilation issue against Glibc >= 2.25, which
>>>> implements assert() through a nonstandard ({ }) construct. Such constructs
>>>> can normally not be used without __extension__ keyword when -pedantic is
>>>> enabled, as is the case when compiling mlx4 and mlx5 PMDs in debug mode.
>>>>
>>>> While assert.h checks for the compiler ability to support GNU extensions,
>>>> Clang, unlike GCC, does not allow the above syntax when combining
>>>> -std=gnu99 with -pedantic.
>>>>
>>>> Work around missing keyword by moving these PMDs to a stricter compliance
>>>> standard without GNU extensions but properly checked by Glibc. Doing so is
>>>> supported on the DPDK side since includes have been cleaned up.
>>>>
>>>> Signed-off-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>
>>>
>>> Applied to dpdk-next-net/master, thanks.
>> This breaks debug-enabled build of mlx5 as mlx5 isn't ready yet!
> Specifically, the following errors happen. It might be better to later make the
> change for mlx5 with further cleanup.

I don't see build errors.
Patch is requested to fix mlx DEBUG builds [1]. Can you please give more
details how to reproduce build error?

[1]
http://dpdk.org/ml/archives/dev/2017-June/067866.html
  
Yongseok Koh July 2, 2017, 12:12 a.m. UTC | #5
> On Jul 1, 2017, at 8:58 AM, Ferruh Yigit <ferruh.yigit@intel.com> wrote:
> 
> On 6/30/2017 7:25 PM, Yongseok Koh wrote:
>> 
>>> On Jun 30, 2017, at 11:14 AM, Yongseok Koh <yskoh@mellanox.com> wrote:
>>> 
>>> 
>>>> On Jun 30, 2017, at 10:47 AM, Ferruh Yigit <ferruh.yigit@intel.com> wrote:
>>>> 
>>>> On 6/30/2017 6:19 PM, Adrien Mazarguil wrote:
>>>>> This commit addresses a compilation issue against Glibc >= 2.25, which
>>>>> implements assert() through a nonstandard ({ }) construct. Such constructs
>>>>> can normally not be used without __extension__ keyword when -pedantic is
>>>>> enabled, as is the case when compiling mlx4 and mlx5 PMDs in debug mode.
>>>>> 
>>>>> While assert.h checks for the compiler ability to support GNU extensions,
>>>>> Clang, unlike GCC, does not allow the above syntax when combining
>>>>> -std=gnu99 with -pedantic.
>>>>> 
>>>>> Work around missing keyword by moving these PMDs to a stricter compliance
>>>>> standard without GNU extensions but properly checked by Glibc. Doing so is
>>>>> supported on the DPDK side since includes have been cleaned up.
>>>>> 
>>>>> Signed-off-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>
>>>> 
>>>> Applied to dpdk-next-net/master, thanks.
>>> This breaks debug-enabled build of mlx5 as mlx5 isn't ready yet!
>> Specifically, the following errors happen. It might be better to later make the
>> change for mlx5 with further cleanup.
> 
> I don't see build errors.
> Patch is requested to fix mlx DEBUG builds [1]. Can you please give more
> details how to reproduce build error?

Mine is on CentOS 7.3 and gcc is "version 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC)"
Adrien chatted with me and he is already preparing a simple patch. I've also
verified his patch fixed the issue.

Thanks,
Yongseok
  

Patch

diff --git a/drivers/net/mlx4/Makefile b/drivers/net/mlx4/Makefile
index e873fb4..755c8a4 100644
--- a/drivers/net/mlx4/Makefile
+++ b/drivers/net/mlx4/Makefile
@@ -40,7 +40,7 @@  SRCS-$(CONFIG_RTE_LIBRTE_MLX4_PMD) += mlx4_flow.c
 
 # Basic CFLAGS.
 CFLAGS += -O3
-CFLAGS += -std=gnu99 -Wall -Wextra
+CFLAGS += -std=c11 -Wall -Wextra
 CFLAGS += -g
 CFLAGS += -I.
 CFLAGS += -D_BSD_SOURCE
diff --git a/drivers/net/mlx5/Makefile b/drivers/net/mlx5/Makefile
index daf8013..8b8f6ea 100644
--- a/drivers/net/mlx5/Makefile
+++ b/drivers/net/mlx5/Makefile
@@ -52,7 +52,7 @@  SRCS-$(CONFIG_RTE_LIBRTE_MLX5_PMD) += mlx5_flow.c
 
 # Basic CFLAGS.
 CFLAGS += -O3
-CFLAGS += -std=gnu99 -Wall -Wextra
+CFLAGS += -std=c11 -Wall -Wextra
 CFLAGS += -g
 CFLAGS += -I.
 CFLAGS += -D_BSD_SOURCE