bfin-xxx-gcc中cc1plus.exe的生成

时间:2022-11-15 02:29:10

快乐虾<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

http://blog.csdn.net/lights_joy/

lights@hb165.com

 

 

本文适用于

gcc-<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />4.3.1

configure –target=bfin-uclinux-gnu

Blackfin系列DSP

Cygwin gcc 3.4.4

 

欢迎转载,但请保留作者信息

 

 

 

这个目标并不是放在gcc/Makefile中,而是在gcc/cp/Make-lang.in文件中,然后在gcc/Makefile中有这个的语句:

LANG_MAKEFRAGS =  $(srcdir)/ada/Make-lang.in $(srcdir)/cp/Make-lang.in $(srcdir)/fortran/Make-lang.in $(srcdir)/java/Make-lang.in $(srcdir)/objc/Make-lang.in $(srcdir)/objcp/Make-lang.in $(srcdir)/treelang/Make-lang.in

ifneq ($(LANG_MAKEFRAGS),)

include $(LANG_MAKEFRAGS)

endif

这样就包含了gcc/cp/Make-lang.in。在此文件中是这样定义c++这条规则的:

# Define the names for selecting c++ in LANGUAGES.

# Note that it would be nice to move the dependency on g++

# into the C++ rule, but that needs a little bit of work

# to do the right thing within all.cross.

c++: cc1plus$(exeext)

cc1plus$(exeext): $(CXX_OBJS) cc1plus-checksum.o $(BACKEND) $(LIBDEPS)

       $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ /

             $(CXX_OBJS) cc1plus-checksum.o $(BACKEND) $(LIBS) $(GMPLIBS)

在这个依赖关系中,$(BACKEND)$(LIBDEPS)在生成cc1.exe时已经生成,因此这个目标依赖于$(CXX_OBJS)cc1plus-checksum.o。在这些目标生成后,这段脚本将它们链接为cc1plus.exe

CXX_OBJS = cp/cp-lang.o stub-objc.o $(CXX_AND_OBJCXX_OBJS)

CXX_AND_OBJCXX_OBJS = cp/call.o cp/decl.o cp/expr.o cp/pt.o cp/typeck2.o /

 cp/class.o cp/decl2.o cp/error.o cp/lex.o cp/parser.o cp/ptree.o cp/rtti.o /

 cp/typeck.o cp/cvt.o cp/except.o cp/friend.o cp/init.o cp/method.o /

 cp/search.o cp/semantics.o cp/tree.o cp/repo.o cp/dump.o cp/optimize.o /

 cp/mangle.o cp/cp-objcp-common.o cp/name-lookup.o cp/cxx-pretty-print.o /

 cp/cp-gimplify.o tree-mudflap.o $(CXX_C_OBJS)

在这里$(CXX_C_OBJS)定义了与cc1.exe共用的C文件,而这些文件在之前已经生成,因此可略过。

1.1.1.1             cp/cp-lang.o

这个文件适用于通用规则:

.c.o:

       $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION);/

同时有下列依赖关系:

cp/cp-lang.o: cp/cp-lang.c $(CXX_TREE_H) $(TM_H) toplev.h debug.h langhooks.h /

  $(LANGHOOKS_DEF_H) $(C_COMMON_H) gtype-cp.h /

  $(DIAGNOSTIC_H) cp/cp-objcp-common.h

由于所需要的目标都已经生成,直接编译即可。

1.1.1.2             stub-objc.o

这个文件适用于通用规则:

.c.o:

       $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION);/

同时有下列依赖关系:

stub-objc.o : stub-objc.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TREE_H) /

    $(C_COMMON_H)

由于所需要的目标都已经生成,直接编译即可。

 

1.1.1.3             cp/call.o

这个文件适用于通用规则:

.c.o:

       $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION);/

同时有下列依赖关系:

cp/call.o: cp/call.c $(CXX_TREE_H) $(TM_H) $(FLAGS_H) toplev.h $(RTL_H) /

  $(EXPR_H) $(DIAGNOSTIC_H) intl.h gt-cp-call.h convert.h $(TARGET_H) langhooks.h

由于所需要的目标都已经生成,直接编译即可。

 

1.1.1.4             cp/decl.o

这个文件适用于通用规则:

.c.o:

       $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION);/

同时有下列依赖关系:

cp/decl.o: cp/decl.c $(CXX_TREE_H) $(TM_H) $(FLAGS_H) cp/decl.h /

  output.h $(EXPR_H) except.h toplev.h $(HASHTAB_H) $(RTL_H) /

  cp/operators.def $(TM_P_H) $(TREE_INLINE_H) $(DIAGNOSTIC_H) $(C_PRAGMA_H) /

  debug.h gt-cp-decl.h $(TIMEVAR_H) $(TREE_FLOW_H) $(TARGET_H)

