--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -93,34 +93,67 @@ set(ZLIB_PUBLIC_HDRS
     ${CMAKE_CURRENT_BINARY_DIR}/zconf.h
     zlib.h
 )
-set(ZLIB_PRIVATE_HDRS
-    crc32.h
-    deflate.h
-    gzguts.h
-    inffast.h
-    inffixed.h
-    inflate.h
-    inftrees.h
-    trees.h
-    zutil.h
-)
-set(ZLIB_SRCS
-    adler32.c
-    compress.c
-    crc32.c
-    deflate.c
-    gzclose.c
-    gzlib.c
-    gzread.c
-    gzwrite.c
-    inflate.c
-    infback.c
-    inftrees.c
-    inffast.c
-    trees.c
-    uncompr.c
-    zutil.c
-)
+
+if(ARMv8)
+    set(ZLIB_PRIVATE_HDRS
+	crc32.h
+	deflate.h
+	gzguts.h
+	inffast.h
+	inffixed.h
+	inflate.h
+	inftrees.h
+	trees.h
+	zutil.h
+	contrib/arm/chunkcopy.h
+    )
+    set(ZLIB_SRCS
+	adler32.c
+	compress.c
+	crc32.c
+	deflate.c
+	gzclose.c
+	gzlib.c
+	gzread.c
+	gzwrite.c
+	infback.c
+	inftrees.c
+	contrib/arm/inflate.c
+	contrib/arm/inffast.c
+	trees.c
+	uncompr.c
+	zutil.c
+    )
+    else()
+    set(ZLIB_PRIVATE_HDRS
+	crc32.h
+	deflate.h
+	gzguts.h
+	inffast.h
+	inffixed.h
+	inflate.h
+	inftrees.h
+	trees.h
+	zutil.h
+    )
+    set(ZLIB_SRCS
+	adler32.c
+	compress.c
+	crc32.c
+	deflate.c
+	gzclose.c
+	gzlib.c
+	gzread.c
+	gzwrite.c
+	inflate.c
+	infback.c
+	inftrees.c
+	inffast.c
+	trees.c
+	uncompr.c
+	zutil.c
+    )
+endif()
 
 if(NOT MINGW)
     set(ZLIB_DLL_SRCS
