diff mbox series

[v3] add support for --disable-gcov

Message ID 20180611072553.26334-1-rasmus.villemoes@prevas.dk
State New
Headers show
Series [v3] add support for --disable-gcov | expand

Commit Message

Rasmus Villemoes June 11, 2018, 7:25 a.m. UTC
For some targets (in my case VxWorks 5.5), libgcov does not compile due
to missing functions and macros such as getpid() and F_OK.

Incidentally, gcc/Makefile.in already contains comments such as

# Install gcov if it was compiled.

but there is no logic in place to actually allow gcov to not be
compiled.

So add an option for disabling build and install of libgcov and the
related host tools.

2018-06-10  Rasmus Villemoes  <rasmus.villemoes@prevas.dk>

gcc/
	* configure.ac: Add --disable-gcov option.
	* configure: Regenerate.
	* Makefile.in: Honour @enable_gcov@.
	* doc/install.texi: Document --disable-gcov.

libgcc/
	* configure.ac: Add --disable-gcov option.
	* configure: Regenerate.
	* Makefile.in: Honour @enable_gcov@.
---
 gcc/Makefile.in      | 6 ++++--
 gcc/configure.ac     | 5 +++++
 gcc/doc/install.texi | 4 ++++
 libgcc/Makefile.in   | 8 +++++++-
 libgcc/configure.ac  | 5 +++++
 5 files changed, 25 insertions(+), 3 deletions(-)

Comments

Jeff Law June 12, 2018, 9:18 p.m. UTC | #1
On 06/11/2018 01:25 AM, Rasmus Villemoes wrote:
> For some targets (in my case VxWorks 5.5), libgcov does not compile due
> to missing functions and macros such as getpid() and F_OK.
> 
> Incidentally, gcc/Makefile.in already contains comments such as
> 
> # Install gcov if it was compiled.
> 
> but there is no logic in place to actually allow gcov to not be
> compiled.
I think in the past folks would do things like

make LANGUAGES="c c++"

Which would skip building gcov.



> 
> So add an option for disabling build and install of libgcov and the
> related host tools.
> 
> 2018-06-10  Rasmus Villemoes  <rasmus.villemoes@prevas.dk>
> 
> gcc/
> 	* configure.ac: Add --disable-gcov option.
> 	* configure: Regenerate.
> 	* Makefile.in: Honour @enable_gcov@.
> 	* doc/install.texi: Document --disable-gcov.
> 
> libgcc/
> 	* configure.ac: Add --disable-gcov option.
> 	* configure: Regenerate.
> 	* Makefile.in: Honour @enable_gcov@.
OK.  Presumably you're going through the process to get write access.
Once that's wrapped up you can install this patch.

Thanks,
jeff
Rainer Orth June 27, 2018, 7:22 p.m. UTC | #2
Hi Jeff,

>> So add an option for disabling build and install of libgcov and the
>> related host tools.
>> 
>> 2018-06-10  Rasmus Villemoes  <rasmus.villemoes@prevas.dk>
>> 
>> gcc/
>> 	* configure.ac: Add --disable-gcov option.
>> 	* configure: Regenerate.
>> 	* Makefile.in: Honour @enable_gcov@.
>> 	* doc/install.texi: Document --disable-gcov.
>> 
>> libgcc/
>> 	* configure.ac: Add --disable-gcov option.
>> 	* configure: Regenerate.
>> 	* Makefile.in: Honour @enable_gcov@.
> OK.  Presumably you're going through the process to get write access.
> Once that's wrapped up you can install this patch.

this patch badly broke all -fprofile-generate/-fprofile-use tests in the
default case like this:

UNRESOLVED: g++.dg/bprob/g++-bprob-1.C compilation,  -O0  -fbranch-probabilities
FAIL: g++.dg/bprob/g++-bprob-1.C compilation,  -O0  -fprofile-arcs

ld: fatal: library -lgcov: not found
collect2: error: ld returned 1 exit status
compiler exited with status 1
FAIL: g++.dg/bprob/g++-bprob-1.C compilation,  -g  -fprofile-arcs

libgcov.a is not copied over from libgcc to gcc due to a typo in
libgcc/Makefile.in.  Fixed as follows; will install as obvious once
bootstrap has finished.

	Rainer
Rasmus Villemoes June 27, 2018, 9:01 p.m. UTC | #3
On 2018-06-27 21:22, Rainer Orth wrote:
> Hi Jeff,
> 
>>> So add an option for disabling build and install of libgcov and the
>>> related host tools.
>>>
>>> 2018-06-10  Rasmus Villemoes  <rasmus.villemoes@prevas.dk>
>>>
>>> gcc/
>>> 	* configure.ac: Add --disable-gcov option.
>>> 	* configure: Regenerate.
>>> 	* Makefile.in: Honour @enable_gcov@.
>>> 	* doc/install.texi: Document --disable-gcov.
>>>
>>> libgcc/
>>> 	* configure.ac: Add --disable-gcov option.
>>> 	* configure: Regenerate.
>>> 	* Makefile.in: Honour @enable_gcov@.
>> OK.  Presumably you're going through the process to get write access.
>> Once that's wrapped up you can install this patch.
> 
> this patch badly broke all -fprofile-generate/-fprofile-use tests in the
> default case like this:
> 
> UNRESOLVED: g++.dg/bprob/g++-bprob-1.C compilation,  -O0  -fbranch-probabilities
> FAIL: g++.dg/bprob/g++-bprob-1.C compilation,  -O0  -fprofile-arcs
> 
> ld: fatal: library -lgcov: not found
> collect2: error: ld returned 1 exit status
> compiler exited with status 1
> FAIL: g++.dg/bprob/g++-bprob-1.C compilation,  -g  -fprofile-arcs
> 
> libgcov.a is not copied over from libgcc to gcc due to a typo in
> libgcc/Makefile.in.  Fixed as follows; will install as obvious once
> bootstrap has finished.
> 

I'm terribly sorry about that! I was sure I had tested all of
--enable-gcov, --disable-gcov and none of those, and convinced myself
that the default behaviour was unchanged. Thanks for spotting the
problem and fixing it. I will try to be much more careful in the future.

Rasmus
diff mbox series

Patch

diff --git a/gcc/Makefile.in b/gcc/Makefile.in
index d8f3e886118..1f38cacde7a 100644
--- a/gcc/Makefile.in
+++ b/gcc/Makefile.in
@@ -137,8 +137,10 @@  SUBDIRS =@subdirs@ build
 
 # Selection of languages to be made.
 CONFIG_LANGUAGES = @all_selected_languages@
-LANGUAGES = c gcov$(exeext) gcov-dump$(exeext) gcov-tool$(exeext) \
-            $(CONFIG_LANGUAGES)
+LANGUAGES = c $(CONFIG_LANGUAGES)
+ifeq (@enable_gcov@,yes)
+LANGUAGES += gcov$(exeext) gcov-dump$(exeext) gcov-tool$(exeext)
+endif
 
 # Default values for variables overridden in Makefile fragments.
 # CFLAGS is for the user to override to, e.g., do a cross build with -O2.
diff --git a/gcc/configure.ac b/gcc/configure.ac
index 010ecd2ccf6..4fc851c644e 100644
--- a/gcc/configure.ac
+++ b/gcc/configure.ac
@@ -921,6 +921,11 @@  AC_ARG_ENABLE(shared,
 ], [enable_shared=yes])
 AC_SUBST(enable_shared)
 
+AC_ARG_ENABLE(gcov,
+[  --disable-gcov          don't provide libgcov and related host tools],
+[], [enable_gcov=yes])
+AC_SUBST(enable_gcov)
+
 AC_ARG_WITH(specs,
   [AS_HELP_STRING([--with-specs=SPECS],
                   [add SPECS to driver command-line processing])],
diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi
index 7c5cdc762d3..03eaeed4e87 100644
--- a/gcc/doc/install.texi
+++ b/gcc/doc/install.texi
@@ -1044,6 +1044,10 @@  virtual calls in verifiable mode at all.  However the libvtv library will
 still be built (see @option{--disable-libvtv} to turn off building libvtv).
 @option{--disable-vtable-verify} is the default.
 
+@item --disable-gcov
+Specify that the run-time library used for coverage analysis
+and associated host tools should not be built.
+
 @item --disable-multilib
 Specify that multiple target
 libraries to support different target variants, calling
diff --git a/libgcc/Makefile.in b/libgcc/Makefile.in
index dd8cee99fd3..b7f20557214 100644
--- a/libgcc/Makefile.in
+++ b/libgcc/Makefile.in
@@ -36,6 +36,7 @@  SHELL = @SHELL@
 
 cpu_type = @cpu_type@
 enable_shared = @enable_shared@
+enable_gcov = @enable_gcov@
 double_type_size = @double_type_size@
 long_double_type_size = @long_double_type_size@
 decimal_float = @decimal_float@
@@ -941,7 +942,10 @@  libgcc.a libgcov.a libunwind.a libgcc_eh.a:
 
 	$(RANLIB) $@
 
-all: libgcc.a libgcov.a
+all: libgcc.a
+ifeq ($(enable_gcov),yes)
+all: libgcov.a
+endif
 
 ifneq ($(LIBUNWIND),)
 all: libunwind.a
@@ -1164,9 +1168,11 @@  install-leaf: $(install-shared) $(install-libunwind)
 	$(INSTALL_DATA) libgcc.a $(DESTDIR)$(inst_libdir)/
 	chmod 644 $(DESTDIR)$(inst_libdir)/libgcc.a
 	$(RANLIB) $(DESTDIR)$(inst_libdir)/libgcc.a
+ifeq ($(enable_libgcov),yes)
 	$(INSTALL_DATA) libgcov.a $(DESTDIR)$(inst_libdir)/
 	chmod 644 $(DESTDIR)$(inst_libdir)/libgcov.a
 	$(RANLIB) $(DESTDIR)$(inst_libdir)/libgcov.a
+endif
 
 	parts="$(INSTALL_PARTS)";				\
 	for file in $$parts; do					\
diff --git a/libgcc/configure.ac b/libgcc/configure.ac
index b59aa746afc..9d0bbcaba86 100644
--- a/libgcc/configure.ac
+++ b/libgcc/configure.ac
@@ -68,6 +68,11 @@  AC_ARG_ENABLE(shared,
 ], [enable_shared=yes])
 AC_SUBST(enable_shared)
 
+AC_ARG_ENABLE(gcov,
+[  --disable-gcov          don't provide libgcov and related host tools],
+[], [enable_gcov=yes])
+AC_SUBST(enable_gcov)
+
 AC_ARG_ENABLE(vtable-verify,
 [  --enable-vtable-verify    Enable vtable verification feature ],
 [case "$enableval" in