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