This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Help needed: banishing RTL from the front ends


On Thu, May 27, 2010 at 8:25 AM, Steven Bosscher <stevenb.gcc@gmail.com> wrote:
> On Thu, May 27, 2010 at 7:15 AM, Paolo Bonzini <bonzini@gnu.org> wrote:
>> On 05/27/2010 06:58 AM, Steven Bosscher wrote:
>>>
>>> Well, it looks like I do need something like @F because I now only get
>>> the define on files in gcc/. Any file with a / in the full name $@
>>> does not get a file specific CFLAGS.
>>
>> Interesting, this simpler testcase worked:
>>
>> test-a/b = $(warning ok)
>>
>> all: a/b
>> ? ? ? ?: $(test-$<) above line from '$$(test-$$<)' should say ok
>> a/b:
>> ? ? ? ?: $(test-$@) above line from '$$(test-$$@)' should say ok
>>
>> Can you add $(warning $@ -> $(CFLAGS-$@)) to the .c.o rule to see if that
>> gives a clue?
>
> Well, gives me at least one clue so far: the implicit rule .c.o is
> over-ruled by t-i386, which explains why the extra CFLAGS-$file are
> not passed to config/i386/i386-c.c. ?I'm now restarting the build with
> extra front ends included again, to see if there is something equally
> obvious "wrong" there.

I did find another file in fortran/Makefile.in (fortran/cpp.o) which
has an explicit rule, but the others just don't pick up CFLAGS-$file.
See grep results below.  My svn diff Makefile.in is at the end of this
file.

Your simpler test case does work for me:

stevenb@gcc17:~$ cat Makefile
test-a/b = $(warning ok)

all: a/b
        : $(test-$<) above line from '$$(test-$$<)' should say ok
a/b:
        : $(test-$@) above line from '$$(test-$$@)' should say ok
stevenb@gcc17:~$ make all
Makefile:6: ok
:  above line from '$(test-$@)' should say ok
Makefile:4: ok
:  above line from '$(test-$<)' should say ok


I also tried with another extra line in Makefile.in:
$(foreach file,$(ALL_HOST_FRONTEND_OBJS),$(warning $(file) is part of
ALL_HOST_FRONTEND_OBJS))

That gives me the following extra output:
Makefile:1456: c-lang.o is part of ALL_HOST_FRONTEND_OBJS
Makefile:1456: stub-objc.o is part of ALL_HOST_FRONTEND_OBJS
Makefile:1456: attribs.o is part of ALL_HOST_FRONTEND_OBJS
Makefile:1456: c-errors.o is part of ALL_HOST_FRONTEND_OBJS
Makefile:1456: c-lex.o is part of ALL_HOST_FRONTEND_OBJS
Makefile:1456: c-pragma.o is part of ALL_HOST_FRONTEND_OBJS
Makefile:1456: c-decl.o is part of ALL_HOST_FRONTEND_OBJS
Makefile:1456: c-typeck.o is part of ALL_HOST_FRONTEND_OBJS
Makefile:1456: c-convert.o is part of ALL_HOST_FRONTEND_OBJS
Makefile:1456: c-aux-info.o is part of ALL_HOST_FRONTEND_OBJS
Makefile:1456: c-common.o is part of ALL_HOST_FRONTEND_OBJS
Makefile:1456: c-opts.o is part of ALL_HOST_FRONTEND_OBJS
Makefile:1456: c-format.o is part of ALL_HOST_FRONTEND_OBJS
Makefile:1456: c-semantics.o is part of ALL_HOST_FRONTEND_OBJS
Makefile:1456: c-ppoutput.o is part of ALL_HOST_FRONTEND_OBJS
Makefile:1456: c-cppbuiltin.o is part of ALL_HOST_FRONTEND_OBJS
Makefile:1456: c-objc-common.o is part of ALL_HOST_FRONTEND_OBJS
Makefile:1456: c-dump.o is part of ALL_HOST_FRONTEND_OBJS
Makefile:1456: c-pch.o is part of ALL_HOST_FRONTEND_OBJS
Makefile:1456: c-parser.o is part of ALL_HOST_FRONTEND_OBJS
Makefile:1456: i386-c.o is part of ALL_HOST_FRONTEND_OBJS
Makefile:1456: c-gimplify.o is part of ALL_HOST_FRONTEND_OBJS
Makefile:1456: tree-mudflap.o is part of ALL_HOST_FRONTEND_OBJS
Makefile:1456: c-pretty-print.o is part of ALL_HOST_FRONTEND_OBJS
Makefile:1456: c-omp.o is part of ALL_HOST_FRONTEND_OBJS

