diff --git a/applications/inference_process/CMakeLists.txt b/applications/inference_process/CMakeLists.txt
index 19777fd..9afe34a 100644
--- a/applications/inference_process/CMakeLists.txt
+++ b/applications/inference_process/CMakeLists.txt
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2019-2021 Arm Limited. All rights reserved.
+# Copyright (c) 2019-2022 Arm Limited. All rights reserved.
 #
 # SPDX-License-Identifier: Apache-2.0
 #
@@ -23,7 +23,7 @@
 target_include_directories(inference_process PUBLIC include
                            PRIVATE ${TENSORFLOW_PATH} ${TENSORFLOW_PATH}/tensorflow/lite/micro/tools/make/downloads/flatbuffers/include)
 
-target_link_libraries(inference_process PRIVATE tflu cmsis_core cmsis_device)
+target_link_libraries(inference_process PRIVATE tflu cmsis_core cmsis_device ethosu_crc)
 if (TARGET layer_by_layer_profiler)
     target_link_libraries(inference_process PRIVATE layer_by_layer_profiler)
 endif()
@@ -34,4 +34,4 @@
     target_link_libraries(inference_process PRIVATE ethosu_log)
 endif()
 
-target_sources(inference_process PRIVATE src/inference_process.cpp)
\ No newline at end of file
+target_sources(inference_process PRIVATE src/inference_process.cpp)
diff --git a/applications/inference_process/src/inference_process.cpp b/applications/inference_process/src/inference_process.cpp
index 4ab0353..c877d45 100644
--- a/applications/inference_process/src/inference_process.cpp
+++ b/applications/inference_process/src/inference_process.cpp
@@ -27,6 +27,9 @@
 #ifdef LAYER_BY_LAYER_PROFILER
 #include "layer_by_layer_profiler.hpp"
 #endif
+
+#include "crc.hpp"
+
 #include "ethosu_log.h"
 
 #include "inference_process.hpp"
@@ -37,46 +40,6 @@
 
 using namespace std;
 
-namespace {
-
-class Crc {
-public:
-    constexpr Crc() : table() {
-        uint32_t poly = 0xedb88320;
-
-        for (uint32_t i = 0; i < 256; i++) {
-            uint32_t crc = i;
-
-            for (int j = 0; j < 8; j++) {
-                if (crc & 1) {
-                    crc = poly ^ (crc >> 1);
-                } else {
-                    crc >>= 1;
-                }
-            }
-
-            table[i] = crc;
-        }
-    }
-
-    uint32_t crc32(const void *data, const size_t length, uint32_t init = 0) const {
-        uint32_t crc = init ^ 0xffffffff;
-
-        const uint8_t *v = static_cast<const uint8_t *>(data);
-
-        for (size_t i = 0; i < length; i++) {
-            crc = table[(crc ^ v[i]) & 0xff] ^ (crc >> 8);
-        }
-
-        return crc ^ 0xffffffff;
-    }
-
-private:
-    uint32_t table[256];
-};
-
-} // namespace
-
 namespace InferenceProcess {
 DataPtr::DataPtr(void *_data, size_t _size) : data(_data), size(_size) {}
 
diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt
index 7e47499..06e660b 100644
--- a/lib/CMakeLists.txt
+++ b/lib/CMakeLists.txt
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2021 Arm Limited. All rights reserved.
+# Copyright (c) 2021-2022 Arm Limited. All rights reserved.
 #
 # SPDX-License-Identifier: Apache-2.0
 #
@@ -26,4 +26,7 @@
 add_subdirectory(ethosu_monitor)
 
 # Build ethosu_logging
-add_subdirectory(ethosu_log)
\ No newline at end of file
+add_subdirectory(ethosu_log)
+
+# Build crc lib
+add_subdirectory(crc)
diff --git a/lib/crc/CMakeLists.txt b/lib/crc/CMakeLists.txt
new file mode 100644
index 0000000..2ee993d
--- /dev/null
+++ b/lib/crc/CMakeLists.txt
@@ -0,0 +1,20 @@
+#
+# Copyright (c) 2022 Arm Limited. All rights reserved.
+#
+# SPDX-License-Identifier: Apache-2.0
+#
+# Licensed under the Apache License, Version 2.0 (the License); you may
+# not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an AS IS BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+add_library(ethosu_crc INTERFACE)
+target_include_directories(ethosu_crc INTERFACE include)
diff --git a/lib/crc/include/crc.hpp b/lib/crc/include/crc.hpp
new file mode 100644
index 0000000..ecc5ace
--- /dev/null
+++ b/lib/crc/include/crc.hpp
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2022 Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <cstddef>
+#include <inttypes.h>
+
+namespace {
+
+class Crc {
+public:
+    constexpr Crc() : table() {
+        uint32_t poly = 0xedb88320;
+
+        for (uint32_t i = 0; i < 256; i++) {
+            uint32_t crc = i;
+
+            for (int j = 0; j < 8; j++) {
+                if (crc & 1) {
+                    crc = poly ^ (crc >> 1);
+                } else {
+                    crc >>= 1;
+                }
+            }
+
+            table[i] = crc;
+        }
+    }
+
+    uint32_t crc32(const void *data, const size_t length, uint32_t init = 0) const {
+        uint32_t crc = init ^ 0xffffffff;
+
+        const uint8_t *v = static_cast<const uint8_t *>(data);
+
+        for (size_t i = 0; i < length; i++) {
+            crc = table[(crc ^ v[i]) & 0xff] ^ (crc >> 8);
+        }
+
+        return crc ^ 0xffffffff;
+    }
+
+private:
+    uint32_t table[256];
+};
+} // namespace