由于所需要的目标都已经生成,直接编译即可。

 

1.1.1.5             cp/expr.o

这个文件适用于通用规则:

.c.o:

       $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION);/

同时有下列依赖关系:

cp/expr.o: cp/expr.c $(CXX_TREE_H) $(TM_H) $(RTL_H) $(FLAGS_H) $(EXPR_H) /

  toplev.h except.h $(TM_P_H)

由于所需要的目标都已经生成,直接编译即可。

 

1.1.1.6             cp/pt.o

这个文件适用于通用规则:

.c.o:

       $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION);/

同时有下列依赖关系:

cp/pt.o: cp/pt.c $(CXX_TREE_H) $(TM_H) cp/decl.h cp/cp-objcp-common.h /

  toplev.h $(RTL_H) except.h $(TREE_INLINE_H) pointer-set.h gt-cp-pt.h /

  vecprim.h

由于所需要的目标都已经生成,直接编译即可。

 

1.1.1.7             cp/typeck2.o

这个文件适用于通用规则:

.c.o:

       $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION);/

同时有下列依赖关系:

cp/typeck2.o: cp/typeck2.c $(CXX_TREE_H) $(TM_H) $(FLAGS_H) toplev.h output.h /

  $(TM_P_H) $(DIAGNOSTIC_H) gt-cp-typeck2.h

由于所需要的目标都已经生成,直接编译即可。

 

1.1.1.8             cp/class.o

这个文件适用于通用规则:

.c.o:

       $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION);/

同时有下列依赖关系:

cp/class.o: cp/class.c $(CXX_TREE_H) $(TM_H) $(FLAGS_H) toplev.h $(RTL_H) /

  $(TARGET_H) convert.h $(CGRAPH_H) $(TREE_DUMP_H)

由于所需要的目标都已经生成,直接编译即可。

 

1.1.1.9             cp/decl2.o

这个文件适用于通用规则:

.c.o:

       $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION);/

同时有下列依赖关系:

cp/decl2.o: cp/decl2.c $(CXX_TREE_H) $(TM_H) $(FLAGS_H) cp/decl.h $(EXPR_H) /

  output.h except.h toplev.h $(RTL_H) $(C_COMMON_H) gt-cp-decl2.h $(CGRAPH_H) /

  $(C_PRAGMA_H) $(TREE_DUMP_H) intl.h $(TARGET_H)

由于所需要的目标都已经生成,直接编译即可。

 

1.1.1.10       cp/error.o

这个文件适用于通用规则:

.c.o:

       $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION);/

同时有下列依赖关系:

cp/error.o: cp/error.c $(CXX_TREE_H) $(TM_H) toplev.h $(DIAGNOSTIC_H) /

  $(FLAGS_H) $(REAL_H) $(LANGHOOKS_DEF_H) $(CXX_PRETTY_PRINT_H)

由于所需要的目标都已经生成,直接编译即可。

 

1.1.1.11       cp/lex.o

这个文件适用于通用规则:

.c.o:

       $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION);/

同时有下列依赖关系:

cp/lex.o: cp/lex.c $(CXX_TREE_H) $(TM_H) $(FLAGS_H) /

  $(C_PRAGMA_H) toplev.h output.h input.h cp/operators.def $(TM_P_H)

由于所需要的目标都已经生成,直接编译即可。

 

1.1.1.12       cp/parser.o

这个文件适用于通用规则:

.c.o:

       $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION);/

同时有下列依赖关系:

cp/parser.o: cp/parser.c $(CXX_TREE_H) $(TM_H) $(DIAGNOSTIC_H) gt-cp-parser.h /

  output.h $(TARGET_H)

由于所需要的目标都已经生成,直接编译即可。

 

1.1.1.13       cp/ptree.o

这个文件适用于通用规则:

.c.o:

       $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION);/

同时有下列依赖关系:

cp/ptree.o: cp/ptree.c $(CXX_TREE_H) $(TM_H)

由于所需要的目标都已经生成,直接编译即可。

 

1.1.1.14       cp/rtti.o

这个文件适用于通用规则:

.c.o:

       $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION);/

同时有下列依赖关系:

cp/rtti.o: cp/rtti.c $(CXX_TREE_H) $(TM_H) $(FLAGS_H) toplev.h convert.h /

  $(TARGET_H) $(C_PRAGMA_H) gt-cp-rtti.h

由于所需要的目标都已经生成,直接编译即可。

 