This is for a build configured with --enable-languages=c,c++,fortran
but the c++ and fortran files are missing from the list, i.e. they are
not in ALL_HOST_FRONTEND_OBJS even though they should have been added
there:

# This lists all host objects for the front ends.
ALL_HOST_FRONTEND_OBJS = $(C_OBJS) \
  $(foreach v,$(CONFIG_LANGUAGES),$($(v)_OBJS))

Any idea what might be wrong? :-(

Ciao!
Steven



stevenb@gcc17:~/devel/trunk/gcc$ grep ^Makefile buildlog | grep FRONTEND > t
stevenb@gcc17:~/devel/trunk/gcc$ grep ^Makefile buildlog | grep fortran >> t
stevenb@gcc17:~/devel/trunk/gcc$ cat t
Makefile:1051: c-lang.o -> -DIN_GCC_FRONTEND
Makefile:1051: stub-objc.o -> -DIN_GCC_FRONTEND
Makefile:1051: attribs.o -> -DIN_GCC_FRONTEND
Makefile:1051: c-errors.o -> -DIN_GCC_FRONTEND
Makefile:1051: c-lex.o -> -DIN_GCC_FRONTEND
Makefile:1051: c-pragma.o -> -DIN_GCC_FRONTEND
Makefile:1051: c-decl.o -> -DIN_GCC_FRONTEND
Makefile:1051: c-typeck.o -> -DIN_GCC_FRONTEND
Makefile:1051: c-convert.o -> -DIN_GCC_FRONTEND
Makefile:1051: c-aux-info.o -> -DIN_GCC_FRONTEND
Makefile:1051: c-common.o -> -DIN_GCC_FRONTEND
Makefile:1051: c-format.o -> -DIN_GCC_FRONTEND
Makefile:1051: c-semantics.o -> -DIN_GCC_FRONTEND
Makefile:1051: c-ppoutput.o -> -DIN_GCC_FRONTEND
Makefile:1051: c-objc-common.o -> -DIN_GCC_FRONTEND
Makefile:1051: c-dump.o -> -DIN_GCC_FRONTEND
Makefile:1051: c-parser.o -> -DIN_GCC_FRONTEND
Makefile:1051: c-gimplify.o -> -DIN_GCC_FRONTEND
Makefile:1051: tree-mudflap.o -> -DIN_GCC_FRONTEND
Makefile:1051: c-pretty-print.o -> -DIN_GCC_FRONTEND
Makefile:1051: c-omp.o -> -DIN_GCC_FRONTEND
Makefile:1051: c-lang.o -> -DIN_GCC_FRONTEND
Makefile:1051: stub-objc.o -> -DIN_GCC_FRONTEND
Makefile:1051: attribs.o -> -DIN_GCC_FRONTEND
Makefile:1051: c-errors.o -> -DIN_GCC_FRONTEND
Makefile:1051: c-lex.o -> -DIN_GCC_FRONTEND
Makefile:1051: c-pragma.o -> -DIN_GCC_FRONTEND
Makefile:1051: c-decl.o -> -DIN_GCC_FRONTEND
Makefile:1051: c-typeck.o -> -DIN_GCC_FRONTEND
Makefile:1051: c-convert.o -> -DIN_GCC_FRONTEND
Makefile:1051: c-aux-info.o -> -DIN_GCC_FRONTEND
Makefile:1051: c-common.o -> -DIN_GCC_FRONTEND
Makefile:1051: c-format.o -> -DIN_GCC_FRONTEND
Makefile:1051: c-semantics.o -> -DIN_GCC_FRONTEND
Makefile:1051: c-ppoutput.o -> -DIN_GCC_FRONTEND
Makefile:1051: c-objc-common.o -> -DIN_GCC_FRONTEND
Makefile:1051: c-dump.o -> -DIN_GCC_FRONTEND
Makefile:1051: c-parser.o -> -DIN_GCC_FRONTEND
Makefile:1051: c-gimplify.o -> -DIN_GCC_FRONTEND
Makefile:1051: tree-mudflap.o -> -DIN_GCC_FRONTEND
Makefile:1051: c-pretty-print.o -> -DIN_GCC_FRONTEND
Makefile:1051: c-omp.o -> -DIN_GCC_FRONTEND
Makefile:1051: c-lang.o -> -DIN_GCC_FRONTEND
Makefile:1051: stub-objc.o -> -DIN_GCC_FRONTEND
Makefile:1051: attribs.o -> -DIN_GCC_FRONTEND
Makefile:1051: c-errors.o -> -DIN_GCC_FRONTEND
Makefile:1051: c-lex.o -> -DIN_GCC_FRONTEND
Makefile:1051: c-pragma.o -> -DIN_GCC_FRONTEND
Makefile:1051: c-decl.o -> -DIN_GCC_FRONTEND
Makefile:1051: c-typeck.o -> -DIN_GCC_FRONTEND
Makefile:1051: c-convert.o -> -DIN_GCC_FRONTEND
Makefile:1051: c-aux-info.o -> -DIN_GCC_FRONTEND
Makefile:1051: c-common.o -> -DIN_GCC_FRONTEND
Makefile:1051: c-format.o -> -DIN_GCC_FRONTEND
Makefile:1051: c-semantics.o -> -DIN_GCC_FRONTEND
Makefile:1051: c-ppoutput.o -> -DIN_GCC_FRONTEND
Makefile:1051: c-objc-common.o -> -DIN_GCC_FRONTEND
Makefile:1051: c-dump.o -> -DIN_GCC_FRONTEND
Makefile:1051: c-parser.o -> -DIN_GCC_FRONTEND
Makefile:1051: c-gimplify.o -> -DIN_GCC_FRONTEND
Makefile:1051: tree-mudflap.o -> -DIN_GCC_FRONTEND
Makefile:1051: c-pretty-print.o -> -DIN_GCC_FRONTEND
Makefile:1051: c-omp.o -> -DIN_GCC_FRONTEND
Makefile:1051: fortran/arith.o ->
Makefile:1051: fortran/array.o ->
Makefile:1051: fortran/bbt.o ->
Makefile:1051: fortran/check.o ->
Makefile:1051: fortran/class.o ->
Makefile:1051: fortran/constructor.o ->
Makefile:1051: fortran/data.o ->
Makefile:1051: fortran/decl.o ->
Makefile:1051: fortran/dump-parse-tree.o ->
Makefile:1051: fortran/error.o ->
Makefile:1051: fortran/expr.o ->
Makefile:1051: fortran/interface.o ->
Makefile:1051: fortran/intrinsic.o ->
Makefile:1051: fortran/io.o ->
Makefile:1051: fortran/iresolve.o ->
Makefile:1051: fortran/match.o ->
Makefile:1051: fortran/matchexp.o ->
Makefile:1051: fortran/misc.o ->
Makefile:1051: fortran/module.o ->
Makefile:1051: fortran/openmp.o ->
Makefile:1051: fortran/options.o ->
Makefile:1051: fortran/parse.o ->
Makefile:1051: fortran/primary.o ->
Makefile:1051: fortran/resolve.o ->
Makefile:1051: fortran/scanner.o ->
Makefile:1051: fortran/simplify.o ->
Makefile:1051: fortran/st.o ->
Makefile:1051: fortran/symbol.o ->
Makefile:1051: fortran/target-memory.o ->
Makefile:1051: fortran/convert.o ->
Makefile:1051: fortran/dependency.o ->
Makefile:1051: fortran/f95-lang.o ->
Makefile:1051: fortran/trans.o ->
Makefile:1051: fortran/trans-array.o ->
Makefile:1051: fortran/trans-common.o ->
Makefile:1051: fortran/trans-const.o ->
Makefile:1051: fortran/trans-decl.o ->
Makefile:1051: fortran/trans-expr.o ->
Makefile:1051: fortran/trans-intrinsic.o ->
Makefile:1051: fortran/trans-io.o ->
Makefile:1051: fortran/trans-openmp.o ->
Makefile:1051: fortran/trans-stmt.o ->
Makefile:1051: fortran/trans-types.o ->
Makefile:1051: fortran/arith.o ->
Makefile:1051: fortran/array.o ->
Makefile:1051: fortran/bbt.o ->
Makefile:1051: fortran/check.o ->
Makefile:1051: fortran/class.o ->
Makefile:1051: fortran/constructor.o ->
Makefile:1051: fortran/data.o ->
Makefile:1051: fortran/decl.o ->
Makefile:1051: fortran/dump-parse-tree.o ->
Makefile:1051: fortran/error.o ->
Makefile:1051: fortran/expr.o ->
Makefile:1051: fortran/interface.o ->
Makefile:1051: fortran/intrinsic.o ->
Makefile:1051: fortran/io.o ->
Makefile:1051: fortran/iresolve.o ->
Makefile:1051: fortran/match.o ->
Makefile:1051: fortran/matchexp.o ->
Makefile:1051: fortran/misc.o ->
Makefile:1051: fortran/module.o ->
Makefile:1051: fortran/openmp.o ->
Makefile:1051: fortran/options.o ->
Makefile:1051: fortran/parse.o ->
Makefile:1051: fortran/primary.o ->
Makefile:1051: fortran/resolve.o ->
Makefile:1051: fortran/scanner.o ->
Makefile:1051: fortran/simplify.o ->
Makefile:1051: fortran/st.o ->
Makefile:1051: fortran/symbol.o ->
Makefile:1051: fortran/target-memory.o ->
Makefile:1051: fortran/convert.o ->
Makefile:1051: fortran/dependency.o ->
Makefile:1051: fortran/f95-lang.o ->
Makefile:1051: fortran/trans.o ->
Makefile:1051: fortran/trans-array.o ->
Makefile:1051: fortran/trans-common.o ->
Makefile:1051: fortran/trans-const.o ->
Makefile:1051: fortran/trans-decl.o ->
Makefile:1051: fortran/trans-expr.o ->
Makefile:1051: fortran/trans-intrinsic.o ->
Makefile:1051: fortran/trans-io.o ->
Makefile:1051: fortran/trans-openmp.o ->
Makefile:1051: fortran/trans-stmt.o ->
Makefile:1051: fortran/trans-types.o ->


Index: Makefile.in
===================================================================
--- Makefile.in (revision 159900)
+++ Makefile.in (working copy)
@@ -1048,7 +1048,8 @@
           $(PPLINC) $(CLOOGINC) $(LIBELFINC)

 .c.o:
-       $(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION)
+       $(COMPILER) -c $(warning $@ -> $(CFLAGS-$@)) $(ALL_COMPILERFLAGS) \
+       $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION)

 #
 # Support for additional languages (other than C).
