diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 75d507b218f8a8296ecba7448ef8729ce1cf993b..778d11c15273831ee0d6dd214358ce9378760d0e 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -28,9 +28,9 @@ linux:
   script:
     - mkdir build
     - cd build
-    - cmake .. -DCMAKE_CXX_FLAGS="-fdiagnostics-color" -DWITH_OPTFLOW=TRUE -DUSE_CPPCHECK=FALSE -DBUILD_CALIBRATION=TRUE -DWITH_CERES=TRUE -DCMAKE_BUILD_TYPE=Release -DCPACK_GENERATOR=DEB
-    - make
-    - make package
+    - /snap/bin/cmake .. -GNinja -DCMAKE_CXX_FLAGS="-fdiagnostics-color" -DWITH_OPTFLOW=TRUE -DUSE_CPPCHECK=FALSE -DBUILD_CALIBRATION=TRUE -DWITH_CERES=TRUE -DCMAKE_BUILD_TYPE=Release -DCPACK_GENERATOR=DEB
+    - ninja
+    - ninja package
     - ctest --output-on-failure
     - cd ../SDK/Python
     - python3 -m unittest discover test
diff --git a/CMakeLists.txt b/CMakeLists.txt
index c876eb84205b251f2b945d9e109927e88b0b6ff7..06e64e33ebfb75613e74420d3409ac94907f06ca 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required (VERSION 3.1.0)
+cmake_minimum_required (VERSION 3.16.0)
 include (CheckIncludeFile)
 include (CheckIncludeFileCXX)
 include (CheckFunctionExists)
diff --git a/applications/tools/middlebury_gen/CMakeLists.txt b/applications/tools/middlebury_gen/CMakeLists.txt
index 2dffb172d22cfc554088f3971bb90ff2fd60e8e7..13cc2c9e82196e0ff78a8c873f8ce54c0ae30b66 100644
--- a/applications/tools/middlebury_gen/CMakeLists.txt
+++ b/applications/tools/middlebury_gen/CMakeLists.txt
@@ -15,3 +15,4 @@ endif()
 
 #target_include_directories(cv-node PUBLIC ${PROJECT_SOURCE_DIR}/include)
 target_link_libraries(middlebury-gen ftlcommon ftlrgbd Threads::Threads ${OpenCV_LIBS} ftlrender ftloperators ftlstreams)
+set_property(TARGET middlebury-gen PROPERTY CUDA_ARCHITECTURES OFF)
diff --git a/components/codecs/CMakeLists.txt b/components/codecs/CMakeLists.txt
index 6e7b42f3cd5295d0e9c4acfa8a85385a13bb0302..1891b2a103ecc01c54f84641b578f09a832e6bb8 100644
--- a/components/codecs/CMakeLists.txt
+++ b/components/codecs/CMakeLists.txt
@@ -14,6 +14,7 @@ target_include_directories(BaseCodec PUBLIC
 	${CMAKE_CURRENT_SOURCE_DIR}/src/Video_Codec_SDK_9.1.23/Samples/NvCodec
 	$<TARGET_PROPERTY:ftlcommon,INTERFACE_INCLUDE_DIRECTORIES>
 )
+set_property(TARGET BaseCodec PROPERTY CUDA_ARCHITECTURES OFF)
 
 add_library(OpenCVCodec OBJECT	
 	src/opencv_encoder.cpp
diff --git a/components/codecs/test/CMakeLists.txt b/components/codecs/test/CMakeLists.txt
index 89550a4c146b38de0eed6fcf328441815cec40b4..34753db970a0acab275621de7aa4ceca6020b59c 100644
--- a/components/codecs/test/CMakeLists.txt
+++ b/components/codecs/test/CMakeLists.txt
@@ -39,6 +39,8 @@ ${CMAKE_CURRENT_SOURCE_DIR}/../src/Video_Codec_SDK_9.1.23/Samples/NvCodec)
 target_link_libraries(nvidia_codec_unit
 	Threads::Threads ${OS_LIBS} ${OpenCV_LIBS} ${CUDA_LIBRARIES} ftlcommon nvcuvid cuda)
 
