Makefile
1 ifndef COMPONENT 2 COMPONENT := spiffs 3 endif 4 5 COMPONENT_LIB := lib$(COMPONENT).a 6 TEST_PROGRAM := test_$(COMPONENT) 7 8 STUBS_LIB_DIR := ../../../components/spi_flash/sim/stubs 9 STUBS_LIB_BUILD_DIR := $(STUBS_LIB_DIR)/build 10 STUBS_LIB := libstubs.a 11 12 SPI_FLASH_SIM_DIR := ../../../components/spi_flash/sim 13 SPI_FLASH_SIM_BUILD_DIR := $(SPI_FLASH_SIM_DIR)/build 14 SPI_FLASH_SIM_LIB := libspi_flash.a 15 16 include Makefile.files 17 18 all: test 19 20 ifndef SDKCONFIG 21 SDKCONFIG_DIR := $(dir $(realpath sdkconfig/sdkconfig.h)) 22 SDKCONFIG := $(SDKCONFIG_DIR)sdkconfig.h 23 else 24 SDKCONFIG_DIR := $(dir $(realpath $(SDKCONFIG))) 25 endif 26 27 INCLUDE_FLAGS := $(addprefix -I, $(INCLUDE_DIRS) $(SDKCONFIG_DIR) ../../../tools/catch) 28 29 CPPFLAGS += $(INCLUDE_FLAGS) -g -m32 30 CXXFLAGS += $(INCLUDE_FLAGS) -std=c++11 -g -m32 31 32 # Build libraries that this component is dependent on 33 $(STUBS_LIB_BUILD_DIR)/$(STUBS_LIB): force 34 $(MAKE) -C $(STUBS_LIB_DIR) lib SDKCONFIG=$(SDKCONFIG) 35 36 $(SPI_FLASH_SIM_BUILD_DIR)/$(SPI_FLASH_SIM_LIB): force 37 $(MAKE) -C $(SPI_FLASH_SIM_DIR) lib SDKCONFIG=$(SDKCONFIG) 38 39 # Create target for building this component as a library 40 CFILES := $(filter %.c, $(SOURCE_FILES)) 41 CPPFILES := $(filter %.cpp, $(SOURCE_FILES)) 42 43 CTARGET = ${2}/$(patsubst %.c,%.o,$(notdir ${1})) 44 CPPTARGET = ${2}/$(patsubst %.cpp,%.o,$(notdir ${1})) 45 46 ifndef BUILD_DIR 47 BUILD_DIR := build 48 endif 49 50 OBJ_FILES := $(addprefix $(BUILD_DIR)/, $(filter %.o, $(notdir $(SOURCE_FILES:.cpp=.o) $(SOURCE_FILES:.c=.o)))) 51 52 define COMPILE_C 53 $(call CTARGET, ${1}, $(BUILD_DIR)) : ${1} $(SDKCONFIG) 54 mkdir -p $(BUILD_DIR) 55 $(CC) $(CPPFLAGS) $(CFLAGS) -c -o $(call CTARGET, ${1}, $(BUILD_DIR)) ${1} 56 endef 57 58 define COMPILE_CPP 59 $(call CPPTARGET, ${1}, $(BUILD_DIR)) : ${1} $(SDKCONFIG) 60 mkdir -p $(BUILD_DIR) 61 $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c -o $(call CPPTARGET, ${1}, $(BUILD_DIR)) ${1} 62 endef 63 64 $(BUILD_DIR)/$(COMPONENT_LIB): $(OBJ_FILES) $(SDKCONFIG) 65 mkdir -p $(BUILD_DIR) 66 $(AR) rcs $@ $^ 67 68 clean: 69 $(MAKE) -C $(STUBS_LIB_DIR) clean 70 $(MAKE) -C $(SPI_FLASH_SIM_DIR) clean 71 rm -f $(OBJ_FILES) $(TEST_OBJ_FILES) $(TEST_PROGRAM) $(COMPONENT_LIB) partition_table.bin image.bin 72 73 lib: $(BUILD_DIR)/$(COMPONENT_LIB) 74 75 $(foreach cfile, $(CFILES), $(eval $(call COMPILE_C, $(cfile)))) 76 $(foreach cxxfile, $(CPPFILES), $(eval $(call COMPILE_CPP, $(cxxfile)))) 77 78 # Create target for building this component as a test 79 TEST_SOURCE_FILES = \ 80 test_spiffs.cpp \ 81 main.cpp \ 82 83 TEST_OBJ_FILES = $(filter %.o, $(TEST_SOURCE_FILES:.cpp=.o) $(TEST_SOURCE_FILES:.c=.o)) 84 85 $(TEST_PROGRAM): lib $(TEST_OBJ_FILES) $(SPI_FLASH_SIM_BUILD_DIR)/$(SPI_FLASH_SIM_LIB) $(STUBS_LIB_BUILD_DIR)/$(STUBS_LIB) partition_table.bin $(SDKCONFIG) 86 g++ $(LDFLAGS) $(CXXFLAGS) -o $@ $(TEST_OBJ_FILES) -L$(BUILD_DIR) -l:$(COMPONENT_LIB) -L$(SPI_FLASH_SIM_BUILD_DIR) -l:$(SPI_FLASH_SIM_LIB) -L$(STUBS_LIB_BUILD_DIR) -l:$(STUBS_LIB) 87 88 # Use spiffs source directory as the test image 89 spiffs_image: ../spiffs $(shell find ../spiffs -type d) $(shell find ../spiffs -type -f -name '*') 90 # Creation of test symlinks unfortunately causes rerun of spiffsgen.py every make invoke 91 rm -f ../spiffs/include ../spiffs/CMakeLists.txt 92 ln -s ../include ../spiffs/include 93 ln -s ../CMakeLists.txt ../spiffs/CMakeLists.txt 94 ../spiffsgen.py --follow-symlinks 2097152 ../spiffs image.bin 95 96 test: $(TEST_PROGRAM) spiffs_image 97 ./$(TEST_PROGRAM) 98 99 # Create other necessary targets 100 partition_table.bin: partition_table.csv 101 python ../../../components/partition_table/gen_esp32part.py --verify $< $@ 102 103 force: 104 105 .PHONY: all lib test clean force