gcc/intl/Makefile.in
Marek Polacek 251c72a68a configure: Implement --enable-host-pie
This patch implements the --enable-host-pie configure option which
makes the compiler executables PIE.  This can be used to enhance
protection against ROP attacks, and can be viewed as part of a wider
trend to harden binaries.

It is similar to the option --enable-host-shared, except that --e-h-s
won't add -shared to the linker flags whereas --e-h-p will add -pie.
It is different from --enable-default-pie because that option just
adds an implicit -fPIE/-pie when the compiler is invoked, but the
compiler itself isn't PIE.

Since r12-5768-gfe7c3ecf, PCH works well with PIE, so there are no PCH
regressions.

When building the compiler, the build process may use various in-tree
libraries; these need to be built with -fPIE so that it's possible to
use them when building a PIE.  For instance, when --with-included-gettext
is in effect, intl object files must be compiled with -fPIE.  Similarly,
when building in-tree gmp, isl, mpfr and mpc, they must be compiled with
-fPIE.

I plan to add an option to link with -Wl,-z,now.

ChangeLog:

	* Makefile.def: Pass $(PICFLAG) to AM_CFLAGS for gmp, mpfr, mpc, and
	isl.
	* Makefile.in: Regenerate.
	* Makefile.tpl: Set PICFLAG.
	* configure.ac (--enable-host-pie): New check.  Set PICFLAG after this
	check.
	* configure: Regenerate.

c++tools/ChangeLog:

	* Makefile.in: Rename PIEFLAG to PICFLAG.  Set LD_PICFLAG.  Use it.
	Use pic/libiberty.a if PICFLAG is set.
	* configure.ac (--enable-default-pie): Set PICFLAG instead of PIEFLAG.
	(--enable-host-pie): New check.
	* configure: Regenerate.

fixincludes/ChangeLog:

	* Makefile.in: Set and use PICFLAG and LD_PICFLAG.  Use the "pic"
	build of libiberty if PICFLAG is set.
	* configure.ac:
	* configure: Regenerate.

gcc/ChangeLog:

	* Makefile.in: Set LD_PICFLAG.  Use it.  Set enable_host_pie.
	Remove NO_PIE_CFLAGS and NO_PIE_FLAG.  Pass LD_PICFLAG to
	ALL_LINKERFLAGS.  Use the "pic" build of libiberty if --enable-host-pie.
	* configure.ac (--enable-host-shared): Don't set PICFLAG here.
	(--enable-host-pie): New check.  Set PICFLAG and LD_PICFLAG after this
	check.
	* configure: Regenerate.
	* doc/install.texi: Document --enable-host-pie.

gcc/d/ChangeLog:

	* Make-lang.in: Remove NO_PIE_CFLAGS.

intl/ChangeLog:

	* Makefile.in: Use @PICFLAG@ in COMPILE as well.
	* configure.ac (--enable-host-shared): Don't set PICFLAG here.
	(--enable-host-pie): New check.  Set PICFLAG after this check.
	* configure: Regenerate.

libcody/ChangeLog:

	* Makefile.in: Pass LD_PICFLAG to LDFLAGS.
	* configure.ac (--enable-host-shared): Don't set PICFLAG here.
	(--enable-host-pie): New check.  Set PICFLAG and LD_PICFLAG after this
	check.
	* configure: Regenerate.

libcpp/ChangeLog:

	* configure.ac (--enable-host-shared): Don't set PICFLAG here.
	(--enable-host-pie): New check.  Set PICFLAG after this check.
	* configure: Regenerate.

libdecnumber/ChangeLog:

	* configure.ac (--enable-host-shared): Don't set PICFLAG here.
	(--enable-host-pie): New check.  Set PICFLAG after this check.
	* configure: Regenerate.

libiberty/ChangeLog:

	* configure.ac: Also set shared when enable_host_pie.
	* configure: Regenerate.

zlib/ChangeLog:

	* configure.ac (--enable-host-shared): Don't set PICFLAG here.
	(--enable-host-pie): New check.  Set PICFLAG after this check.
	* configure: Regenerate.
2022-11-22 20:32:18 -05:00

264 lines
6.7 KiB
Makefile

