fan_monitor/Makefile
Steins7 f9113fc410 Recovered clean project
* improved Makefile
* fixed openocd script
- removed uneeded file
* minor cosmetic tweaks
2021-08-11 11:15:48 +02:00

190 lines
5.1 KiB
Makefile

#-------------------------------------------------------------------------------
# this GNU-makefile relies on the GCC toolchain
# --- control global project settings
# RELEASE=1 -> enable optimisation, then disable debug
# RELEASE=0 -> disable optimisation, then enable debug
RELEASE=0
# --- project architecture
# program name
EXE_PREFIX=main
# project folders, This Makefile should be in the same folder as the SRC folder
SRC=src
BIN=bin
INC=include
LIB=lib
OBJ=${BIN}/obj
DEP=${BIN}/dep
# code folders, in the SRC folder
SUBFOLDERS=drivers target
# Define linker script file here
LDSCRIPT=${SRC}/target/STM32F103XB.ld
# --- advanced config
# List all user C define here
UDEFS=
# Define ASM defines here
UADEFS=
# --- toolchain configuration
TARGET=arm-none-eabi-
CC=${TARGET}gcc
CPP=${TARGET}g++
OBJCOPY=${TARGET}objcopy
AS=${TARGET}gcc -x assembler-with-cpp -c
SIZE=${TARGET}size
OBJDUMP=${TARGET}objdump
# --- hardware settings
ARCH=armv7-m
FLOAT-ABI=soft #no FPU on stm32f103
CPU=cortex-m3
CPUFLAGS=-mthumb
FPU=fpv4-sp-d16 #"FLOAT-ABI=soft" disable that
#-------------------------------------------------------------------------------
# --- makefile pre-incantation
# List all de:fault C defines here, like -D_DEBUG=1
DDEFS=-march=${ARCH} -mfloat-abi=${FLOAT-ABI} -mcpu=${CPU} -mfpu=${FPU} $\
${CPUFLAGS}
# List all default ASM defines here, like -D_DEBUG=1
DADEFS=-D__ASSEMBLY__
# --- deduce file names
MAIN_C_FILES=${wildcard ${SRC}/${strip ${EXE_PREFIX}}*.c}
MAIN_CPP_FILES=${wildcard ${SRC}/${strip ${EXE_PREFIX}}*.cpp}
COMMON_C_FILES=${filter-out ${MAIN_C_FILES},${wildcard ${SRC}/*.c}}
COMMON_C_FILES+=${foreach dir,${SUBFOLDERS},${wildcard ${SRC}/${dir}/*.c}}
COMMON_CPP_FILES=${filter-out ${MAIN_CPP_FILES},${wildcard ${SRC}/*.cpp}}
COMMON_CPP_FILES+=${foreach dir,${SUBFOLDERS},${wildcard ${SRC}/${dir}/*.cpp}}
COMMON_ASM_FILES=${foreach dir,${SUBFOLDERS},${wildcard ${SRC}/${dir}/*.s}}
MAIN_OBJECT_FILES=${sort ${patsubst ${src}/%.c,${obj}/%.o,${MAIN_C_FILES}} \
${patsubst ${src}/%.cpp,${obj}/%.o,${MAIN_CPP_FILES}}}
COMMON_OBJECT_FILES=${sort \
${patsubst ${SRC}/%.c,${OBJ}/%.o,${COMMON_C_FILES}} \
${patsubst ${SRC}/%.cpp,${OBJ}/%.o,${COMMON_CPP_FILES}} \
${patsubst ${SRC}/%s,${OBJ}/%o,${COMMON_ASM_FILES}}}
LIBRARIES=${foreach dir,${wildcard ${LIB}/*},${wildcard ${LIB}/${dir}/*.a}}
OBJECT_FILES=${MAIN_OBJECT_FILES} ${COMMON_OBJECT_FILES}
DEPEND_FILES=${OBJECT_FILES:%.o,%.d}
#-------------------------------------------------------------------------------
# --- makefile incantation
# down here is black magic, you probably don't want to modify anything
DEFS=${DDEFS} ${UDEFS}
ADEFS=${DADEFS} ${UADEFS}
# --- otpimisation
ifeq (${strip ${RELEASE}},0)
CFLAGS=-g3 -O0
else
CFLAGS=-O3
endif
# --- c/cpp
ifneq (${strip ${MAIN_CPP_FILES} ${COMMON_CPP_FILES}},)
CC:=${CPP}
CFLAGS+=-std=c++17
else
CFLAGS+=-std=c17
endif
ASFLAGS=${LIB} $(DEFS) -Wa,--gdwarf2 $(ADEFS)
CFLAGS+=-Wall ${DEFS} -Wextra -Warray-bounds -Wno-unused-parameter $\
-fomit-frame-pointer
LDFLAGS=-T ${LDSCRIPT} -lc -lgcc -lgcov -lm -Wl,-Map=$@.map,--gc-sections $\
--specs=nosys.specs
INCLUDE=-I ${INC}
# --- Generate dependency information
CFLAGS+=-MD -MP -MF ${patsubst %o,%d,$@}
ASFLAGS+=#-MD -MP -MF ${patsubst %o,%d,$@}
# --- folder tree
DIR_GUARD=@mkdir -p ${@D}
#-------------------------------------------------------------------------------
# --- make rules
all: ${BIN}/${EXE_PREFIX}.elf ${BIN}/${EXE_PREFIX}.hex ${BIN}/${EXE_PREFIX}.bin
rebuild : clean all
.SUFFIXES:
.SECONDARY:
.PHONY: all clean rebuild
# --- compiler command for elf file
${BIN}/%.elf : ${MAIN_OBJECT_FILES} ${COMMON_OBJECT_FILES}
@echo -e '\e[32;1m ==== linking $@ ====\e[0m'
@echo ${COMMON_OBJECT_FILES}
@echo
${DIR_GUARD}
${CC} ${INCLUDE} ${CFLAGS} -o $@ $^ ${LIBRARIES} ${LDFLAGS}
${OBJDUMP} -h $@
${SIZE} $@
@echo
# --- compiler commands for uploadable files
${BIN}/%.hex : ${BIN}/%.elf
@echo -e '\e[33;1m ==== translating $< ====\e[0m'
${OBJCOPY} -O ihex $< $@
@echo
${BIN}/%.bin : ${BIN}/%.elf
@echo -e '\e[33;1m ==== translating $< ====\e[0m'
${OBJCOPY} -O binary $< $@
@echo
# --- compiler commands for every source file
${OBJ}/%.o : ${SRC}/%.cpp
@echo -e '\e[36;1m ==== compiling $< ====\e[0m'
${DIR_GUARD}
${CPP} ${INCLUDE} -c ${CFLAGS} $< -o $@ ${LIBRARIES}
@echo
${BIN}/%.o : ${SRC}/%.cpp
@echo -e '\e[36;1m ==== compiling $< ====\e[0m'
${DIR_GUARD}
${CPP} ${INCLUDE} -c ${CFLAGS} $< -o $@ ${LIBRARIES}
@echo
${OBJ}/%.o : ${SRC}/%.c
@echo -e '\e[34;1m ==== compiling $< ====\e[0m'
${DIR_GUARD}
${CC} ${INCLUDE} -c ${CFLAGS} $< -o $@ ${LIBRARIES}
@echo
${BIN}/%.o : ${SRC}/%.c
@echo -e '\e[34;1m ==== compiling $< ====\e[0m'
${DIR_GUARD}
${CC} ${INCLUDE} -c ${CFLAGS} $< -o $@ ${LIBRARIES}
@echo
${OBJ}/%.o : ${SRC}/%.s
@echo -e '\e[35;1m ==== compiling $^ ====\e[0m'
${DIR_GUARD}
${AS} -o ${ASFLAGS} $< -o $@ ${LIBRARIES}
@echo
${BIN}/%.o : ${SRC}/%.s
@echo -e '\e[35;1m ==== compiling $^ ====\e[0m'
${DIR_GUARD}
${AS} -o ${ASFLAGS} $< -o $@ ${LIBRARIES}
@echo
# --- remove generated files
clean:
-rm -rf ${BIN}/*
-include ${DEPEND_FILES}