+
+define Build/tplink-v1-header
+ $(STAGING_DIR_HOST)/bin/mktplinkfw \
+ -c -H $(TPLINK_HWID) -W $(TPLINK_HWREV) -L $(KERNEL_LOADADDR) \
+ -E $(if $(KERNEL_ENTRY),$(KERNEL_ENTRY),$(KERNEL_LOADADDR)) \
+ -m $(TPLINK_HEADER_VERSION) -N "$(VERSION_DIST)" -V $(REVISION) \
+ -k $@ -o $@.new $(1)
+ @mv $@.new $@
+endef
+
+define Build/tplink-v2-header
+ $(STAGING_DIR_HOST)/bin/mktplinkfw2 \
+ -c -H $(TPLINK_HWID) -W $(TPLINK_HWREV) -L $(KERNEL_LOADADDR) \
+ -E $(if $(KERNEL_ENTRY),$(KERNEL_ENTRY),$(KERNEL_LOADADDR)) \
+ -w $(TPLINK_HWREVADD) -F "$(TPLINK_FLASHLAYOUT)" \
+ -T $(TPLINK_HVERSION) -V "ver. 2.0" \
+ -k $@ -o $@.new $(1)
+ @mv $@.new $@
+endef
+
+define Build/tplink-v2-image
+ $(STAGING_DIR_HOST)/bin/mktplinkfw2 \
+ -H $(TPLINK_HWID) -W $(TPLINK_HWREV) \
+ -w $(TPLINK_HWREVADD) -F "$(TPLINK_FLASHLAYOUT)" \
+ -T $(TPLINK_HVERSION) -V "ver. 2.0" -a 0x4 -j \
+ -k $(IMAGE_KERNEL) -r $(IMAGE_ROOTFS) -o $@.new $(1)
+ cat $@.new >> $@
+ rm -rf $@.new
+endef
+
+json_quote=$(subst ','\'',$(subst ",\",$(1)))
+#")')
+metadata_devices=$(if $(1),$(subst "$(space)","$(comma)",$(strip $(foreach v,$(1),"$(call json_quote,$(v))"))))
+metadata_json = \
+ '{ $(if $(IMAGE_METADATA),$(IMAGE_METADATA)$(comma)) \
+ "supported_devices":[$(call metadata_devices,$(1))], \
+ "version": { \
+ "dist": "$(call json_quote,$(VERSION_DIST))", \
+ "version": "$(call json_quote,$(VERSION_NUMBER))", \
+ "revision": "$(call json_quote,$(REVISION))", \
+ "board": "$(call json_quote,$(BOARD))" \
+ } \
+ }'
+
+define Build/append-metadata
+ $(if $(SUPPORTED_DEVICES),echo $(call metadata_json,$(SUPPORTED_DEVICES)) | fwtool -I - $@)
+endef
+
+define Build/kernel2minor
+ kernel2minor -k $@ -r $@.new $(1)
+ mv $@.new $@
+endef