# Makefile for directory with message catalog handling library of GNU gettext
# Copyright (C) 1995-2021 Free Software Foundation, Inc.
#
# This program is free software; you can redistribute it and/or modify it
# under the terms of the GNU Library General Public License as published
# by the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Library General Public License for more details.
#
# You should have received a copy of the GNU Library General Public
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301,
# USA.
# This Makefile has been modified from the original shipped with
# gettext 0.12.1 to remove the ability to install libintl (which
# we do not need nor want), the ability to build a shared library
# (likewise), and a large number of heinous kludges.
SHELL = @SHELL@
srcdir = @srcdir@
VPATH = $(srcdir)
prefix = @prefix@
exec_prefix = @exec_prefix@
transform = @program_transform_name@
libdir = @libdir@
includedir = @includedir@
datarootdir = @datarootdir@
datadir = @datadir@
localedir = $(datadir)/locale
aliaspath = $(localedir)
AR = ar
ACLOCAL = @ACLOCAL@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
CC = @CC@
RANLIB = @RANLIB@
YACC = @INTLBISON@ -y -d
YFLAGS = --name-prefix=__gettext
CPPFLAGS = @CPPFLAGS@
CFLAGS = @CFLAGS@ @PICFLAG@
LDFLAGS = @LDFLAGS@
LIBS = @LIBS@
DEFS = -DHAVE_CONFIG_H
CTAGS = @CTAGS@
ETAGS = @ETAGS@
MKID = @MKID@
COMPILE = $(CC) -c $(CPPFLAGS) $(CFLAGS) @PICFLAG@ $(DEFS) $(DEFS-$@) $(INCLUDES)
HEADERS = \
gmo.h \
gettextP.h \
hash-string.h \
loadinfo.h \
plural-config.h \
plural-exp.h \
eval-plural.h \
localcharset.h \
relocatable.h \
libgnuintl.h
SOURCES = \
bindtextdom.c \
dcgettext.c \
dgettext.c \
gettext.c \
finddomain.c \
loadmsgcat.c \
localealias.c \
textdomain.c \
l10nflist.c \
explodename.c \
dcigettext.c \
dcngettext.c \
dngettext.c \
ngettext.c \
plural.y \
plural-exp.c \
localcharset.c \
relocatable.c \
localename.c \
log.c \
osdep.c \
intl-compat.c
OBJECTS = \
bindtextdom.o \
dcgettext.o \
dgettext.o \
gettext.o \
finddomain.o \
loadmsgcat.o \
localealias.o \
textdomain.o \
l10nflist.o \
explodename.o \
dcigettext.o \
dcngettext.o \
dngettext.o \
ngettext.o \
plural.o \
plural-exp.o \
localcharset.o \
relocatable.o \
localename.o \
log.o \
osdep.o \
intl-compat.o
DEFS-dcigettext.o = -DLOCALEDIR="\"$(localedir)\""
DEFS-localealias.o = -DLOCALE_ALIAS_PATH="\"$(aliaspath)\""
DEFS-localcharset.o = -DLIBDIR="\"$(libdir)\""
DEFS-relocatable.o = -DINSTALLDIR="\"$(libdir)\""
all: all-@USE_INCLUDED_LIBINTL@
all-yes: libintl.a libintl.h config.intl
all-no: # nothing
libintl.a: $(OBJECTS)
rm -f $@
$(AR) cru $@ $(OBJECTS)
$(RANLIB) $@
libintl.h: $(srcdir)/libgnuintl.h
cp $(srcdir)/libgnuintl.h $@
.SUFFIXES:
.SUFFIXES: .c .y .o
.c.o:
$(COMPILE) $<
.y.c:
@BISON3_YES@ echo '#define USE_BISON3' > $(patsubst %.c,%-config.h,$@)
@BISON3_YES@ sed 's,%pure_parser,,;s,^/\* BISON3 \(.*\) \*/$$,\1,' $< > $@.y
@BISON3_YES@ $(YACC) $(YFLAGS) --output $@.c $@.y
@BISON3_YES@ sed 's/\.c\.y"/.y"/' $@.c > $@
@BISON3_YES@ rm -f $@.c $@.y $@.h
@BISON3_NO@ echo '/* #define USE_BISON3 */' > $(patsubst %.c,%-config.h,$@)
@BISON3_NO@ $(YACC) $(YFLAGS) --output $@ $<
rm -f $*.h
INCLUDES = -I. -I$(srcdir)
check: all
# The installation targets have been disabled.
install: install-exec install-data
install-exec: all
install-data: all
install-strip: install
installdirs:
installcheck:
uninstall:
.PHONY: info dvi ps pdf html
.PHONY: install-info install-dvi install-ps install-pdf install-html
info dvi ps pdf html:
install-info install-dvi install-ps install-pdf install-html:
$(OBJECTS): config.h libintl.h
bindtextdom.o dcgettext.o dcigettext.o dcngettext.o dgettext.o \
dngettext.o finddomain.o gettext.o intl-compat.o loadmsgcat.o \
localealias.o ngettext.o textdomain.o: gettextP.h gmo.h loadinfo.h
dcigettext.o loadmsgcat.o: hash-string.h
explodename.o l10nflist.o: loadinfo.h
dcigettext.o loadmsgcat.o plural.o plural-exp.o: plural-exp.h plural-config.h
dcigettext.o: eval-plural.h
localcharset.o: localcharset.h
localealias.o localcharset.o relocatable.o: relocatable.h
tags: TAGS
TAGS: $(HEADERS) $(SOURCES)
here=`pwd`; cd $(srcdir) && \
$(ETAGS) -o $$here/TAGS $(HEADERS) $(SOURCES)
ctags: CTAGS
CTAGS: $(HEADERS) $(SOURCES)
here=`pwd`; cd $(srcdir) && \
$(CTAGS) -o $$here/CTAGS $(HEADERS) $(SOURCES)
id: ID
ID: $(HEADERS) $(SOURCES)
here=`pwd`; cd $(srcdir) && \
$(MKID) -f$$here/ID $(HEADERS) $(SOURCES)
mostlyclean:
rm -f *.a *.la *.o *.obj *.lo core core.* libintl.h
clean: mostlyclean
distclean: clean
rm -f config.status config.cache config.log config.intl config.h
rm -f Makefile ID TAGS
maintainer-clean: distclean
# The 'make dist' targets have been disabled; the GNU toolchain handles this
# with a script maintained separately from the Makefile.
dist:
distdir:
# Rules to rebuild the configuration
Makefile: $(srcdir)/Makefile.in config.status
$(SHELL) ./config.status Makefile
config.intl: $(srcdir)/config.intl.in config.status
$(SHELL) ./config.status config.intl
config.status: $(srcdir)/configure
$(SHELL) ./config.status --recheck
$(srcdir)/configure: @MAINT@ $(srcdir)/aclocal.m4 $(srcdir)/configure.ac
cd $(srcdir) && $(AUTOCONF)
aclocal_deps = \
$(srcdir)/configure.ac \
$(srcdir)/../config/codeset.m4 \
$(srcdir)/../config/gettext.m4 \
$(srcdir)/../config/glibc21.m4 \
$(srcdir)/../config/iconv.m4 \
$(srcdir)/../config/intdiv0.m4 \
$(srcdir)/../config/inttypes-pri.m4 \
$(srcdir)/../config/inttypes.m4 \
$(srcdir)/../config/inttypes_h.m4 \
$(srcdir)/../config/lcmessage.m4 \
$(srcdir)/../config/lib-ld.m4 \
$(srcdir)/../config/lib-link.m4 \
$(srcdir)/../config/lib-prefix.m4 \
$(srcdir)/../config/nls.m4 \
$(srcdir)/../config/po.m4 \
$(srcdir)/../config/progtest.m4 \
$(srcdir)/../config/stdint_h.m4 \
$(srcdir)/../config/uintmax_t.m4 \
$(srcdir)/../config/ulonglong.m4
$(srcdir)/aclocal.m4: @MAINT@ $(aclocal_deps)
cd $(srcdir) && $(ACLOCAL) -I ../config
config.h: stamp-h1
test -f config.h || (rm -f stamp-h1 && $(MAKE) stamp-h1)
plural-config.h: plural.c
stamp-h1: $(srcdir)/config.h.in config.status
-rm -f stamp-h1
$(SHELL) ./config.status config.h
$(srcdir)/config.h.in: @MAINT@ $(srcdir)/aclocal.m4 $(srcdir)/configure.ac
cd $(srcdir) && $(AUTOHEADER)
-rm -f stamp-h1
# Tell versions [3.59,3.63) of GNU make not to export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT: