[pph] preliminary build support for stdc++.h.pph

Benjamin De Kosnik bkoz@redhat.com
Thu Mar 22 22:36:00 GMT 2012


Seems like -fpph doesn't work on the pph branch anymore, and instead
-fpph-gen/-fpph-map/-fpph-hdr are used.

The thing is, how are these flags used?

unhelpful wiki page:
http://gcc.gnu.org/wiki/pph

Based on invoke.texi, I'm expecting something like this:


1. generate
g++ -fpph-gen all.h; 
// generates all.pph

2. use
g++ -fpph-hdr=all.h   foo.cc 
// like -include=all.h, but works with pph files

Is this right? 

-benjamin

2012-03-22  Benjamin Kosnik  <bkoz@redhat.com>

	    * include/Makefile.am (allcreated): Add pph build rule.
	    (pch1_source): ... to pre_1_source.
	    (pch2_source): ... to pre_2_source.
	    (pch3_source): ... to pre_3_source.
	    (pph_output): New.
	    (PPH_GEN_FLAGS): New.
	    * include/Makefile.in: Regenerate.

Index: include/Makefile.am
===================================================================
--- include/Makefile.am	(revision 185703)
+++ include/Makefile.am	(working copy)
@@ -858,7 +858,7 @@
 	${host_builddir}/gthr-default.h
 
 
-pch1_source = ${glibcxx_srcdir}/include/precompiled/stdc++.h
+pre_1_source = ${glibcxx_srcdir}/include/precompiled/stdc++.h
 pch1_output_builddir = ${host_builddir}/stdc++.h.gch
 pch1_output_anchor = ${host_builddir}/stdc++.h
 pch1_output_installdir = ${host_installdir}/stdc++.h.gch
@@ -866,19 +866,18 @@
 pch1b_output = ${pch1_output_builddir}/O2g.gch
 pch1_output = ${pch1a_output} ${pch1b_output}
 
-pch2_source = ${glibcxx_srcdir}/include/precompiled/stdtr1c++.h
+pre_2_source = ${glibcxx_srcdir}/include/precompiled/stdtr1c++.h
 pch2_output_builddir = ${host_builddir}/stdtr1c++.h.gch
 pch2_output_anchor = ${host_builddir}/stdtr1c++.h
 pch2_output_installdir = ${host_installdir}/stdtr1c++.h.gch
 pch2_output = ${pch2_output_builddir}/O2g.gch
 
-pch3_source = ${glibcxx_srcdir}/include/precompiled/extc++.h
+pre_3_source = ${glibcxx_srcdir}/include/precompiled/extc++.h
 pch3_output_builddir = ${host_builddir}/extc++.h.gch
 pch3_output_anchor = ${host_builddir}/extc++.h
 pch3_output_installdir = ${host_installdir}/extc++.h.gch
 pch3_output = ${pch3_output_builddir}/O2g.gch
 
-
 pch_output = ${pch1_output} ${pch2_output} ${pch3_output}
 pch_output_dirs = \
 	${pch1_output_builddir} ${pch2_output_builddir}
${pch3_output_builddir} @@ -891,6 +890,9 @@
 pch_build =
 endif
 
+pph_output = ${host_builddir}/stdc++.h.pph
+PPH_GEN_FLAGS = -x c++-header -nostdinc++ -fpph-gen
+
 # List of all timestamp files.  By keeping only one copy of this list,
both # CLEANFILES and all-local are kept up-to-date.
 allstamped = \
@@ -904,7 +906,8 @@
 allcreated = \
 	${host_builddir}/c++config.h \
 	${thread_host_headers} \
-	${pch_build}
+	${pch_build} \
+	${pph_output}
 
 # Here are the rules for building the headers
 all-local: ${allstamped} ${allcreated}
@@ -1153,25 +1156,30 @@
 	    < $< > $@
 
 # Build two precompiled C++ includes, stdc++.h.gch/*.gch
-${pch1a_output}: ${allstamped} ${host_builddir}/c++config.h
${pch1_source} +${pch1a_output}: ${allstamped}
${host_builddir}/c++config.h ${pre_1_source} -mkdir -p
${pch1_output_builddir}
-	$(CXX) $(PCHFLAGS) $(AM_CPPFLAGS) -O2 -g -std=gnu++0x
${pch1_source} \
+	$(CXX) $(PCHFLAGS) $(AM_CPPFLAGS) -O2 -g -std=gnu++0x
${pre_1_source} \ -o $@
 
-${pch1b_output}: ${allstamped} ${host_builddir}/c++config.h
${pch1_source} +${pch1b_output}: ${allstamped}
${host_builddir}/c++config.h ${pre_1_source} -mkdir -p
${pch1_output_builddir}
-	$(CXX) $(PCHFLAGS) $(AM_CPPFLAGS) -O2 -g ${pch1_source} -o $@
+	$(CXX) $(PCHFLAGS) $(AM_CPPFLAGS) -O2 -g ${pre_1_source} -o $@
 
 # Build a precompiled TR1 include, stdtr1c++.h.gch/O2.gch
-${pch2_output}: ${pch2_source} ${pch1_output}
+${pch2_output}: ${pre_2_source} ${pch1_output}
 	-mkdir -p ${pch2_output_builddir}
-	$(CXX) $(PCHFLAGS) $(AM_CPPFLAGS) -O2 -g ${pch2_source} -o $@
+	$(CXX) $(PCHFLAGS) $(AM_CPPFLAGS) -O2 -g ${pre_2_source} -o $@
 
 # Build a precompiled extension include, extc++.h.gch/O2.gch
-${pch3_output}: ${pch3_source} ${pch2_output}
+${pch3_output}: ${pre_3_source} ${pch2_output}
 	-mkdir -p ${pch3_output_builddir}
-	$(CXX) $(PCHFLAGS) $(AM_CPPFLAGS) -O2 -g ${pch3_source} -o $@
+	$(CXX) $(PCHFLAGS) $(AM_CPPFLAGS) -O2 -g ${pre_3_source} -o $@
 
+# Build a preprocessed C++ include stdc++.h.pph
+pph: ${pph_output}
+${pph_output}: ${allstamped} ${host_builddir}/c++config.h
${pre_1_source}
+	$(CXX) $(PPH_GEN_FLAGS) $(AM_CPPFLAGS) -O2 -g ${pre_1_source}
-o $@ +
 # For robustness sake (in light of junk files or in-source
 # configuration), copy from the build or source tree to the install
 # tree using only the human-maintained file lists and directory
@@ -1291,7 +1299,7 @@
 	  $(INSTALL_DATA) $${file} $(DESTDIR)${host_installdir}; done
 
 # By adding these files here, automake will remove them for 'make
clean' -CLEANFILES = ${pch_output} ${pch_output_anchors} stamp-host
+CLEANFILES = ${pch_output} ${pch_output_anchors} ${pph_output}
stamp-host 
 # To remove directories.
 clean-local:
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 20120322-1.patch
Type: text/x-patch
Size: 4479 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/gcc-patches/attachments/20120322/ca9bca38/attachment.bin>


More information about the Gcc-patches mailing list