# Component makefile for extras/libesphttpd

INC_DIRS += $(libesphttpd_ROOT)/libesphttpd/include $(libesphttpd_ROOT)/libesphttpd/espfs $(libesphttpd_ROOT)/libesphttpd/lib/heatshrink

LIBESPHTTPD_MAX_CONNECTIONS ?= 4
LIBESPHTTPD_STACKSIZE ?= 2048
LIBESPHTTPD_OTA_TAGNAME ?= generic
LIBESPHTTPD_HTML_DIR ?= html
LIBESPHTTPD_HTML_FILES ?= $(call rwildcard,$(LIBESPHTTPD_HTML_DIR)/,*)

RBOOT_OTA ?= 1
ESP_IP ?= 192.168.4.1

# args for passing into compile rule generation
libesphttpd_SRC_DIR = $(libesphttpd_ROOT)/libesphttpd/core $(libesphttpd_ROOT)/libesphttpd/espfs $(libesphttpd_ROOT)/libesphttpd/util
libesphttpd_CFLAGS += -DFREERTOS -DUSE_OPEN_SDK -DHTTPD_MAX_CONNECTIONS=$(LIBESPHTTPD_MAX_CONNECTIONS) -DHTTPD_STACKSIZE=$(LIBESPHTTPD_STACKSIZE) -DESPFS_HEATSHRINK -D__ets__ -DRBOOT_OTA=1 -std=gnu99

$(eval $(call component_compile_rules,libesphttpd))

rwildcard = $(wildcard $1$2) $(foreach d,$(wildcard $1*),$(call rwildcard,$d/,$2))

LIBESPHTTPD_MKESPFSIMAGE_DIR = $(BUILD_DIR)mkespfsimage

LIBESPHTTPD_MKESPFS = $(LIBESPHTTPD_MKESPFSIMAGE_DIR)/mkespfsimage
LIBESPHTTPD_HTML_TINY_DIR = $(BUILD_DIR)html
LIBESPHTTPD_HTML_ESPFS = $(BUILD_DIR)web.espfs.bin
LIBESPHTTPD_HTML_ESPFS_PATH = $(PROGRAM_REAL_ROOT)/$(LIBESPHTTPD_HTML_ESPFS)
LIBESPHTTPD_HTML_ESPFS_OBJ = $(BUILD_DIR)web.espfs.o

CROSS_BINARY_ARCH ?= xtensa
CROSS_OUTPUT_TARGET ?= elf32-xtensa-le

LIBESPHTTPD_HTML_TINY ?= no

CURL = curl
LIBESPHTTPD_CURL_OPTS = --connect-timeout 3 --max-time 60 -s

$(LIBESPHTTPD_MKESPFSIMAGE_DIR):
	$(Q)mkdir -p $(LIBESPHTTPD_MKESPFSIMAGE_DIR)

$(PROGRAM_REAL_ROOT)/$(LIBESPHTTPD_MKESPFS): $(LIBESPHTTPD_MKESPFSIMAGE_DIR)
	make -C $(libesphttpd_ROOT)/libesphttpd/espfs/mkespfsimage CC=gcc GZIP_COMPRESSION=yes USE_HEATSHRINK=yes BUILD_DIR=$(PROGRAM_REAL_ROOT)/$(BUILD_DIR)

$(LIBESPHTTPD_HTML_ESPFS): $(PROGRAM_REAL_ROOT)/$(LIBESPHTTPD_MKESPFS) $(LIBESPHTTPD_HTML_FILES)
	cd $(LIBESPHTTPD_HTML_DIR) && find $(patsubst $(LIBESPHTTPD_HTML_DIR)/%,%,$(LIBESPHTTPD_HTML_FILES)) | $< > $(LIBESPHTTPD_HTML_ESPFS_PATH) || rm -f $(LIBESPHTTPD_HTML_ESPFS_PATH)

$(LIBESPHTTPD_HTML_ESPFS_OBJ): $(LIBESPHTTPD_HTML_ESPFS)
	$(Q)$(OBJCOPY) -I binary -O $(CROSS_OUTPUT_TARGET) -B $(CROSS_BINARY_ARCH) --rename-section .data=.irom.espfs $^ $@

$(BUILD_DIR)libesphttpd.a: $(LIBESPHTTPD_HTML_ESPFS_OBJ)

htmlfs: $(LIBESPHTTPD_HTML_ESPFS_OBJ)

$(libesphttpd_ROOT)/libesphttpd/mkupgimg/mkupgimg:
	make -C $(libesphttpd_ROOT)/libesphttpd/mkupgimg CC=gcc RBOOT_OTA=$(RBOOT_OTA)

$(FIRMWARE_DIR)ota_$(PROGRAM).bin: $(FW_FILE) $(libesphttpd_ROOT)/libesphttpd/mkupgimg/mkupgimg
	$(libesphttpd_ROOT)/libesphttpd/mkupgimg/mkupgimg $(FW_FILE) "$(LIBESPHTTPD_OTA_TAGNAME)" $(FIRMWARE_DIR)ota_$(PROGRAM).bin

ota: $(FIRMWARE_DIR)ota_$(PROGRAM).bin $(libesphttpd_ROOT)/libesphttpd/mkupgimg/mkupgimg

webflash: $(FIRMWARE_DIR)ota_$(PROGRAM).bin
	$(CURL) $(LIBESPHTTPD_CURL_OPTS) --data-binary "@$(FIRMWARE_DIR)ota_$(PROGRAM).bin" http://$(ESP_IP)/flash/upload && $(CURL) $(LIBESPHTTPD_CURL_OPTS) http://$(ESP_IP)/flash/reboot