Makefile 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. ifndef COMPONENT
  2. COMPONENT := fatfs
  3. endif
  4. COMPONENT_LIB := lib$(COMPONENT).a
  5. TEST_PROGRAM := test_$(COMPONENT)
  6. STUBS_LIB_DIR := ../../../components/spi_flash/sim/stubs
  7. STUBS_LIB_BUILD_DIR := $(STUBS_LIB_DIR)/build
  8. STUBS_LIB := libstubs.a
  9. SPI_FLASH_SIM_DIR := ../../../components/spi_flash/sim
  10. SPI_FLASH_SIM_BUILD_DIR := $(SPI_FLASH_SIM_DIR)/build
  11. SPI_FLASH_SIM_LIB := libspi_flash.a
  12. WEAR_LEVELLING_DIR := ../../../components/wear_levelling/test_wl_host
  13. WEAR_LEVELLING_BUILD_DIR := $(WEAR_LEVELLING_DIR)/build
  14. WEAR_LEVELLING_LIB := libwl.a
  15. include Makefile.files
  16. all: test
  17. ifndef SDKCONFIG
  18. SDKCONFIG_DIR := $(dir $(realpath sdkconfig/sdkconfig.h))
  19. SDKCONFIG := $(SDKCONFIG_DIR)sdkconfig.h
  20. else
  21. SDKCONFIG_DIR := $(dir $(realpath $(SDKCONFIG)))
  22. endif
  23. INCLUDE_FLAGS := $(addprefix -I, $(INCLUDE_DIRS) $(SDKCONFIG_DIR) ../../../tools/catch)
  24. CPPFLAGS += $(INCLUDE_FLAGS) -g -m32
  25. CXXFLAGS += $(INCLUDE_FLAGS) -std=c++11 -g -m32
  26. # Build libraries that this component is dependent on
  27. $(STUBS_LIB_BUILD_DIR)/$(STUBS_LIB): force
  28. $(MAKE) -C $(STUBS_LIB_DIR) lib SDKCONFIG=$(SDKCONFIG)
  29. $(SPI_FLASH_SIM_BUILD_DIR)/$(SPI_FLASH_SIM_LIB): force
  30. $(MAKE) -C $(SPI_FLASH_SIM_DIR) lib SDKCONFIG=$(SDKCONFIG)
  31. $(WEAR_LEVELLING_BUILD_DIR)/$(WEAR_LEVELLING_LIB): force
  32. $(MAKE) -C $(WEAR_LEVELLING_DIR) lib SDKCONFIG=$(SDKCONFIG)
  33. # Create target for building this component as a library
  34. CFILES := $(filter %.c, $(SOURCE_FILES))
  35. CPPFILES := $(filter %.cpp, $(SOURCE_FILES))
  36. CTARGET = ${2}/$(patsubst %.c,%.o,$(notdir ${1}))
  37. CPPTARGET = ${2}/$(patsubst %.cpp,%.o,$(notdir ${1}))
  38. ifndef BUILD_DIR
  39. BUILD_DIR := build
  40. endif
  41. OBJ_FILES := $(addprefix $(BUILD_DIR)/, $(filter %.o, $(notdir $(SOURCE_FILES:.cpp=.o) $(SOURCE_FILES:.c=.o))))
  42. define COMPILE_C
  43. $(call CTARGET, ${1}, $(BUILD_DIR)) : ${1} $(SDKCONFIG)
  44. mkdir -p $(BUILD_DIR)
  45. $(CC) $(CPPFLAGS) $(CFLAGS) -c -o $(call CTARGET, ${1}, $(BUILD_DIR)) ${1}
  46. endef
  47. define COMPILE_CPP
  48. $(call CPPTARGET, ${1}, $(BUILD_DIR)) : ${1} $(SDKCONFIG)
  49. mkdir -p $(BUILD_DIR)
  50. $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c -o $(call CPPTARGET, ${1}, $(BUILD_DIR)) ${1}
  51. endef
  52. $(BUILD_DIR)/$(COMPONENT_LIB): $(OBJ_FILES) $(SDKCONFIG)
  53. mkdir -p $(BUILD_DIR)
  54. $(AR) rcs $@ $^
  55. lib: $(BUILD_DIR)/$(COMPONENT_LIB)
  56. $(foreach cfile, $(CFILES), $(eval $(call COMPILE_C, $(cfile))))
  57. $(foreach cxxfile, $(CPPFILES), $(eval $(call COMPILE_CPP, $(cxxfile))))
  58. # Create target for building this component as a test
  59. TEST_SOURCE_FILES = \
  60. test_fatfs.cpp \
  61. main.cpp \
  62. TEST_OBJ_FILES = $(filter %.o, $(TEST_SOURCE_FILES:.cpp=.o) $(TEST_SOURCE_FILES:.c=.o))
  63. $(TEST_PROGRAM): lib $(TEST_OBJ_FILES) $(WEAR_LEVELLING_BUILD_DIR)/$(WEAR_LEVELLING_LIB) $(SPI_FLASH_SIM_BUILD_DIR)/$(SPI_FLASH_SIM_LIB) $(STUBS_LIB_BUILD_DIR)/$(STUBS_LIB) partition_table.bin $(SDKCONFIG)
  64. g++ $(LDFLAGS) $(CXXFLAGS) -o $@ $(TEST_OBJ_FILES) -L$(BUILD_DIR) -l:$(COMPONENT_LIB) -L$(WEAR_LEVELLING_BUILD_DIR) -l:$(WEAR_LEVELLING_LIB) -L$(SPI_FLASH_SIM_BUILD_DIR) -l:$(SPI_FLASH_SIM_LIB) -L$(STUBS_LIB_BUILD_DIR) -l:$(STUBS_LIB)
  65. test: $(TEST_PROGRAM)
  66. ./$(TEST_PROGRAM)
  67. # Create other necessary targets
  68. partition_table.bin: partition_table.csv
  69. python ../../../components/partition_table/gen_esp32part.py --verify $< $@
  70. force:
  71. # Create target to cleanup files
  72. clean:
  73. $(MAKE) -C $(STUBS_LIB_DIR) clean
  74. $(MAKE) -C $(SPI_FLASH_SIM_DIR) clean
  75. $(MAKE) -C $(WEAR_LEVELLING_DIR) clean
  76. rm -f $(OBJ_FILES) $(TEST_OBJ_FILES) $(TEST_PROGRAM) $(COMPONENT_LIB) partition_table.bin
  77. .PHONY: all lib test clean force