diff --git a/CMakeLists.txt b/CMakeLists.txt index 86925b427..b34192878 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -150,6 +150,10 @@ if (VIAMCPPSDK_ENFORCE_COMPILER_MINIMA) if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 10.0) message(FATAL_ERROR "Insufficient Apple clang version: XCode 10.0+ required") endif() + elseif (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") + if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19.34) + message(FATAL_ERROR "Insufficient MSVC version: Visual Studio 2022 17.4 (MSVC 19.34) or later is required") + endif() else() message(FATAL_ERROR "Unknown / untested compiler ${CMAKE_CXX_COMPILER_ID}") endif() diff --git a/src/viam/examples/camera/example_camera.cpp b/src/viam/examples/camera/example_camera.cpp index d1eb9b80c..570ae0d59 100644 --- a/src/viam/examples/camera/example_camera.cpp +++ b/src/viam/examples/camera/example_camera.cpp @@ -1,6 +1,5 @@ #include #include -#include #include #include diff --git a/src/viam/examples/dial/example_dial.cpp b/src/viam/examples/dial/example_dial.cpp index f39522c26..5289e3aab 100644 --- a/src/viam/examples/dial/example_dial.cpp +++ b/src/viam/examples/dial/example_dial.cpp @@ -4,7 +4,6 @@ #include #include #include -#include #include #include diff --git a/src/viam/examples/dial_api_key/example_dial_api_key.cpp b/src/viam/examples/dial_api_key/example_dial_api_key.cpp index b723e4227..bc04b50c4 100644 --- a/src/viam/examples/dial_api_key/example_dial_api_key.cpp +++ b/src/viam/examples/dial_api_key/example_dial_api_key.cpp @@ -4,7 +4,6 @@ #include #include #include -#include #include #include diff --git a/src/viam/examples/modules/complex/client.cpp b/src/viam/examples/modules/complex/client.cpp index 4c26f055f..f579ec35e 100644 --- a/src/viam/examples/modules/complex/client.cpp +++ b/src/viam/examples/modules/complex/client.cpp @@ -3,7 +3,6 @@ #include #include #include -#include #include #include diff --git a/src/viam/examples/motor/example_motor.cpp b/src/viam/examples/motor/example_motor.cpp index 3d5a640ef..7456c60fa 100644 --- a/src/viam/examples/motor/example_motor.cpp +++ b/src/viam/examples/motor/example_motor.cpp @@ -1,5 +1,3 @@ -#include - #include #include #include diff --git a/src/viam/sdk/CMakeLists.txt b/src/viam/sdk/CMakeLists.txt index bd5edfa70..2af5eb483 100644 --- a/src/viam/sdk/CMakeLists.txt +++ b/src/viam/sdk/CMakeLists.txt @@ -34,8 +34,18 @@ configure_file(common/grpc_fwd.hpp.in common/grpc_fwd.hpp) # Set compile and link options based on arguments if (VIAMCPPSDK_USE_WALL_WERROR) - target_compile_options(viamsdk PRIVATE -Wall -Werror) + if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + target_compile_options(viamsdk PRIVATE -Wall -Werror) + elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + target_compile_options(viamsdk PRIVATE -Wall -Werror) + elseif (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") + # Note: Currently, the generated protos throw W4244 and W4267, so turn that back to a warning. + target_compile_options(viamsdk PRIVATE /W4 /WX /wd4244 /wd4267) + else() + message(ERROR "VIAMCPPSDK_USE_WALL_ERROR is set, but not known how to enable for compiler ID ${CMAKE_CXX_COMPILER_ID}") + endif() endif() + if (VIAMCPPSDK_SANITIZED_BUILD) target_link_options(viamsdk PRIVATE -fsanitize=undefined -fno-omit-frame-pointer -fno-sanitize-recover) target_compile_options(viamsdk PRIVATE -fsanitize=undefined -fno-omit-frame-pointer -fno-sanitize-recover) diff --git a/src/viam/sdk/components/camera.hpp b/src/viam/sdk/components/camera.hpp index 203025c3f..5f0b2cd71 100644 --- a/src/viam/sdk/components/camera.hpp +++ b/src/viam/sdk/components/camera.hpp @@ -9,7 +9,12 @@ #include #include + +#if defined(__has_include) && (__has_include()) +#include +#else #include +#endif #include #include diff --git a/src/viam/sdk/module/service.cpp b/src/viam/sdk/module/service.cpp index 911be9bb3..7445e5057 100644 --- a/src/viam/sdk/module/service.cpp +++ b/src/viam/sdk/module/service.cpp @@ -4,8 +4,6 @@ #include #include #include -#include -#include #include #include @@ -115,8 +113,8 @@ struct ModuleService::ServiceImpl : viam::module::v1::ModuleService::Service { Registry::get().lookup_model(cfg.name()); if (reg) { try { - const std::shared_ptr res = reg->construct_resource(deps, cfg); - manager->replace_one(cfg.resource_name(), res); + const std::shared_ptr resource = reg->construct_resource(deps, cfg); + manager->replace_one(cfg.resource_name(), resource); } catch (const std::exception& exc) { return grpc::Status(::grpc::INTERNAL, exc.what()); } @@ -252,13 +250,8 @@ ModuleService::~ModuleService() { } void ModuleService::serve() { - const mode_t old_mask = umask(0077); - const int sockfd = socket(AF_UNIX, SOCK_STREAM, 0); - listen(sockfd, 10); - umask(old_mask); - server_->register_service(impl_.get()); - const std::string address = "unix://" + module_->addr(); + const std::string address = "unix:" + module_->addr(); server_->add_listening_port(address); module_->set_ready(); diff --git a/src/viam/sdk/robot/client.cpp b/src/viam/sdk/robot/client.cpp index ab3789567..f8e63d221 100644 --- a/src/viam/sdk/robot/client.cpp +++ b/src/viam/sdk/robot/client.cpp @@ -6,7 +6,6 @@ #include #include #include -#include #include #include @@ -216,7 +215,7 @@ void RobotClient::refresh_every() { std::this_thread::sleep_for(std::chrono::seconds(refresh_interval_)); refresh(); - } catch (std::exception& exc) { + } catch (std::exception&) { break; } } diff --git a/src/viam/sdk/services/mlmodel.hpp b/src/viam/sdk/services/mlmodel.hpp index cc790889c..fec2ad0d3 100644 --- a/src/viam/sdk/services/mlmodel.hpp +++ b/src/viam/sdk/services/mlmodel.hpp @@ -18,7 +18,12 @@ #include #include #include + +#if defined(__has_include) && (__has_include()) +#include +#else #include +#endif #include #include diff --git a/src/viam/sdk/services/private/mlmodel.cpp b/src/viam/sdk/services/private/mlmodel.cpp index dfc56ec40..7adec82fa 100644 --- a/src/viam/sdk/services/private/mlmodel.cpp +++ b/src/viam/sdk/services/private/mlmodel.cpp @@ -150,6 +150,11 @@ MLModelService::tensor_views make_sdk_tensor_from_api_tensor_t(const T* data, shape_accum = next_shape_accum; } +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4127) +#endif + // We need to handle the special case of an odd number of 16-bit // elements because that will arrive appearing to have one more // element than the shape would indicate, and we don't want to @@ -160,6 +165,10 @@ MLModelService::tensor_views make_sdk_tensor_from_api_tensor_t(const T* data, size -= 1; } +#ifdef _MSC_VER +#pragma warning(pop) +#endif + if (size != shape_accum) { std::ostringstream message; // TODO: Provide the shape and details diff --git a/src/viam/sdk/services/private/navigation_client.cpp b/src/viam/sdk/services/private/navigation_client.cpp index efcf7e1b8..fdff15b9d 100644 --- a/src/viam/sdk/services/private/navigation_client.cpp +++ b/src/viam/sdk/services/private/navigation_client.cpp @@ -55,7 +55,7 @@ void NavigationClient::set_mode(const Navigation::Mode mode, const ProtoStruct& request.set_mode(viam::service::navigation::v1::Mode(mode)); *request.mutable_extra() = to_proto(extra); }) - .invoke([](auto& response) {}); + .invoke([](auto&) {}); } Navigation::LocationResponse NavigationClient::get_location(const ProtoStruct& extra) { @@ -81,7 +81,7 @@ void NavigationClient::add_waypoint(const geo_point& location, const ProtoStruct *request.mutable_location() = to_proto(location); *request.mutable_extra() = to_proto(extra); }) - .invoke([](auto& response) {}); + .invoke([](auto&) {}); } void NavigationClient::remove_waypoint(const std::string id, const ProtoStruct& extra) { @@ -90,7 +90,7 @@ void NavigationClient::remove_waypoint(const std::string id, const ProtoStruct& *request.mutable_id() = id; *request.mutable_extra() = to_proto(extra); }) - .invoke([](auto& response) {}); + .invoke([](auto&) {}); } std::vector NavigationClient::get_obstacles(const ProtoStruct& extra) { @@ -107,7 +107,7 @@ std::vector NavigationClient::get_paths(const ProtoStruc NavigationClient::Properties NavigationClient::get_properties() { return make_client_helper(this, *stub_, &StubType::GetProperties) - .with([&](auto& request) {}) + .with([&](auto&) {}) .invoke([](auto& response) { return Properties{MapType(response.map_type())}; }); }