Makefile.180.uno 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  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.0/
  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. #=== suffixes ===
  31. .SUFFIXES: .elf .hex .ino
  32. #=== identify user files ===
  33. INOSRC:=$(shell ls *.ino)
  34. TARGETNAME=$(basename $(INOSRC))
  35. #=== internal names ===
  36. LIBNAME:=$(TARGETNAME).a
  37. ELFNAME:=$(TARGETNAME).elf
  38. HEXNAME:=$(TARGETNAME).hex
  39. BINNAME:=$(TARGETNAME).bin
  40. DISNAME:=$(TARGETNAME).dis
  41. MAPNAME:=$(TARGETNAME).map
  42. #=== replace standard tools ===
  43. CC:=$(ARDUINO_PATH)hardware/tools/avr/bin/avr-gcc
  44. CXX:=$(ARDUINO_PATH)hardware/tools/avr/bin/avr-g++
  45. AR:=$(ARDUINO_PATH)hardware/tools/avr/bin/avr-gcc-ar
  46. OBJCOPY:=$(ARDUINO_PATH)hardware/tools/avr/bin/avr-objcopy
  47. OBJDUMP:=$(ARDUINO_PATH)hardware/tools/avr/bin/avr-objdump
  48. SIZE:=$(ARDUINO_PATH)hardware/tools/avr/bin/avr-size
  49. AVRDUDE = $(ARDUINO_PATH)hardware/tools/avr/bin/avrdude
  50. #=== get values from boards.txt ===
  51. BOARDS_TXT:=$(ARDUINO_PATH)hardware/arduino/avr/boards.txt
  52. # get the MCU value from the $(BOARD).build.mcu variable. For the atmega328 board this is atmega328p
  53. MCU:=$(shell sed -n -e "s/$(BOARD).build.mcu=\(.*\)/\1/p" $(BOARDS_TXT))
  54. # get the F_CPU value from the $(BOARD).build.f_cpu variable. For the atmega328 board this is 16000000
  55. F_CPU:=$(shell sed -n -e "s/$(BOARD).build.f_cpu=\(.*\)/\1/p" $(BOARDS_TXT))
  56. # get variant subfolder
  57. VARIANT:=$(shell sed -n -e "s/$(BOARD).build.variant=\(.*\)/\1/p" $(BOARDS_TXT))
  58. UPLOAD_SPEED:=$(shell sed -n -e "s/$(BOARD).upload.speed=\(.*\)/\1/p" $(BOARDS_TXT))
  59. # get the AVRDUDE_PROGRAMMER value from the $(BOARD).upload.protocol variable. For the atmega328 board this is stk500
  60. UPLOAD_PROTOCOL:=$(shell sed -n -e "s/$(BOARD).upload.protocol=\(.*\)/\1/p" $(BOARDS_TXT))
  61. # use stk500v1, because stk500 will default to stk500v2
  62. #UPLOAD_PROTOCOL:=stk500v1
  63. AVRDUDE_FLAGS = -V -F
  64. AVRDUDE_FLAGS += -C $(ARDUINO_PATH)/hardware/tools/avr/etc/avrdude.conf
  65. AVRDUDE_FLAGS += -p $(MCU)
  66. AVRDUDE_FLAGS += -P $(AVRDUDE_PORT)
  67. AVRDUDE_FLAGS += -c $(UPLOAD_PROTOCOL)
  68. AVRDUDE_FLAGS += -b $(UPLOAD_SPEED)
  69. AVRDUDE_FLAGS += -U flash:w:$(HEXNAME)
  70. #=== get all include dirs ===
  71. INC_DIRS:=. $(SRC_DIRS) $(ARDUINO_PATH)hardware/arduino/avr/variants/$(VARIANT)
  72. INC_OPTS:=$(addprefix -I,$(INC_DIRS))
  73. #=== get all source files ===
  74. CSRC:=$(shell ls $(addsuffix *.c,$(SRC_DIRS)) 2>/dev/null)
  75. CPPSRC:=$(shell ls $(addsuffix *.cpp,$(SRC_DIRS)) 2>/dev/null)
  76. #=== get all obj files ===
  77. COBJ:=$(CSRC:.c=.o)
  78. CPPOBJ:=$(CPPSRC:.cpp=.o)
  79. OBJ:=$(COBJ) $(CPPOBJ) $(TARGETNAME).o
  80. #=== options ===
  81. COMMON_FLAGS = -g -Os -DF_CPU=$(F_CPU) -mmcu=$(MCU)
  82. COMMON_FLAGS +=-DARDUINO=10800 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR
  83. COMMON_FLAGS +=-ffunction-sections -fdata-sections -MMD -flto -fno-fat-lto-objects
  84. COMMON_FLAGS +=$(INC_OPTS) -DU8X8_WITH_USER_PTR
  85. CFLAGS:=$(COMMON_FLAGS) -std=gnu99 -Wstrict-prototypes -Wall -Wextra
  86. CXXFLAGS:=$(COMMON_FLAGS) -std=gnu++11 -fpermissive -fno-exceptions
  87. LDFLAGS:=-g -Os -flto -fuse-linker-plugin -Wl,--gc-sections -mmcu=$(MCU)
  88. LDLIBS:=-lm
  89. all: $(HEXNAME) $(DISNAME)
  90. $(SIZE) $(ELFNAME)
  91. .PHONY: debug
  92. debug:
  93. @echo $(MCU) $(F_CPU) $(VARIANT) $(UPLOAD_SPEED) $(UPLOAD_PROTOCOL)
  94. @echo $(SRC_DIRS)
  95. @echo $(CSRC)
  96. @echo $(CPPSRC)
  97. @echo $(INC_OPTS)
  98. .PHONY: clean
  99. clean:
  100. $(RM) $(OBJ) $(HEXNAME) $(ELFNAME) $(LIBNAME) $(DISNAME) $(MAPNAME) $(BINNAME)
  101. .PHONY: upload
  102. upload: $(HEXNAME)
  103. stty -F $(AVRDUDE_PORT) hupcl
  104. $(AVRDUDE) $(AVRDUDE_FLAGS)
  105. # implicit rules
  106. .ino.cpp:
  107. @cp $< $@
  108. .elf.hex:
  109. @$(OBJCOPY) -O ihex -R .eeprom $< $@
  110. # explicit rules
  111. $(ELFNAME): $(LIBNAME)($(OBJ))
  112. $(LINK.o) $(LFLAGS) $(LIBNAME) $(LDLIBS) -o $@
  113. $(DISNAME): $(ELFNAME)
  114. $(OBJDUMP) -D -S $< > $@