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