HokieGeek / olive-scanner

Building a toy for my daughter
0 stars 0 forks source link

Need small executable #3

Closed HokieGeek closed 8 years ago

HokieGeek commented 8 years ago

http://www.avrfreaks.net/forum/how-optimize-size

HokieGeek commented 8 years ago
prog=main
chip=t13
cpu_freq=
programmer=usbtiny
port=usb
CC=avr-gcc
CFLAGS=-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes
LDFLAGS = -Wl,-Map=$(TARGET).map,--cref

DEPS = 
OBJ = $(prog).o $(DEPS:.h=.o)

all: $(prog).eep $(prog).lss $(prog).sym 

%.o: %.c $(DEPS)
    @echo "== Compiling object file: $@" && \
    $(CC) -c -mdeb -mmcu=$(chip) -I. -gdwarf-2 $(cpu_freq) -Os $(CFLAGS) -Wa,-adhlns=./$@.lst -std=gnu99 $< -o $@ || true

$(prog).eep: $(prog).elf
    @echo "== Creating load file for EEPROM" && \
    avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 --no-change-warnings -O ihex $< $@

$(prog).lss: $(prog).elf
    @echo "== Creating Extended Listing" && \
    avr-objdump -h -S -z $< > $@

$(prog).sym: $(prog).elf
    @echo "== Creating Symbol Table" && \
    avr-nm -n $< > $@

$(prog).elf: $(prog).hex
    @echo "== Creating load file for Flash" && \
    avr-objcopy -O ihex -R .eeprom -R .fuse -R .lock -R .signature $@ $^

$(prog).hex: $(OBJ)
    @echo "== Creating hex" && \
    $(CC) -mmcu=$(chip) -I. -mdeb -gdwarf-2 $(cpu_freq) -Os $(CFLAGS) -Wa,-adhlns=$<  -std=gnu99 -MMD -MP -MF .dep/$(prog).elf.d $^ --output $(prog).elf $(LDFLAGS) -lm

upload: all
    @echo "== Uploading to chip"
    sudo avrdude -P $(port) -c $(programmer) -p $(chip) -U flash:w:$(prog).hex

clean:
    rm -rf *.{eep,elf,hex,lss,lst,map,o,sym}

.PHONY: all upload clean
HokieGeek commented 8 years ago

Try the following flags one at a time for effectiveness:

CFLAGS += -s
CFLAGS += -mcall-prologues
LDFLAGS += -Wl,--relax
LDFLAGS += -Wl,--gc-sections
CFLAGS += --param inline-call-cost=2
CFLAGS += --combine -fwhole-program
CFLAGS += -fno-inline-small-functions
CFLAGS += -ffunction-sections
CFLAGS += -fdata-sections
HokieGeek commented 8 years ago

Reduced from 819 bytes to 500 bytes. Oh yeah...

# NOTHING CFLAGS += -s
# BIGGER CFLAGS += -mcall-prologues
# NOTHING LDFLAGS += -Wl,--relax
LDFLAGS += -Wl,--gc-sections
CFLAGS += -ffunction-sections
CFLAGS += -fdata-sections
# ERROR CFLAGS += --param inline-call-cost=2
# NOTHING CFLAGS += -fno-inline-small-functions
# ERROR CFLAGS += --combine
CFLAGS += -fwhole-program