Makefile
上传用户:jnhtjd
上传日期:2022-07-16
资源大小:403k
文件大小:5k
源码类别:

微处理器开发

开发平台:

C/C++

  1. # ----------------------------------------------------------------------------
  2. #         ATMEL Microcontroller Software Support 
  3. # ----------------------------------------------------------------------------
  4. # Copyright (c) 2008, Atmel Corporation
  5. #
  6. # All rights reserved.
  7. #
  8. # Redistribution and use in source and binary forms, with or without
  9. # modification, are permitted provided that the following conditions are met:
  10. #
  11. # - Redistributions of source code must retain the above copyright notice,
  12. # this list of conditions and the disclaimer below.
  13. #
  14. # Atmel's name may not be used to endorse or promote products derived from
  15. # this software without specific prior written permission.
  16. #
  17. # DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
  18. # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  19. # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
  20. # DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
  21. # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  22. # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
  23. # OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  24. # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  25. # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
  26. # EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  27. # ----------------------------------------------------------------------------
  28. #  Makefile for compiling basic-twi-eeprom-project
  29. #-------------------------------------------------------------------------------
  30. # User-modifiable options
  31. #-------------------------------------------------------------------------------
  32. # Chip & board used for compilation
  33. # (can be overriden by adding CHIP=chip and BOARD=board to the command-line)
  34. CHIP  = at91sam7s256
  35. BOARD = at91sam7s-ek
  36. # Trace level used for compilation
  37. # (can be overriden by adding TRACE_LEVEL=#number to the command-line)
  38. # TRACE_LEVEL_DEBUG      5
  39. # TRACE_LEVEL_INFO       4
  40. # TRACE_LEVEL_WARNING    3
  41. # TRACE_LEVEL_ERROR      2
  42. # TRACE_LEVEL_FATAL      1
  43. # TRACE_LEVEL_NO_TRACE   0
  44. TRACE_LEVEL = 4
  45. # Optimization level, put in comment for debugging
  46. OPTIMIZATION = -Os
  47. # AT91 library directory
  48. AT91LIB = ../at91lib
  49. # Output file basename
  50. OUTPUT = basic-twi-eeprom-project-$(BOARD)-$(CHIP)
  51. # Compile for all memories available on the board (this sets $(MEMORIES))
  52. include $(AT91LIB)/boards/$(BOARD)/board.mak
  53. # Output directories
  54. BIN = bin
  55. OBJ = obj
  56. #-------------------------------------------------------------------------------
  57. # Tools
  58. #-------------------------------------------------------------------------------
  59. # Tool suffix when cross-compiling
  60. CROSS_COMPILE = arm-none-eabi-
  61. # Compilation tools
  62. CC = $(CROSS_COMPILE)gcc
  63. SIZE = $(CROSS_COMPILE)size
  64. STRIP = $(CROSS_COMPILE)strip
  65. OBJCOPY = $(CROSS_COMPILE)objcopy
  66. # Flags
  67. INCLUDES = -I$(AT91LIB)/boards/$(BOARD) -I$(AT91LIB)/peripherals 
  68. INCLUDES += -I$(AT91LIB)/components -I$(AT91LIB)
  69. CFLAGS = -Wall -mlong-calls -ffunction-sections
  70. CFLAGS += -g $(OPTIMIZATION) $(INCLUDES) -D$(CHIP) -DTRACE_LEVEL=$(TRACE_LEVEL)
  71. ASFLAGS = -g $(OPTIMIZATION) $(INCLUDES) -D$(CHIP) -D__ASSEMBLY__
  72. LDFLAGS = -g $(OPTIMIZATION) -nostartfiles -Wl,--gc-sections
  73. #-------------------------------------------------------------------------------
  74. # Files
  75. #-------------------------------------------------------------------------------
  76. # Directories where source files can be found
  77. PERIPH = $(AT91LIB)/peripherals
  78. BOARDS = $(AT91LIB)/boards
  79. UTILITY = $(AT91LIB)/utility
  80. DRV = $(AT91LIB)/drivers
  81. VPATH += $(DRV)/async $(DRV)/twi
  82. VPATH += $(UTILITY)
  83. VPATH += $(PERIPH)/dbgu $(PERIPH)/pio $(PERIPH)/aic $(PERIPH)/twi $(PERIPH)/pmc
  84. VPATH += $(PERIPH)/cp15
  85. VPATH += $(BOARDS)/$(BOARD) $(BOARDS)/$(BOARD)/$(CHIP)
  86. # Objects built from C source files
  87. C_OBJECTS = main.o
  88. C_OBJECTS += async.o twid.o
  89. C_OBJECTS += stdio.o math.o string.o
  90. C_OBJECTS += dbgu.o pio.o aic.o twi.o pmc.o cp15.o
  91. C_OBJECTS += board_memories.o board_lowlevel.o
  92. # Objects built from Assembly source files
  93. ASM_OBJECTS = board_cstartup.o
  94. ASM_OBJECTS += cp15_asm.o
  95. # Append OBJ and BIN directories to output filename
  96. OUTPUT := $(BIN)/$(OUTPUT)
  97. #-------------------------------------------------------------------------------
  98. # Rules
  99. #-------------------------------------------------------------------------------
  100. all: $(BIN) $(OBJ) $(MEMORIES)
  101. $(BIN) $(OBJ):
  102. mkdir $@
  103. define RULES
  104. C_OBJECTS_$(1) = $(addprefix $(OBJ)/$(1)_, $(C_OBJECTS))
  105. ASM_OBJECTS_$(1) = $(addprefix $(OBJ)/$(1)_, $(ASM_OBJECTS))
  106. $(1): $$(ASM_OBJECTS_$(1)) $$(C_OBJECTS_$(1))
  107. $(CC) $(LDFLAGS) -T"$(AT91LIB)/boards/$(BOARD)/$(CHIP)/$$@.lds" -o $(OUTPUT)-$$@.elf $$^
  108. $(OBJCOPY) -O binary $(OUTPUT)-$$@.elf $(OUTPUT)-$$@.bin
  109. $(SIZE) $$^ $(OUTPUT)-$$@.elf
  110. $$(C_OBJECTS_$(1)): $(OBJ)/$(1)_%.o: %.c Makefile $(OBJ) $(BIN)
  111. $(CC) $(CFLAGS) -D$(1) -c -o $$@ $$<
  112. $$(ASM_OBJECTS_$(1)): $(OBJ)/$(1)_%.o: %.S Makefile $(OBJ) $(BIN)
  113. $(CC) $(ASFLAGS) -D$(1) -c -o $$@ $$<
  114. debug_$(1): $(1)
  115. perl ../resources/gdb/debug.pl $(OUTPUT)-$(1).elf
  116. endef
  117. $(foreach MEMORY, $(MEMORIES), $(eval $(call RULES,$(MEMORY))))
  118. clean:
  119. -rm -f $(OBJ)/*.o $(BIN)/*.bin $(BIN)/*.elf