Un makefile es en realidad un script para la utilidad 'make' y no es específico de ningún procesador (GNU make al menos), ni tiene nada que ver con CMSIS. De hecho, no puede construir nada y simplemente crear una carpeta usando 'make' y 'recipies' escritas en el archivo make. Este es el manual de usuario de GNU make para algunos antecedentes.
Para los comandos del compilador de nuevo, deberá soportar el manual de GCC . Menciona las opciones que debe ingresar para especificar el procesador, la optimización, etc. Por ejemplo, en la siguiente receta de makefile:
build/%.o: source/%.c | build
@echo " *** Building $@"
arm-none-eabi-gcc -mcpu=cortex-m4 -mthumb -mfloat-abi=soft -fsigned-char -ffreestanding -nostartfiles -Og -g3 -fno-move-loop-invariants -fdata-sections -ffunction-sections -I"include" -std=gnu11 -c -o $@ $^
@echo " *** $@ built."
@echo ""
le dice a la utilidad 'make' que para hacer una compilación de archivos \%. o, necesitará un archivo llamado source \%. c y la 'receta' o método para hacerlo es ejecutar el comando sin brazo -eabi-gcc compilador con las opciones especificadas en esa línea. El significado de cada opción del compilador se menciona en el manual de GCC. Por ejemplo, -mcpu=cortex-m4
especifica el procesador ARM cortex m4. El stm32f103 quizás necesite -mcpu=cortex-m1
.
Como dijo Arsenal, no se puede usar un makefile para especificar la frecuencia, el tamaño de la memoria, etc. Mientras que la frecuencia está configurada en el código de la aplicación, el tamaño de la memoria, etc., aparecería en el script del enlazador utilizado por el enlazador GNU 'ld'. Aquí es una referencia al manual del enlazador. De hecho, una de las opciones para el compilador GNU es -T "linker.ld" que especifica el archivo de vinculador que se utilizará. Encontré esta publicación del blog cuando intentaba hacer algo similar.