Skip to content
Snippets Groups Projects
Makefile 2.23 KiB
Newer Older
  • Learn to ignore specific revisions
  • 42loop's avatar
    42loop committed
    ###############################################################################
    # Makefile for the project BLDC_Sinus_AT168
    ###############################################################################
    
    ## General Flags
    PROJECT = BLDC_Sinus_AT168
    MCU = atmega328
    TARGET = VFD_Sinus_AT328.elf
    CC = avr-gcc
    
    CPP = avr-g++
    
    ## Options common to compile, link and assembly rules
    COMMON = -mmcu=$(MCU)
    
    ## Compile options common for all C compilation units.
    CFLAGS = $(COMMON)
    CFLAGS += -Wall -gdwarf-2 -std=gnu99                                                                                           -DF_CPU=16000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
    CFLAGS += -MD -MP -MT $(*F).o -MF dep/$(@F).d 
    
    ## Assembly specific flags
    ASMFLAGS = $(COMMON)
    ASMFLAGS += $(CFLAGS)
    ASMFLAGS += -x assembler-with-cpp -Wa,-gdwarf2
    
    ## Linker flags
    LDFLAGS = $(COMMON)
    LDFLAGS +=  -Wl,-Map=VFD_Sinus_AT328.map
    
    
    ## Intel Hex file production flags
    HEX_FLASH_FLAGS = -R .eeprom -R .fuse -R .lock -R .signature
    
    HEX_EEPROM_FLAGS = -j .eeprom
    HEX_EEPROM_FLAGS += --set-section-flags=.eeprom="alloc,load"
    HEX_EEPROM_FLAGS += --change-section-lma .eeprom=0 --no-change-warnings
    
    
    ## Objects that must be built in order to link
    OBJECTS = pid.o main.o lcd.o 
    
    ## Objects explicitly added by the user
    LINKONLYOBJECTS = 
    
    ## Build
    all: $(TARGET) VFD_Sinus_AT328.hex VFD_Sinus_AT328.eep VFD_Sinus_AT328.lss size
    
    ## Compile
    pid.o: ../pid.c
    	$(CC) $(INCLUDES) $(CFLAGS) -c  $<
    
    main.o: ../main.c
    	$(CC) $(INCLUDES) $(CFLAGS) -c  $<
    
    lcd.o: ../lcd.c
    	$(CC) $(INCLUDES) $(CFLAGS) -c  $<
    
    ##Link
    $(TARGET): $(OBJECTS)
    	 $(CC) $(LDFLAGS) $(OBJECTS) $(LINKONLYOBJECTS) $(LIBDIRS) $(LIBS) -o $(TARGET)
    
    %.hex: $(TARGET)
    	avr-objcopy -O ihex $(HEX_FLASH_FLAGS)  $< $@
    
    %.eep: $(TARGET)
    	-avr-objcopy $(HEX_EEPROM_FLAGS) -O ihex $< $@ || exit 0
    
    %.lss: $(TARGET)
    	avr-objdump -h -S $< > $@
    
    size: ${TARGET}
    	@echo
    	@avr-size -C --mcu=${MCU} ${TARGET}
    
    ## Clean target
    .PHONY: clean
    clean:
    	-rm -rf $(OBJECTS) VFD_Sinus_AT168.elf dep/* VFD_Sinus_AT168.hex VFD_Sinus_AT168.eep VFD_Sinus_AT168.lss VFD_Sinus_AT168.map
    
    
    ## Other dependencies
    -include $(shell mkdir dep 2>/dev/null) $(wildcard dep/*)