Add --with-nonshared-cflags option to configure

This commit is contained in:
Florian Weimer 2018-08-17 11:44:39 +02:00
parent 93a2584cd2
commit 6413fcde4f
7 changed files with 64 additions and 1 deletions

View File

@ -1,3 +1,13 @@
2018-08-16 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.
2018-08-16 Florian Weimer <fweimer@redhat.com> 2018-08-16 Florian Weimer <fweimer@redhat.com>
* Makeconfig (ASFLAGS): Always append required assembler flags. * Makeconfig (ASFLAGS): Always append required assembler flags.

16
INSTALL
View File

@ -90,6 +90,22 @@ if 'CFLAGS' is specified it must enable optimization. For example:
library will still be usable, but functionality may be lost--for library will still be usable, but functionality may be lost--for
example, you can't build a shared libc with old binutils. 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. For example, if such a policy
requires that all code linked into applications must be built with
source fortification,
'--with-nonshared-cflags=-Wp,-D_FORTIFY_SOURCE=2' will make sure
that the objects in 'libc_nonshared.a' are compiled with this flag
(although this will not affect the generated code in this
particular case and potentially change debugging information and
metadata only).
'--disable-shared' '--disable-shared'
Don't build shared libraries even if it is possible. Not all Don't build shared libraries even if it is possible. Not all
systems support shared libraries; you need ELF support and systems support shared libraries; you need ELF support and

View File

@ -1038,7 +1038,7 @@ object-suffixes-for-libc += .oS
# Must build the routines as PIC, though, because they can end up in (users') # 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 # shared objects. We don't want to use CFLAGS-os because users may, for
# example, make that processor-specific. # 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 CPPFLAGS-.oS = $(CPPFLAGS-.o) -DPIC -DLIBC_NONSHARED=1
libtype.oS = lib%_nonshared.a libtype.oS = lib%_nonshared.a
endif endif

View File

@ -110,6 +110,7 @@ BUILD_CC = @BUILD_CC@
CFLAGS = @CFLAGS@ CFLAGS = @CFLAGS@
CPPFLAGS-config = @CPPFLAGS@ CPPFLAGS-config = @CPPFLAGS@
CPPUNDEFS = @CPPUNDEFS@ CPPUNDEFS = @CPPUNDEFS@
extra-nonshared-cflags = @extra_nonshared_cflags@
ASFLAGS-config = @ASFLAGS_config@ ASFLAGS-config = @ASFLAGS_config@
AR = @AR@ AR = @AR@
NM = @NM@ NM = @NM@

14
configure vendored
View File

@ -684,6 +684,7 @@ force_install
bindnow bindnow
hardcoded_path_in_tests hardcoded_path_in_tests
enable_timezone_tools enable_timezone_tools
extra_nonshared_cflags
use_default_link use_default_link
sysheaders sysheaders
ac_ct_CXX ac_ct_CXX
@ -762,6 +763,7 @@ with_binutils
with_selinux with_selinux
with_headers with_headers
with_default_link with_default_link
with_nonshared_cflags
enable_sanity_checks enable_sanity_checks
enable_shared enable_shared
enable_profile enable_profile
@ -1482,6 +1484,8 @@ Optional Packages:
--with-headers=PATH location of system headers to use (for example --with-headers=PATH location of system headers to use (for example
/usr/src/linux/include) [default=compiler default] /usr/src/linux/include) [default=compiler default]
--with-default-link do not use explicit linker scripts --with-default-link do not use explicit linker scripts
--with-nonshared-cflags=CFLAGS
build nonshared libraries with additional CFLAGS
--with-cpu=CPU select code for CPU variant --with-cpu=CPU select code for CPU variant
Some influential environment variables: Some influential environment variables:
@ -3339,6 +3343,16 @@ else
fi 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. # Check whether --enable-sanity-checks was given.
if test "${enable_sanity_checks+set}" = set; then : if test "${enable_sanity_checks+set}" = set; then :
enableval=$enable_sanity_checks; enable_sanity=$enableval enableval=$enable_sanity_checks; enable_sanity=$enableval

View File

@ -154,6 +154,14 @@ AC_ARG_WITH([default-link],
[use_default_link=$withval], [use_default_link=$withval],
[use_default_link=default]) [use_default_link=default])
dnl Additional build flags injection.
AC_ARG_WITH([nonshared-cflags],
AC_HELP_STRING([--with-nonshared-cflags=CFLAGS],
[build nonshared libraries with additional CFLAGS]),
[extra_nonshared_cflags=$withval],
[extra_nonshared_cflags=])
AC_SUBST(extra_nonshared_cflags)
AC_ARG_ENABLE([sanity-checks], AC_ARG_ENABLE([sanity-checks],
AC_HELP_STRING([--disable-sanity-checks], AC_HELP_STRING([--disable-sanity-checks],
[really do not use threads (should not be used except in special situations) @<:@default=yes@:>@]), [really do not use threads (should not be used except in special situations) @<:@default=yes@:>@]),

View File

@ -117,6 +117,20 @@ 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 usable, but functionality may be lost---for example, you can't build a
shared libc with old binutils. 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. For example, if such a policy requires that all
code linked into applications must be built with source fortification,
@samp{--with-nonshared-cflags=-Wp,-D_FORTIFY_SOURCE=2} will make sure
that the objects in @file{libc_nonshared.a} are compiled with this flag
(although this will not affect the generated code in this particular
case and potentially change debugging information and metadata only).
@c disable static doesn't work currently @c disable static doesn't work currently
@c @item --disable-static @c @item --disable-static
@c Don't build static libraries. Static libraries aren't that useful these @c Don't build static libraries. Static libraries aren't that useful these