Advertisement
Guest User

generic.makefile

a guest
Aug 6th, 2012
198
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Make 9.81 KB | None | 0 0
  1.  
  2. ###########################################################################################
  3. #
  4. # Generic makefile, used everywhere
  5. # ----------------------------------------------------------------------------------
  6. # Date   : 2007/05/16
  7. #
  8. ###########################################################################################
  9.  
  10. INTERNAL_LOG_FILE=build.log
  11.  
  12. ifdef PARROTOS_MAKEFILE
  13.   TWEAKED_PARROTOS_MAKEFILE=$(GENERIC_LIBRARY_TARGET_DIR)/tweaked_parrotos.mak
  14.   include $(TWEAKED_PARROTOS_MAKEFILE)
  15.   GENERIC_LIBRARY_SOURCE_FILES=$(filter-out mDNSPosix/Responder.c,$(CFILES:P5_FFT.c=P5_FFT.s) $(SFILES) $(PSFILES))
  16.   GENERIC_INCLUDES+=$(patsubst %,-I$(GENERIC_LIBRARY_SOURCE_DIR)/%,$(MODULES))
  17. endif
  18.  
  19. ifeq ($(QUIET_BUILD),yes)
  20.   Q=@
  21.   SILENT=2>&1 > /dev/null
  22. endif
  23.  
  24. ifeq ($(USE_NDS),yes)
  25.   NDS_CPU_TYPE=$(shell echo $(NDS_CPU) | tr "A-Z" "a-z" | sed -e "s@[0-9][0-9]*@@")
  26.   NDS_CPU_NUM=$(shell echo $(NDS_CPU) | sed -e "s@[a-zA-Z][a-zA-Z]*@@")
  27.   INTERNAL_NDSTOOL:=$(Q)ndstool
  28.   INTERNAL_DSBUILD:=$(Q)dsbuild
  29. endif
  30.  
  31. INTERNAL_SOURCE_EXTENSIONS= .c .S .s .cpp
  32.  
  33. INTERNAL_MKDIR=mkdir -p
  34. INTERNAL_ECHO=echo
  35.  
  36. # (in) GENERIC_COMMAND_PREFIX
  37. INTERNAL_CC:=$(GENERIC_COMMAND_PREFIX)gcc
  38. INTERNAL_AR:=$(GENERIC_COMMAND_PREFIX)ar
  39. INTERNAL_OBJCOPY:=$(GENERIC_COMMAND_PREFIX)objcopy
  40. INTERNAL_STRIP:=$(GENERIC_COMMAND_PREFIX)strip
  41.  
  42. # (in) GENERIC_CFLAGS
  43. # (in) GENERIC_LDFLAGS
  44. # (in) GENERIC_ARFLAGS
  45.  
  46. # (in) GENERIC_INCLUDES
  47.  
  48. # (in) GENERIC_ADD_OFILES : for linking with
  49.  
  50. # (in) GENERIC_LIBRARY_SOURCE_DIR
  51. # (in) GENERIC_LIBRARY_SOURCE_FILES
  52. # (in) GENERIC_LIBRARY_TARGET_DIR : for .o files
  53. INTERNAL_LIBRARY_SOURCE_FILES:=$(patsubst %,$(GENERIC_LIBRARY_SOURCE_DIR)/%,$(GENERIC_LIBRARY_SOURCE_FILES))
  54. INTERNAL_LIBRARY_TARGET_OFILES:=$(foreach ext,$(INTERNAL_SOURCE_EXTENSIONS),\
  55.     $(patsubst $(GENERIC_LIBRARY_SOURCE_DIR)/%$(ext),$(GENERIC_LIBRARY_TARGET_DIR)/%.o,$(filter %$(ext),$(INTERNAL_LIBRARY_SOURCE_FILES))))
  56.  
  57. # (in) GENERIC_BINARIES_SOURCE_DIR
  58. # (in) GENERIC_BINARIES_COMMON_SOURCE_FILES
  59. # (in) GENERIC_BINARIES_SOURCE_ENTRYPOINTS
  60. # (in) GENERIC_BINARIES_TARGET_DIR : for .o files
  61. INTERNAL_BINARIES_COMMON_SOURCE_FILES:=$(patsubst %,$(GENERIC_BINARIES_SOURCE_DIR)/%,$(GENERIC_BINARIES_COMMON_SOURCE_FILES))
  62. INTERNAL_BINARIES_COMMON_TARGET_OFILES:=$(foreach ext,$(INTERNAL_SOURCE_EXTENSIONS),\
  63.     $(patsubst $(GENERIC_BINARIES_SOURCE_DIR)/%$(ext),$(GENERIC_BINARIES_TARGET_DIR)/%.o,$(filter %$(ext),$(INTERNAL_BINARIES_COMMON_SOURCE_FILES))))
  64. INTERNAL_BINARIES_TARGET_OENTRYPOINTS:=$(foreach ext,$(INTERNAL_SOURCE_EXTENSIONS),\
  65.     $(patsubst %$(ext),$(GENERIC_BINARIES_TARGET_DIR)/%.o,$(filter %$(ext),$(GENERIC_BINARIES_SOURCE_ENTRYPOINTS))))
  66.  
  67. # (in) GENERIC_TARGET_LIBRARY
  68.  
  69. # (in) GENERIC_TARGET_BINARIES_PREFIX : for binaries naming
  70. # (in) GENERIC_TARGET_BINARIES_DIR : for binaries places
  71. INTERNAL_TARGET_BINARIES:=$(foreach entrypoint,$(GENERIC_BINARIES_SOURCE_ENTRYPOINTS),$(shell basename $(entrypoint) .c))
  72. INTERNAL_TARGET_BINARIES:=$(patsubst %.c,%,$(GENERIC_BINARIES_SOURCE_ENTRYPOINTS))
  73. INTERNAL_TARGET_BINARIES:=$(patsubst %,$(GENERIC_TARGET_BINARIES_DIR)/$(GENERIC_TARGET_BINARIES_PREFIX)%,$(INTERNAL_TARGET_BINARIES))
  74.  
  75. _INTERNAL_LIBRARY_DEPFILES:=$(foreach ext,$(INTERNAL_SOURCE_EXTENSIONS),\
  76.     $(patsubst $(GENERIC_LIBRARY_SOURCE_DIR)/%$(ext),$(GENERIC_LIBRARY_TARGET_DIR)/%$(ext).d,$(filter %$(ext),$(INTERNAL_LIBRARY_SOURCE_FILES))))
  77. _INTERNAL_BINARIES_DEPFILES:=$(foreach ext,$(INTERNAL_SOURCE_EXTENSIONS),\
  78.     $(patsubst $(GENERIC_BINARIES_SOURCE_DIR)/%$(ext),$(GENERIC_BINARIES_TARGET_DIR)/%$(ext).d,$(filter %$(ext),$(INTERNAL_BINARIES_COMMON_SOURCE_FILES))))
  79. _INTERNAL_BINARIES_DEPFILES+=$(foreach ext,$(INTERNAL_SOURCE_EXTENSIONS),\
  80.     $(patsubst %$(ext),$(GENERIC_BINARIES_TARGET_DIR)/%$(ext).d,$(filter %$(ext),$(GENERIC_BINARIES_SOURCE_ENTRYPOINTS))))
  81.  
  82. ifneq ($(MAKECMDGOALS),clean)
  83.   INTERNAL_LIBRARY_DEPFILES:=$(_INTERNAL_LIBRARY_DEPFILES)
  84.   INTERNAL_BINARIES_DEPFILES:=$(_INTERNAL_BINARIES_DEPFILES)
  85. endif
  86.  
  87. ALL_TO_BE_DONE=                     \
  88.     $(INTERNAL_LIBRARY_DEPFILES)            \
  89.     $(INTERNAL_BINARIES_DEPFILES)           \
  90.     $(INTERNAL_LIBRARY_TARGET_OFILES)       \
  91.     $(GENERIC_TARGET_LIBRARY)           \
  92.     $(INTERNAL_BINARIES_COMMON_TARGET_OFILES)   \
  93.     $(INTERNAL_BINARIES_TARGET_OENTRYPOINTS)    \
  94.     $(INTERNAL_TARGET_BINARIES)
  95.  
  96. ifeq ($(GENERIC_TARGET_LIBRARY),)
  97. ifeq ($(USE_DLL),yes)
  98.   ALL_TO_BE_DONE+=$(GENERIC_TARGET_BINARIES_DIR)/$(GENERIC_TARGET_BINARIES_PREFIX)$(DLL_ID).dll
  99. endif
  100. endif
  101.  
  102. CREATE_TARGET_DIRECTORY=$(INTERNAL_MKDIR) $(@D)
  103.  
  104. all: clean_log $(ALL_TO_BE_DONE)
  105.  
  106. clean_log:
  107.     @rm -f $(GENERIC_BINARIES_TARGET_DIR)/$(INTERNAL_LOG_FILE) $(GENERIC_LIBRARY_TARGET_DIR)/$(INTERNAL_LOG_FILE)
  108.  
  109. check:
  110.     @(cd $(GENERIC_LIBRARY_SOURCE_DIR) ; $(SDK_SOURCE_DIR)/Build/cvsstatus.sh $(SDK_SOURCE_DIR)/Build ADD)
  111.  
  112. clean:
  113.     $(RM) $(ALL_TO_BE_DONE) $(_INTERNAL_LIBRARY_DEPFILES) $(_INTERNAL_BINARIES_DEPFILES)
  114.  
  115. update:
  116.  
  117. $(TWEAKED_PARROTOS_MAKEFILE): $(PARROTOS_MAKEFILE)
  118.     @$(CREATE_TARGET_DIRECTORY)
  119.     @echo "all:" >> $(TWEAKED_PARROTOS_MAKEFILE)
  120.     @cat $(PARROTOS_MAKEFILE) | grep -v "^[-]*include" | grep -v "^all:" | sed -e "s@^\([A-Z]*[=]*\)\([ \t]*\)\(/\)@\1\2@" | sed -e "s@^clean:@NOCLEAN:@" >> $(TWEAKED_PARROTOS_MAKEFILE)
  121.  
  122. ifneq ("$(INTERNAL_LIBRARY_TARGET_OFILES)","")
  123. $(GENERIC_TARGET_LIBRARY): $(INTERNAL_LIBRARY_TARGET_OFILES)
  124.     @$(CREATE_TARGET_DIRECTORY)
  125.     @$(INTERNAL_ECHO) "ar $(GENERIC_ARFLAGS)" $(subst $(GENERIC_LIBRARY_TARGET_DIR)/,,$@ $^)
  126.     @rm -f $@
  127.     @$(INTERNAL_AR) $(GENERIC_ARFLAGS) $@ $^
  128. endif
  129.  
  130. ifeq ($(USE_DLL),yes)
  131. $(GENERIC_TARGET_BINARIES_DIR)/$(GENERIC_TARGET_BINARIES_PREFIX)$(DLL_ID).dll: $(INTERNAL_BINARIES_COMMON_TARGET_OFILES) $(GENERIC_ADD_OFILES) $(GENERIC_BINARIES_LIBS_DEPS)
  132. else
  133. $(GENERIC_TARGET_BINARIES_DIR)/$(GENERIC_TARGET_BINARIES_PREFIX)%: $(GENERIC_BINARIES_TARGET_DIR)/%.o $(INTERNAL_BINARIES_COMMON_TARGET_OFILES) $(GENERIC_ADD_OFILES) $(GENERIC_BINARIES_LIBS_DEPS)
  134. endif
  135.     @$(CREATE_TARGET_DIRECTORY)
  136.   ifeq ($(QUIET_BUILD),yes)
  137.   ifeq ($(USE_NDS),yes)
  138.     @$(INTERNAL_ECHO) "dsbuild $(GENERIC_TARGET_BINARIES_PREFIX)$*.nds"
  139.   else
  140.     ifeq ($(USE_DLL),yes)
  141.     @$(INTERNAL_ECHO) "ld $(GENERIC_TARGET_BINARIES_PREFIX)$(DLL_ID).dll"
  142.     else
  143.     @$(INTERNAL_ECHO) "ld $(GENERIC_TARGET_BINARIES_PREFIX)$*"
  144.     endif
  145.   endif
  146.   endif
  147.   ifeq ($(USE_DLL),yes)
  148.     $(GENERIC_COMMAND_PREFIX)dlltool -e $(GENERIC_TARGET_BINARIES_DIR)/$(DLL_ID)_exports.o --export-all-symbols -l $(@:.dll=.lib) $(INTERNAL_BINARIES_COMMON_TARGET_OFILES)
  149.     $(INTERNAL_CC) --shared -o $@ $(INTERNAL_BINARIES_COMMON_TARGET_OFILES) $(GENERIC_TARGET_BINARIES_DIR)/$(DLL_ID)_exports.o $(GENERIC_ADD_OFILES) $(GENERIC_LIB_PATHS) $(GENERIC_LIBS) $(GENERIC_LDFLAGS) $(LDFLAGS_$(subst /,_,$*))
  150.     $(RM) $(GENERIC_TARGET_BINARIES_DIR)/$(DLL_ID)_exports.o
  151.   else
  152.     $(INTERNAL_CC) -o $@ $(GENERIC_BINARIES_TARGET_DIR)/$*.o $(INTERNAL_BINARIES_COMMON_TARGET_OFILES) $(GENERIC_ADD_OFILES) $(GENERIC_LIB_PATHS) $(GENERIC_LIBS) $(GENERIC_LDFLAGS) $(LDFLAGS_$(subst /,_,$*))
  153.   endif
  154.   ifeq ($(RELEASE_BUILD),yes)
  155.     cp $@ $(shell dirname $@)/sym_$(shell basename $@)
  156.     $(INTERNAL_STRIP) $@
  157.   endif
  158.   ifeq ($(USE_NDS),yes)
  159.     $(INTERNAL_OBJCOPY) -O binary $@ $@.$(NDS_CPU_TYPE)$(NDS_CPU_NUM)
  160.     $(INTERNAL_NDSTOOL) -c $@.nds -$(NDS_CPU_NUM) $@.$(NDS_CPU_TYPE)$(NDS_CPU_NUM) $(SILENT)
  161.     $(INTERNAL_DSBUILD) $@.nds $(SILENT)
  162.   endif
  163.  
  164. # Template build rules
  165. # first param  $(1) : rule type (LIBRARY or BINARIES)
  166. # second param $(2) : source extension (.c for example)
  167. define BUILD_OFILE_TEMPLATE
  168.   $$(GENERIC_$(1)_TARGET_DIR)/%$(2).d: $$(GENERIC_$(1)_SOURCE_DIR)/%$(2)
  169.     @$$(CREATE_TARGET_DIRECTORY)
  170.   ifeq ($$(QUIET_BUILD),yes)
  171.     @$$(INTERNAL_ECHO) "dep $$*$(2)"
  172.   endif
  173.     $$(INTERNAL_CC) -M $$(filter-out -Wall,$$(GENERIC_CFLAGS)) -w $$(CFLAGS_$$(subst /,_,$$*)) $$(GENERIC_INCLUDES) $$(GENERIC_$(1)_SOURCE_DIR)/$$*$(2) > $$@
  174. ifeq ($(USE_IPHONE),yes)
  175.    @sed -ie 's,\(.*\.o\)\([ :]*\),\1 $$@\2,g' $$@
  176. else
  177.     @sed -i 's,\(.*\.o\)\([ :]*\),\1 $$@\2,g' $$@  
  178. endif
  179.   $$(GENERIC_$(1)_TARGET_DIR)/%.o: $$(GENERIC_$(1)_TARGET_DIR)/%$(2).d
  180.     @$$(CREATE_TARGET_DIRECTORY)
  181.   ifeq ($$(QUIET_BUILD),yes)
  182.     @$$(INTERNAL_ECHO) "cc $$*$(2)"
  183.   endif
  184.     @echo -E $$(INTERNAL_CC) $$(GENERIC_CFLAGS) $$(CFLAGS_$$(subst /,_,$$*)) $$(GENERIC_INCLUDES) -c -o $$@ $$(GENERIC_$(1)_SOURCE_DIR)/$$*$(2) >> $$(GENERIC_$(1)_TARGET_DIR)/$(INTERNAL_LOG_FILE)
  185.     ifeq ("$(STUBBORN_BUILD)","yes")
  186.     until $$(INTERNAL_CC) -Wfatal-errors $$(GENERIC_CFLAGS) $$(CFLAGS_$$(subst /,_,$$*)) $$(GENERIC_INCLUDES) -c -o $$@ $$(GENERIC_$(1)_SOURCE_DIR)/$$*$(2) 2>&1 >> $$(GENERIC_$(1)_TARGET_DIR)/$(INTERNAL_LOG_FILE); do echo "--- Press a key to recompile this file ---"; read phony; done;
  187.     else
  188.     $$(INTERNAL_CC) $$(GENERIC_CFLAGS) $$(CFLAGS_$$(subst /,_,$$*)) $$(GENERIC_INCLUDES) -c -o $$@ $$(GENERIC_$(1)_SOURCE_DIR)/$$*$(2) 2>&1 >> $$(GENERIC_$(1)_TARGET_DIR)/$(INTERNAL_LOG_FILE)
  189.     endif
  190.   ifeq ("$$(USE_MEMPROT)","yes")
  191.   ifdef GENERIC_DOMAIN
  192.     ifeq ($$(QUIET_BUILD),yes)
  193.     @$$(INTERNAL_ECHO) "put_in_domain $$(GENERIC_DOMAIN) $$*.o"
  194.     @$$(PUT_IN_DOMAIN) $$(GENERIC_DOMAIN) $$@
  195.       else
  196.     $$(PUT_IN_DOMAIN) $$(GENERIC_DOMAIN) $$@
  197.       endif
  198.   else
  199.     ifeq ($$(QUIET_BUILD),yes)
  200.     @if [ ! -z $$(DOMAIN_$$(subst /,_,$$*)) ]; then                 \
  201.         $$(INTERNAL_ECHO) "put_in_domain $$(DOMAIN_$$(subst /,_,$$*)) $$*.o";   \
  202.         $$(PUT_IN_DOMAIN) $$(DOMAIN_$$(subst /,_,$$*)) $$@;         \
  203.     fi
  204.     else
  205.     @if [ ! -z $$(DOMAIN_$$(subst /,_,$$*)) ]; then                 \
  206.         $$(INTERNAL_ECHO) $$(PUT_IN_DOMAIN) $$(DOMAIN_$$(subst /,_,$$*)) $$@;   \
  207.         $$(PUT_IN_DOMAIN) $$(DOMAIN_$$(subst /,_,$$*)) $$@;         \
  208.     fi
  209.     endif
  210.   endif
  211.   endif
  212. endef
  213.  
  214. # Build rules for each extension
  215. $(foreach ext,$(INTERNAL_SOURCE_EXTENSIONS),$(eval $(call BUILD_OFILE_TEMPLATE,LIBRARY,$(ext))))
  216. $(foreach ext,$(INTERNAL_SOURCE_EXTENSIONS),$(eval $(call BUILD_OFILE_TEMPLATE,BINARIES,$(ext))))
  217.  
  218. ifneq ($(MAKECMDGOALS),clean)
  219. ifneq ($(MAKECMDGOALS),check)
  220.   -include $(INTERNAL_LIBRARY_DEPFILES) $(INTERNAL_BINARIES_DEPFILES)
  221. endif
  222. endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement