ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
22 июля
1103225
Andreas (26.05.2021 15:48, просмотров: 525)
Подскажите, знатоки makefile! 

Есть готовый чужой мейк, который собирает чужую ОС и мои файлы. Все работает, добавляю свои файлы, да меняю ключи архитектур.

НО, понадобилось сделать запись во флешь из RAM. Скрипт линкера переделал, аттрибуты секций нужным процедурам поставил, копирую их в ОЗУ, все работает. НО, работает из конкретного адреса ОЗУ, что сильно не нравится, поскольку в ОС нет вообще статически выделяемых переменных и и работа должна вестись с произвольного адреса, т.е компилироваться с опцией -fpic и с этой опцией должен компилироваться только один файл. Есть работающий путь - отдельный проект и включение бинарника в виде массива в проект. Это удобно, когда все отлажено и просто включаешь бинарник. А мне нужна возможность отладки и удобной компиляции, т.е все впихнуть в один проект и один makefile. КАК доработать подобное творение, чтобы один файл компилился с дополнительным -fpic ипотом все вместе собиралось


................................

SRC_C += app.c

OBJ = $(SRC_AS:%.S=%.o) $(SRC_C:%.c=%.o)
#----------------------------------------------------------
DEFINES = -D$(MCU)
MCU_FLAGS = -mcpu=cortex-m7 -mthumb -D__CORTEX_M7 -D__thumb2__=1 -mtune=cortex-m7 -mapcs-frame -msoft-float #-mfloat-abi=hard -mfpu=fpv5-sp-d16
NO_DEFAULTS = -fdata-sections -ffunction-sections -fno-hosted -fno-builtin -nostdlib -nodefaultlibs
FLAGS_CC = $(INCLUDES) $(DEFINES) -I. -O$(OPTIMIZATION) -g3 -Wall -c -fmessage-length=0 $(MCU_FLAGS) $(NO_DEFAULTS)
FLAGS_LD = -Xlinker --gc-sections $(MCU_FLAGS)
#----------------------------------------------------------
all: $(TARGET_NAME).elf

%.elf: $(OBJ) $(LDS_SCRIPT)
@$(GCC) $(INCLUDES) -I. $(DEFINES) -DLDS -E $(LDS_SCRIPT) -o $(BUILD_DIR)/script.ld.hash
@awk '!/^(\ )*#/ {print $0}' $(BUILD_DIR)/script.ld.hash > $(BUILD_DIR)/script.ld
@echo LD: $(OBJ)
@$(GCC) $(FLAGS_LD) -T $(BUILD_DIR)/script.ld -o $(BUILD_DIR)/$@ $(OBJ:%.o=$(BUILD_DIR)/%.o)
@echo '-----------------------------------------------------------'
@$(SIZE) $(BUILD_DIR)/$(TARGET_NAME).elf
@$(OBJCOPY) -O binary $(BUILD_DIR)/$(TARGET_NAME).elf $(BUILD_DIR)/$(TARGET_NAME).bin
@$(OBJCOPY) -O ihex $(BUILD_DIR)/$(TARGET_NAME).elf $(BUILD_DIR)/$(TARGET_NAME).hex
@$(OBJDUMP) -h -S -z $(BUILD_DIR)/$(TARGET_NAME).elf > $(BUILD_DIR)/$(TARGET_NAME).lss
@$(NM) -n $(BUILD_DIR)/$(TARGET_NAME).elf > $(BUILD_DIR)/$(TARGET_NAME).sym
@mkdir -p $(OUTPUT_DIR)
@mv $(BUILD_DIR)/$(TARGET_NAME).bin $(OUTPUT_DIR)/$(TARGET_NAME).bin

.c.o:
@-mkdir -p $(BUILD_DIR)
@echo CC: $<
@$(GCC) $(FLAGS_CC) -c ./$< -o $(BUILD_DIR)/$@

.S.o:
@-mkdir -p $(BUILD_DIR)
@echo AS_C: $<
@$(GCC) $(INCLUDES) -I. $(DEFINES) -c -x assembler-with-cpp ./$< -o $(BUILD_DIR)/$@