1.1.1.15       cp/typeck.o

这个文件适用于通用规则:

.c.o:

       $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION);/

同时有下列依赖关系:

cp/typeck.o: cp/typeck.c $(CXX_TREE_H) $(TM_H) $(FLAGS_H) $(RTL_H) $(EXPR_H) /

  toplev.h $(DIAGNOSTIC_H) convert.h $(C_COMMON_H) $(TARGET_H)

由于所需要的目标都已经生成,直接编译即可。

 

1.1.1.16       cp/cvt.o

这个文件适用于通用规则:

.c.o:

       $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION);/

同时有下列依赖关系:

cp/cvt.o: cp/cvt.c $(CXX_TREE_H) $(TM_H) cp/decl.h $(FLAGS_H) toplev.h /

  convert.h $(TARGET_H)

由于所需要的目标都已经生成,直接编译即可。

 

1.1.1.17       cp/except.o

这个文件适用于通用规则:

.c.o:

       $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION);/

同时有下列依赖关系:

cp/except.o: cp/except.c $(CXX_TREE_H) $(TM_H) $(FLAGS_H) $(RTL_H) except.h /

  toplev.h cp/cfns.h $(EXPR_H) libfuncs.h $(TREE_INLINE_H) $(TARGET_H)

由于所需要的目标都已经生成,直接编译即可。

 

1.1.1.18       cp/friend.o

这个文件适用于通用规则:

.c.o:

       $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION);/

同时有下列依赖关系:

cp/friend.o: cp/friend.c $(CXX_TREE_H) $(TM_H) $(FLAGS_H) $(RTL_H) toplev.h /

  $(EXPR_H)

由于所需要的目标都已经生成,直接编译即可。

 

1.1.1.19       cp/init.o

这个文件适用于通用规则:

.c.o:

       $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION);/

同时有下列依赖关系:

cp/init.o: cp/init.c $(CXX_TREE_H) $(TM_H) $(FLAGS_H) $(RTL_H) $(EXPR_H) /

  toplev.h except.h $(TARGET_H)

由于所需要的目标都已经生成,直接编译即可。

 

1.1.1.20       cp/method.o

这个文件适用于通用规则:

.c.o:

       $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION);/

同时有下列依赖关系:

cp/method.o: cp/method.c $(CXX_TREE_H) $(TM_H) toplev.h $(RTL_H) $(EXPR_H) /

  $(TM_P_H) $(TARGET_H) $(DIAGNOSTIC_H) gt-cp-method.h

由于所需要的目标都已经生成,直接编译即可。

 

1.1.1.21       cp/search.o

这个文件适用于通用规则:

.c.o:

       $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION);/

同时有下列依赖关系:

cp/search.o: cp/search.c $(CXX_TREE_H) $(TM_H) $(FLAGS_H) toplev.h $(RTL_H)

由于所需要的目标都已经生成,直接编译即可。

 

1.1.1.22       cp/semantics.o

这个文件适用于通用规则:

.c.o:

       $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION);/

同时有下列依赖关系:

cp/semantics.o: cp/semantics.c $(CXX_TREE_H) $(TM_H) except.h toplev.h /

  $(FLAGS_H) debug.h output.h $(RTL_H) $(TIMEVAR_H) $(EXPR_H) /

  $(TREE_INLINE_H) $(CGRAPH_H) $(TARGET_H) $(C_COMMON_H)

由于所需要的目标都已经生成,直接编译即可。

 

1.1.1.23       cp/tree.o

这个文件适用于通用规则:

.c.o:

       $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION);/

同时有下列依赖关系:

cp/tree.o: cp/tree.c $(CXX_TREE_H) $(TM_H) $(FLAGS_H) toplev.h $(RTL_H) /

  insn-config.h $(INTEGRATE_H) $(TREE_INLINE_H) $(REAL_H) gt-cp-tree.h /

  $(TARGET_H) debug.h $(TREE_FLOW_H)

由于所需要的目标都已经生成,直接编译即可。

 

1.1.1.24       cp/repo.o

这个文件适用于通用规则:

.c.o:

       $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION);/

同时有下列依赖关系:

cp/repo.o: cp/repo.c $(CXX_TREE_H) $(TM_H) toplev.h $(DIAGNOSTIC_H) /

  gt-cp-repo.h

由于所需要的目标都已经生成,直接编译即可。

 

1.1.1.25       cp/dump.o

这个文件适用于通用规则:

.c.o:

       $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION);/

同时有下列依赖关系:

cp/dump.o: cp/dump.c $(CXX_TREE_H) $(TM_H) $(TREE_DUMP_H)

