[dpdk-dev,v2] mk: Only default to -Werror when building from git checkout

Message ID 65cbd71d3b5b45f469a2fe67fe8b0def4bddebbd.1423754231.git.pmatilai@redhat.com (mailing list archive)
State Changes Requested, archived
Headers

Commit Message

Panu Matilainen Feb. 12, 2015, 3:18 p.m. UTC
Add RTE_DEVEL_BUILD make-variable which can be used to do things
differently when doing development vs building a release,
autodetected from source root .git presence and overridable via
commandline. Use it to only enable -Werror compiler flag when
building a git checkout:

Failing build on warnings is a useful developer tool but its bad
for release tarballs which can and do get built with newer
compilers than what was used/available during development. Compilers
routinely add new warnings so code which built silently with cc X
might no longer do so with X+1. This doesn't make the existing code
any more buggier and failing the build in this case does not help
not help improve code quality of an already released version either.
---
 mk/rte.vars.mk                 | 4 ++++
 mk/toolchain/clang/rte.vars.mk | 6 +++++-
 mk/toolchain/gcc/rte.vars.mk   | 6 +++++-
 mk/toolchain/icc/rte.vars.mk   | 6 +++++-
 4 files changed, 19 insertions(+), 3 deletions(-)
  

Comments

Thomas Monjalon Feb. 20, 2015, 12:15 p.m. UTC | #1
2015-02-12 17:18, Panu Matilainen:
> Add RTE_DEVEL_BUILD make-variable which can be used to do things
> differently when doing development vs building a release,
> autodetected from source root .git presence and overridable via
> commandline. Use it to only enable -Werror compiler flag when
> building a git checkout:
> 
> Failing build on warnings is a useful developer tool but its bad
> for release tarballs which can and do get built with newer
> compilers than what was used/available during development. Compilers
> routinely add new warnings so code which built silently with cc X
> might no longer do so with X+1. This doesn't make the existing code
> any more buggier and failing the build in this case does not help
> not help improve code quality of an already released version either.

Please, could you update documentation to explain RTE_DEVEL_BUILD option?
Some users could try to build from git, so we should advise to disable RTE_DEVEL_BUILD.
These files might be updated:
	http://dpdk.org/browse/dpdk/tree/doc/build-sdk-quick.txt
	http://dpdk.org/browse/dpdk/tree/doc/guides/linux_gsg/build_dpdk.rst
	http://dpdk.org/browse/dpdk/tree/doc/guides/freebsd_gsg/build_dpdk.rst
	http://dpdk.org/browse/dpdk/tree/doc/guides/prog_guide/dev_kit_build_system.rst

Thanks
  
Stephen Hemminger Feb. 21, 2015, 2:15 a.m. UTC | #2
On Fri, 20 Feb 2015 13:15:38 +0100
Thomas Monjalon <thomas.monjalon@6wind.com> wrote:

> 2015-02-12 17:18, Panu Matilainen:
> > Add RTE_DEVEL_BUILD make-variable which can be used to do things
> > differently when doing development vs building a release,
> > autodetected from source root .git presence and overridable via
> > commandline. Use it to only enable -Werror compiler flag when
> > building a git checkout:
> > 
> > Failing build on warnings is a useful developer tool but its bad
> > for release tarballs which can and do get built with newer
> > compilers than what was used/available during development. Compilers
> > routinely add new warnings so code which built silently with cc X
> > might no longer do so with X+1. This doesn't make the existing code
> > any more buggier and failing the build in this case does not help
> > not help improve code quality of an already released version either.
> 
> Please, could you update documentation to explain RTE_DEVEL_BUILD option?
> Some users could try to build from git, so we should advise to disable RTE_DEVEL_BUILD.
> These files might be updated:
> 	http://dpdk.org/browse/dpdk/tree/doc/build-sdk-quick.txt
> 	http://dpdk.org/browse/dpdk/tree/doc/guides/linux_gsg/build_dpdk.rst
> 	http://dpdk.org/browse/dpdk/tree/doc/guides/freebsd_gsg/build_dpdk.rst
> 	http://dpdk.org/browse/dpdk/tree/doc/guides/prog_guide/dev_kit_build_system.rst
> 
> Thanks

Also do not allow any patches to into upstream that cause
new warnings with latest stable version of Gcc or Clang?
I don't want a clean project to get littered with warning graffiti.
Maybe a build bot?
  
Thomas Monjalon Feb. 21, 2015, 10:48 a.m. UTC | #3
2015-02-20 18:15, Stephen Hemminger:
> On Fri, 20 Feb 2015 13:15:38 +0100
> Thomas Monjalon <thomas.monjalon@6wind.com> wrote:
> 
> > 2015-02-12 17:18, Panu Matilainen:
> > > Add RTE_DEVEL_BUILD make-variable which can be used to do things
> > > differently when doing development vs building a release,
> > > autodetected from source root .git presence and overridable via
> > > commandline. Use it to only enable -Werror compiler flag when
> > > building a git checkout:
> > > 
> > > Failing build on warnings is a useful developer tool but its bad
> > > for release tarballs which can and do get built with newer
> > > compilers than what was used/available during development. Compilers
> > > routinely add new warnings so code which built silently with cc X
> > > might no longer do so with X+1. This doesn't make the existing code
> > > any more buggier and failing the build in this case does not help
> > > not help improve code quality of an already released version either.
> > 
> > Please, could you update documentation to explain RTE_DEVEL_BUILD option?
> > Some users could try to build from git, so we should advise to disable RTE_DEVEL_BUILD.
> > These files might be updated:
> > 	http://dpdk.org/browse/dpdk/tree/doc/build-sdk-quick.txt
> > 	http://dpdk.org/browse/dpdk/tree/doc/guides/linux_gsg/build_dpdk.rst
> > 	http://dpdk.org/browse/dpdk/tree/doc/guides/freebsd_gsg/build_dpdk.rst
> > 	http://dpdk.org/browse/dpdk/tree/doc/guides/prog_guide/dev_kit_build_system.rst
> > 
> > Thanks
> 
> Also do not allow any patches to into upstream that cause
> new warnings with latest stable version of Gcc or Clang?
> I don't want a clean project to get littered with warning graffiti.
> Maybe a build bot?

