:::: MENU ::::

makefile для ARM cortex-m3 на простом примере, часть 2

На примере makefile для STM32L покажем как писать makefile для ARM cortex-m3.

NOTE: У вас уже должен быть установлен cross компилятор для ARM, например отсюда: GNU Tools for ARM Embedded Processorshttps://launchpad.net/gcc-arm-embedded. А директория компилятора добавлена в список путей переменной PATH.

Как и в первой части, наш проект:

Project
* main.c 
* System
    * stm32l152rb.ld
    * Src 
        * system_stm32l1xx.c
        * startup_stm32l1xx_md.s
    * Inc
        * core_cm3.h
        * core_cmFunc.h
        * core_cmInstr.h
        * stm32l1xx.h
        * system_stm32l1xx.h

Привожу Makefile без пояснений — если вы читали часть 1 и имеете хоть какое-то представление о make синтаксисе, то все должно быть понятно.

########################################################################
CC=/home/sasha/ARMTollChain/gcc-arm-none-eabi-4_9-2014q4/bin/arm-none-eabi-gcc
LD=/home/sasha/ARMTollChain/gcc-arm-none-eabi-4_9-2014q4/bin/arm-none-eabi-gcc
CP=/home/sasha/ARMTollChain/gcc-arm-none-eabi-4_9-2014q4/bin/arm-none-eabi-objcopy


########################################################################
LDSCRIPT=-T/home/sasha/Project_X/NewGenSTM32/start_make/System/stm32l152rb.ld

########################################################################
INC+=-I/home/sasha/Project_X/NewGenSTM32/start_make/System/Inc

SRC+=/home/sasha/Project_X/NewGenSTM32/start_make/main.c
SRC+=/home/sasha/Project_X/NewGenSTM32/start_make/System/Src/system_stm32l1xx.c

ASM+=/home/sasha/Project_X/NewGenSTM32/start_make/System/Src/startup_stm32l1xx_md.s

#######################################################################
OBJ=$(SRC:%.c=%.o)
OBJ+=$(ASM:%.s=%.o)

#######################################################################
CFLAGS += -mcpu=cortex-m3 
CFLAGS += -mlittle-endian
CFLAGS += -mthumb
CFLAGS += -g
CFLAGS += $(INC)

LDFLAGS += -mcpu=cortex-m3
LDFLAGS += -mlittle-endian
LDFLAGS += -mthumb
LDFLAGS += $(LDSCRIPT)
LDFLAGS += -Wl,--gc-section

######################################################################
all: start
    @echo "\n"
    @echo "END"

start: main.elf
    @echo "\n"
    @echo "OUT"
    @echo "********************************************************"
    $(CP) -Oihex main.elf main.hex 
    @echo "********************************************************"

main.elf: $(OBJ)
    @echo "\n"
    @echo "LINK"
    @echo "********************************************************"
    $(LD) $(LDFLAGS) $(OBJ) -o main.elf
    @echo "********************************************************"

%.o: %.c
    @echo "\n"
    @echo "COMPILE C"
    @echo "********************************************************"
    $(CC) $(CFLAGS) -c $< -o $@
    @echo "********************************************************"

%.o: %.s
    @echo "\n"
    @echo "COMPILE S"
    @echo "********************************************************"
    $(CC) $(CFLAGS) -c $< -o $@
    @echo "********************************************************"

clean:
    rm -f $(OBJ) main.elf main.hex

Ссылка на скачивание примера — start_make.tar.