|
| 1 | +OBJECT_DIRECTORY := obj |
| 2 | +BINARY_DIRECTORY := bin |
| 3 | +OUTPUT_BINARY := $(BINARY_DIRECTORY)/host_tests |
| 4 | +CORE_PATH := ../../cores/esp8266 |
| 5 | + |
| 6 | +# I wasn't able to build with clang when -coverage flag is enabled, forcing GCC on OS X |
| 7 | +ifeq ($(shell uname -s),Darwin) |
| 8 | +CC := gcc |
| 9 | +CXX := g++ |
| 10 | +endif |
| 11 | +GCOV ?= gcov |
| 12 | + |
| 13 | +CORE_CPP_FILES := $(addprefix $(CORE_PATH)/,\ |
| 14 | + StreamString.cpp \ |
| 15 | + Stream.cpp \ |
| 16 | + WString.cpp \ |
| 17 | + Print.cpp \ |
| 18 | + FS.cpp \ |
| 19 | + spiffs_api.cpp \ |
| 20 | +) |
| 21 | + |
| 22 | +CORE_C_FILES := $(addprefix $(CORE_PATH)/,\ |
| 23 | + core_esp8266_noniso.c \ |
| 24 | + spiffs/spiffs_cache.c \ |
| 25 | + spiffs/spiffs_check.c \ |
| 26 | + spiffs/spiffs_gc.c \ |
| 27 | + spiffs/spiffs_hydrogen.c \ |
| 28 | + spiffs/spiffs_nucleus.c \ |
| 29 | +) |
| 30 | + |
| 31 | +MOCK_CPP_FILES := $(addprefix common/,\ |
| 32 | + Arduino.cpp \ |
| 33 | + spiffs_mock.cpp \ |
| 34 | + WMath.cpp \ |
| 35 | +) |
| 36 | + |
| 37 | +INC_PATHS += $(addprefix -I, \ |
| 38 | + common \ |
| 39 | + $(CORE_PATH) \ |
| 40 | +) |
| 41 | + |
| 42 | +TEST_CPP_FILES := \ |
| 43 | + fs/test_fs.cpp \ |
| 44 | + |
| 45 | +CXXFLAGS += -std=c++11 -Wall -coverage -O0 |
| 46 | +CFLAGS += -std=c99 -Wall -coverage -O0 |
| 47 | +LDFLAGS += -coverage -O0 |
| 48 | + |
| 49 | +remduplicates = $(strip $(if $1,$(firstword $1) $(call remduplicates,$(filter-out $(firstword $1),$1)))) |
| 50 | + |
| 51 | +C_SOURCE_FILES = $(CORE_C_FILES) |
| 52 | +CPP_SOURCE_FILES = $(MOCK_CPP_FILES) $(CORE_CPP_FILES) $(TEST_CPP_FILES) |
| 53 | +C_OBJECTS = $(C_SOURCE_FILES:.c=.c.o) |
| 54 | + |
| 55 | +CPP_OBJECTS = $(CPP_SOURCE_FILES:.cpp=.cpp.o) |
| 56 | + |
| 57 | +OBJECTS = $(C_OBJECTS) $(CPP_OBJECTS) |
| 58 | +COVERAGE_FILES = $(OBJECTS:.o=.gc*) |
| 59 | + |
| 60 | +all: build-info $(OUTPUT_BINARY) test gcov |
| 61 | + |
| 62 | +test: $(OUTPUT_BINARY) |
| 63 | + $(OUTPUT_BINARY) |
| 64 | + |
| 65 | +clean: clean-objects clean-coverage |
| 66 | + rm -rf $(BINARY_DIRECTORY) |
| 67 | + |
| 68 | +clean-objects: |
| 69 | + rm -rf $(OBJECTS) |
| 70 | + |
| 71 | +clean-coverage: |
| 72 | + rm -rf $(COVERAGE_FILES) *.gcov |
| 73 | + |
| 74 | +gcov: test |
| 75 | + find $(CORE_PATH) -name "*.gcno" -exec $(GCOV) -r -pb {} + |
| 76 | + |
| 77 | +build-info: |
| 78 | + echo "-------- build tools info --------" |
| 79 | + echo "CC: " $(CC) |
| 80 | + $(CC) -v |
| 81 | + echo "CXX: " $(CXX) |
| 82 | + $(CXX) -v |
| 83 | + echo "GCOV: " $(GCOV) |
| 84 | + $(GCOV) -v |
| 85 | + echo "----------------------------------" |
| 86 | + |
| 87 | +$(BINARY_DIRECTORY): |
| 88 | + mkdir -p $@ |
| 89 | + |
| 90 | +$(C_OBJECTS): %.c.o: %.c |
| 91 | + $(CC) $(CFLAGS) $(INC_PATHS) -c -o $@ $< |
| 92 | + |
| 93 | +$(CPP_OBJECTS): %.cpp.o: %.cpp |
| 94 | + $(CXX) $(CXXFLAGS) $(INC_PATHS) -c -o $@ $< |
| 95 | + |
| 96 | +$(OUTPUT_BINARY): $(BINARY_DIRECTORY) $(OBJECTS) |
| 97 | + $(CXX) $(LDFLAGS) $(OBJECTS) $(LIBS) -o $(OUTPUT_BINARY) |
0 commit comments