xref: /aosp_15_r20/external/libwebsockets/scripts/esp32.mk (revision 1c60b9aca93fdbc9b5f19b2d2194c91294b22281)
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