1d4afb5ceSopenharmony_ci# 2d4afb5ceSopenharmony_ci# LWS-style images are composed like this 3d4afb5ceSopenharmony_ci# 4d4afb5ceSopenharmony_ci# [ OTA or Factory standard xpressif image ] 5d4afb5ceSopenharmony_ci# [ 32-b LE len ] [ ROMFS ] 6d4afb5ceSopenharmony_ci# [ 32-b LE len ] [ Image information JSON ] 7d4afb5ceSopenharmony_ci# 8d4afb5ceSopenharmony_ci 9d4afb5ceSopenharmony_ciSHELL=/bin/bash 10d4afb5ceSopenharmony_ci 11d4afb5ceSopenharmony_ci# check genromfs is available 12d4afb5ceSopenharmony_ciGENROMFS := $(shell command -v genromfs 2> /dev/null) 13d4afb5ceSopenharmony_ci# check xxd is available 14d4afb5ceSopenharmony_ciXXD := $(shell command -v xxd 2> /dev/null) 15d4afb5ceSopenharmony_ci 16d4afb5ceSopenharmony_ciESPPORT ?= $(CONFIG_ESPTOOLPY_PORT) 17d4afb5ceSopenharmony_ci 18d4afb5ceSopenharmony_ciLWS_BUILD_PATH=$(PROJECT_PATH)/build 19d4afb5ceSopenharmony_ci 20d4afb5ceSopenharmony_cijbi=$(LWS_BUILD_PATH)/json-buildinfo 21d4afb5ceSopenharmony_ci 22d4afb5ceSopenharmony_ciFAC=$(CONFIG_LWS_IS_FACTORY_APPLICATION) 23d4afb5ceSopenharmony_ciifeq ($(FAC),) 24d4afb5ceSopenharmony_ci FAC=0 25d4afb5ceSopenharmony_ciendif 26d4afb5ceSopenharmony_ciexport FAC 27d4afb5ceSopenharmony_ci 28d4afb5ceSopenharmony_ci$(LWS_BUILD_PATH)/pack.img: $(APP_BIN) 29d4afb5ceSopenharmony_ci if [ -z "$(GENROMFS)" ]; then \ 30d4afb5ceSopenharmony_ci echo "ERROR: genromfs is unavailable, please install or compile genromfs" ; \ 31d4afb5ceSopenharmony_ci exit 1 ; \ 32d4afb5ceSopenharmony_ci fi; \ 33d4afb5ceSopenharmony_ci if [ -z "$(XXD)" ]; then \ 34d4afb5ceSopenharmony_ci echo "ERROR: xxd is unavailable, please install or compile xxd (usually provided by vim package)" ; \ 35d4afb5ceSopenharmony_ci exit 1 ; \ 36d4afb5ceSopenharmony_ci fi; \ 37d4afb5ceSopenharmony_ci GNUSTAT=stat ;\ 38d4afb5ceSopenharmony_ci if [ `which gstat 2>/dev/null` ] ; then GNUSTAT=gstat ; fi ;\ 39d4afb5ceSopenharmony_ci genromfs -f $(LWS_BUILD_PATH)/romfs.img -d $(PROJECT_PATH)/romfs-files ; \ 40d4afb5ceSopenharmony_ci RLEN=$$($$GNUSTAT -c %s $(LWS_BUILD_PATH)/romfs.img) ;\ 41d4afb5ceSopenharmony_ci LEN=$$($$GNUSTAT -c %s $(LWS_BUILD_PATH)/$(PROJECT_NAME).bin) ;\ 42d4afb5ceSopenharmony_ci printf " Original length: 0x%06x (%8d)\n" $$LEN $$LEN ; \ 43d4afb5ceSopenharmony_ci printf %02x $$(( $$RLEN % 256 )) | xxd -r -p >> $(LWS_BUILD_PATH)/$(PROJECT_NAME).bin ;\ 44d4afb5ceSopenharmony_ci printf %02x $$(( ( $$RLEN / 256 ) % 256 )) | xxd -r -p >> $(LWS_BUILD_PATH)/$(PROJECT_NAME).bin ;\ 45d4afb5ceSopenharmony_ci printf %02x $$(( ( $$RLEN / 65536 ) % 256 )) | xxd -r -p >> $(LWS_BUILD_PATH)/$(PROJECT_NAME).bin ;\ 46d4afb5ceSopenharmony_ci printf %02x $$(( ( $$RLEN / 16777216 ) % 256 )) | xxd -r -p >> $(LWS_BUILD_PATH)/$(PROJECT_NAME).bin ;\ 47d4afb5ceSopenharmony_ci cat $(LWS_BUILD_PATH)/romfs.img >> $(LWS_BUILD_PATH)/$(PROJECT_NAME).bin ; \ 48d4afb5ceSopenharmony_ci LEN=$$($$GNUSTAT -c %s $(LWS_BUILD_PATH)/$(PROJECT_NAME).bin) ;\ 49d4afb5ceSopenharmony_ci UNIXTIME=$$(date +%s | tr -d '\n') ; \ 50d4afb5ceSopenharmony_ci echo -n -e "{\r\n \"schema\": \"lws1\",\r\n \"model\": \"$(CONFIG_LWS_MODEL_NAME)\",\r\n \"builder\": \"" > $(jbi) ;\ 51d4afb5ceSopenharmony_ci hostname | tr -d '\n' >> $(jbi) ;\ 52d4afb5ceSopenharmony_ci echo -n -e "\",\r\n \"app\": \"" >> $(jbi) ;\ 53d4afb5ceSopenharmony_ci echo -n $(PROJECT_NAME) >> $(jbi) ;\ 54d4afb5ceSopenharmony_ci echo -n -e "\",\r\n \"user\": \"" >> $(jbi) ;\ 55d4afb5ceSopenharmony_ci whoami | tr -d '\n' >>$(jbi) ;\ 56d4afb5ceSopenharmony_ci echo -n -e "\",\r\n \"git\": \"" >> $(jbi) ;\ 57d4afb5ceSopenharmony_ci git describe --dirty --always | tr -d '\n' >> $(jbi) ;\ 58d4afb5ceSopenharmony_ci echo -n -e "\",\r\n \"date\": \"" >> $(jbi) ;\ 59d4afb5ceSopenharmony_ci date | tr -d '\n' >> $(jbi) ;\ 60d4afb5ceSopenharmony_ci echo -n -e "\",\r\n \"unixtime\": \"" >> $(jbi) ;\ 61d4afb5ceSopenharmony_ci echo -n $$UNIXTIME >> $(jbi) ;\ 62d4afb5ceSopenharmony_ci echo -n -e "\",\r\n \"file\": \""$(PROJECT_NAME)-$$UNIXTIME.bin >> $(jbi) ;\ 63d4afb5ceSopenharmony_ci echo -n -e "\",\r\n \"factory\": \"$(FAC)" >> $(jbi) ;\ 64d4afb5ceSopenharmony_ci echo -n -e "\"\r\n}" >> $(jbi) ;\ 65d4afb5ceSopenharmony_ci JLEN=$$($$GNUSTAT -c %s $(jbi)) ;\ 66d4afb5ceSopenharmony_ci printf %02x $$(( $$JLEN % 256 )) | xxd -r -p >> $(LWS_BUILD_PATH)/$(PROJECT_NAME).bin ;\ 67d4afb5ceSopenharmony_ci printf %02x $$(( ( $$JLEN / 256 ) % 256 )) | xxd -r -p >> $(LWS_BUILD_PATH)/$(PROJECT_NAME).bin ;\ 68d4afb5ceSopenharmony_ci printf %02x $$(( ( $$JLEN / 65536 ) % 256 )) | xxd -r -p >> $(LWS_BUILD_PATH)/$(PROJECT_NAME).bin ;\ 69d4afb5ceSopenharmony_ci printf %02x $$(( ( $$JLEN / 16777216 ) % 256 )) | xxd -r -p >> $(LWS_BUILD_PATH)/$(PROJECT_NAME).bin ;\ 70d4afb5ceSopenharmony_ci cat $(jbi) >> $(LWS_BUILD_PATH)/$(PROJECT_NAME).bin ;\ 71d4afb5ceSopenharmony_ci cp $(LWS_BUILD_PATH)/$(PROJECT_NAME).bin $(LWS_BUILD_PATH)/pack.img ;\ 72d4afb5ceSopenharmony_ci LEN=$$($$GNUSTAT -c %s $(LWS_BUILD_PATH)/$(PROJECT_NAME).bin) ;\ 73d4afb5ceSopenharmony_ci cp $(LWS_BUILD_PATH)/$(PROJECT_NAME).bin $(LWS_BUILD_PATH)/$(PROJECT_NAME)-$$UNIXTIME.bin ;\ 74d4afb5ceSopenharmony_ci printf " After ROMFS + Build info: 0x%06x (%8d)\n" $$LEN $$LEN 75d4afb5ceSopenharmony_ci 76d4afb5ceSopenharmony_ci.PHONY: manifest 77d4afb5ceSopenharmony_cimanifest: 78d4afb5ceSopenharmony_ciifeq ($F,) 79d4afb5ceSopenharmony_ci echo "Usage make F=<factory app dir> A=<app dir> manifest" 80d4afb5ceSopenharmony_ci exit 1 81d4afb5ceSopenharmony_ciendif 82d4afb5ceSopenharmony_ciifeq ($A,) 83d4afb5ceSopenharmony_ci echo "Usage make F=<factory app dir> A=<app dir> manifest" 84d4afb5ceSopenharmony_ci exit 1 85d4afb5ceSopenharmony_ciendif 86d4afb5ceSopenharmony_ci echo -n -e "{\r\n\"app\": " > build/manifest.json 87d4afb5ceSopenharmony_ci cat $(A)/build/json-buildinfo >> build/manifest.json 88d4afb5ceSopenharmony_ci echo -n -e ", \"factory\": " >> build/manifest.json 89d4afb5ceSopenharmony_ci cat $(F)/build/json-buildinfo >> build/manifest.json 90d4afb5ceSopenharmony_ci echo -n -e "\r\n}\r\n" >> build/manifest.json 91d4afb5ceSopenharmony_ci 92d4afb5ceSopenharmony_ciall: $(LWS_BUILD_PATH)/pack.img 93d4afb5ceSopenharmony_ci 94d4afb5ceSopenharmony_ciflash: $(LWS_BUILD_PATH)/pack.img 95d4afb5ceSopenharmony_ci 96d4afb5ceSopenharmony_cilws_flash_ota: $(LWS_BUILD_PATH)/pack.img 97d4afb5ceSopenharmony_ci $(IDF_PATH)/components/esptool_py/esptool/esptool.py \ 98d4afb5ceSopenharmony_ci --chip esp32 \ 99d4afb5ceSopenharmony_ci --port $(ESPPORT) \ 100d4afb5ceSopenharmony_ci --baud $(CONFIG_ESPTOOLPY_BAUD) \ 101d4afb5ceSopenharmony_ci write_flash 0x120000 $(LWS_BUILD_PATH)/$(PROJECT_NAME).bin 102d4afb5ceSopenharmony_ci 103d4afb5ceSopenharmony_cilws_erase_ota: 104d4afb5ceSopenharmony_ci $(IDF_PATH)/components/esptool_py/esptool/esptool.py \ 105d4afb5ceSopenharmony_ci --chip esp32 \ 106d4afb5ceSopenharmony_ci --port $(ESPPORT) \ 107d4afb5ceSopenharmony_ci --baud $(CONFIG_ESPTOOLPY_BAUD) \ 108d4afb5ceSopenharmony_ci erase_region 0x120000 0x2e0000 109d4afb5ceSopenharmony_ci 110d4afb5ceSopenharmony_ci 111d4afb5ceSopenharmony_ciexport A 112d4afb5ceSopenharmony_ciexport F 113d4afb5ceSopenharmony_ci.PHONY: upload 114d4afb5ceSopenharmony_ciupload: manifest 115d4afb5ceSopenharmony_ciifeq ($F,) 116d4afb5ceSopenharmony_ci echo "Usage make F=<factory app dir> A=<app dir> manifest" 117d4afb5ceSopenharmony_ci exit 1 118d4afb5ceSopenharmony_ciendif 119d4afb5ceSopenharmony_ciifeq ($A,) 120d4afb5ceSopenharmony_ci echo "Usage make F=<factory app dir> A=<app dir> manifest" 121d4afb5ceSopenharmony_ci exit 1 122d4afb5ceSopenharmony_ciendif 123d4afb5ceSopenharmony_ci 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)/ ;\ 124d4afb5ceSopenharmony_ci AFILE=$(A)/build/$$(cat $$A/build/json-buildinfo | grep -- \"file\"\: |cut -d' ' -f3 |cut -d'"' -f2) ;\ 125d4afb5ceSopenharmony_ci echo " Uploading $$AFILE to " $$UPL ;\ 126d4afb5ceSopenharmony_ci scp $$AFILE $$UPL ;\ 127d4afb5ceSopenharmony_ci FFILE=$(F)/build/$$(cat $$F/build/json-buildinfo | grep -- \"file\"\: |cut -d' ' -f3 |cut -d'"' -f2) ;\ 128d4afb5ceSopenharmony_ci echo " Uploading $$FFILE" ;\ 129d4afb5ceSopenharmony_ci scp $$FFILE $$UPL ;\ 130d4afb5ceSopenharmony_ci echo " Uploading manifest" ;\ 131d4afb5ceSopenharmony_ci scp build/manifest.json $$UPL 132