diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 0f3bd6677d04cbd9ce2eb63b6a510100037b040b..0bdc44bfa3f7b57ba39ec1e83b5b5935b482a8da 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -4,7 +4,7 @@ if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
   if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.8)
     message(FATAL_ERROR "GCC version must be at least 4.8!")
   endif()
-elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
+elseif ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
   if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.2)
     message(FATAL_ERROR "Clang version must be at least 3.2!")
   endif()
@@ -31,13 +31,13 @@ find_package( libmpsse )
 find_package( libusb-1.0 )
 
 if ( (${LIBFTDI1_FOUND}) AND (${LIBMPSSE_FOUND}) )
-  message("Enabling FTDI and MPSSE support")
+  message(STATUS "Enabling FTDI and MPSSE support")
   set(ENABLE_FTDI 1)
   add_definitions(-DFTDI_ENABLED)
 else()
-  message("Disabling FTDI code due to missing libftdi1 or libmpsse")
-  message(" libftdi1 = ${LIBFTDI1_FOUND}")
-  message(" libmpsse = ${LIBMPSSE_FOUND}")
+  message(STATUS "Disabling FTDI code due to missing libftdi1 or libmpsse:")
+  message(STATUS "  LIBFTDI1_FOUND = ${LIBFTDI1_FOUND}")
+  message(STATUS "  LIBMPSSE_FOUND = ${LIBMPSSE_FOUND}")
 endif()
 
 if (${LIBUSB_1_FOUND})
@@ -50,7 +50,7 @@ if (USE_EXTERNAL_JSON)
   find_package(nlohmann_json 3.2.0 REQUIRED)
   set(JSON_LIBS "nlohmann_json")
 else()
-  message("Using internal JSON library")
+  message(STATUS "Using internal JSON library")
   set(JSON_BuildTests OFF CACHE INTERNAL "")
   set(JSON_Install OFF CACHE INTERNAL "")
   add_subdirectory(exts/nlohmann_json EXCLUDE_FROM_ALL)
@@ -69,8 +69,7 @@ find_package ( libgpib )
 if ( (${LIBGPIB_FOUND}) )
   set(ENABLE_GPIB 1)
 else()
-  message("Disabling linux-GPIB code due to missing libgpib")
-  message(" libgpib = ${LIBGPIB_FOUND}")
+  message(STATUS "Disabling linux-GPIB code due to missing libgpib (LIBGPIB_FOUND = ${LIBGPIB_FOUND})")
 endif()
 
 #
@@ -99,22 +98,22 @@ add_subdirectory(tools)
 if (USE_PYTHON)
   find_package(pybind11 QUIET)
   if(pybind11_FOUND)
-    message("Using external pybind11")
+    message(STATUS "Using external pybind11")
   else()
-    message("Using internal pybind11")
+    message(STATUS "Using internal pybind11")
     add_subdirectory(exts/pybind11 EXCLUDE_FROM_ALL)
   endif()
 
   find_package(pybind11_json QUIET)
   if(pybind11_json_FOUND)
-    message("Using external pybind11_json")
+    message(STATUS "Using external pybind11_json")
   else()
-    message("Using internal pybind11_json")
+    message(STATUS "Using internal pybind11_json")
     add_subdirectory(exts/pybind11_json EXCLUDE_FROM_ALL)
   endif()
 
   # Add python lib
-  message("Building labRemote python module")
+  message(STATUS "Building labRemote python module")
   add_subdirectory(labRemote)
 
   set(PP [=[\$$PYTHONPATH]=])
diff --git a/src/libCom/CMakeLists.txt b/src/libCom/CMakeLists.txt
index db3429bbe0cf3e491c6e18e578d8cbdf0f8bd542..74efdd8a3169feb44f55131d9339d80420b889de 100644
--- a/src/libCom/CMakeLists.txt
+++ b/src/libCom/CMakeLists.txt
@@ -21,8 +21,7 @@ if ( ${ENABLE_GPIB} )
    )
  target_link_libraries (Com PRIVATE ${LIBGPIB_LIBRARIES} )
 else()
