Advertisement
Guest User

Gertduino Makefile

a guest
Jan 7th, 2015
453
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Make 14.00 KB | None | 0 0
  1. # Hey Emacs, this is a -*- makefile -*-
  2. #----------------------------------------------------------------------------
  3. # WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.
  4. #
  5. # Released to the Public Domain
  6. #
  7. # Additional material for this makefile was written by:
  8. # Peter Fleury
  9. # Tim Henigan
  10. # Colin O'Flynn
  11. # Reiner Patommel
  12. # Markus Pfaff
  13. # Sander Pool
  14. # Frederik Rouleau
  15. #
  16. #----------------------------------------------------------------------------
  17. # On command line:
  18. #
  19. # make all = Make software.
  20. #
  21. # make clean = Clean out built project files.
  22. #
  23. # make coff = Convert ELF to AVR COFF.
  24. #
  25. # make extcoff = Convert ELF to AVR Extended COFF.
  26. #
  27. # make flash = Download the hex file to the device, using avrdude.
  28. #                Please customize the avrdude settings below first!
  29. #
  30. # make debug = Start either simulavr or avarice as specified for debugging,
  31. #              with avr-gdb or avr-insight as the front end for debugging.
  32. #
  33. # make filename.s = Just compile filename.c into the assembler code only.
  34. #
  35. # make filename.i = Create a preprocessed source file for use in submitting
  36. #                   bug reports to the GCC project.
  37. #
  38. # To rebuild project do "make clean" then "make all".
  39. #----------------------------------------------------------------------------
  40.  
  41.  
  42. # MCU name
  43. MCU = atmega328p
  44.  
  45.  
  46. # Processor frequency.
  47. #     This will define a symbol, F_CPU, in all source code files equal to the
  48. #     processor frequency. You can then use this symbol in your source code to
  49. #     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
  50. #     automatically to create a 32-bit value in your source code.
  51. F_CPU = 16000000
  52.  
  53.  
  54. # Output format. (can be srec, ihex, binary)
  55. FORMAT = ihex
  56.  
  57.  
  58. # Target file name (without extension).
  59. TARGET = main
  60.  
  61.  
  62. # List C source files here. (C dependencies are automatically generated.)
  63. SRC = $(TARGET).c
  64.  
  65.  
  66. # List Assembler source files here.
  67. #     Make them always end in a capital .S.  Files ending in a lowercase .s
  68. #     will not be considered source files but generated files (assembler
  69. #     output from the compiler), and will be deleted upon "make clean"!
  70. #     Even though the DOS/Win* filesystem matches both .s and .S the same,
  71. #     it will preserve the spelling of the filenames, and gcc itself does
  72. #     care about how the name is spelled on its command-line.
  73. ASRC =
  74.  
  75.  
  76. # Optimization level, can be [0, 1, 2, 3, s].
  77. #     0 = turn off optimization. s = optimize for size.
  78. #     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
  79. OPT = s
  80.  
  81.  
  82. # Debugging format.
  83. #     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
  84. #     AVR Studio 4.10 requires dwarf-2.
  85. #     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
  86. DEBUG = dwarf-2
  87.  
  88.  
  89. # List any extra directories to look for include files here.
  90. #     Each directory must be seperated by a space.
  91. #     Use forward slashes for directory separators.
  92. #     For a directory that has spaces, enclose it in quotes.
  93. EXTRAINCDIRS =
  94.  
  95.  
  96. # Compiler flag to set the C Standard level.
  97. #     c89   = "ANSI" C
  98. #     gnu89 = c89 plus GCC extensions
  99. #     c99   = ISO C99 standard (not yet fully implemented)
  100. #     gnu99 = c99 plus GCC extensions
  101. CSTANDARD = -std=gnu99
  102.  
  103.  
  104. # Place -D or -U options here
  105. CDEFS = -DF_CPU=$(F_CPU)UL
  106.  
  107.  
  108. # Place -I options here
  109. CINCS =
  110.  
  111.  
  112.  
  113. #---------------- Compiler Options ----------------
  114. #  -g*:          generate debugging information
  115. #  -O*:          optimization level
  116. #  -f...:        tuning, see GCC manual and avr-libc documentation
  117. #  -Wall...:     warning level
  118. #  -Wa,...:      tell GCC to pass this to the assembler.
  119. #    -adhlns...: create assembler listing
  120. CFLAGS = -g$(DEBUG)
  121. CFLAGS += $(CDEFS) $(CINCS)
  122. CFLAGS += -O$(OPT)
  123. CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
  124. CFLAGS += -Wall -Wstrict-prototypes
  125. CFLAGS += -Wa,-adhlns=$(<:.c=.lst)
  126. CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
  127. CFLAGS += $(CSTANDARD)
  128. CFLAGS += -gdwarf-2
  129. CFLAGS += -gstrict-dwarf
  130.  
  131. #---------------- Assembler Options ----------------
  132. #  -Wa,...:   tell GCC to pass this to the assembler.
  133. #  -ahlms:    create listing
  134. #  -gstabs:   have the assembler create line number information; note that
  135. #             for use in COFF files, additional information about filenames
  136. #             and function names needs to be present in the assembler source
  137. #             files -- see avr-libc docs [FIXME: not yet described there]
  138. #  -listing-cont-lines: Sets the maximum number of continuation lines of hex
  139. #       dump that will be displayed for a given single line of source input.
  140. ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs,--listing-cont-lines=100
  141.  
  142.  
  143. #---------------- Library Options ----------------
  144. # Minimalistic printf version
  145. PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
  146.  
  147. # Floating point printf version (requires MATH_LIB = -lm below)
  148. PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
  149.  
  150. # If this is left blank, then it will use the Standard printf version.
  151. PRINTF_LIB =
  152. #PRINTF_LIB = $(PRINTF_LIB_MIN)
  153. #PRINTF_LIB = $(PRINTF_LIB_FLOAT)
  154.  
  155.  
  156. # Minimalistic scanf version
  157. SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
  158.  
  159. # Floating point + %[ scanf version (requires MATH_LIB = -lm below)
  160. SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
  161.  
  162. # If this is left blank, then it will use the Standard scanf version.
  163. SCANF_LIB =
  164. #SCANF_LIB = $(SCANF_LIB_MIN)
  165. #SCANF_LIB = $(SCANF_LIB_FLOAT)
  166.  
  167.  
  168. MATH_LIB = -lm
  169.  
  170.  
  171.  
  172. #---------------- External Memory Options ----------------
  173.  
  174. # 64 KB of external RAM, starting after internal RAM (ATmega128!),
  175. # used for variables (.data/.bss) and heap (malloc()).
  176. #EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff
  177.  
  178. # 64 KB of external RAM, starting after internal RAM (ATmega128!),
  179. # only used for heap (malloc()).
  180. #EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff
  181.  
  182. EXTMEMOPTS =
  183.  
  184.  
  185.  
  186. #---------------- Linker Options ----------------
  187. #  -Wl,...:     tell GCC to pass this to linker.
  188. #    -Map:      create map file
  189. #    --cref:    add cross reference to  map file
  190. LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
  191. LDFLAGS += $(EXTMEMOPTS)
  192. LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
  193.  
  194.  
  195.  
  196. #---------------- Programming Options (avrdude) ----------------
  197.  
  198. # Programming hardware: alf avr910 avrisp bascom bsd
  199. # dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
  200. #
  201. # Type: avrdude -c ?
  202. # to get a full listing.
  203. #
  204. AVRDUDE_PROGRAMMER = gpio
  205.  
  206. # com1 = serial port. Use lpt1 to connect to parallel port.
  207. #AVRDUDE_PORT = com1    # programmer connected to serial device
  208.  
  209. AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
  210. AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
  211.  
  212.  
  213. # Uncomment the following if you want avrdude's erase cycle counter.
  214. # Note that this counter needs to be initialized first using -Yn,
  215. # see avrdude manual.
  216. #AVRDUDE_ERASE_COUNTER = -y
  217.  
  218. # Uncomment the following if you do /not/ wish a verification to be
  219. # performed after programming the device.
  220. #AVRDUDE_NO_VERIFY = -V
  221.  
  222. # Increase verbosity level.  Please use this when submitting bug
  223. # reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
  224. # to submit bug reports.
  225. #AVRDUDE_VERBOSE = -v -v
  226. AVRDUDE_VERBOSE = -v
  227.  
  228.  
  229. AVRDUDE_FLAGS =
  230. #AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
  231. AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
  232. #AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
  233. #AVRDUDE_FLAGS += -P $(AVRDUDE_PORT)
  234. AVRDUDE_FLAGS += -p $(MCU) -c $(AVRDUDE_PROGRAMMER)
  235.  
  236.  
  237.  
  238. #---------------- Debugging Options ----------------
  239.  
  240. # For simulavr only - target MCU frequency.
  241. DEBUG_MFREQ = $(F_CPU)
  242.  
  243. # Set the DEBUG_UI to either gdb or insight.
  244. # DEBUG_UI = gdb
  245. DEBUG_UI = insight
  246.  
  247. # Set the debugging back-end to either avarice, simulavr.
  248. #DEBUG_BACKEND = avarice
  249. DEBUG_BACKEND = simulavr
  250.  
  251. # GDB Init Filename.
  252. GDBINIT_FILE = __avr_gdbinit
  253.  
  254. # When using avarice settings for the JTAG
  255. JTAG_DEV = /dev/com1
  256.  
  257. # Debugging port used to communicate between GDB / avarice / simulavr.
  258. DEBUG_PORT = 4242
  259.  
  260. # Debugging host used to communicate between GDB / avarice / simulavr, normally
  261. #     just set to localhost unless doing some sort of crazy debugging when
  262. #     avarice is running on a different computer.
  263. DEBUG_HOST = localhost
  264.  
  265.  
  266.  
  267. #============================================================================
  268.  
  269.  
  270. # Define programs and commands.
  271. SHELL = sh
  272. CC = avr-gcc
  273. OBJCOPY = avr-objcopy
  274. OBJDUMP = avr-objdump
  275. SIZE = avr-size
  276. NM = avr-nm
  277. AVRDUDE = avrdude
  278. REMOVE = rm -rf
  279. COPY = cp
  280. WINSHELL = cmd
  281.  
  282.  
  283. # Define Messages
  284. # English
  285. MSG_ERRORS_NONE = Errors: none
  286. MSG_BEGIN = -------- begin --------
  287. MSG_END = --------  end  --------
  288. MSG_SIZE_BEFORE = Size before:
  289. MSG_SIZE_AFTER = Size after:
  290. MSG_COFF = Converting to AVR COFF:
  291. MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
  292. MSG_FLASH = Creating load file for Flash:
  293. MSG_EEPROM = Creating load file for EEPROM:
  294. MSG_EXTENDED_LISTING = Creating Extended Listing:
  295. MSG_SYMBOL_TABLE = Creating Symbol Table:
  296. MSG_LINKING = Linking:
  297. MSG_COMPILING = Compiling:
  298. MSG_ASSEMBLING = Assembling:
  299. MSG_CLEANING = Cleaning project:
  300.  
  301.  
  302.  
  303.  
  304. # Define all object files.
  305. OBJ = $(SRC:.c=.o) $(ASRC:.S=.o)
  306.  
  307. # Define all listing files.
  308. LST = $(SRC:.c=.lst) $(ASRC:.S=.lst)
  309.  
  310.  
  311. # Compiler flags to generate dependency files.
  312. GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d
  313.  
  314.  
  315. # Combine all necessary flags and optional flags.
  316. # Add target processor to flags.
  317. ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
  318. ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
  319.  
  320.  
  321.  
  322.  
  323.  
  324. # Default target.
  325. all: begin gccversion sizebefore build sizeafter end
  326.  
  327. build: elf hex eep lss sym
  328.  
  329. elf: $(TARGET).elf
  330. hex: $(TARGET).hex
  331. eep: $(TARGET).eep
  332. lss: $(TARGET).lss
  333. sym: $(TARGET).sym
  334.  
  335.  
  336.  
  337. # Eye candy.
  338. # AVR Studio 3.x does not check make's exit code but relies on
  339. # the following magic strings to be generated by the compile job.
  340. begin:
  341.     @echo
  342.     @echo $(MSG_BEGIN)
  343.  
  344. end:
  345.     @echo $(MSG_END)
  346.     @echo
  347.  
  348.  
  349. # Display size of file.
  350. HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
  351. ELFSIZE = $(SIZE) --format=avr $(TARGET).elf
  352.  
  353. sizebefore:
  354.     @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
  355.     2>/dev/null; echo; fi
  356.  
  357. sizeafter:
  358.     @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
  359.     2>/dev/null; echo; fi
  360.  
  361.  
  362.  
  363. # Display compiler version information.
  364. gccversion :
  365.     @$(CC) --version
  366.  
  367.  
  368.  
  369. # Program the device.  
  370. flash: $(TARGET).hex $(TARGET).eep
  371.     $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
  372.  
  373.  
  374. # Generate avr-gdb config/init file which does the following:
  375. #     define the reset signal, load the target file, connect to target, and set
  376. #     a breakpoint at main().
  377. gdb-config:
  378.     @$(REMOVE) $(GDBINIT_FILE)
  379.     @echo define reset >> $(GDBINIT_FILE)
  380.     @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
  381.     @echo end >> $(GDBINIT_FILE)
  382.     @echo file $(TARGET).elf >> $(GDBINIT_FILE)
  383.     @echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)
  384. ifeq ($(DEBUG_BACKEND),simulavr)
  385.     @echo load  >> $(GDBINIT_FILE)
  386. endif  
  387.     @echo break main >> $(GDBINIT_FILE)
  388.  
  389. debug: gdb-config $(TARGET).elf
  390. ifeq ($(DEBUG_BACKEND), avarice)
  391.     @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
  392.     @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
  393.     $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
  394.     @$(WINSHELL) /c pause
  395. else
  396.     @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
  397.     $(DEBUG_MFREQ) --port $(DEBUG_PORT)
  398. endif
  399.     @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)
  400.  
  401.  
  402.  
  403. # Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
  404. COFFCONVERT=$(OBJCOPY) --debugging \
  405. --change-section-address .data-0x800000 \
  406. --change-section-address .bss-0x800000 \
  407. --change-section-address .noinit-0x800000 \
  408. --change-section-address .eeprom-0x810000
  409.  
  410.  
  411. coff: $(TARGET).elf
  412.     @echo
  413.     @echo $(MSG_COFF) $(TARGET).cof
  414.     $(COFFCONVERT) -O coff-avr $< $(TARGET).cof
  415.  
  416.  
  417. extcoff: $(TARGET).elf
  418.     @echo
  419.     @echo $(MSG_EXTENDED_COFF) $(TARGET).cof
  420.     $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
  421.  
  422.  
  423.  
  424. # Create final output files (.hex, .eep) from ELF output file.
  425. %.hex: %.elf
  426.     @echo
  427.     @echo $(MSG_FLASH) $@
  428.     $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
  429.  
  430. %.eep: %.elf
  431.     @echo
  432.     @echo $(MSG_EEPROM) $@
  433.     -$(OBJCOPY) -j .eeprom --set-section-flags .eeprom=alloc,load \
  434.     --change-section-lma .eeprom=0 -O $(FORMAT) $< $@
  435.  
  436. # Create extended listing file from ELF output file.
  437. %.lss: %.elf
  438.     @echo
  439.     @echo $(MSG_EXTENDED_LISTING) $@
  440.     $(OBJDUMP) -h -S $< > $@
  441.  
  442. # Create a symbol table from ELF output file.
  443. %.sym: %.elf
  444.     @echo
  445.     @echo $(MSG_SYMBOL_TABLE) $@
  446.     $(NM) -n $< > $@
  447.  
  448.  
  449.  
  450. # Link: create ELF output file from object files.
  451. .SECONDARY : $(TARGET).elf
  452. .PRECIOUS : $(OBJ)
  453. %.elf: $(OBJ)
  454.     @echo
  455.     @echo $(MSG_LINKING) $@
  456.     $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
  457.  
  458.  
  459. # Compile: create object files from C source files.
  460. %.o : %.c
  461.     @echo
  462.     @echo $(MSG_COMPILING) $<
  463.     $(CC) -c $(ALL_CFLAGS) $< -o $@
  464.  
  465.  
  466. # Compile: create assembler files from C source files.
  467. %.s : %.c
  468.     $(CC) -S $(ALL_CFLAGS) $< -o $@
  469.  
  470.  
  471. # Assemble: create object files from assembler source files.
  472. %.o : %.S
  473.     @echo
  474.     @echo $(MSG_ASSEMBLING) $<
  475.     $(CC) -c $(ALL_ASFLAGS) $< -o $@
  476.  
  477. # Create preprocessed source for use in sending a bug report.
  478. %.i : %.c
  479.     $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@
  480.  
  481.  
  482. # Target: clean project.
  483. clean: begin clean_list end
  484.  
  485. clean_list :
  486.     @echo
  487.     @echo $(MSG_CLEANING)
  488.     $(REMOVE) $(TARGET).hex
  489.     $(REMOVE) $(TARGET).eep
  490.     $(REMOVE) $(TARGET).cof
  491.     $(REMOVE) $(TARGET).elf
  492.     $(REMOVE) $(TARGET).map
  493.     $(REMOVE) $(TARGET).sym
  494.     $(REMOVE) $(TARGET).lss
  495.     $(REMOVE) $(OBJ)
  496.     $(REMOVE) $(LST)
  497.     $(REMOVE) $(SRC:.c=.s)
  498.     $(REMOVE) $(SRC:.c=.d)
  499.     $(REMOVE) .dep
  500.  
  501.  
  502.  
  503. # Include the dependency files.
  504. -include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
  505.  
  506.  
  507. # Listing of phony targets.
  508. .PHONY : all begin finish end sizebefore sizeafter gccversion \
  509. build elf hex eep lss sym coff extcoff \
  510. clean clean_list flash debug gdb-config
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement