make и использование разных компиляторов. Всю голову сломал.

Автор Slacky, 03 февраля 2022, 14:28:44

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Slacky

Добрый день.

Есть проект для ESP8266. Нужно было загрузить скомпилированный кусок для файловой системы spiffs. Есть такая утилитка - mkspiffs.
Подгрузил ее субмодулем. Если зайти в каталог mkspiffs и сказать make, то все нормально собирается.
Но если запустить этот же Makefile из makefile'а проекта для esp8266, то где-то рушится неявное правило для .o и вываливается по ошибке

make[1]: *** No rule to make target 'main.o', needed by 'mkspiffs'.  Stop.

Мой Makefile
#

# This is a project Makefile. It is assumed the directory this Makefile resides in is a
# project subdirectory.
#

PROJECT_NAME := spiffs

include $(IDF_PATH)/make/project.mk

PROJECT_PATH ?= $(CURDIR)

UTILITY_DIR = $(PROJECT_PATH)/utility
MKSPIFFS = $(UTILITY_DIR)/mkspiffs/mkspiffs
MKSPIFFS_DIR = $(UTILITY_DIR)/mkspiffs
MKSPIFFS_EXE = $(MKSPIFFS) -c $(STORAGE_DIR) -b 4096 -p 256 -s $(STORAGE_LEN) $(STORAGE_BIN)
STORAGE_DIR ?= $(PROJECT_PATH)/storage
STORAGE_BIN ?= $(BUILD_DIR_BASE)/spiffs.bin
STORAGE_OFFSET ?= 0x1FC000
STORAGE_LEN ?= 0x70000
STORAGE_EXE = $(ESPTOOLPY) --port $(ESPPORT) --baud $(ESPBAUD) write_flash -z $(STORAGE_OFFSET) $(STORAGE_BIN)

.PHONY: storage

storage: mkspiffs
# @echo $(STORAGE_EXE)
# $(STORAGE_EXE)

mkspiffs: $(MKSPIFFS_DIR)/Makefile make_mkspiffs
# @echo $(MKSPIFFS_EXE)
# $(MKSPIFFS_EXE)

$(MKSPIFFS_DIR)/Makefile:
git clone "https://github.com/igrr/mkspiffs.git"  $(MKSPIFFS_DIR)
git -C $(MKSPIFFS_DIR) submodule update --init

make_mkspiffs: CXX:=g++
make_mkspiffs: CC:=$(HOSTCC)
make_mkspiffs: LD:=$(HOSTLD)
make_mkspiffs: AR:=$(HOSTAR)
make_mkspiffs: OBJCOPY:=$(HOSTOBJCOPY)
make_mkspiffs: SIZE:=$(HOSTSIZE)
make_mkspiffs:
$(MAKE) -C $(MKSPIFFS_DIR)


В Makefile субмодуля ничего необычного (вырезка, но думаю и так понятно).

TARGET := mkspiffs

OBJ := main.o \
   spiffs/src/spiffs_cache.o \
   spiffs/src/spiffs_check.o \
   spiffs/src/spiffs_gc.o \
   spiffs/src/spiffs_hydrogen.o \
   spiffs/src/spiffs_nucleus.o \

all: $(TARGET)

$(TARGET): $(OBJ)
$(CXX) $^ -o $@ $(LDFLAGS)
strip $(TARGET)




Есть идея, как это заставить работать? Но есть одно условие - Makefile от mkspiffs редактировать нельзя!

Спасибо.
-- С уважением, Федор.

ferum

Русские дебианщики против цифрового слабоумия !

Slacky

 Извините, но гости не могут просматривать ссылки. Регистрация или Логин

Тулчайн как раз работает без нареканий. Мне нужно запустить локальный g++, но там неявное правило теряется, а как его восстановить я не знаю.
-- С уважением, Федор.

Slacky

Победил я его. Правда все-таки пришлось корректировать makefile от субмодуля, но там все свелось в добавление в конец после скачивания вот такой записи

main.o: main.cpp
$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c -o $@ $^

%.o: %.c
$(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $@


Ну и обнулить CFLAGS, CPPFLAGS и CXXFLAGS, они тянули за собой весь комплект от esp ...
-- С уважением, Федор.