Makefile.184.uno 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. #
  2. # Makefile.180 for Arduino/AVR
  3. #
  4. # Note:
  5. # Display list make database: make -p -f/dev/null | less
  6. # Install path of the arduino software. Requires a '/' at the end.
  7. ARDUINO_PATH:=/home/kraus/prg/arduino-1.8.4/
  8. # Board (and prozessor) information: see $(ARDUINO_PATH)hardware/arduino/avr/boards.txt
  9. # Some examples:
  10. # BOARD DESCRIPTION
  11. # uno Arduino Uno
  12. # atmega328 Arduino Duemilanove or Nano w/ ATmega328
  13. # diecimila Arduino Diecimila, Duemilanove, or Nano w/ ATmega168
  14. # mega Arduino Mega
  15. # mega2560 Arduino Mega2560
  16. # mini Arduino Mini
  17. # lilypad328 LilyPad Arduino w/ ATmega328
  18. BOARD:=uno
  19. # The unix device where we can reach the arduino board
  20. # Uno: /dev/ttyACM0
  21. # Duemilanove: /dev/ttyUSB0
  22. AVRDUDE_PORT:=/dev/ttyACM0
  23. SRC_DIRS=$(ARDUINO_PATH)hardware/arduino/avr/cores/arduino/
  24. SRC_DIRS+=$(ARDUINO_PATH)hardware/arduino/avr/libraries/SPI/src/
  25. SRC_DIRS+=$(ARDUINO_PATH)hardware/arduino/avr/libraries/SPI/src/utility/
  26. SRC_DIRS+=$(ARDUINO_PATH)hardware/arduino/avr/libraries/Wire/src/
  27. SRC_DIRS+=$(ARDUINO_PATH)hardware/arduino/avr/libraries/Wire/src/utility/
  28. SRC_DIRS+=../../../../csrc/
  29. SRC_DIRS+=../../../../cppsrc/
  30. SRC_DIRS+=/home/kraus/Arduino/libraries/SimpleRotary/src/
  31. #=== suffixes ===
  32. .SUFFIXES: .elf .hex .ino
  33. #=== identify user files ===
  34. INOSRC:=$(shell ls *.ino)
  35. TARGETNAME=$(basename $(INOSRC))
  36. #=== internal names ===
  37. LIBNAME:=$(TARGETNAME).a
  38. ELFNAME:=$(TARGETNAME).elf
  39. HEXNAME:=$(TARGETNAME).hex
  40. BINNAME:=$(TARGETNAME).bin
  41. DISNAME:=$(TARGETNAME).dis
  42. MAPNAME:=$(TARGETNAME).map
  43. #=== replace standard tools ===
  44. CC:=$(ARDUINO_PATH)hardware/tools/avr/bin/avr-gcc
  45. CXX:=$(ARDUINO_PATH)hardware/tools/avr/bin/avr-g++
  46. AR:=$(ARDUINO_PATH)hardware/tools/avr/bin/avr-gcc-ar
  47. OBJCOPY:=$(ARDUINO_PATH)hardware/tools/avr/bin/avr-objcopy
  48. OBJDUMP:=$(ARDUINO_PATH)hardware/tools/avr/bin/avr-objdump
  49. SIZE:=$(ARDUINO_PATH)hardware/tools/avr/bin/avr-size
  50. AVRDUDE = $(ARDUINO_PATH)hardware/tools/avr/bin/avrdude
  51. #=== get values from boards.txt ===
  52. BOARDS_TXT:=$(ARDUINO_PATH)hardware/arduino/avr/boards.txt
  53. # get the MCU value from the $(BOARD).build.mcu variable. For the atmega328 board this is atmega328p
  54. MCU:=$(shell sed -n -e "s/$(BOARD).build.mcu=\(.*\)/\1/p" $(BOARDS_TXT))
  55. # get the F_CPU value from the $(BOARD).build.f_cpu variable. For the atmega328 board this is 16000000
  56. F_CPU:=$(shell sed -n -e "s/$(BOARD).build.f_cpu=\(.*\)/\1/p" $(BOARDS_TXT))
  57. # get variant subfolder
  58. VARIANT:=$(shell sed -n -e "s/$(BOARD).build.variant=\(.*\)/\1/p" $(BOARDS_TXT))
  59. UPLOAD_SPEED:=$(shell sed -n -e "s/$(BOARD).upload.speed=\(.*\)/\1/p" $(BOARDS_TXT))
  60. # get the AVRDUDE_PROGRAMMER value from the $(BOARD).upload.protocol variable. For the atmega328 board this is stk500
  61. UPLOAD_PROTOCOL:=$(shell sed -n -e "s/$(BOARD).upload.protocol=\(.*\)/\1/p" $(BOARDS_TXT))
  62. # use stk500v1, because stk500 will default to stk500v2
  63. #UPLOAD_PROTOCOL:=stk500v1
  64. AVRDUDE_FLAGS = -V -F
  65. AVRDUDE_FLAGS += -C $(ARDUINO_PATH)/hardware/tools/avr/etc/avrdude.conf
  66. AVRDUDE_FLAGS += -p $(MCU)
  67. AVRDUDE_FLAGS += -P $(AVRDUDE_PORT)
  68. AVRDUDE_FLAGS += -c $(UPLOAD_PROTOCOL)
  69. AVRDUDE_FLAGS += -b $(UPLOAD_SPEED)
  70. AVRDUDE_FLAGS += -U flash:w:$(HEXNAME)
  71. #=== get all include dirs ===
  72. INC_DIRS:=. $(SRC_DIRS) $(ARDUINO_PATH)hardware/arduino/avr/variants/$(VARIANT)
  73. INC_OPTS:=$(addprefix -I,$(INC_DIRS))
  74. #=== get all source files ===
  75. CSRC:=$(shell ls $(addsuffix *.c,$(SRC_DIRS)) 2>/dev/null)
  76. CPPSRC:=$(shell ls $(addsuffix *.cpp,$(SRC_DIRS)) 2>/dev/null)
  77. #=== get all obj files ===
  78. COBJ:=$(CSRC:.c=.o)
  79. CPPOBJ:=$(CPPSRC:.cpp=.o)
  80. OBJ:=$(COBJ) $(CPPOBJ) $(TARGETNAME).o
  81. #=== options ===
  82. COMMON_FLAGS = -g -Os -DF_CPU=$(F_CPU) -mmcu=$(MCU)
  83. COMMON_FLAGS +=-DARDUINO=10800 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR
  84. COMMON_FLAGS +=-ffunction-sections -fdata-sections -MMD -flto -fno-fat-lto-objects
  85. COMMON_FLAGS +=$(INC_OPTS)
  86. CFLAGS:=$(COMMON_FLAGS) -std=gnu99 -Wstrict-prototypes -Wall -Wextra
  87. CXXFLAGS:=$(COMMON_FLAGS) -std=gnu++11 -fpermissive -fno-exceptions
  88. LDFLAGS:=-g -Os -flto -fuse-linker-plugin -Wl,--gc-sections -mmcu=$(MCU) -Wl,--Map=$(MAPNAME)
  89. LDLIBS:=-lm
  90. all: $(HEXNAME) $(DISNAME)
  91. $(SIZE) $(ELFNAME)
  92. .PHONY: debug
  93. debug:
  94. @echo $(MCU) $(F_CPU) $(VARIANT) $(UPLOAD_SPEED) $(UPLOAD_PROTOCOL)
  95. @echo $(SRC_DIRS)
  96. @echo $(CSRC)
  97. @echo $(CPPSRC)
  98. @echo $(INC_OPTS)
  99. .PHONY: clean
  100. clean:
  101. $(RM) $(OBJ) $(HEXNAME) $(ELFNAME) $(LIBNAME) $(DISNAME) $(MAPNAME) $(BINNAME)
  102. .PHONY: upload
  103. upload: $(HEXNAME)
  104. stty -F $(AVRDUDE_PORT) hupcl
  105. $(AVRDUDE) $(AVRDUDE_FLAGS)
  106. # implicit rules
  107. .ino.cpp:
  108. @cp $< $@
  109. .elf.hex:
  110. @$(OBJCOPY) -O ihex -R .eeprom $< $@
  111. # explicit rules
  112. $(ELFNAME): $(LIBNAME)($(OBJ))
  113. $(LINK.o) $(LFLAGS) $(LIBNAME) $(LDLIBS) -o $@
  114. $(DISNAME): $(ELFNAME)
  115. $(OBJDUMP) -D -S $< > $@