Answer the question
In order to leave comments, you need to log in
Incompatibility between gnu make 3.81 and 4.2.1. How to resolve?
There is this make file: https://github.com/Vadimatorik/chiptune_player_2.2...
PROJECT_NAME := ay_player
#**********************************************************************
# Параметры сборки проекта.
#**********************************************************************
FREE_RTOS_OPTIMIZATION := -g3 -Os
STM32_F2_API_OPTIMIZATION := -g3 -Os
USER_CODE_OPTIMIZATION := -g3 -Os
LD_FILES = -T stm32f2_api/ld/stm32f205xB_mem.ld -T stm32f2_api/ld/stm32f2_section.ld
MK_FLAGS := -mcpu=cortex-m3 -mthumb -mfloat-abi=soft
# Размещает каждую функцию в отдельной секции.
MK_FLAGS += -ffunction-sections
MK_FLAGS += -fdata-sections
C_FLAGS := $(MK_FLAGS)
# Все предупреждения == ошибки.
C_FLAGS += -Werror
# Выдавать предупреждения (ошибки) о сомнительных констукциях.
C_FLAGS += -Wall
# Выдавать предупреждение (ошибку) о любых сомнительных действиях.
C_FLAGS += -Wextra
C_FLAGS += -std=gnu99
# Если переменная объявлена как enum, то она должна иметь возможность
# хранить в себе всевозможные состояния этого enum-а (а не только текущее).
C_FLAGS += -fshort-enums
CPP_FLAGS := $(MK_FLAGS)
CPP_FLAGS += -Werror -Wall -Wextra
CPP_FLAGS += -std=c++14
CPP_FLAGS += -fshort-enums
LDFLAGS := $(MK_FLAGS)
LDFLAGS += $(LD_FILES)
LDFLAGS += -Werror -Wall -Wextra
# Убираем неиспользуемые функции из .elf.
LDFLAGS += -Wl,--gc-sections
LDFLAGS += -Ofast -funroll-loops
# Развертывание циклов.
LDFLAGS += -funroll-loops
# Удаление из elf неиспользуемого кода.
LDFLAGS += -Wl,-Map="build/$(PROJECT_NAME).map"
#**********************************************************************
# Параметры toolchain-а.
#**********************************************************************
TOOLCHAIN_PATH = arm-none-eabi
CC = $(TOOLCHAIN_PATH)-gcc
CPP = $(TOOLCHAIN_PATH)-g++
CCDEP = $(TOOLCHAIN_PATH)-gcc
LD = $(TOOLCHAIN_PATH)-g++
AR = $(TOOLCHAIN_PATH)-ar
AS = $(TOOLCHAIN_PATH)-gcc
OBJCOPY = $(TOOLCHAIN_PATH)-objcopy
OBJDUMP = $(TOOLCHAIN_PATH)-objdump
GDB = $(TOOLCHAIN_PATH)-gdb
SIZE = $(TOOLCHAIN_PATH)-size
#**********************************************************************
# Конфигурация проекта пользователя.
#**********************************************************************
# Все файлы из папки cfg в каталоге проекта.
USER_CFG_H_FILE := $(wildcard cfg/*.h)
USER_CFG_DIR := cfg
USER_CFG_PATH := -I$(USER_CFG_DIR)
#**********************************************************************
# Для сборки FreeRTOS.
#**********************************************************************
# Собираем все необходимые .h файлы FreeRTOS.
# FreeRTOS.h должен обязательно идти первым!
FREE_RTOS_H_FILE := FreeRTOS_for_stm32f2/FreeRTOS.h
FREE_RTOS_H_FILE += $(wildcard FreeRTOS_for_stm32f2/include/*.h)
# Директории, в которых лежат файлы FreeRTOS.
FREE_RTOS_DIR := FreeRTOS_for_stm32f2
FREE_RTOS_DIR += FreeRTOS_for_stm32f2/include
# Подставляем перед каждым путем директории префикс -I.
FREE_RTOS_PATH := $(addprefix -I, $(FREE_RTOS_DIR))
# Получаем список .c файлов ( путь + файл.c ).
FREE_RTOS_C_FILE := $(wildcard FreeRTOS_for_stm32f2/*.c)
# Получаем список .o файлов ( путь + файл.o ).
# Сначала прибавляем префикс ( чтобы все .o лежали в отдельной директории
# с сохранением иерархии.
FREE_RTOS_OBJ_FILE := $(addprefix build/obj/, $(FREE_RTOS_C_FILE))
# Затем меняем у всех .c на .o.
FREE_RTOS_OBJ_FILE := $(patsubst %.c, %.obj, $(FREE_RTOS_OBJ_FILE))
FREE_RTOS_INCLUDE_FILE := -include"./FreeRTOS_for_stm32f2/include/StackMacros.h"
# Сборка FreeRTOS.
# $< - текущий .c файл (зависемость).
# [email protected] - текущая цель (создаваемый .o файл).
# $(dir путь) - создает папки для того, чтобы путь файла существовал.
build/obj/FreeRTOS_for_stm32f2/%.obj: FreeRTOS_for_stm32f2/%.c
@echo [CC] $<
@mkdir -p $(dir [email protected])
@$(CC) $(C_FLAGS) $(FREE_RTOS_PATH) $(USER_CFG_PATH) $(FREE_RTOS_INCLUDE_FILE) -c $< -o [email protected]
#**********************************************************************
# Для сборки stm32f2_api.
#**********************************************************************
# Собираем все необходимые .h файлы библиотеки.
STM32_F2_API_H_FILE := $(shell find stm32f2_api/ -maxdepth 3 -type f -name "*.h" )
# Получаем список .cpp файлов ( путь + файл.c ).
STM32_F2_API_CPP_FILE := $(shell find stm32f2_api/ -maxdepth 3 -type f -name "*.cpp" )
# Директории библиотеки.
STM32_F2_API_DIR := $(shell find stm32f2_api/ -maxdepth 3 -type d -name "*" )
# Подставляем перед каждым путем директории префикс -I.
STM32_F2_API_PATH := $(addprefix -I, $(STM32_F2_API_DIR))
# Получаем список .o файлов ( путь + файл.o ).
# Сначала прибавляем префикс ( чтобы все .o лежали в отдельной директории
# с сохранением иерархии.
STM32_F2_API_OBJ_FILE := $(addprefix build/obj/, $(STM32_F2_API_CPP_FILE))
# Затем меняем у всех .c на .o.
STM32_F2_API_OBJ_FILE := $(patsubst %.cpp, %.obj, $(STM32_F2_API_OBJ_FILE))
# Сборка stm32f2_api.
# $< - текущий .c файл (зависемость).
# [email protected] - текущая цель (создаваемый .o файл).
# $(dir путь) - создает папки для того, чтобы путь файла существовал.
build/obj/stm32f2_api/%.obj: stm32f2_api/%.cpp $(USER_CFG_H_FILE) $(FREE_RTOS_H_FILE)
@echo [CPP] $<
@mkdir -p $(dir [email protected])
@$(CPP) $(CPP_FLAGS) $(STM32_F2_API_PATH) $(USER_CFG_PATH) $(FREE_RTOS_PATH) $(STM32_F2_API_OPTIMIZATION) -c $< -o [email protected]
#**********************************************************************
# Сборка кода пользователя.
# Весь код пользователя должен быть в корневой папке.
#**********************************************************************
# Собираем все необходимые .h файлы библиотеки.
USER_H_FILE := $(wildcard ./*.h)
# Получаем список .cpp файлов ( путь + файл.cpp ).
USER_CPP_FILE := $(wildcard ./*.cpp)
# Директории библиотеки.
USER_DIR := ./
# Подставляем перед каждым путем директории префикс -I.
USER_PATH := $(addprefix -I, $(USER_DIR))
# Получаем список .o файлов ( путь + файл.o ).
# Сначала прибавляем префикс ( чтобы все .o лежали в отдельной директории
# с сохранением иерархии.
USER_OBJ_FILE := $(addprefix build/obj/, $(USER_CPP_FILE))
# Затем меняем у всех .c на .o.
USER_OBJ_FILE := $(patsubst %.cpp, %.obj, $(USER_OBJ_FILE))
# Сборка файлов пользователя.
# $< - текущий .c файл (зависемость).
# [email protected] - текущая цель (создаваемый .o файл).
# $(dir путь) - создает папки для того, чтобы путь файла существовал.
build/obj/%.obj: %.cpp $(USER_CFG_H_FILE) $(FREE_RTOS_H_FILE)
@echo [CPP] $<
@mkdir -p $(dir [email protected])
@$(CPP) $(CPP_FLAGS) $(USER_PATH) $(STM32_F2_API_PATH) $(USER_CFG_PATH) $(FREE_RTOS_PATH) $(USER_CODE_OPTIMIZATION) -c $< -o [email protected]
#**********************************************************************
# Компановка проекта.
#**********************************************************************
PROJECT_OBJ_FILE := $(FREE_RTOS_OBJ_FILE) $(STM32_F2_API_OBJ_FILE) $(USER_OBJ_FILE)
build/$(PROJECT_NAME).elf: $(PROJECT_OBJ_FILE)
@echo 'Project Composition:'
@echo ' '
$(LD): $(LDFLAGS) -o build/$(PROJECT_NAME).elf
@$(LD) $(LDFLAGS) $(PROJECT_OBJ_FILE) -o build/$(PROJECT_NAME).elf
@echo 'Finished building target: [email protected]'
@echo ' '
$(PROJECT_NAME).siz: build/$(PROJECT_NAME).elf
@echo 'Print Size:'
@arm-none-eabi-size --format=berkeley "build/$(PROJECT_NAME).elf"
@echo ' '
all: $(PROJECT_NAME).siz
@$(OBJDUMP) -D build/$(PROJECT_NAME).elf > build/$(PROJECT_NAME).asm
@$(OBJCOPY) build/$(PROJECT_NAME).elf build/$(PROJECT_NAME).bin -O binary
git cline https://github.com/Vadimatorik/chiptune_player_2.22
cd chiptune_player_2.22
git submodule init
git submodule update
make all
Answer the question
In order to leave comments, you need to log in
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question