-  message("skipping GPIBNICom due to missing libgpib")
-  message(" libgpib = ${LIBGPIB_FOUND}")
+  message(STATUS "Skipping GPIBNICom due to missing libgpib (LIBGPIB_FOUND = ${LIBGPIB_FOUND})")
 endif()
 
 set_target_properties(Com PROPERTIES VERSION ${labRemote_VERSION_MAJOR}.${labRemote_VERSION_MINOR})
diff --git a/src/libDataSink/CMakeLists.txt b/src/libDataSink/CMakeLists.txt
index 9beba8bad7f5012b9d139a7388f8455931de0229..dfdf32df34253315a358f472b7e90de0764194fb 100644
--- a/src/libDataSink/CMakeLists.txt
+++ b/src/libDataSink/CMakeLists.txt
@@ -20,7 +20,7 @@ if( ${INFLUXDBCPP_FOUND} )
     )
   target_include_directories (DataSink PRIVATE ${INFLUXDBCPP_INCLUDE_DIR})
 else()
-  message("skipping InfluxDBSink due to missing influxdb-cpp")
+  message(STATUS "Skipping InfluxDBSink due to missing influxdb-cpp")
 endif()
 
 set_target_properties(DataSink PROPERTIES VERSION ${labRemote_VERSION_MAJOR}.${labRemote_VERSION_MINOR})
diff --git a/src/libDevCom/CMakeLists.txt b/src/libDevCom/CMakeLists.txt
index de8e98dbb19be366d843a35dc2662cde82f995bf..f3b74e2d8c91e347fd8645074372ea5e49619f41 100644
--- a/src/libDevCom/CMakeLists.txt
+++ b/src/libDevCom/CMakeLists.txt
@@ -1,18 +1,21 @@
 # Commented files are from amacv2_tester version of the library. They still need to be
 # ported to labRemote.
 add_library(DevCom SHARED)
