diff --git a/DEVELOPERS b/DEVELOPERS
index ac702d8d0f..53795ba67c 100644
--- a/DEVELOPERS
+++ b/DEVELOPERS
@@ -361,6 +361,7 @@ F:	package/libcec/
 F:	package/libcodec2/
 F:	package/libcrossguid/
 F:	package/libdcadec/
+F:	package/libdeflate/
 F:	package/libdrm/
 F:	package/libdvbcsa/
 F:	package/libdvdcss/
diff --git a/package/Config.in b/package/Config.in
index e4a0f35cb8..268549c4a1 100644
--- a/package/Config.in
+++ b/package/Config.in
@@ -1376,6 +1376,7 @@ endmenu
 
 menu "Compression and decompression"
 	source "package/libarchive/Config.in"
+	source "package/libdeflate/Config.in"
 	source "package/libmspack/Config.in"
 	source "package/libsquish/Config.in"
 	source "package/libzip/Config.in"
diff --git a/package/libdeflate/0001-Don-t-use-ARM-CRC32-intrinsics-when-affected.patch b/package/libdeflate/0001-Don-t-use-ARM-CRC32-intrinsics-when-affected.patch
new file mode 100644
index 0000000000..63832810e9
--- /dev/null
+++ b/package/libdeflate/0001-Don-t-use-ARM-CRC32-intrinsics-when-affected.patch
@@ -0,0 +1,66 @@
+From d045a4933585fceef38d235727c49d9eac61cd61 Mon Sep 17 00:00:00 2001
+From: Eric Biggers <ebiggers3@gmail.com>
+Date: Tue, 8 Feb 2022 00:22:00 -0800
+Subject: [PATCH] Don't use ARM CRC32 intrinsics when affected by gcc bug
+ 104439
+
+The following build error was reported at
+https://github.com/ebiggers/libdeflate/pull/163:
+
+    /tmp/ccAwbDTP.s:140: Error: selected processor does not support crc32b r0,r0,r3' in ARM mode
+    [followed by lots of similar errors]
+
+This is caused by https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104439, a
+gcc bug that has been fixed.  To work around this, disable building
+crc32_arm() as dynamically-dispatched code on the affected gcc versions.
+
+Downloaded from upstream commit
+https://github.com/ebiggers/libdeflate/commit/d045a4933585fceef38d235727c49d9eac61cd61
+
+Signed-off-by: Bernd Kuhls <bernd.kuhls@t-online.de>
+---
+ common/compiler_gcc.h | 29 ++++++++++++++++++++++-------
+ 1 file changed, 22 insertions(+), 7 deletions(-)
+
+diff --git a/common/compiler_gcc.h b/common/compiler_gcc.h
+index 2a45b05..8ea3ff8 100644
+--- a/common/compiler_gcc.h
++++ b/common/compiler_gcc.h
+@@ -122,15 +122,30 @@
+ #    endif
+ 
+      /*
+-      * Determine whether CRC32 intrinsics are supported.
++      * Determine whether ARM CRC32 intrinsics are supported.
+       *
+-      * With gcc r274827 or later (gcc 10.1+, 9.3+, or 8.4+), or with clang,
+-      * they work as expected.  (Well, not quite.  There's still a bug, but we
+-      * have to work around it later when including arm_acle.h.)
++      * This support has been affected by several gcc bugs, which we must avoid
++      * by only allowing gcc versions that have the corresponding fixes.  First,
++      * gcc commit 943766d37ae4 ("[arm] Fix use of CRC32 intrinsics with Armv8-a
++      * and hard-float"), i.e. gcc 8.4+, 9.3+, 10.1+, or 11+, is needed.
++      * Second, gcc commit c1cdabe3aab8 ("arm: reorder assembler architecture
++      * directives [PR101723]"), i.e. gcc 9.5+, 10.4+, 11.3+, or 12+, is needed
++      * when binutils is 2.34 or later, due to
++      * https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104439.  We use the second
++      * set of prerequisites, as they are stricter and we have no way to detect
++      * the binutils version in C source without requiring a configure script.
++      *
++      * Yet another gcc bug makes arm_acle.h sometimes not define the crc
++      * functions even when the corresponding builtins are available.  However,
++      * we work around this later when including arm_acle.h.
++      *
++      * Things are a bit easier with clang -- we can just check whether the
++      * crc builtins are available.  However, clang's arm_acle.h is broken in
++      * the same way as gcc's, which we work around later in the same way.
+       */
+-#    if GCC_PREREQ(10, 1) || \
+-        (GCC_PREREQ(9, 3) && !GCC_PREREQ(10, 0)) || \
+-        (GCC_PREREQ(8, 4) && !GCC_PREREQ(9, 0)) || \
++#    if GCC_PREREQ(11, 3) || \
++        (GCC_PREREQ(10, 4) && !GCC_PREREQ(11, 0)) || \
++        (GCC_PREREQ(9, 5) && !GCC_PREREQ(10, 0)) || \
+         (defined(__clang__) && __has_builtin(__builtin_arm_crc32b))
+ #      define COMPILER_SUPPORTS_CRC32_TARGET_INTRINSICS 1
+ #    endif
diff --git a/package/libdeflate/Config.in b/package/libdeflate/Config.in
new file mode 100644
index 0000000000..d2fb0d6c55
--- /dev/null
+++ b/package/libdeflate/Config.in
@@ -0,0 +1,7 @@
+config BR2_PACKAGE_LIBDEFLATE
+	bool "libdeflate"
+	help
+	  Libdeflate is a heavily optimized library for DEFLATE/zlib/
+	  gzip compression and decompression
+
+	  https://github.com/ebiggers/libdeflate
diff --git a/package/libdeflate/libdeflate.hash b/package/libdeflate/libdeflate.hash
new file mode 100644
index 0000000000..0a941bd8d6
--- /dev/null
+++ b/package/libdeflate/libdeflate.hash
@@ -0,0 +1,3 @@
+# Locally computed
+sha256  5c1f75c285cd87202226f4de49985dcb75732f527eefba2b3ddd70a8865f2533  libdeflate-1.10.tar.gz
+sha256  5d246dd2537307b80fed9ba5fdddf5d0fe7a8f023393a071182b9daed56b40fe  COPYING
diff --git a/package/libdeflate/libdeflate.mk b/package/libdeflate/libdeflate.mk
new file mode 100644
index 0000000000..08901ed5ed
--- /dev/null
+++ b/package/libdeflate/libdeflate.mk
@@ -0,0 +1,34 @@
+################################################################################
+#
+# libdeflate
+#
+################################################################################
+
+LIBDEFLATE_VERSION = 1.10
+LIBDEFLATE_SITE = $(call github,ebiggers,libdeflate,v$(LIBDEFLATE_VERSION))
+LIBDEFLATE_LICENSE = MIT
+LIBDEFLATE_LICENSE_FILES = COPYING
+LIBDEFLATE_INSTALL_STAGING = YES
+
+ifeq ($(BR2_STATIC_LIBS),y)
+LIBDEFLATE_MAKE_OPTS += DISABLE_SHARED=yes
+endif
+
+define LIBDEFLATE_BUILD_CMDS
+	$(TARGET_MAKE_ENV) $(MAKE) -C $(@D) $(TARGET_CONFIGURE_OPTS) \
+		$(LIBDEFLATE_MAKE_OPTS)
+endef
+
+define LIBDEFLATE_INSTALL_STAGING_CMDS
+	$(TARGET_MAKE_ENV) $(MAKE) -C $(@D) $(TARGET_CONFIGURE_OPTS) \
+		$(LIBDEFLATE_MAKE_OPTS) \
+		DESTDIR="$(STAGING_DIR)" PREFIX=/usr install
+endef
+
+define LIBDEFLATE_INSTALL_TARGET_CMDS
+	$(TARGET_MAKE_ENV) $(MAKE) -C $(@D) $(TARGET_CONFIGURE_OPTS) \
+		$(LIBDEFLATE_MAKE_OPTS) \
+		DESTDIR="$(TARGET_DIR)" PREFIX=/usr install
+endef
+
+$(eval $(generic-package))
