source "package/exfat-utils/Config.in"
        source "package/f2fs-tools/Config.in"
        source "package/flashbench/Config.in"
+       source "package/fwup/Config.in"
        source "package/genext2fs/Config.in"
        source "package/genpart/Config.in"
        source "package/genromfs/Config.in"
 
        source "package/e2fsprogs/Config.in.host"
        source "package/e2tools/Config.in.host"
        source "package/faketime/Config.in.host"
+       source "package/fwup/Config.in.host"
        source "package/genext2fs/Config.in.host"
        source "package/genimage/Config.in.host"
        source "package/genpart/Config.in.host"
 
--- /dev/null
+From 782ffa564236b79d49a88e63da65ac01b6f2cfc1 Mon Sep 17 00:00:00 2001
+From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+Date: Sun, 12 Jun 2016 22:57:02 +0200
+Subject: [PATCH] Add missing <sys/types.h> includes
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+<sys/types.h> is needed for the definition of off_t, otherwise building
+with uClibc fails with:
+
+In file included from cfgfile.c:17:0:
+cfgfile.h:25:87: error: unknown type name ‘off_t’
+ int archive_read_all_data(struct archive *a, struct archive_entry *ae, char **buffer, off_t max_size, off_t *size_read);
+                                                                                       ^
+cfgfile.h:25:103: error: unknown type name ‘off_t’
+ int archive_read_all_data(struct archive *a, struct archive_entry *ae, char **buffer, off_t max_size, off_t *size_read);
+
+Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+---
+ src/cfgfile.h | 1 +
+ src/mmc.h     | 1 +
+ src/util.h    | 1 +
+ 3 files changed, 3 insertions(+)
+
+diff --git a/src/cfgfile.h b/src/cfgfile.h
+index 1a6ffbb..8982b1d 100644
+--- a/src/cfgfile.h
++++ b/src/cfgfile.h
+@@ -17,6 +17,7 @@
+ #ifndef CFGFILE_H
+ #define CFGFILE_H
+ 
++#include <sys/types.h>
+ #include <confuse.h>
+ 
+ struct archive;
+diff --git a/src/mmc.h b/src/mmc.h
+index 56f85eb..626570a 100644
+--- a/src/mmc.h
++++ b/src/mmc.h
+@@ -20,6 +20,7 @@
+ #include <stddef.h>
+ #include <stdio.h>
+ #include <stdint.h>
++#include <sys/types.h>
+ 
+ #define MMC_DEVICE_PATH_LEN 32
+ 
+diff --git a/src/util.h b/src/util.h
+index 83f82ec..23359c1 100644
+--- a/src/util.h
++++ b/src/util.h
+@@ -20,6 +20,7 @@
+ #include <stdbool.h>
+ #include <stdio.h>
+ #include <stdint.h>
++#include <sys/types.h>
+ 
+ struct tm;
+ 
+-- 
+2.7.4
+
 
--- /dev/null
+config BR2_PACKAGE_FWUP
+       bool "fwup"
+       depends on BR2_USE_MMU
+       depends on BR2_USE_WCHAR
+       select BR2_PACKAGE_LIBARCHIVE
+       # required by libarchive to include zip compression
+       select BR2_PACKAGE_ZLIB
+       select BR2_PACKAGE_LIBCONFUSE
+       select BR2_PACKAGE_LIBSODIUM
+       help
+         Fwup is a scriptable embedded Linux firmware update creator
+         and runner.
+
+         https://github.com/fhunleth/fwup
+
+comment "fwup needs a toolchain w/ wchar"
+       depends on BR2_USE_MMU
+       depends on !BR2_USE_WCHAR
 
--- /dev/null
+config BR2_PACKAGE_HOST_FWUP
+       bool "host fwup"
+       help
+         Fwup is a scriptable embedded Linux firmware update creator
+         and runner.
+
+         https://github.com/fhunleth/fwup
 
--- /dev/null
+#############################################################
+#
+# fwup
+#
+#############################################################
+
+FWUP_VERSION = v0.7.0
+FWUP_SITE = $(call github,fhunleth,fwup,$(FWUP_VERSION))
+FWUP_LICENSE = Apache-2.0
+FWUP_LICENSE_FILES = LICENSE
+FWUP_DEPENDENCIES = libconfuse libarchive libsodium
+FWUP_AUTORECONF = YES
+
+define FWUP_ADD_M4_DIR
+       mkdir -p $(@D)/m4
+endef
+
+FWUP_POST_PATCH_HOOKS += FWUP_ADD_M4_DIR
+HOST_FWUP_POST_PATCH_HOOKS += FWUP_ADD_M4_DIR
+
+$(eval $(autotools-package))
+$(eval $(host-autotools-package))