由于所需要的目标都已经生成,直接编译即可。

 

1.1.1.26       cp/optimize.o

这个文件适用于通用规则:

.c.o:

       $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION);/

同时有下列依赖关系:

cp/optimize.o: cp/optimize.c $(CXX_TREE_H) $(TM_H) rtl.h $(INTEGRATE_H) /

  insn-config.h input.h $(PARAMS_H) debug.h $(TREE_INLINE_H) $(TREE_GIMPLE_H) /

  $(TARGET_H)

由于所需要的目标都已经生成,直接编译即可。

 

1.1.1.27       cp/mangle.o

这个文件适用于通用规则:

.c.o:

       $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION);/

同时有下列依赖关系:

cp/mangle.o: cp/mangle.c $(CXX_TREE_H) $(TM_H) toplev.h $(REAL_H) /

  gt-cp-mangle.h $(TARGET_H) $(TM_P_H)

由于所需要的目标都已经生成,直接编译即可。

 

1.1.1.28       cp/cp-objcp-common.o

这个文件适用于通用规则:

.c.o:

       $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION);/

同时有下列依赖关系:

cp/cp-objcp-common.o : cp/cp-objcp-common.c $(CONFIG_H) $(SYSTEM_H) /

  coretypes.h $(TM_H) $(TREE_H) $(CXX_TREE_H) $(C_COMMON_H) toplev.h /

  langhooks.h $(LANGHOOKS_DEF_H) $(DIAGNOSTIC_H) debug.h /

  $(CXX_PRETTY_PRINT_H) cp/cp-objcp-common.h gt-cp-cp-objcp-common.h

由于所需要的目标都已经生成,直接编译即可。

 

1.1.1.29       cp/name-lookup.o

这个文件适用于通用规则:

.c.o:

       $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION);/

同时有下列依赖关系:

cp/name-lookup.o: cp/name-lookup.c $(CONFIG_H) $(SYSTEM_H) coretypes.h /

       $(TM_H) $(CXX_TREE_H) $(TIMEVAR_H) gt-cp-name-lookup.h toplev.h /

       $(DIAGNOSTIC_H) $(FLAGS_H) debug.h

由于所需要的目标都已经生成,直接编译即可。

 

1.1.1.30       cp/cxx-pretty-print.o

这个文件适用于通用规则:

.c.o:

       $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION);/

同时有下列依赖关系:

cp/cxx-pretty-print.o: cp/cxx-pretty-print.c $(CXX_PRETTY_PRINT_H) /

  $(CONFIG_H) $(SYSTEM_H) $(TM_H) coretypes.h $(CXX_TREE_H)

由于所需要的目标都已经生成,直接编译即可。

 

1.1.1.31       cp/cp-gimplify.o

这个文件适用于通用规则:

.c.o:

       $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION);/

同时有下列依赖关系:

cp/cp-gimplify.o: cp/cp-gimplify.c $(CXX_TREE_H) toplev.h $(C_COMMON_H) /

       $(TM_H) coretypes.h pointer-set.h

由于所需要的目标都已经生成,直接编译即可。

 

1.1.1.32       cc1plus-checksum.o

这个文件适用于通用规则:

.c.o:

       $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION);/

同时有下列依赖关系:

cc1plus-checksum.o : cc1plus-checksum.c

cc1plus-checksum.c : cc1plus-dummy$(exeext) build/genchecksum$(build_exeext)

       build/genchecksum$(build_exeext) cc1plus-dummy$(exeext) > $@

cc1plus-dummy$(exeext): $(CXX_OBJS) dummy-checksum.o $(BACKEND) $(LIBDEPS)

       $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ /

             $(CXX_OBJS) dummy-checksum.o $(BACKEND) $(LIBS) $(GMPLIBS)

所需要的几个目标都已经生成,从这几条规则可以看出它将首先生成cc1plus-dummy,然后再生成cc1plus-checksum.c,再编译为cc1plus-checksum.o

 

1.1.1.33       $(BACKEND)

这个目标在生成cc1.exe时已经完成,略过。

1.1.1.34       $(LIBDEPS)

这个目标在生成cc1.exe时已经完成,略过。

 

 

 

参考资料

host-i686-pc-cygwin/libiberty/Makefile解析(2008-8-19)

host-i686-pc-cygwin/fixincludes/Makefile分析(2008-8-19)

host-i686-pc-cygwin/zlib/Makefile分析(2008-8-19)

host-i686-pc-cygwin/libcpp/Makefile分析(2008-8-19)

host-i686-pc-cygwin/libdecnumber/Makefile分析(2008-8-19)