+set_property(TARGET nvidia_codec_unit PROPERTY CUDA_ARCHITECTURES OFF)
+
 
 add_test(NvidiaCodecUnitTest nvidia_codec_unit)
 
diff --git a/components/common/cpp/CMakeLists.txt b/components/common/cpp/CMakeLists.txt
index 9b06a7831a065561a250b460a0f7e22e248a9cb2..23595c5ac370c8bffcf7d6f435df7351caa1f207 100644
--- a/components/common/cpp/CMakeLists.txt
+++ b/components/common/cpp/CMakeLists.txt
@@ -29,6 +29,12 @@ target_include_directories(ftlcommon PUBLIC
 	PRIVATE src)
 target_link_libraries(ftlcommon Threads::Threads Eigen3::Eigen ${OS_LIBS} ${OpenCV_LIBS} ${URIPARSER_LIBRARIES} ${CUDA_LIBRARIES})
 
+target_precompile_headers(ftlcommon
+	PRIVATE include/ftl/utility/msgpack.hpp
+	PRIVATE include/ftl/utility/msgpack_optional.hpp
+	PRIVATE include/ftl/cuda_common.hpp
+)
+
 if (BUILD_TESTS)
 add_subdirectory(test)
 endif()
diff --git a/components/operators/CMakeLists.txt b/components/operators/CMakeLists.txt
index bc4edb1ea6ac6c10a0f3d14dfaa768e1a7732206..a00ff8e6fabb644ea2f75376e65fc68252c99f05 100644
--- a/components/operators/CMakeLists.txt
+++ b/components/operators/CMakeLists.txt
@@ -57,6 +57,8 @@ target_include_directories(ftloperators PUBLIC
 
 target_link_libraries(ftloperators ftlrender ftlrgbd ftlcommon sgm libstereo Eigen3::Eigen Threads::Threads ${OpenCV_LIBS})
 
+set_property(TARGET ftloperators PROPERTY CUDA_ARCHITECTURES OFF)
+
 if (BUILD_TESTS)
 	add_subdirectory(test)
 endif()
diff --git a/components/renderers/cpp/CMakeLists.txt b/components/renderers/cpp/CMakeLists.txt
index bae316acd12308b40d043a69f2805ee5054a69b4..905845f57de4793f7822fd787875c67630baab8d 100644
--- a/components/renderers/cpp/CMakeLists.txt
+++ b/components/renderers/cpp/CMakeLists.txt
@@ -29,4 +29,6 @@ target_include_directories(ftlrender PUBLIC
 	PRIVATE src)
 target_link_libraries(ftlrender ftlrgbd ftlcommon Eigen3::Eigen Threads::Threads nanogui ${NANOGUI_EXTRA_LIBS} ${OpenCV_LIBS})
 
+set_property(TARGET ftlrender PROPERTY CUDA_ARCHITECTURES OFF)
+
 #ADD_SUBDIRECTORY(test)
diff --git a/components/structures/CMakeLists.txt b/components/structures/CMakeLists.txt
index 4b1a631d1c1d383a1ace922825a7ea3d33026a24..f339a3301d9bc4a11a16fbf54ca2cc6c071f827b 100644
--- a/components/structures/CMakeLists.txt
+++ b/components/structures/CMakeLists.txt
@@ -6,6 +6,11 @@ target_include_directories(ftldata PUBLIC
 
 target_link_libraries(ftldata ftlcommon Eigen3::Eigen ftlcodecs)
 
+target_precompile_headers(ftldata
+	PRIVATE include/ftl/data/new_frame.hpp
+	PRIVATE include/ftl/data/new_frameset.hpp
+)
+
 if (BUILD_TESTS)
 add_subdirectory(test)
 endif()
diff --git a/lib/libstereo/CMakeLists.txt b/lib/libstereo/CMakeLists.txt
index 7095e16799d648ec41eb46c9906922d2c90f6fa3..f60cc79a1b7f55d237c911fc97833b8db465da4c 100644
--- a/lib/libstereo/CMakeLists.txt
+++ b/lib/libstereo/CMakeLists.txt
@@ -119,6 +119,7 @@ endif()
 target_include_directories(libstereo PRIVATE src/ include/)
 target_include_directories(libstereo PUBLIC ${OpenCV_INCLUDE_DIRS})
 target_link_libraries(libstereo Threads::Threads ${OpenCV_LIBS} ${CUDA_LIBRARIES})
+set_property(TARGET libstereo PROPERTY CUDA_ARCHITECTURES OFF)
 
 if (BUILD_MIDDLEBURY)
     add_subdirectory(middlebury/)
diff --git a/lib/libstereo/test/CMakeLists.txt b/lib/libstereo/test/CMakeLists.txt
index ee222cd762895cbbd4c6154ad848f1f914dfd370..d5e6f318dcdcc5337516c84540137f32ef75da87 100644
--- a/lib/libstereo/test/CMakeLists.txt
+++ b/lib/libstereo/test/CMakeLists.txt
@@ -7,6 +7,7 @@ $<TARGET_OBJECTS:CatchTest>
 target_include_directories(dsi_cpu_unit PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/../include")
 target_include_directories(dsi_cpu_unit PUBLIC ${OpenCV_INCLUDE_DIRS})
 target_link_libraries(dsi_cpu_unit Threads::Threads ${OpenCV_LIBS})
+#set_property(TARGET dsi_cpu_unit PROPERTY CUDA_ARCHITECTURES OFF)
 
 add_test(DSICPUUnitTest dsi_cpu_unit)
 
@@ -18,6 +19,7 @@ target_include_directories(dsi_gpu_unit PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/../i
 target_include_directories(dsi_gpu_unit PUBLIC ${OpenCV_INCLUDE_DIRS})
 target_compile_definitions(dsi_gpu_unit PUBLIC USE_GPU)
 target_link_libraries(dsi_gpu_unit Threads::Threads ${OpenCV_LIBS})
+set_property(TARGET dsi_gpu_unit PROPERTY CUDA_ARCHITECTURES OFF)
 
 add_test(DSIGPUUnitTest dsi_gpu_unit)
 
@@ -28,6 +30,7 @@ $<TARGET_OBJECTS:CatchTest>
 target_include_directories(array2d_unit PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/../include")
 target_include_directories(array2d_unit PUBLIC ${OpenCV_INCLUDE_DIRS})
 target_link_libraries(array2d_unit Threads::Threads ${OpenCV_LIBS})
+set_property(TARGET array2d_unit PROPERTY CUDA_ARCHITECTURES OFF)
 
 add_test(Array2DUnitTest array2d_unit)
 
@@ -41,6 +44,7 @@ $<TARGET_OBJECTS:CatchTest>
 target_include_directories(matching_cost_unit PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/../include" "${CMAKE_CURRENT_SOURCE_DIR}/../src")
 target_include_directories(matching_cost_unit PUBLIC ${OpenCV_INCLUDE_DIRS})
 target_link_libraries(matching_cost_unit Threads::Threads ${OpenCV_LIBS})
+set_property(TARGET matching_cost_unit PROPERTY CUDA_ARCHITECTURES OFF)
 
 add_test(MatchingCostUnitTest matching_cost_unit)
 
@@ -51,6 +55,7 @@ $<TARGET_OBJECTS:CatchTest>
 target_include_directories(aggregation_unit PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/../include")
 target_include_directories(aggregation_unit PUBLIC ${OpenCV_INCLUDE_DIRS})
 target_link_libraries(aggregation_unit Threads::Threads ${OpenCV_LIBS})
+set_property(TARGET aggregation_unit PROPERTY CUDA_ARCHITECTURES OFF)
 
 add_test(AggregationUnitTest aggregation_unit)
 
@@ -61,5 +66,6 @@ $<TARGET_OBJECTS:CatchTest>
 target_include_directories(wta_unit PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/../include")
 target_include_directories(wta_unit PUBLIC ${OpenCV_INCLUDE_DIRS})
 target_link_libraries(wta_unit Threads::Threads ${OpenCV_LIBS})
+set_property(TARGET wta_unit PROPERTY CUDA_ARCHITECTURES OFF)
 
 add_test(WTAUnitTest wta_unit)