Skip to content
Snippets Groups Projects
esp32.mk 5.04 KiB
Newer Older
  • Learn to ignore specific revisions
  • #
    # LWS-style images are composed like this
    #
    # [ OTA or Factory standard xpressif image ]
    # [ 32-b LE len ] [ ROMFS ]
    # [ 32-b LE len ] [ Image information JSON ]
    #
    
    
    Andy Green's avatar
    Andy Green committed
    SHELL=/bin/bash
    
    
    # check genromfs is available
    GENROMFS := $(shell command -v genromfs 2> /dev/null)
    # check xxd is available
    XXD := $(shell command -v xxd 2> /dev/null)
    
    
    Andy Green's avatar
    Andy Green committed
    ESPPORT ?= $(CONFIG_ESPTOOLPY_PORT)
    
    
    LWS_BUILD_PATH=$(PROJECT_PATH)/build
    
    jbi=$(LWS_BUILD_PATH)/json-buildinfo
    
    FAC=$(CONFIG_LWS_IS_FACTORY_APPLICATION)
    ifeq ($(FAC),)
    	FAC=0
    endif
    export FAC
    
    
    $(LWS_BUILD_PATH)/pack.img: $(APP_BIN)
    
    	if [ -z "$(GENROMFS)" ]; then \
    		echo "ERROR: genromfs is unavailable, please install or compile genromfs" ; \
    		exit 1 ; \
    	fi; \
    	if [ -z "$(XXD)" ]; then \
    		echo "ERROR: xxd is unavailable, please install or compile xxd (usually provided by vim package)" ; \
    		exit 1 ; \
    	fi; \
    
    	GNUSTAT=stat ;\
    	if [ `which gstat 2>/dev/null` ] ; then GNUSTAT=gstat ; fi ;\
    
    	genromfs -f $(LWS_BUILD_PATH)/romfs.img -d $(PROJECT_PATH)/romfs-files ; \
            RLEN=$$($$GNUSTAT -c %s $(LWS_BUILD_PATH)/romfs.img) ;\
    
            LEN=$$($$GNUSTAT -c %s $(LWS_BUILD_PATH)/$(PROJECT_NAME).bin) ;\
    
            printf "             Original length: 0x%06x (%8d)\n" $$LEN $$LEN ; \
    
            printf %02x $$(( $$RLEN % 256 )) | xxd -r -p >> $(LWS_BUILD_PATH)/$(PROJECT_NAME).bin ;\
            printf %02x $$(( ( $$RLEN / 256 ) % 256 )) | xxd -r -p >> $(LWS_BUILD_PATH)/$(PROJECT_NAME).bin ;\
            printf %02x $$(( ( $$RLEN / 65536 ) % 256 )) | xxd -r -p >> $(LWS_BUILD_PATH)/$(PROJECT_NAME).bin ;\
            printf %02x $$(( ( $$RLEN / 16777216 ) % 256 )) | xxd -r -p >> $(LWS_BUILD_PATH)/$(PROJECT_NAME).bin ;\
            cat $(LWS_BUILD_PATH)/romfs.img >> $(LWS_BUILD_PATH)/$(PROJECT_NAME).bin ; \
            LEN=$$($$GNUSTAT -c %s $(LWS_BUILD_PATH)/$(PROJECT_NAME).bin) ;\
    
    	UNIXTIME=$$(date +%s | tr -d '\n') ; \
    	echo -n -e "{\r\n \"schema\": \"lws1\",\r\n \"model\": \"$(CONFIG_LWS_MODEL_NAME)\",\r\n \"builder\": \"" > $(jbi) ;\
    	hostname | tr -d '\n' >> $(jbi) ;\
    	echo -n -e "\",\r\n \"app\": \"" >> $(jbi) ;\
    
    	echo -n $(PROJECT_NAME) >> $(jbi) ;\
    
    	echo -n -e "\",\r\n \"user\": \"" >> $(jbi) ;\
    	whoami | tr -d '\n' >>$(jbi) ;\
    	echo -n -e  "\",\r\n \"git\": \"" >> $(jbi) ;\
    	git describe --dirty --always | tr -d '\n' >> $(jbi) ;\
    	echo -n -e  "\",\r\n \"date\": \"" >> $(jbi) ;\
    	date | tr -d '\n' >> $(jbi) ;\
    	echo -n -e "\",\r\n \"unixtime\": \"" >> $(jbi) ;\
    	echo -n $$UNIXTIME >> $(jbi) ;\
    
    	echo -n -e "\",\r\n \"file\": \""$(PROJECT_NAME)-$$UNIXTIME.bin >> $(jbi) ;\
    
    	echo -n -e "\",\r\n \"factory\": \"$(FAC)" >> $(jbi) ;\
    
    	echo -n -e "\"\r\n}"  >> $(jbi) ;\
    
    	JLEN=$$($$GNUSTAT -c %s $(jbi)) ;\
    
    	printf %02x $$(( $$JLEN % 256 )) | xxd -r -p >> $(LWS_BUILD_PATH)/$(PROJECT_NAME).bin ;\
    	printf %02x $$(( ( $$JLEN / 256 ) % 256 )) | xxd -r -p >> $(LWS_BUILD_PATH)/$(PROJECT_NAME).bin ;\
    	printf %02x $$(( ( $$JLEN / 65536 ) % 256 )) | xxd -r -p >> $(LWS_BUILD_PATH)/$(PROJECT_NAME).bin ;\
    	printf %02x $$(( ( $$JLEN / 16777216 ) % 256 )) | xxd -r -p >> $(LWS_BUILD_PATH)/$(PROJECT_NAME).bin ;\
    	cat $(jbi) >> $(LWS_BUILD_PATH)/$(PROJECT_NAME).bin ;\
    	cp $(LWS_BUILD_PATH)/$(PROJECT_NAME).bin $(LWS_BUILD_PATH)/pack.img ;\
            LEN=$$($$GNUSTAT -c %s $(LWS_BUILD_PATH)/$(PROJECT_NAME).bin) ;\
    	cp $(LWS_BUILD_PATH)/$(PROJECT_NAME).bin $(LWS_BUILD_PATH)/$(PROJECT_NAME)-$$UNIXTIME.bin ;\
    
    	printf "    After ROMFS + Build info: 0x%06x (%8d)\n" $$LEN $$LEN
    
    .PHONY: manifest
    manifest:
    ifeq ($F,)
    	echo "Usage make F=<factory app dir> A=<app dir> manifest"
    	exit 1
    endif
    ifeq ($A,)
    	echo "Usage make F=<factory app dir> A=<app dir> manifest"
    	exit 1
    endif
    	echo -n -e "{\r\n\"app\": " > build/manifest.json
    	cat $(A)/build/json-buildinfo >> build/manifest.json
    	echo -n -e ", \"factory\": " >> build/manifest.json
    	cat $(F)/build/json-buildinfo >> build/manifest.json
    	echo -n -e "\r\n}\r\n" >> build/manifest.json
    
    
    all: $(LWS_BUILD_PATH)/pack.img
    
    flash: $(LWS_BUILD_PATH)/pack.img
    
    lws_flash_ota: $(LWS_BUILD_PATH)/pack.img
    
    	$(IDF_PATH)/components/esptool_py/esptool/esptool.py \
    		--chip esp32 \
    
    Andy Green's avatar
    Andy Green committed
    		--port $(ESPPORT) \
    
    		--baud $(CONFIG_ESPTOOLPY_BAUD) \
    
    Andy Green's avatar
    Andy Green committed
    		write_flash 0x120000 $(LWS_BUILD_PATH)/$(PROJECT_NAME).bin
    
    	$(IDF_PATH)/components/esptool_py/esptool/esptool.py \
    	        --chip esp32 \
    
    Andy Green's avatar
    Andy Green committed
    	        --port $(ESPPORT) \
    
    	        --baud $(CONFIG_ESPTOOLPY_BAUD) \
    
    Andy Green's avatar
    Andy Green committed
    	        erase_region 0x120000 0x2e0000
    
    
    
    export A
    export F
    .PHONY: upload
    upload: manifest
    ifeq ($F,)
    	echo "Usage make F=<factory app dir> A=<app dir> manifest"
    	exit 1
    endif
    ifeq ($A,)
    	echo "Usage make F=<factory app dir> A=<app dir> manifest"
    	exit 1
    endif
    	UPL=$(CONFIG_LWS_OTA_SERVER_UPLOAD_USER)@$(CONFIG_LWS_OTA_SERVER_FQDN):$(CONFIG_LWS_OTA_SERVER_UPLOAD_PATH)/$(CONFIG_LWS_OTA_SERVER_BASE_URL)/$(CONFIG_LWS_MODEL_NAME)/ ;\
    	AFILE=$(A)/build/$$(cat $$A/build/json-buildinfo | grep -- \"file\"\: |cut -d' ' -f3 |cut -d'"' -f2) ;\
    	echo "  Uploading $$AFILE to " $$UPL ;\
    	scp $$AFILE $$UPL ;\
    	FFILE=$(F)/build/$$(cat $$F/build/json-buildinfo | grep -- \"file\"\: |cut -d' ' -f3 |cut -d'"' -f2) ;\
    	echo "  Uploading $$FFILE" ;\
    	scp  $$FFILE $$UPL ;\
    	echo "  Uploading manifest" ;\
    	scp build/manifest.json $$UPL