On Thu, May 27, 2010 at 8:25 AM, Steven Bosscher <stevenb....@gmail.com> wrote: > On Thu, May 27, 2010 at 7:15 AM, Paolo Bonzini <bonz...@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: stev...@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 stev...@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 stev...@gcc17:~/devel/trunk/gcc$ grep ^Makefile buildlog | grep FRONTEND > t stev...@gcc17:~/devel/trunk/gcc$ grep ^Makefile buildlog | grep fortran >> t stev...@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 \