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