rules.tool
上传用户:baixin
上传日期:2008-03-13
资源大小:4795k
文件大小:4k
开发平台:

MultiPlatform

  1. # rules.tool - rules for extracting objects from toolchain libraries
  2. #
  3. # modification history
  4. # --------------------
  5. # 01m,03dec01,sn   allow configlette rules to be used seperately from TOOL_LIB 
  6. #                  extraction rules
  7. # 01l,13nov01,sn   include defs.exclude
  8. # 01k,07nov01,tam  removed LIBDIR & lib rule
  9. # 01j,06nov01,sn   prefix object file names to prevent clashes with VxWorks objects
  10. # 01i,15oct01,sn   moved GNU specific material to tool/defs.gnu
  11. # 01h,24jan01,sn   append a "marker symbol" to each module
  12. # 01h,18jan01,mem  Strip debug info from MIPS objects to work around VxGDB
  13. #                  issue.
  14. # 01g,15nov99,sn   wrote
  15. #
  16. # DESCRIPTION
  17. # Generic rules for extracting objects from toolchain libraries.
  18. # Subdirectory Makefiles for specific toolchains should
  19. # set TOOL_LIBS and include this file.
  20. #
  21. include $(TGT_DIR)/h/make/rules.library
  22. GEN_CONFIG  =  wtxtcl $(TGT_DIR)/src/tool/genConfig.tcl
  23. OBJS_EXCLUDE    =  wtxtcl $(TGT_DIR)/src/tool/objsExclude.tcl
  24. include $(TGT_DIR)/src/tool/$(TOOL_FAMILY)/defs.exclude
  25. # Compute PRE_OBJS (all objects except $(CONFIGLETTE_O))
  26. ifneq ($(TOOL_LIB),)
  27. ifeq ($(PRE_OBJS),)
  28. ifeq ($(REAL_OBJS),)
  29. REAL_OBJS := $(shell $(AR) t $(TOOL_LIB) | $(OBJS_EXCLUDE) $(EXCLUDE_OBJS))
  30. endif # REAL_OBJS undefined
  31. # We prefix each object file coming out of a toolchain library
  32. # with OBJ_PREFIX; the hope is that this will avoid clashes
  33. # with object files in the VxWorks library.
  34. PRE_OBJS := $(patsubst %,$(OBJ_PREFIX)%,$(REAL_OBJS))
  35. endif # PRE_OBJS undefined
  36. endif # TOOL_LIB defined
  37. ifneq ($(CONFIGLETTE_NAME),)
  38. CONFIGLETTE_O = __$(CONFIGLETTE_NAME).o
  39. CONFIGLETTE_C = $(LIBDIR)/__$(CONFIGLETTE_NAME).c
  40. endif
  41. OBJS = $(PRE_OBJS) $(CONFIGLETTE_O)
  42. # rules.library only looks in the current directory for
  43. # source files when it determines the objects we can build.
  44. # In our case the objects have already been built in the
  45. # GNU build tree (in libgcc.a) and we just want to pull them out.
  46. PRE_LIBOBJS    = $(foreach file, $(PRE_OBJS), $(LIBDIR)/$(file)) 
  47. LIBOBJS         = $(foreach file, $(OBJS), $(LIBDIR)/$(file))
  48. # On windows there needs to be a target called $(file)_clean for each file
  49. # in $(LIBOBJS).
  50. ifeq ($(WIND_HOST_TYPE),x86-win32)
  51. clean : $(foreach file,$(subst /,$(DIRCHAR),$(LIBOBJS) $(LOCAL_CLEAN)),$(file)_clean)
  52. $(foreach file,$(subst /,$(DIRCHAR),$(LIBOBJS) $(LOCAL_CLEAN)),$(file)_clean):
  53. $(RM) $(subst _clean,,$@)
  54. endif
  55. # Repeat the work of rules.library with the correct object list
  56. objs : $(LIBOBJS) Makefile
  57. $(subst /,$(DIRCHAR),$(TGT_DIR)/lib/$(LIBNAME)) : $(LIBOBJS)
  58. ifeq ($(WIND_HOST_TYPE),x86-win32)
  59.     SEMI=;
  60. else
  61.     SEMI=";"
  62. endif
  63. WRAPPER=$(LIBDIR)/_tmp_wrapper.c
  64. TMP_OBJ=$(LIBDIR)/_tmp_obj.o
  65. ifneq ($(TOOL_LIB),)
  66. $(LIBDIR)/%.o : $(TOOL_LIB) Makefile
  67. @echo Wrapping $@ ...
  68. $(RM) $(subst /,$(DIRCHAR),$@)
  69. # This just adds a symbol __object_o to object.o. We chose
  70. # to use a one-line C fragment rather than using the linker
  71. # to directly add a symbol because this way we don't have
  72. # to worry about whether or not the compiler prepends an underscore.
  73. echo char __$(subst -,_,$(notdir $*))_o = 0$(SEMI) > $(WRAPPER)
  74. ifeq ($(WIND_HOST_TYPE),x86-win32)
  75. (cd $(LIBDIR) & $(AR) -x $(TOOL_LIB) $(patsubst $(OBJ_PREFIX)%,%,$(notdir $@)) & move $(patsubst $(OBJ_PREFIX)%,%,$(notdir $@)) $(notdir $@))
  76. else
  77. (cd $(LIBDIR) ; 
  78.          $(AR) -x $(TOOL_LIB) $(patsubst $(OBJ_PREFIX)%,%,$(notdir $@)) ; 
  79.          mv $(patsubst $(OBJ_PREFIX)%,%,$(notdir $@)) $@)
  80. endif
  81. $(CC) -c $(CFLAGS) $(WRAPPER) -o $(TMP_OBJ)
  82. $(LD) $(LD_PARTIAL_FLAGS) -r $(TMP_OBJ) $@ -o $@_tmp
  83. $(CP) $(subst /,$(DIRCHAR),$@_tmp) $(subst /,$(DIRCHAR),$@)
  84. $(RM) $(WRAPPER) $(TMP_OBJ) $@_tmp
  85. endif # $(TOOL_LIB) defined
  86. ifneq ($(CONFIGLETTE_O),)
  87. $(LIBDIR)/$(CONFIGLETTE_O) : $(PRE_LIBOBJS)
  88. $(GEN_CONFIG) $(CONFIGLETTE_NAME) $(PRE_OBJS) > $(CONFIGLETTE_C)
  89. $(CC) -c $(CFLAGS) $(CONFIGLETTE_C) -o $@
  90. $(RM) $(CONFIGLETTE_C)
  91. endif