| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- #
- # Makefile.180 for Arduino/AVR
- #
- # Note:
- # Display list make database: make -p -f/dev/null | less
- # Install path of the arduino software. Requires a '/' at the end.
- ARDUINO_PATH:=/home/kraus/prg/arduino-1.8.0/
- # Board (and prozessor) information: see $(ARDUINO_PATH)hardware/arduino/avr/boards.txt
- # Some examples:
- # BOARD DESCRIPTION
- # uno Arduino Uno
- # atmega328 Arduino Duemilanove or Nano w/ ATmega328
- # diecimila Arduino Diecimila, Duemilanove, or Nano w/ ATmega168
- # mega Arduino Mega
- # mega2560 Arduino Mega2560
- # mini Arduino Mini
- # lilypad328 LilyPad Arduino w/ ATmega328
- # leonardo Leonardo, Arduboy, Feather AVR
- BOARD:=leonardo
- # The unix device where we can reach the arduino board
- # Uno: /dev/ttyACM0
- # Duemilanove: /dev/ttyUSB0
- AVRDUDE_PORT:=/dev/ttyACM0
- SRC_DIRS=$(ARDUINO_PATH)hardware/arduino/avr/cores/arduino/
- SRC_DIRS+=$(ARDUINO_PATH)hardware/arduino/avr/libraries/SPI/src/
- SRC_DIRS+=$(ARDUINO_PATH)hardware/arduino/avr/libraries/SPI/src/utility/
- SRC_DIRS+=$(ARDUINO_PATH)hardware/arduino/avr/libraries/Wire/src/
- SRC_DIRS+=$(ARDUINO_PATH)hardware/arduino/avr/libraries/Wire/src/utility/
- SRC_DIRS+=../../../../csrc/
- SRC_DIRS+=../../../../cppsrc/
- #=== suffixes ===
- .SUFFIXES: .elf .hex .ino
- #=== identify user files ===
- INOSRC:=$(shell ls *.ino)
- TARGETNAME=$(basename $(INOSRC))
- #=== internal names ===
- LIBNAME:=$(TARGETNAME).a
- ELFNAME:=$(TARGETNAME).elf
- HEXNAME:=$(TARGETNAME).hex
- BINNAME:=$(TARGETNAME).bin
- DISNAME:=$(TARGETNAME).dis
- MAPNAME:=$(TARGETNAME).map
- #=== replace standard tools ===
- CC:=$(ARDUINO_PATH)hardware/tools/avr/bin/avr-gcc
- CXX:=$(ARDUINO_PATH)hardware/tools/avr/bin/avr-g++
- AR:=$(ARDUINO_PATH)hardware/tools/avr/bin/avr-gcc-ar
- OBJCOPY:=$(ARDUINO_PATH)hardware/tools/avr/bin/avr-objcopy
- OBJDUMP:=$(ARDUINO_PATH)hardware/tools/avr/bin/avr-objdump
- SIZE:=$(ARDUINO_PATH)hardware/tools/avr/bin/avr-size
- AVRDUDE = $(ARDUINO_PATH)hardware/tools/avr/bin/avrdude
- #=== get values from boards.txt ===
- BOARDS_TXT:=$(ARDUINO_PATH)hardware/arduino/avr/boards.txt
- # get the MCU value from the $(BOARD).build.mcu variable. For the atmega328 board this is atmega328p
- MCU:=$(shell sed -n -e "s/$(BOARD).build.mcu=\(.*\)/\1/p" $(BOARDS_TXT))
- # get the F_CPU value from the $(BOARD).build.f_cpu variable. For the atmega328 board this is 16000000
- F_CPU:=$(shell sed -n -e "s/$(BOARD).build.f_cpu=\(.*\)/\1/p" $(BOARDS_TXT))
- # get variant subfolder
- VARIANT:=$(shell sed -n -e "s/$(BOARD).build.variant=\(.*\)/\1/p" $(BOARDS_TXT))
- UPLOAD_SPEED:=$(shell sed -n -e "s/$(BOARD).upload.speed=\(.*\)/\1/p" $(BOARDS_TXT))
- # get the AVRDUDE_PROGRAMMER value from the $(BOARD).upload.protocol variable. For the atmega328 board this is stk500
- UPLOAD_PROTOCOL:=$(shell sed -n -e "s/$(BOARD).upload.protocol=\(.*\)/\1/p" $(BOARDS_TXT))
- # use stk500v1, because stk500 will default to stk500v2
- #UPLOAD_PROTOCOL:=stk500v1
- AVRDUDE_FLAGS = -V -F
- AVRDUDE_FLAGS += -C $(ARDUINO_PATH)/hardware/tools/avr/etc/avrdude.conf
- AVRDUDE_FLAGS += -p $(MCU)
- AVRDUDE_FLAGS += -P $(AVRDUDE_PORT)
- AVRDUDE_FLAGS += -c $(UPLOAD_PROTOCOL)
- AVRDUDE_FLAGS += -b $(UPLOAD_SPEED)
- AVRDUDE_FLAGS += -U flash:w:$(HEXNAME)
- #=== get all include dirs ===
- INC_DIRS:=. $(SRC_DIRS) $(ARDUINO_PATH)hardware/arduino/avr/variants/$(VARIANT)
- INC_OPTS:=$(addprefix -I,$(INC_DIRS))
- #=== get all source files ===
- CSRC:=$(shell ls $(addsuffix *.c,$(SRC_DIRS)) 2>/dev/null)
- CPPSRC:=$(shell ls $(addsuffix *.cpp,$(SRC_DIRS)) 2>/dev/null)
- #=== get all obj files ===
- COBJ:=$(CSRC:.c=.o)
- CPPOBJ:=$(CPPSRC:.cpp=.o)
- OBJ:=$(COBJ) $(CPPOBJ) $(TARGETNAME).o
- #=== options ===
- COMMON_FLAGS = -g -Os -DF_CPU=$(F_CPU) -mmcu=$(MCU)
- COMMON_FLAGS +=-DARDUINO=10800 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR
- COMMON_FLAGS +=-DUSB_VID=0x2341 -DUSB_PID=0x8036
- COMMON_FLAGS +=-ffunction-sections -fdata-sections -MMD -flto -fno-fat-lto-objects
- COMMON_FLAGS +=$(INC_OPTS)
- CFLAGS:=$(COMMON_FLAGS) -std=gnu99 -Wstrict-prototypes -Wall -Wextra
- CXXFLAGS:=$(COMMON_FLAGS) -std=gnu++11 -fpermissive -fno-exceptions -fno-threadsafe-statics
- LDFLAGS:=-g -Os -flto -fuse-linker-plugin -Wl,--gc-sections -mmcu=$(MCU)
- LDLIBS:=-lm
- all: $(HEXNAME) $(DISNAME)
- $(SIZE) $(ELFNAME)
- .PHONY: debug
- debug:
- @echo $(MCU) $(F_CPU) $(VARIANT) $(UPLOAD_SPEED) $(UPLOAD_PROTOCOL)
- @echo $(SRC_DIRS)
- @echo $(CSRC)
- @echo $(CPPSRC)
- @echo $(INC_OPTS)
- .PHONY: clean
- clean:
- $(RM) $(OBJ) $(HEXNAME) $(ELFNAME) $(LIBNAME) $(DISNAME) $(MAPNAME) $(BINNAME)
- .PHONY: upload
- upload: $(HEXNAME)
- stty -F $(AVRDUDE_PORT) 1200 raw ignbrk hup && sleep 3
- $(AVRDUDE) $(AVRDUDE_FLAGS)
- # implicit rules
- .ino.cpp:
- @cp $< $@
-
- .elf.hex:
- @$(OBJCOPY) -O ihex -R .eeprom $< $@
- # explicit rules
- $(ELFNAME): $(LIBNAME)($(OBJ))
- $(LINK.o) $(LFLAGS) $(LIBNAME) $(LDLIBS) -o $@
- $(DISNAME): $(ELFNAME)
- $(OBJDUMP) -D -S $< > $@
-
|