[dpdk-dev,v2] mk: Only default to -Werror when building from git checkout
Commit Message
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
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
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?
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.
@@ -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:"%"=%)
@@ -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
@@ -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
@@ -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