+
+# These device libraries depend on Linux and will be included
+# once we have confirmed (below) that we are on a Linux host
+set(LINUX_SPECIFIC_SOURCES SPIDevCom.cpp I2CDevCom.cpp)
+
 target_sources(DevCom
   PRIVATE
   DeviceCom.cpp
   UIOCom.cpp
 
   I2CCom.cpp
-  I2CDevCom.cpp
   I2CDevComuino.cpp
   PCA9548ACom.cpp
 
   SPICom.cpp
-  SPIDevCom.cpp
 
   ComIOException.cpp
   NotSupportedException.cpp
@@ -61,11 +64,24 @@ target_sources(DevCom
   DummyCalibration.cpp
   LinearCalibration.cpp
   FileCalibration.cpp  
-  )
+)
 target_include_directories(DevCom PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
 target_link_libraries(DevCom PUBLIC Com Utils)
 
-#
+# If we are on macOS, ignore those devices that require the Linux-specific drivers
+if("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin")
+    message(STATUS "[libDevCom] macOS system detected, ignoring the following Linux specific devices:")
+    foreach(device_file ${LINUX_SPECIFIC_SOURCES})
+        get_filename_component(device ${device_file} NAME_WE)
+        message(STATUS "  > libDevCom/${device}")
+    endforeach()
+    set(LINUX_SPECIFIC_SOURCES "")
+endif()
+target_sources(DevCom
+    PRIVATE
+    ${LINUX_SPECIFIC_SOURCES}
+)
+
 # Optional dependencies
 if ( ${ENABLE_FTDI} )
   target_sources(DevCom
@@ -78,9 +94,9 @@ if ( ${ENABLE_FTDI} )
   target_include_directories (DevCom PRIVATE ${LIBFTDI1_INCLUDE_DIR} ${LIBMPSSE_INCLUDE_DIR} )
   target_link_libraries (DevCom PRIVATE ${LIBFTDI1_LIBRARIES} ${LIBMPSSE_LIBRARIES} )
 else()
-  message("skipping FTDICom due to missing libftdi1 or libmpsse")
-  message(" libftdi1 = ${LIBFTDI1_FOUND}")
-  message(" libmpsse = ${LIBMPSSE_FOUND}")
+  message(STATUS "Skipping FTDICom due to missing libftdi1 or libmpsse")
+  message(STATUS " libftdi1 = ${LIBFTDI1_FOUND}")
+  message(STATUS " libmpsse = ${LIBMPSSE_FOUND}")
 endif()
 
 set_target_properties(DevCom PROPERTIES VERSION ${labRemote_VERSION_MAJOR}.${labRemote_VERSION_MINOR})
diff --git a/src/libDevCom/I2CDevCom.cpp b/src/libDevCom/I2CDevCom.cpp
index b49367b35a572bf2cc02b3f0cb44b7215250f329..f9ccd607880c60e98306e5cc0d6bbc2c8ca6d01a 100644
--- a/src/libDevCom/I2CDevCom.cpp
+++ b/src/libDevCom/I2CDevCom.cpp
@@ -8,7 +8,6 @@
 #include <fcntl.h>
 #include <unistd.h>
 
-#ifndef __APPLE__
 #include <linux/i2c.h>
 #include <linux/i2c-dev.h>
 
@@ -373,41 +372,3 @@ void I2CDevCom::read_block(std::vector<uint8_t>& data)
   if (ioctl(m_fh, I2C_RDWR, &msgset) < 0)
     throw ComIOException(std::string("I2CDev read_block failed: ")+std::strerror(errno));
 }
-#else
-// Just don't run on mac
-I2CDevCom::I2CDevCom(uint8_t deviceAddr, const std::string& i2cdev) : I2CCom(deviceAddr) {}
-
-I2CDevCom::~I2CDevCom() {}
-
-void I2CDevCom::write_reg32(uint32_t address, uint32_t data) {}
-
-void I2CDevCom::write_reg16(uint32_t address, uint16_t data) {}
-
-void I2CDevCom::write_reg8 (uint32_t address, uint8_t  data) {}
-
-void I2CDevCom::write_reg32(uint32_t data) {}
-
-void I2CDevCom::write_reg16(uint16_t data) {}
-
-void I2CDevCom::write_reg8 (uint8_t  data) {}
-
-void I2CDevCom::write_block(uint32_t address, const std::vector<uint8_t>& data) {}
-
-void I2CDevCom::write_block(const std::vector<uint8_t>& data) {}
-
-uint32_t I2CDevCom::read_reg32(uint32_t address) {return 0;}
-
-uint16_t I2CDevCom::read_reg16(uint32_t address) {return 0;}
-
-uint8_t  I2CDevCom::read_reg8 (uint32_t address) {return 0;}
-
-uint32_t I2CDevCom::read_reg32() {return 0;}
-
-uint16_t I2CDevCom::read_reg16() {return 0;}
-
-uint8_t  I2CDevCom::read_reg8 () {return 0;}
-
-void I2CDevCom::read_block(uint32_t address, std::vector<uint8_t>& data) {}
-
-void I2CDevCom::read_block(std::vector<uint8_t>& data) {}
-#endif
diff --git a/src/libDevCom/MCP3425.cpp b/src/libDevCom/MCP3425.cpp
index ac276cfb7d0bc8230a758e46b4e6b01039b30b42..60f93bb85b6f6e045ce593bda70df2cbeb6064fa 100644
--- a/src/libDevCom/MCP3425.cpp
+++ b/src/libDevCom/MCP3425.cpp
@@ -6,13 +6,13 @@
 #include <cmath>
 
 MCP3425::MCP3425(Resolution bit_res, ConversionMode conv_mode, Gain gain, std::shared_ptr<I2CCom> com)
-  : ADCDevice(std::make_shared<LinearCalibration>(2.048/pow(2,gain),
+  : ADCDevice(std::make_shared<LinearCalibration>(2.048/pow(2,static_cast<int>(gain)),
 						  (uint16_t)pow(2,bit_res - 1))),
     m_resolution(bit_res), m_conv_mode(conv_mode), m_gain(gain), m_com(com)
 { }
 
 MCP3425::MCP3425(std::shared_ptr<I2CCom> com)
-  : ADCDevice(std::make_shared<LinearCalibration>(2.048/pow(2,Gain::x1),
+  : ADCDevice(std::make_shared<LinearCalibration>(2.048/pow(2,static_cast<int>(Gain::x1)),
 						    (uint16_t)pow(2,Resolution::bit16 - 1))),
     m_resolution(Resolution::bit16), m_conv_mode(ConversionMode::Shot), m_gain(Gain::x1), m_com(com)
 { }
diff --git a/src/libDevCom/MCP3428.cpp b/src/libDevCom/MCP3428.cpp
index e8fddaf50851546bef80e52d9c6e4de564247b36..49b4ab65b0eb1741e6d6bbcadf843373cbd9f8fd 100644
--- a/src/libDevCom/MCP3428.cpp
+++ b/src/libDevCom/MCP3428.cpp
@@ -6,13 +6,13 @@
 #include <cmath>
 
 MCP3428::MCP3428(Resolution bit_res, ConversionMode conv_mode, Gain gain, std::shared_ptr<I2CCom> com)
-  : ADCDevice(std::make_shared<LinearCalibration>(2.048/pow(2,gain),
+  : ADCDevice(std::make_shared<LinearCalibration>(2.048/pow(2,static_cast<int>(gain)),
 						  (uint16_t)pow(2,bit_res - 1))),
     m_resolution(bit_res), m_conv_mode(conv_mode), m_gain(gain), m_com(com)
 { }
 
 MCP3428::MCP3428(std::shared_ptr<I2CCom> com)
-  : ADCDevice(std::make_shared<LinearCalibration>(2.048/pow(2,Gain::x1),
+  : ADCDevice(std::make_shared<LinearCalibration>(2.048/pow(2,static_cast<int>(Gain::x1)),
 						  (uint16_t)pow(2,Resolution::bit16 - 1))),
     m_resolution(Resolution::bit16), m_conv_mode(ConversionMode::Shot), m_gain(Gain::x1), m_com(com)
 { }
diff --git a/src/libDevCom/SPIDevCom.cpp b/src/libDevCom/SPIDevCom.cpp
index f6afc8cf5e93715fc1d2a82a18ada1acc782f129..2f0b691881d936654f325b5bfa6ccee6bb82e24f 100644
--- a/src/libDevCom/SPIDevCom.cpp
+++ b/src/libDevCom/SPIDevCom.cpp
@@ -79,7 +79,7 @@ void SPIDevCom::write_block(const std::vector<uint8_t>& data)
   msgs[0].len = data.size();
 
   if (ioctl(m_fh, SPI_IOC_MESSAGE(1), &msgs) < 0)
-    throw ComIOException(std::string("SPIDevCom write_reg32 failed: ")+std::strerror(errno));
+    throw ComIOException(std::string("SPIDevCom write_block failed: ")+std::strerror(errno));
 }
 
 uint32_t SPIDevCom::read_reg32(uint32_t address)
@@ -149,5 +149,5 @@ void SPIDevCom::read_block(std::vector<uint8_t>& data)
   msgs[0].len = data.size();
 
   if (ioctl(m_fh, SPI_IOC_MESSAGE(1), &msgs) < 0)
-    throw ComIOException(std::string("SPIDevCom read_reg16 failed: ")+std::strerror(errno));
+    throw ComIOException(std::string("SPIDevCom read_block failed: ")+std::strerror(errno));
 }
diff --git a/src/libGalil/CMakeLists.txt b/src/libGalil/CMakeLists.txt
index 4e76d3837a58137f7bcaa68a897774b7452ba6e6..7289c32a25c19acea64a39c14b87d0f0865dd593 100644
--- a/src/libGalil/CMakeLists.txt
+++ b/src/libGalil/CMakeLists.txt
@@ -2,8 +2,7 @@ find_package( libgclib QUIET)
 find_package( ZLIB )
 
 if ( NOT "${LIBGCLIB_FOUND}" )
-  message("Disabling libGalil due to missing dependencies")
-  message(" libgclib = ${LIBGCLIB_FOUND}")
+  message(STATUS "Disabling libGalil due to missing dependencies (LIBGCLIB_FOUND = ${LIBGCLIB_FOUND})")
 
   set(libGalil_FOUND FALSE PARENT_SCOPE)
   return()
diff --git a/src/libImageRec/CMakeLists.txt b/src/libImageRec/CMakeLists.txt
index 03cd4a4f4fe6d51981ddcd1d61a3dff36b0b08d0..06d6c9756e185dcddd141e2c6fe7deb4f5c2bbe4 100644
--- a/src/libImageRec/CMakeLists.txt
+++ b/src/libImageRec/CMakeLists.txt
@@ -20,9 +20,9 @@ if ( ${OpenCV_FOUND} AND ${OpenCV_xfeatures2d_FOUND} )
   # Tell rest of labRemote that the library exists
   set(libImageRec_FOUND TRUE)
 else()
-  message("Disabling libImageRec due to missing dependencies")
-  message(" OpenCV = ${OpenCV_FOUND}")
-  message(" OpenCV-xfeatures2d = ${OpenCV_xfeatures2d_FOUND}")
+  message(STATUS "Disabling libImageRec due to missing dependencies:")
+  message(STATUS "  OpenCV_FOUND = ${OpenCV_FOUND}")
+  message(STATUS "  OpenCV-xfeatures2d = ${OpenCV_xfeatures2d_FOUND}")
 
   set(libImageRec_FOUND FALSE)
 endif()
diff --git a/src/libScope/CMakeLists.txt b/src/libScope/CMakeLists.txt
index 55775c1c3510150633f9bcb2fc5961d22089b051..19da1c1f474b448bef3c23c6eb0f47e663de37df 100644
--- a/src/libScope/CMakeLists.txt
+++ b/src/libScope/CMakeLists.txt
@@ -3,8 +3,7 @@
 find_package(libpico)
 
 if ( NOT "${LIBPICO_FOUND}" )
-  message("Disabling libScope due to missing libpico")
-  message(" libpico = ${LIBPICO_FOUND}")
+  message(STATUS "Disabling libScope due to missing libpico (LIBPICO_FOUND = ${LIBPICO_FOUND})")
   set(libScope_FOUND FALSE PARENT_SCOPE)
   return()
 endif()
diff --git a/src/libWaferProb/CMakeLists.txt b/src/libWaferProb/CMakeLists.txt
index 75fad4fd5ca9ebb20e09b946a6ebb5b37684f871..1181d6170dd83d0b92402bd40cd231cfc3eb474b 100644
--- a/src/libWaferProb/CMakeLists.txt
+++ b/src/libWaferProb/CMakeLists.txt
@@ -1,6 +1,5 @@
 if ( NOT "${libGalil_FOUND}" )
-  message("Disabling libWaferProb due to missing dependencies")
-  message(" libGalil = ${libGalil_FOUND}")
+  message(STATUS "Disabling libWaferProb due to missing dependencies (libGalil_FOUND = ${libGalil_FOUND})")
 
   set(libWaferProb_FOUND FALSE PARENT_SCOPE)
   return()