sss7modem/software/Arduino/Makefile

112 lines
3.4 KiB
Makefile

AVRMCU ?= atmega2560
F_CPU ?= 16000000
ISPPORT ?= /dev/ttyUSB0
VERSION = 0.1
HEADERS = ardusss7.h ../sss7core/sss7.h
SRC_C = ../sss7core/sss7.c
SRC_CPP = main.cpp ardusss7.cpp
TARGET = sss7
OBJDIR = bin
ARDUINO_DIR = ./arduino-1.6.13
ARDUINO_BOARD = mega
CC = avr-gcc
CPP = avr-g++
AR = avr-ar
OBJCOPY = avr-objcopy
OBJDUMP = avr-objdump
SIZE = avr-size
SRC_C_TMP = $(subst ../,,$(SRC_C))
OBJ = $(SRC_C_TMP:%.c=$(OBJDIR)/$(AVRMCU)/%.o)
OBJ += $(SRC_CPP:%.cpp=$(OBJDIR)/$(AVRMCU)/%.o)
ARDU_HEADERS = Arduino.h binary.h Client.h HardwareSerial.h IPAddress.h \
new.h Printable.h Print.h Server.h \
Stream.h Udp.h USBAPI.h USBCore.h USBDesc.h WCharacter.h \
wiring_private.h WString.h
ARDU_C_SRC = WInterrupts.c wiring_digital.c wiring_analog.c wiring_pulse.c \
wiring.c wiring_shift.c
ARDU_CPP_SRC = CDC.cpp new.cpp HardwareSerial0.cpp PluggableUSB.cpp \
HardwareSerial1.cpp Print.cpp HardwareSerial2.cpp Stream.cpp \
HardwareSerial3.cpp Tone.cpp HardwareSerial.cpp USBCore.cpp \
IPAddress.cpp WMath.cpp main.cpp WString.cpp \
ARDU_FULL_DIR = $(ARDUINO_DIR)/hardware/arduino/avr/cores/arduino
ARDU_VARIANT_DIR = $(ARDUINO_DIR)/hardware/arduino/avr/variants/$(ARDUINO_BOARD)
ARDU_FULL_HEADERS = $(ARDU_HEADERS:%.h=$(ARDU_FULL_DIR)/%.h)
ARDU_FULL_HEADERS += $(ARDU_VARIANT_DIR)/pins_arduino.h
ARDU_OBJS = $(ARDU_C_SRC:%.c=$(OBJDIR)/$(AVRMCU)/arduino/%.o)
ARDU_OBJS += $(ARDU_CPP_SRC:%.cpp=$(OBJDIR)/$(AVRMCU)/arduino/%.o)
CFLAGS = -I $(ARDU_FULL_DIR) -I $(ARDU_VARIANT_DIR) -I ../sss7core/ -Os -Wall -Wstrict-prototypes
CFLAGS += -ffunction-sections -fdata-sections
CFLAGS += -fshort-enums -fpack-struct -funsigned-char -funsigned-bitfields
CFLAGS += -mmcu=$(AVRMCU) -DF_CPU=$(F_CPU)UL -DVERSION=$(VERSION)
CPPFLAGS = -I $(ARDU_FULL_DIR) -I $(ARDU_VARIANT_DIR) -I ../sss7core/ -Os
CPPFLAGS += -ffunction-sections -fdata-sections
CPPFLAGS += -fshort-enums -fpack-struct -funsigned-char -funsigned-bitfields
CPPFLAGS += -mmcu=$(AVRMCU) -DF_CPU=$(F_CPU)UL -DVERSION=$(VERSION)
LDFLAGS = -mmcu=$(AVRMCU) -Wl,--gc-sections
all: start $(OBJDIR)/$(AVRMCU)/$(TARGET).hex size
@echo ":: Done !"
start:
@echo "SSS7 AVR port $(VERSION)"
@echo "========================"
@echo ":: Building for $(AVRMCU)"
@echo ":: MCU operating frequency is $(F_CPU)Hz"
$(OBJDIR)/$(AVRMCU)/%.o : %.c $(HEADERS) Makefile
@mkdir -p $$(dirname $@)
$(CC) $(CFLAGS) -c $< -o $@
$(OBJDIR)/$(AVRMCU)/%.o : %.cpp $(HEADERS) Makefile
@mkdir -p $$(dirname $@)
$(CPP) $(CPPFLAGS) -c $< -o $@
$(OBJDIR)/$(AVRMCU)/sss7core/%.o : ../sss7core/%.c $(HEADERS) Makefile
@mkdir -p $$(dirname $@)
$(CC) $(CFLAGS) -c $< -o $@
$(OBJDIR)/$(AVRMCU)/arduino/%.o : $(ARDU_FULL_DIR)/%.c $(ARDU_FULL_HEADERS) Makefile
@mkdir -p $$(dirname $@)
$(CC) $(CFLAGS) -c $< -o $@
$(OBJDIR)/$(AVRMCU)/arduino/%.o : $(ARDU_FULL_DIR)/%.cpp $(ARDU_FULL_HEADERS) Makefile
@mkdir -p $$(dirname $@)
$(CPP) $(CPPFLAGS) -c $< -o $@
$(OBJDIR)/$(AVRMCU)/arduino/libarduino.a: $(ARDU_OBJS)
${AR} crs $@ $+
$(OBJDIR)/$(AVRMCU)/$(TARGET).elf : $(OBJ) $(OBJDIR)/$(AVRMCU)/arduino/libarduino.a
$(CC) $(LDFLAGS) $+ -o $@
$(OBJDIR)/$(AVRMCU)/$(TARGET).hex : $(OBJDIR)/$(AVRMCU)/$(TARGET).elf
$(OBJCOPY) -O ihex $< $@
size : $(OBJDIR)/$(AVRMCU)/$(TARGET).elf
@echo
@$(SIZE) --mcu=$(AVRMCU) -C $(OBJDIR)/$(AVRMCU)/$(TARGET).elf
@echo
clean :
@rm -rf $(OBJDIR)
flash : all
avrdude -c stk500v2 \
-p $(AVRMCU) -P $(ISPPORT) -D \
-U flash:w:$(OBJDIR)/$(AVRMCU)/$(TARGET).hex
test : flash
screen $(ISPPORT) 9600