Advertisement
Guest User

Makefile rule for compiling ChibiOS in windows

a guest
Jun 10th, 2011
277
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Make 3.96 KB | None | 0 0
  1. # ARM Cortex-Mx common makefile scripts and rules.
  2.  
  3. # Output
  4. OUTFILES = $(BUILDDIR)/$(PROJECT).elf $(BUILDDIR)/$(PROJECT).hex $(BUILDDIR)/$(PROJECT).bin $(BUILDDIR)/$(PROJECT).dmp
  5. ifeq ($(BUILDDIR),)
  6.   BUILDDIR = .
  7.   CLEANDIR =
  8. else
  9.   CLEANDIR = $(BUILDDIR)
  10. endif
  11. #ENSUREBUILDDIR = $(shell test -d $(BUILDDIR) || mkdir $(BUILDDIR))
  12. ENSUREBUILDDIR = $( -@md $(BUILDDIR) >NUL 2>&1 || echo "" >NUL )
  13.  
  14. # Automatic compiler options
  15. OPT = $(USE_OPT)
  16. CPPOPT = $(USE_CPPOPT)
  17. ifeq ($(USE_CURRP_CACHING),yes)
  18.   OPT += -ffixed-r7 -DCH_CURRP_REGISTER_CACHE='"r7"'
  19. endif
  20. ifeq ($(USE_LINK_GC),yes)
  21.   OPT += -ffunction-sections -fdata-sections
  22. endif
  23.  
  24. # Source files groups
  25. ifeq ($(USE_THUMB),yes)
  26.   TCSRC += $(CSRC)
  27.   TCPPSRC += $(CPPSRC)
  28. else
  29.   ACSRC += $(CSRC)
  30.   ACPPSRC += $(CPPSRC)
  31. endif
  32. ASRC     = $(ACSRC)$(ACPPSRC)
  33. TSRC     = $(TCSRC)$(TCPPSRC)
  34. SRC      = $(ASRC)$(TSRC)
  35.  
  36. # Object files groups
  37. ACOBJS   = $(ACSRC:.c=.o)
  38. ACPPOBJS = $(ACPPSRC:.cpp=.o)
  39. TCOBJS   = $(TCSRC:.c=.o)
  40. TCPPOBJS = $(TCPPSRC:.cpp=.o)
  41. ASMOBJS  = $(ASMSRC:.s=.o)
  42. OBJS     = $(ASMOBJS) $(ACOBJS) $(TCOBJS) $(ACPPOBJS) $(TCPPOBJS)
  43.  
  44. # Paths
  45. IINCDIR = $(patsubst %,-I%,$(INCDIR) $(DINCDIR) $(UINCDIR))
  46. LLIBDIR = $(patsubst %,-L%,$(DLIBDIR) $(ULIBDIR))
  47.  
  48. # Macros
  49. DEFS    = $(DDEFS) $(UDEFS)
  50. ADEFS   = $(DADEFS) $(UADEFS)
  51.  
  52. # Libs
  53. LIBS    = $(DLIBS) $(ULIBS)
  54.  
  55. # Various settings
  56. MCFLAGS = -mcpu=$(MCU)
  57. ODFLAGS = -x --syms
  58. ASFLAGS = $(MCFLAGS) -Wa,-amhls=$(<:.s=.lst) $(ADEFS)
  59. CFLAGS   = $(MCFLAGS) $(OPT) $(CWARN) -Wa,-alms=$(<:.c=.lst) $(DEFS)
  60. CPPFLAGS = $(MCFLAGS) $(OPT) $(CPPOPT) $(CPPWARN) -Wa,-alms=$(<:.cpp=.lst) $(DEFS)
  61. ifeq ($(USE_LINK_GC),yes)
  62.   LDFLAGS = $(MCFLAGS) -nostartfiles -T$(LDSCRIPT) -Wl,-Map=$(BUILDDIR)/$(PROJECT).map,--cref,--no-warn-mismatch,--gc-sections $(LLIBDIR)
  63. else
  64.   LDFLAGS = $(MCFLAGS) -nostartfiles -T$(LDSCRIPT) -Wl,-Map=$(BUILDDIR)/$(PROJECT).map,--cref,--no-warn-mismatch $(LLIBDIR)
  65. endif
  66.  
  67. # Thumb interwork enabled only if needed because it kills performance.
  68. ifneq ($(TSRC),)
  69.   CFLAGS += -DTHUMB_PRESENT
  70.   CPPFLAGS += -DTHUMB_PRESENT
  71.   ASFLAGS += -DTHUMB_PRESENT
  72.   ifneq ($(ASRC),)
  73.     # Mixed ARM and THUMB mode.
  74.     CFLAGS += -mthumb-interwork
  75.     CPPFLAGS += -mthumb-interwork
  76.     ASFLAGS += -mthumb-interwork
  77.     LDFLAGS += -mthumb-interwork
  78.   else
  79.     # Pure THUMB mode, THUMB C code cannot be called by ARM asm code directly.
  80.     CFLAGS += -mno-thumb-interwork -DTHUMB_NO_INTERWORKING
  81.     CPPFLAGS += -mno-thumb-interwork -DTHUMB_NO_INTERWORKING
  82.     ASFLAGS += -mno-thumb-interwork -DTHUMB_NO_INTERWORKING -mthumb
  83.     LDFLAGS += -mno-thumb-interwork -mthumb
  84.   endif
  85. else
  86.   # Pure ARM mode
  87.   CFLAGS += -mno-thumb-interwork
  88.   CPPFLAGS += -mno-thumb-interwork
  89.   ASFLAGS += -mno-thumb-interwork
  90.   LDFLAGS += -mno-thumb-interwork
  91. endif
  92.  
  93. # Generate dependency information
  94. CFLAGS += -MD -MP -MF .dep/$(@F).d
  95. CPPFLAGS += -MD -MP -MF .dep/$(@F).d
  96.  
  97. #
  98. # Makefile rules
  99. #
  100.  
  101. all: $(ENSUREBUILDDIR) $(OBJS) $(OUTFILES)
  102.  
  103. $(ACPPOBJS) : %.o : %.cpp
  104.     @echo
  105.     $(CPPC) -c $(CPPFLAGS) $(AOPT) -I . $(IINCDIR) $< -o $@
  106.  
  107. $(TCPPOBJS) : %.o : %.cpp
  108.     @echo
  109.     $(CPPC) -c $(CPPFLAGS) $(TOPT) -I . $(IINCDIR) $< -o $@
  110.  
  111. $(ACOBJS) : %.o : %.c
  112.     @echo
  113.     $(CC) -c $(CFLAGS) $(AOPT) -I . $(IINCDIR) $< -o $@
  114.  
  115. $(TCOBJS) : %.o : %.c
  116.     @echo
  117.     $(CC) -c $(CFLAGS) $(TOPT) -I . $(IINCDIR) $< -o $@
  118.  
  119. $(ASMOBJS) : %.o : %.s
  120.     @echo
  121.     $(AS) -c $(ASFLAGS) -I . $(IINCDIR) $< -o $@
  122.  
  123. %elf: $(OBJS)
  124.     @echo
  125.     $(LD) $(OBJS) $(LDFLAGS) $(LIBS) -o $@
  126.  
  127. %hex: %elf
  128.     $(HEX) $< $@
  129.  
  130. %bin: %elf
  131.     $(BIN) $< $@
  132.  
  133. %dmp: %elf
  134.     $(OD) $(ODFLAGS) $< > $@
  135.  
  136. clean:
  137.     -cs-rm -f $(OBJS)
  138.     -cs-rm -f $(ACSRC:.c=.lst) $(TCSRC:.c=.lst) $(ACPPSRC:.cpp=.lst) $(TCPPSRC:.cpp=.lst) $(ASMSRC:.s=.lst)
  139.     -cs-rm -f $(OUTFILES) $(BUILDDIR)/$(PROJECT).map
  140.     -cs-rm -fR .dep $(CLEANDIR)
  141.  
  142. #
  143. # Include the dependency files, should be the last of the makefile
  144. #
  145. #-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
  146. -include $(-@md ".dep" >NUL 2>&1 || echo "" >NUL) $(wildcard .dep/*)
  147.  
  148. # *** EOF ***
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement