Message ID | 20180704093557.3723F43994575@oldenburg.str.redhat.com |
---|---|
State | New |
Headers | show |
Series | Add --with-nonshared-cflags option to configure | expand |
On 07/04/2018 11:35 AM, Florian Weimer wrote: > 2018-07-04 Florian Weimer<fweimer@redhat.com> > > * configure.ac: Add --with-nonshared-cflags option. > * config.make.in (extra-nonshared-cflags): Set variable. > * Makeconfig (CFLAGS-.oS): Use it. > * manual/install.texi (Configuring and compiling): Document > --with-nonshared-cflags. > * configure: Regenerate. > * INSTALL: Likewise. Ping? <https://sourceware.org/ml/libc-alpha/2018-07/msg00071.html> Thanks, Florian
On 07/04/2018 05:35 AM, Florian Weimer wrote: > 2018-07-04 Florian Weimer <fweimer@redhat.com> > > * configure.ac: Add --with-nonshared-cflags option. > * config.make.in (extra-nonshared-cflags): Set variable. > * Makeconfig (CFLAGS-.oS): Use it. > * manual/install.texi (Configuring and compiling): Document > --with-nonshared-cflags. > * configure: Regenerate. > * INSTALL: Likewise. > OK for master if you add an example to --with-nonshared-cflags install.texi text showing what it might be used for. Reviewed-by: Carlos O'Donell <carlos@redhat.com> > diff --git a/Makeconfig b/Makeconfig > index 608ffe648c..b0b27f0113 100644 > --- a/Makeconfig > +++ b/Makeconfig > @@ -1038,7 +1038,7 @@ object-suffixes-for-libc += .oS > # Must build the routines as PIC, though, because they can end up in (users') > # shared objects. We don't want to use CFLAGS-os because users may, for > # example, make that processor-specific. > -CFLAGS-.oS = $(CFLAGS-.o) $(PIC-ccflag) > +CFLAGS-.oS = $(CFLAGS-.o) $(PIC-ccflag) $(extra-nonshared-cflags) OK. > CPPFLAGS-.oS = $(CPPFLAGS-.o) -DPIC -DLIBC_NONSHARED=1 > libtype.oS = lib%_nonshared.a > endif > diff --git a/config.make.in b/config.make.in > index d9891b2cd8..a6fe48d31f 100644 > --- a/config.make.in > +++ b/config.make.in > @@ -110,6 +110,7 @@ BUILD_CC = @BUILD_CC@ > CFLAGS = @CFLAGS@ > CPPFLAGS-config = @CPPFLAGS@ > CPPUNDEFS = @CPPUNDEFS@ > +extra-nonshared-cflags = @extra_nonshared_cflags@ OK. > ASFLAGS-config = @ASFLAGS_config@ > AR = @AR@ > NM = @NM@ > diff --git a/configure.ac b/configure.ac > index dc517017f5..154185d70d 100644 > --- a/configure.ac > +++ b/configure.ac > @@ -154,6 +154,14 @@ AC_ARG_WITH([default-link], > [use_default_link=$withval], > [use_default_link=default]) > > +dnl Additional build flags injection. > +AC_ARG_WITH([nonshared-cflags], > + AC_HELP_STRING([--with-nonshared-cflags=FLAGS], > + [build nonshared libraries with additional FLAGS]), s/FLAGS/CFLAGS/g > + [extra_nonshared_cflags=$withval], > + [extra_nonshared_cflags=]) > +AC_SUBST(extra_nonshared_cflags) OK. > + > AC_ARG_ENABLE([sanity-checks], > AC_HELP_STRING([--disable-sanity-checks], > [really do not use threads (should not be used except in special situations) @<:@default=yes@:>@]), > diff --git a/manual/install.texi b/manual/install.texi > index 422da1447e..eaf0cd09e7 100644 > --- a/manual/install.texi > +++ b/manual/install.texi > @@ -117,6 +117,15 @@ problem and suppress these constructs, so that the library will still be > usable, but functionality may be lost---for example, you can't build a > shared libc with old binutils. > > +@item --with-nonshared-cflags=@var{cflags} > +Use additional compiler flags @var{cflags} to build the parts of the > +library which are always statically linked into applications and > +libraries even with shared linking (that is, the object files contained > +in @file{lib*_nonshared.a} libraries). The build process will > +automatically use the appropriate flags, but this option can be used to > +set additional flags required for building applications and libraries, > +to match local policy. > + I'd like to see an example added to this to show what the flag is used for. Suggest: ... to match local policy e.g. <Reason why with flag> > @c disable static doesn't work currently > @c @item --disable-static > @c Don't build static libraries. Static libraries aren't that useful these >
On 08/16/2018 07:19 PM, Carlos O'Donell wrote: >> +@item --with-nonshared-cflags=@var{cflags} >> +Use additional compiler flags @var{cflags} to build the parts of the >> +library which are always statically linked into applications and >> +libraries even with shared linking (that is, the object files contained >> +in @file{lib*_nonshared.a} libraries). The build process will >> +automatically use the appropriate flags, but this option can be used to >> +set additional flags required for building applications and libraries, >> +to match local policy. >> + > > I'd like to see an example added to this to show what the flag is used for. Our use-case is to compile with -Wp,-D_FORTIFY_SOURCE=2, which does not change the compiled code, only the metadata embedded in the nonshared objects. Which makes this feature *really* obscure, of course. > P.S. Is there any way I can convince you to fix bug 17248 given that you're > looking at CFLAGS? :-) Can we do anything else but remove the sorting and deduplication? This was added such a long time ago that we don't have a record why this was needed. I can check that the binaries on x86_64 do not change. Thanks, Florian
On 08/16/2018 01:45 PM, Florian Weimer wrote: > On 08/16/2018 07:19 PM, Carlos O'Donell wrote: > >>> +@item --with-nonshared-cflags=@var{cflags} +Use additional >>> compiler flags @var{cflags} to build the parts of the +library >>> which are always statically linked into applications and >>> +libraries even with shared linking (that is, the object files >>> contained +in @file{lib*_nonshared.a} libraries). The build >>> process will +automatically use the appropriate flags, but this >>> option can be used to +set additional flags required for building >>> applications and libraries, +to match local policy. + >> >> I'd like to see an example added to this to show what the flag is >> used for. > > Our use-case is to compile with -Wp,-D_FORTIFY_SOURCE=2, which does > not change the compiled code, only the metadata embedded in the > nonshared objects. Which makes this feature *really* obscure, of > course. Please add this as a comment or description in install.texi, much like CFLAGS sorting, I want to come back to this 10 years later, read the comment and understand the intent. >> P.S. Is there any way I can convince you to fix bug 17248 given >> that you're looking at CFLAGS? :-) > > Can we do anything else but remove the sorting and deduplication? > This was added such a long time ago that we don't have a record why > this was needed. > > I can check that the binaries on x86_64 do not change. Right, I think that's the only solution, and what we should do. This leaves CFLAGS as expected without sorting (which might change based on locale?).
diff --git a/INSTALL b/INSTALL index 0a22aa7d01..0f80d9d615 100644 --- a/INSTALL +++ b/INSTALL @@ -90,6 +90,15 @@ if 'CFLAGS' is specified it must enable optimization. For example: library will still be usable, but functionality may be lost--for example, you can't build a shared libc with old binutils. +'--with-nonshared-cflags=CFLAGS' + Use additional compiler flags CFLAGS to build the parts of the + library which are always statically linked into applications and + libraries even with shared linking (that is, the object files + contained in 'lib*_nonshared.a' libraries). The build process will + automatically use the appropriate flags, but this option can be + used to set additional flags required for building applications and + libraries, to match local policy. + '--disable-shared' Don't build shared libraries even if it is possible. Not all systems support shared libraries; you need ELF support and diff --git a/Makeconfig b/Makeconfig index 608ffe648c..b0b27f0113 100644 --- a/Makeconfig +++ b/Makeconfig @@ -1038,7 +1038,7 @@ object-suffixes-for-libc += .oS # Must build the routines as PIC, though, because they can end up in (users') # shared objects. We don't want to use CFLAGS-os because users may, for # example, make that processor-specific. -CFLAGS-.oS = $(CFLAGS-.o) $(PIC-ccflag) +CFLAGS-.oS = $(CFLAGS-.o) $(PIC-ccflag) $(extra-nonshared-cflags) CPPFLAGS-.oS = $(CPPFLAGS-.o) -DPIC -DLIBC_NONSHARED=1 libtype.oS = lib%_nonshared.a endif diff --git a/config.make.in b/config.make.in index d9891b2cd8..a6fe48d31f 100644 --- a/config.make.in +++ b/config.make.in @@ -110,6 +110,7 @@ BUILD_CC = @BUILD_CC@ CFLAGS = @CFLAGS@ CPPFLAGS-config = @CPPFLAGS@ CPPUNDEFS = @CPPUNDEFS@ +extra-nonshared-cflags = @extra_nonshared_cflags@ ASFLAGS-config = @ASFLAGS_config@ AR = @AR@ NM = @NM@ diff --git a/configure b/configure index ef18302215..fec0efff82 100755 --- a/configure +++ b/configure @@ -684,6 +684,7 @@ force_install bindnow hardcoded_path_in_tests enable_timezone_tools +extra_nonshared_cflags use_default_link sysheaders ac_ct_CXX @@ -762,6 +763,7 @@ with_binutils with_selinux with_headers with_default_link +with_nonshared_cflags enable_sanity_checks enable_shared enable_profile @@ -1479,6 +1481,8 @@ Optional Packages: --with-headers=PATH location of system headers to use (for example /usr/src/linux/include) [default=compiler default] --with-default-link do not use explicit linker scripts + --with-nonshared-cflags=FLAGS + build nonshared libraries with additional FLAGS --with-cpu=CPU select code for CPU variant Some influential environment variables: @@ -3336,6 +3340,16 @@ else fi + +# Check whether --with-nonshared-cflags was given. +if test "${with_nonshared_cflags+set}" = set; then : + withval=$with_nonshared_cflags; extra_nonshared_cflags=$withval +else + extra_nonshared_cflags= +fi + + + # Check whether --enable-sanity-checks was given. if test "${enable_sanity_checks+set}" = set; then : enableval=$enable_sanity_checks; enable_sanity=$enableval diff --git a/configure.ac b/configure.ac index dc517017f5..154185d70d 100644 --- a/configure.ac +++ b/configure.ac @@ -154,6 +154,14 @@ AC_ARG_WITH([default-link], [use_default_link=$withval], [use_default_link=default]) +dnl Additional build flags injection. +AC_ARG_WITH([nonshared-cflags], + AC_HELP_STRING([--with-nonshared-cflags=FLAGS], + [build nonshared libraries with additional FLAGS]), + [extra_nonshared_cflags=$withval], + [extra_nonshared_cflags=]) +AC_SUBST(extra_nonshared_cflags) + AC_ARG_ENABLE([sanity-checks], AC_HELP_STRING([--disable-sanity-checks], [really do not use threads (should not be used except in special situations) @<:@default=yes@:>@]), diff --git a/manual/install.texi b/manual/install.texi index 422da1447e..eaf0cd09e7 100644 --- a/manual/install.texi +++ b/manual/install.texi @@ -117,6 +117,15 @@ problem and suppress these constructs, so that the library will still be usable, but functionality may be lost---for example, you can't build a shared libc with old binutils. +@item --with-nonshared-cflags=@var{cflags} +Use additional compiler flags @var{cflags} to build the parts of the +library which are always statically linked into applications and +libraries even with shared linking (that is, the object files contained +in @file{lib*_nonshared.a} libraries). The build process will +automatically use the appropriate flags, but this option can be used to +set additional flags required for building applications and libraries, +to match local policy. + @c disable static doesn't work currently @c @item --disable-static @c Don't build static libraries. Static libraries aren't that useful these