Re: [fsverity-utils PATCH] override CFLAGS too

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Oct 27, 2020 at 10:30:20AM +0000, Luca Boccassi wrote:
> On Mon, 2020-10-26 at 15:10 -0700, Eric Biggers wrote:
> > [+Jes Sorensen]
> > 
> > On Mon, Oct 26, 2020 at 08:48:31PM +0000, luca.boccassi@xxxxxxxxx wrote:
> > > From: Romain Perier <romain.perier@xxxxxxxxx>
> > > 
> > > Currently, CFLAGS are defined by default. It has to effect to define its
> > > c-compiler options only when the variable is not defined on the cmdline
> > > by the user, it is not possible to merge or mix both, while it could
> > > be interesting for using the app warning cflags or the pkg-config
> > > cflags, while using the distributor flags. Most distributions packages
> > > use their own compilation flags, typically for hardening purpose but not
> > > only. This fixes the issue by using the override keyword.
> > > 
> > > Signed-off-by: Romain Perier <romain.perier@xxxxxxxxx>
> > > ---
> > > Currently used in Debian, were we want to append context-specific
> > > compiler flags (eg: for compiler hardening options) without
> > > removing the default flags
> > > 
> > >  Makefile | 5 +++--
> > >  1 file changed, 3 insertions(+), 2 deletions(-)
> > > 
> > > diff --git a/Makefile b/Makefile
> > > index 6c6c8c9..5020cac 100644
> > > --- a/Makefile
> > > +++ b/Makefile
> > > @@ -35,14 +35,15 @@
> > >  cc-option = $(shell if $(CC) $(1) -c -x c /dev/null -o /dev/null > /dev/null 2>&1; \
> > >  	      then echo $(1); fi)
> > >  
> > > -CFLAGS ?= -O2 -Wall -Wundef					\
> > > +override CFLAGS := -O2 -Wall -Wundef				\
> > >  	$(call cc-option,-Wdeclaration-after-statement)		\
> > >  	$(call cc-option,-Wimplicit-fallthrough)		\
> > >  	$(call cc-option,-Wmissing-field-initializers)		\
> > >  	$(call cc-option,-Wmissing-prototypes)			\
> > >  	$(call cc-option,-Wstrict-prototypes)			\
> > >  	$(call cc-option,-Wunused-parameter)			\
> > > -	$(call cc-option,-Wvla)
> > > +	$(call cc-option,-Wvla)					\
> > > +	$(CFLAGS)
> > >  
> > >  override CPPFLAGS := -Iinclude -D_FILE_OFFSET_BITS=64 $(CPPFLAGS)
> > 
> > I had it like this originally, but Jes requested that it be changed to the
> > current way for rpm packaging.  See the thread:
> > https://lkml.kernel.org/linux-fscrypt/20200515205649.1670512-3-Jes.Sorensen@xxxxxxxxx/T/#u
> > 
> > Can we come to an agreement on one way to do it?
> > 
> > To me, the approach with 'override' makes more sense.  The only non-warning
> > option is -O2, and if someone doesn't want that, they can just specify
> > CFLAGS=-O0 and it will override -O2 (since the last option "wins").
> > 
> > Jes, can you explain why that way doesn't work with rpm?
> 
> I see - I'm pretty sure what we want to override is the optimization
> flag (and any other flag that affect the binary, eg: debugging
> symbols), but not the other flags that you set (eg: warnings).
> 
> So, how about this v2:
> 
> From b48d09b1868cfa50b2cd61eec2951f722943e421 Mon Sep 17 00:00:00 2001
> From: Romain Perier <romain.perier@xxxxxxxxx>
> Date: Sun, 19 Apr 2020 09:24:09 +0200
> Subject: [PATCH] override CFLAGS too
> 
> Currently, CFLAGS are defined by default. It has to effect to define its
> c-compiler options only when the variable is not defined on the cmdline
> by the user, it is not possible to merge or mix both, while it could
> be interesting for using the app warning cflags or the pkg-config
> cflags, while using the distributor flags. Most distributions packages
> use their own compilation flags, typically for hardening purpose but not
> only. This fixes the issue by using the override keyword.
> 
> Signed-off-by: Romain Perier <romain.perier@xxxxxxxxx>
> ---
>  Makefile | 23 ++++++++++++++---------
>  1 file changed, 14 insertions(+), 9 deletions(-)
> 
> diff --git a/Makefile b/Makefile
> index 6c6c8c9..82abfe9 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -35,14 +35,19 @@
>  cc-option = $(shell if $(CC) $(1) -c -x c /dev/null -o /dev/null > /dev/null 2>&1; \
>  	      then echo $(1); fi)
>  
> -CFLAGS ?= -O2 -Wall -Wundef					\
> +# Flags that callers can override
> +CFLAGS ?= -O2
> +
> +# Flags that we always want to use
> +INTERNAL_CFLAGS := -Wall -Wundef				\
>  	$(call cc-option,-Wdeclaration-after-statement)		\
>  	$(call cc-option,-Wimplicit-fallthrough)		\
>  	$(call cc-option,-Wmissing-field-initializers)		\
>  	$(call cc-option,-Wmissing-prototypes)			\
>  	$(call cc-option,-Wstrict-prototypes)			\
>  	$(call cc-option,-Wunused-parameter)			\
> -	$(call cc-option,-Wvla)
> +	$(call cc-option,-Wvla)					\
> +	$(CFLAGS)
>  
>  override CPPFLAGS := -Iinclude -D_FILE_OFFSET_BITS=64 $(CPPFLAGS)
>  
> @@ -65,7 +70,7 @@ PKGCONF         ?= pkg-config
>  .build-config: FORCE
>  	@flags=$$(							\
>  		echo 'CC=$(CC)';					\
> -		echo 'CFLAGS=$(CFLAGS)';				\
> +		echo 'CFLAGS=$(INTERNAL_CFLAGS)';			\
>  		echo 'CPPFLAGS=$(CPPFLAGS)';				\
>  		echo 'LDFLAGS=$(LDFLAGS)';				\
>  		echo 'LDLIBS=$(LDLIBS)';				\
> @@ -98,7 +103,7 @@ endif
>  #### Library
>  
>  SOVERSION       := 0
> -LIB_CFLAGS      := $(CFLAGS) -fvisibility=hidden
> +LIB_CFLAGS      := $(INTERNAL_CFLAGS) -fvisibility=hidden
>  LIB_SRC         := $(wildcard lib/*.c)
>  LIB_HEADERS     := $(wildcard lib/*.h) $(COMMON_HEADERS)
>  STATIC_LIB_OBJ  := $(LIB_SRC:.c=.o)
> @@ -121,7 +126,7 @@ DEFAULT_TARGETS += libfsverity.a
>  # Create shared library
>  libfsverity.so.$(SOVERSION):$(SHARED_LIB_OBJ)
>  	$(QUIET_CCLD) $(CC) -o $@ -Wl,-soname=$@ -shared $+ \
> -		$(CFLAGS) $(LDFLAGS) $(LDLIBS)
> +		$(INTERNAL_CFLAGS) $(LDFLAGS) $(LDLIBS)
>  
>  DEFAULT_TARGETS += libfsverity.so.$(SOVERSION)
>  
> @@ -160,23 +165,23 @@ TEST_PROGRAMS     := $(TEST_PROG_SRC:programs/%.c=%)
>  
>  # Compile program object files
>  $(ALL_PROG_OBJ): %.o: %.c $(ALL_PROG_HEADERS) .build-config
> -	$(QUIET_CC) $(CC) -o $@ -c $(CPPFLAGS) $(CFLAGS) $<
> +	$(QUIET_CC) $(CC) -o $@ -c $(CPPFLAGS) $(INTERNAL_CFLAGS) $<
>  
>  # Link the fsverity program
>  ifdef USE_SHARED_LIB
>  fsverity: $(FSVERITY_PROG_OBJ) libfsverity.so
>  	$(QUIET_CCLD) $(CC) -o $@ $(FSVERITY_PROG_OBJ) \
> -		$(CFLAGS) $(LDFLAGS) -L. -lfsverity
> +		$(INTERNAL_CFLAGS) $(LDFLAGS) -L. -lfsverity
>  else
>  fsverity: $(FSVERITY_PROG_OBJ) libfsverity.a
> -	$(QUIET_CCLD) $(CC) -o $@ $+ $(CFLAGS) $(LDFLAGS) $(LDLIBS)
> +	$(QUIET_CCLD) $(CC) -o $@ $+ $(INTERNAL_CFLAGS) $(LDFLAGS) $(LDLIBS)
>  endif
>  
>  DEFAULT_TARGETS += fsverity
>  
>  # Link the test programs
>  $(TEST_PROGRAMS): %: programs/%.o $(PROG_COMMON_OBJ) libfsverity.a
> -	$(QUIET_CCLD) $(CC) -o $@ $+ $(CFLAGS) $(LDFLAGS) $(LDLIBS)
> +	$(QUIET_CCLD) $(CC) -o $@ $+ $(INTERNAL_CFLAGS) $(LDFLAGS) $(LDLIBS)
>  
>  ##############################################################################

I think the following accomplishes the same thing much more easily:

diff --git a/Makefile b/Makefile
index 6c6c8c9..cff8d36 100644
--- a/Makefile
+++ b/Makefile
@@ -35,14 +35,17 @@
 cc-option = $(shell if $(CC) $(1) -c -x c /dev/null -o /dev/null > /dev/null 2>&1; \
 	      then echo $(1); fi)
 
-CFLAGS ?= -O2 -Wall -Wundef					\
+CFLAGS ?= -O2
+
+override CFLAGS := -Wall -Wundef				\
 	$(call cc-option,-Wdeclaration-after-statement)		\
 	$(call cc-option,-Wimplicit-fallthrough)		\
 	$(call cc-option,-Wmissing-field-initializers)		\
 	$(call cc-option,-Wmissing-prototypes)			\
 	$(call cc-option,-Wstrict-prototypes)			\
 	$(call cc-option,-Wunused-parameter)			\
-	$(call cc-option,-Wvla)
+	$(call cc-option,-Wvla)					\
+	$(CFLAGS)



[Index of Archives]     [linux Cryptography]     [Asterisk App Development]     [PJ SIP]     [Gnu Gatekeeper]     [IETF Sipping]     [Info Cyrus]     [ALSA User]     [Fedora Linux Users]     [Linux SCTP]     [DCCP]     [Gimp]     [Yosemite News]     [Deep Creek Hot Springs]     [Yosemite Campsites]     [ISDN Cause Codes]

  Powered by Linux