Yes there are some daily builds with many compilers/distros.
We'll have to be sure that they are done in devel mode (with -Werror).
Anyway devel build is a sanity check which should be done by every developers
and reviewers.
  

Patch

diff --git a/mk/rte.vars.mk b/mk/rte.vars.mk
index d5b36be..a4ad367 100644
--- a/mk/rte.vars.mk
+++ b/mk/rte.vars.mk
@@ -71,6 +71,10 @@  ifneq ($(BUILDING_RTE_SDK),)
   ifeq ($(RTE_BUILD_COMBINE_LIBS),)
     RTE_BUILD_COMBINE_LIBS := n
   endif
+  # see if we're building from git
+  ifneq ($(wildcard $(RTE_SDK)/.git),)
+    RTE_DEVEL_BUILD := y
+  endif
 endif
 
 RTE_LIBNAME := $(CONFIG_RTE_LIBNAME:"%"=%)
diff --git a/mk/toolchain/clang/rte.vars.mk b/mk/toolchain/clang/rte.vars.mk
index 40cb389..01b1860 100644
--- a/mk/toolchain/clang/rte.vars.mk
+++ b/mk/toolchain/clang/rte.vars.mk
@@ -63,12 +63,16 @@  TOOLCHAIN_ASFLAGS =
 TOOLCHAIN_CFLAGS =
 TOOLCHAIN_LDFLAGS =
 
-WERROR_FLAGS := -W -Wall -Werror -Wstrict-prototypes -Wmissing-prototypes
+WERROR_FLAGS := -W -Wall -Wstrict-prototypes -Wmissing-prototypes
 WERROR_FLAGS += -Wmissing-declarations -Wold-style-definition -Wpointer-arith
 WERROR_FLAGS += -Wnested-externs -Wcast-qual
 WERROR_FLAGS += -Wformat-nonliteral -Wformat-security
 WERROR_FLAGS += -Wundef -Wwrite-strings
 
+ifeq ($(RTE_DEVEL_BUILD),y)
+WERROR_FLAGS += -Werror
+endif
+
 # process cpu flags
 include $(RTE_SDK)/mk/toolchain/$(RTE_TOOLCHAIN)/rte.toolchain-compat.mk
 
diff --git a/mk/toolchain/gcc/rte.vars.mk b/mk/toolchain/gcc/rte.vars.mk
index 88f235c..fc3a642 100644
--- a/mk/toolchain/gcc/rte.vars.mk
+++ b/mk/toolchain/gcc/rte.vars.mk
@@ -71,12 +71,16 @@  ifeq (,$(findstring -O0,$(EXTRA_CFLAGS)))
 endif
 endif
 
-WERROR_FLAGS := -W -Wall -Werror -Wstrict-prototypes -Wmissing-prototypes
+WERROR_FLAGS := -W -Wall -Wstrict-prototypes -Wmissing-prototypes
 WERROR_FLAGS += -Wmissing-declarations -Wold-style-definition -Wpointer-arith
 WERROR_FLAGS += -Wcast-align -Wnested-externs -Wcast-qual
 WERROR_FLAGS += -Wformat-nonliteral -Wformat-security
 WERROR_FLAGS += -Wundef -Wwrite-strings
 
+ifeq ($(RTE_DEVEL_BUILD),y)
+WERROR_FLAGS += -Werror
+endif
+
 # process cpu flags
 include $(RTE_SDK)/mk/toolchain/$(RTE_TOOLCHAIN)/rte.toolchain-compat.mk
 
diff --git a/mk/toolchain/icc/rte.vars.mk b/mk/toolchain/icc/rte.vars.mk
index e39d710..0850719 100644
--- a/mk/toolchain/icc/rte.vars.mk
+++ b/mk/toolchain/icc/rte.vars.mk
@@ -69,9 +69,13 @@  TOOLCHAIN_ASFLAGS =
 #   error #13368: loop was not vectorized with "vector always assert"
 #   error #15527: loop was not vectorized: function call to fprintf cannot be vectorize
 #                   was declared "deprecated"
-WERROR_FLAGS := -Wall -Werror-all -w2 -diag-disable 271 -diag-warning 1478
+WERROR_FLAGS := -Wall -w2 -diag-disable 271 -diag-warning 1478
 WERROR_FLAGS += -diag-disable 13368 -diag-disable 15527
 
+ifeq ($(RTE_DEVEL_BUILD),y)
+WERROR_FLAGS += -Werror-all
+endif
+
 # process cpu flags
 include $(RTE_SDK)/mk/toolchain/$(RTE_TOOLCHAIN)/rte.toolchain-compat.mk
 # disable max-inline params boundaries for ICC 15 compiler