@@ -1445,15 +1446,30 @@

 OBJS-onestep = libbackend.o $(OBJS-archive)

-# This lists all host object files, whether they are included in this
-# compilation or not.
-ALL_HOST_OBJS = $(GCC_OBJS) $(C_OBJS) $(OBJS) libbackend.o \
+# This lists all host objects for the front ends.
+ALL_HOST_FRONTEND_OBJS = $(C_OBJS) \
+  $(foreach v,$(CONFIG_LANGUAGES),$($(v)_OBJS))
+
+# Signal that these files are front-end objects.  This causes extra symbols
+# to be poisoned: Things no front end should ever look at, like RTL.
+$(foreach file,$(ALL_HOST_FRONTEND_OBJS),$(eval CFLAGS-$(file) +=
-DIN_GCC_FRONTEND))
+$(foreach file,$(ALL_HOST_FRONTEND_OBJS),$(warning $(file) is part of
ALL_HOST_FRONTEND_OBJS))
+
+ALL_HOST_BACKEND_OBJS = $(GCC_OBJS) $(OBJS) libbackend.o \
   @TREEBROWSER@ main.o gccspec.o version.o intl.o prefix.o cppspec.o \
-  $(foreach v,$(CONFIG_LANGUAGES),$($(v)_OBJS)) \
-  $(COLLECT2_OBJS) $(EXTRA_GCC_OBJS) \
-  mips-tfile.o mips-tdump.o \
+  $(COLLECT2_OBJS) $(EXTRA_GCC_OBJS) mips-tfile.o mips-tdump.o \
   $(GCOV_OBJS) $(GCOV_DUMP_OBJS)

+$(ALL_HOST_BACKEND_OBJS): ALL_CFLAGS += -DIN_GCC_BACKEND
+
+# This lists all host object files, whether they are included in this
+# compilation or not.
+ALL_HOST_OBJS = $(ALL_HOST_FRONTEND_OBJS) $(ALL_HOST_BACKEND_OBJS)
+
+# This lists all host object files, whether they are included in this
+# compilation or not.
+ALL_HOST_OBJS = $(ALL_HOST_FRONTEND_OBJS) $(ALL_HOST_BACKEND_OBJS)
+
 BACKEND = main.o @TREEBROWSER@ libbackend.a $(CPPLIB) $(LIBDECNUMBER)

 MOSTLYCLEANFILES = insn-flags.h insn-config.h insn-codes.h \


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]