Initial commit

This commit is contained in:
2025-10-22 20:40:25 +03:00
commit 63d038ee63
57 changed files with 104378 additions and 0 deletions

237
Makefile Normal file
View File

@@ -0,0 +1,237 @@
# Use install.sh for Build Tools installation
# Use . export.sh for PATH settings
# https://stackoverflow.com/questions/1612278/pre-build-step-in-makefile
TARGET = CAN_FW
DEBUG = 1
OPT = -Og
ifeq ($(DEBUG), 1)
BUILD_DIR = build/$(MODEL)_Debug
else
BUILD_DIR = build/$(MODEL)_Release
endif
#######################################
# SOURCES
#######################################
C_SOURCES = \
CPP_SOURCES = \
$(wildcard libs/*.cpp) \
$(wildcard src/*.cpp) \
$(wildcard src/immo/*.cpp)
ASM_SOURCES = \
#######################################
# INCLUES
#######################################
# AS includes
AS_INCLUDES =
# C includes
C_INCLUDES = \
-Ilibs \
-Isrc
#######################################
# OTHER MAKE VARIABLES
#######################################
CXX = arm-none-eabi-g++
CC = arm-none-eabi-gcc
AS = arm-none-eabi-gcc -x assembler-with-cpp
CP = arm-none-eabi-objcopy
SZ = arm-none-eabi-size
HEX = $(CP) -O ihex
BIN = $(CP) -O binary -S
# mcu
MCU = -mcpu=cortex-m3 -mthumb
# AS defines
AS_DEFS =
# C defines
C_DEFS = -DSTM32F10X_CL -DHSE_VALUE=16000000 -DCAN_FIRMWARE=1
# CXX defines
CXX_DEFS = -DSTM32F10X_CL -DHSE_VALUE=16000000 -DCAN_FIRMWARE=1
ifeq ($(MODEL),M2)
C_DEFS += -DMOBICAR_1_2=1
CXX_DEFS += -DMOBICAR_1_2=1
endif
ifeq ($(MODEL),M3)
C_DEFS += -DMOBICAR_3=1
CXX_DEFS += -DMOBICAR_3=1
endif
# compile gcc flags
ASFLAGS = $(MCU) $(AS_DEFS) $(AS_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections
CFLAGS = $(MCU) $(C_DEFS) $(C_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections
CXXFLAGS = $(MCU) $(CXX_DEFS) $(C_INCLUDES) $(OPT)
CXXFLAGS += -Wall# All warnings
CXXFLAGS += -fmessage-length=0# Number of lines for error messages
CXXFLAGS += -fsigned-char# Default char is signed
CXXFLAGS += -fdata-sections -ffunction-sections# Place each function or data item into its own section (use garbage collector --gc-sections in linker)
CXXFLAGS += -ffreestanding# Freestanding environment (without standard library)
CXXFLAGS += -Wuninitialized# Uninitialized variables warning
CXXFLAGS += -Wpointer-arith# Warning for arithmetic operations with 'void *'
CXXFLAGS += -Wshadow# Warning if a local var shadows another one
CXXFLAGS += -Wlogical-op# Warn about suspicious uses of logical operators in expressions
CXXFLAGS += -Waggregate-return# Warn if any functions that return structures or unions are defined or called
CXXFLAGS += -Wfloat-equal# Warn if floating-point values are used in equality comparisons
CXXFLAGS += -std=gnu++11# C++ standart
CXXFLAGS += -fabi-version=0# Fix ABI version
CXXFLAGS += -fno-exceptions# Disable the generation of code needed to support C++ exceptions
CXXFLAGS += -fno-rtti# Disable C++ runtime
CXXFLAGS += -fno-use-cxa-atexit# Do not use standard library for calling destructors
CXXFLAGS += -fno-threadsafe-statics# Do not emit the extra code to use the routines specified in the C++ ABI for thread-safe initialization of local statics
ifeq ($(DEBUG), 1)
CFLAGS += -g -gdwarf -ggdb
CXXFLAGS += -g -gdwarf -ggdb
C_DEFS += -DDEBUG
CXX_DEFS += -DDEBUG
endif
# Generate dependency information
CFLAGS += -MMD -MP -MF"$(@:%.o=%.d)"
CXXFLAGS += -MMD -MP -MF"$(@:%.o=%.d)"
#######################################
# LDFLAGS
#######################################
# link script
ifeq ($(MODEL),M2)
LDSCRIPT = sys/M1_CAN_FW.ld
endif
ifeq ($(MODEL),M3)
LDSCRIPT = sys/M3_CAN_FW.ld
endif
LDFLAGS = $(MCU)
LDFLAGS += -Wl,--gc-sections# Dead code removal (linker garbage collector)
LDFLAGS += -Wl,--print-memory-usage# Print FLASH/RAM memory table
LDFLAGS += -T$(LDSCRIPT)# Linker script
# LDFLAGS += -Wl,-Map=$(BUILD_DIR)/$(TARGET).map# MAP file
LDFLAGS += -nostartfiles# Do not use startup code before the main()
LDFLAGS += -nodefaultlibs# Do not use default libs
LDFLAGS += -nostdlib# Do not use std lib
LDFLAGS += -Wl,--no-warn-rwx-segment# Remove RWX warning
#######################################
# build the application
#######################################
# list of cpp program objects
OBJECTS = $(addprefix $(BUILD_DIR)/, $(CPP_SOURCES:.cpp=.cpp.o))
# list of C objects
OBJECTS += $(addprefix $(BUILD_DIR)/, $(C_SOURCES:.c=.c.o))
# list of ASM program objects
UPPER_CASE_ASM_SOURCES = $(filter %.S, $(ASM_SOURCES))
LOWER_CASE_ASM_SOURCES = $(filter %.s, $(ASM_SOURCES))
OBJECTS += $(addprefix $(BUILD_DIR)/, $(UPPER_CASE_ASM_SOURCES:.S=.S.o))
OBJECTS += $(addprefix $(BUILD_DIR)/, $(LOWER_CASE_ASM_SOURCES:.s=.s.o))
# default action
.DEFAULT_GOAL := all
all:
@echo Use MODEL variable with debug/release target:
@echo make -e MODEL=M2 debug
@echo make -e MODEL=M2 release
@echo make -e MODEL=M3 debug
@echo make -e MODEL=M3 release
# Colors
NC =\e[0m
RED =\e[0;31m
GREEN =\e[0;32m
BLUE =\e[0;36m
.SECONDEXPANSION:
ERROR_HANDLER = && printf "$(GREEN)OK$(NC)\n" || (printf "$(RED)ERROR$(NC)\n"; exit 1)
$(BUILD_DIR)/%.cpp.o: %.cpp Makefile | $$(@D)/
@printf "compile $(BLUE)$<$(NC) "
@$(CXX) -E -c $(CXXFLAGS) $< -o $@ || (printf "$(RED)ERROR$(NC)\n"; exit 1)
@iconv -f UTF-8 -t CP1251 $@ > $@.i
@$(CXX) -c $(CXXFLAGS) $@.i -o $@ $(ERROR_HANDLER)
$(BUILD_DIR)/%.c.o: %.c Makefile | $$(@D)/
@printf "compile $(BLUE)$<$(NC) "
@$(CC) -c $(CFLAGS) $< -o $@ $(ERROR_HANDLER)
$(BUILD_DIR)/%.s.o: %.s Makefile | $$(@D)/
@printf "compile $(BLUE)$<$(NC) "
@$(AS) -c $(CFLAGS) $< -o $@ $(ERROR_HANDLER)
$(BUILD_DIR)/%.S.o: %.S Makefile | $$(@D)/
@printf "compile $(BLUE)$<$(NC) "
@$(AS) -c $(CFLAGS) $< -o $@ $(ERROR_HANDLER)
$(BUILD_DIR)/$(TARGET).elf: $(OBJECTS) Makefile
@printf "linking $(BLUE)$@$(NC)\n"
@$(CXX) $(OBJECTS) $(LDFLAGS) -o $@ || (printf "$(RED)linker ERROR$(NC)\n"; exit 1)
# $(SZ) $@
# https://www.cmcrossroads.com/article/making-directories-gnu-make
%/:
@mkdir -p $@
$(BUILD_DIR)/%.hex: $(BUILD_DIR)/%.elf
@printf "generate $(BLUE)$@$(NC) "
@$(HEX) $< $@ $(ERROR_HANDLER)
@sys/hex2fw.sh $@ || exit 1
ifeq ($(DEBUG), 1)
STARTMSG = Building $(MODEL) Debug
else
STARTMSG = Building $(MODEL) Release
endif
build_app:
@printf "$(GREEN)-----------------------$(NC)\n"
@printf "$(GREEN) $(STARTMSG)$(NC)\n"
@printf "$(GREEN)-----------------------$(NC)\n"
@sys/version.sh;
# @sys/changelog.sh;
@make -j --no-print-directory --output-sync $(BUILD_DIR)/$(TARGET).hex
@printf "$(GREEN)-----------------------$(NC)\n"
clean:
@rm -rf $(BUILD_DIR)
debug:
@make clean --no-print-directory
@make build_app --no-print-directory
release:
@make clean --no-print-directory -e DEBUG=0
@make build_app --no-print-directory -e OPT=-Os DEBUG=0
printvars:
@echo "MODEL: $(MODEL)"
@echo "C_DEFS: $(C_DEFS)"
@echo "CXX_DEFS: $(CXX_DEFS)"
-include $(OBJECTS:.o=.d)
# *** EOF ***