From f571a6c5603bac5024ada9fd168dc1ee49319bb8 Mon Sep 17 00:00:00 2001 From: whispers Date: Wed, 27 May 2026 19:20:39 -0400 Subject: [PATCH] onnxruntime: never treat warnings as fatal onnxruntime is currently failing on staging with: ``` /build/source/onnxruntime/test/ir/graph_test.cc:253:26: error: 'void google::protobuf::RepeatedField< >::Resize(int, const Element&) [with Element = long int]' is deprecated [-Werror=deprecated-declarations] 253 | m_indicies_data->Resize(static_cast(indices.size()), 0); | ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- snip -- /build/source/onnxruntime/test/ir/graph_test.cc:257:16: error: 'void google::protobuf::RepeatedField< >::Resize(int, const Element&) [with Element = long int]' is deprecated [-Werror=deprecated-declarations] | ~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ``` This is one of several cases of onnxruntime having broken on library updates. This also occured in https://github.com/NixOS/nixpkgs/commit/d54a79262512ba6e0b163e9a4a3fdd4bfdc7d744, where we introduced a messy workaround by patching the library. We believe this was a mistake. In general, -Werror is highly susceptible to changes in libraries, compilers, and other components. In Nixpkgs, we often move faster than upstream, and that is extremely wont to cause breakage. Packages often use warnings like deprecations to inform packages of changes in a non-breaking way, but we are not able to meaningfully respond in Nixpkgs. We can either just ignore the warnings, or patch away the issues. The latter seems like a great deal of work for a constantly-moving target (like the commit linked above), and provides questionable utility. Thus, we simply promote `--compile-no-warning-as-error` from being CUDA-only to applying in all cases. This fixes the build failure on staging as a side-effect of cleaning up this issue. Alternatively, we could just use `-Wno-error=deprecated-declarations` or patch, but we believe this is a more correct solution. --- pkgs/by-name/on/onnxruntime/package.nix | 12 +- .../on/onnxruntime/protobuf34-nodiscard.patch | 194 ------------------ 2 files changed, 4 insertions(+), 202 deletions(-) delete mode 100644 pkgs/by-name/on/onnxruntime/protobuf34-nodiscard.patch diff --git a/pkgs/by-name/on/onnxruntime/package.nix b/pkgs/by-name/on/onnxruntime/package.nix index 7ec342370d9a..3a04c92bf309 100644 --- a/pkgs/by-name/on/onnxruntime/package.nix +++ b/pkgs/by-name/on/onnxruntime/package.nix @@ -132,10 +132,6 @@ effectiveStdenv.mkDerivation (finalAttrs: { # https://github.com/microsoft/onnxruntime/issues/9155 # Patch adapted from https://gitlab.alpinelinux.org/alpine/aports/-/raw/462dfe0eb4b66948fe48de44545cc22bb64fdf9f/community/onnxruntime/0001-Remove-MATH_NO_EXCEPT-macro.patch ./remove-MATH_NO_EXCEPT-macro.patch - - # Fix build of ignored outputs after Protobuf 34 added `[[nodiscard]]` to - # many functions. - ./protobuf34-nodiscard.patch ]; postPatch = '' @@ -272,9 +268,11 @@ effectiveStdenv.mkDerivation (finalAttrs: { cmakeDir = "../cmake"; cmakeFlags = [ + # Library updates and similar often cause build failures with -Werror. + # There is utility in this for upstream, but for Nixpkgs it mostly causes + # churn to work around, so we make warnings non-fatal. + "--compile-no-warning-as-error" (lib.cmakeBool "ABSL_ENABLE_INSTALL" true) - # leads to failing builds, which isn't particularly useful for Nixpkgs - (lib.cmakeFeature "CMAKE_CXX_FLAGS" "-Wno-error=unused-variable -Wno-error=deprecated") (lib.cmakeBool "FETCHCONTENT_FULLY_DISCONNECTED" true) (lib.cmakeBool "FETCHCONTENT_QUIET" false) (lib.cmakeFeature "FETCHCONTENT_SOURCE_DIR_ABSEIL_CPP" "${abseil-cpp_202508.src}") @@ -300,8 +298,6 @@ effectiveStdenv.mkDerivation (finalAttrs: { (lib.cmakeBool "onnxruntime_ENABLE_PYTHON" true) ] ++ lib.optionals cudaSupport [ - # Werror and cudnn_frontend deprecations make for a bad time. - "--compile-no-warning-as-error" (lib.cmakeFeature "FETCHCONTENT_SOURCE_DIR_CUTLASS" "${cutlass-src}") (lib.cmakeFeature "onnxruntime_CUDNN_HOME" "${cudaPackages.cudnn}") (lib.cmakeFeature "CMAKE_CUDA_ARCHITECTURES" cudaArchitecturesString) diff --git a/pkgs/by-name/on/onnxruntime/protobuf34-nodiscard.patch b/pkgs/by-name/on/onnxruntime/protobuf34-nodiscard.patch deleted file mode 100644 index 23e68d06ae77..000000000000 --- a/pkgs/by-name/on/onnxruntime/protobuf34-nodiscard.patch +++ /dev/null @@ -1,194 +0,0 @@ -diff --git a/onnxruntime/core/framework/graph_partitioner.cc b/onnxruntime/core/framework/graph_partitioner.cc -index 9cb2111670..8a3ec5bab9 100644 ---- a/onnxruntime/core/framework/graph_partitioner.cc -+++ b/onnxruntime/core/framework/graph_partitioner.cc -@@ -966,7 +966,7 @@ static Status CreateEpContextModel(const ExecutionProviders& execution_providers - - AllocatorPtr allocator = output_buffer_holder->buffer_allocator; - IAllocatorUniquePtr buffer = IAllocator::MakeUniquePtr(allocator, buffer_size); -- model_proto.SerializeToArray(buffer.get(), static_cast(buffer_size)); -+ ORT_RETURN_IF_NOT(model_proto.SerializeToArray(buffer.get(), static_cast(buffer_size)), "Failed to serialize to array"); - - *output_buffer_holder->buffer_size_ptr = buffer_size; - *output_buffer_holder->buffer_ptr = buffer.release(); -@@ -979,7 +979,7 @@ static Status CreateEpContextModel(const ExecutionProviders& execution_providers - auto out_stream_buf = std::make_unique(*output_write_func_holder); - std::ostream out_stream(out_stream_buf.get()); - -- model_proto.SerializeToOstream(&out_stream); -+ ORT_RETURN_IF_NOT(model_proto.SerializeToOstream(&out_stream), "Failed to serialize to out stream"); - out_stream.flush(); - ORT_RETURN_IF_ERROR(out_stream_buf->GetStatus()); - } else { -diff --git a/onnxruntime/python/onnxruntime_pybind_schema.cc b/onnxruntime/python/onnxruntime_pybind_schema.cc -index 8cb617fe52..254fc1abf9 100644 ---- a/onnxruntime/python/onnxruntime_pybind_schema.cc -+++ b/onnxruntime/python/onnxruntime_pybind_schema.cc -@@ -163,7 +163,7 @@ void addOpSchemaSubmodule(py::module& m) { - "_default_value", - [](ONNX_NAMESPACE::OpSchema::Attribute* attr) -> py::bytes { - std::string out; -- attr->default_value.SerializeToString(&out); -+ (void)attr->default_value.SerializeToString(&out); - return out; - }) - .def_readonly("required", &ONNX_NAMESPACE::OpSchema::Attribute::required); -diff --git a/onnxruntime/test/ep_graph/test_ep_graph.cc b/onnxruntime/test/ep_graph/test_ep_graph.cc -index 055b255132..3925db8ac7 100644 ---- a/onnxruntime/test/ep_graph/test_ep_graph.cc -+++ b/onnxruntime/test/ep_graph/test_ep_graph.cc -@@ -261,7 +261,7 @@ TEST(EpGraphTest, SerializeToProto_InputModelHasExternalIni) { - handle_initializer_data)); - - std::ofstream ofs(serialized_model_path, std::ios::binary); -- model_proto.SerializeToOstream(&ofs); -+ ASSERT_TRUE(model_proto.SerializeToOstream(&ofs)); - ofs.flush(); - - ASSERT_TRUE(std::filesystem::exists(serialized_model_path)); -@@ -395,7 +395,7 @@ TEST(EpGraphTest, SerializeToProto_Mnist) { - handle_initializer_data)); - - std::ofstream ofs(serialized_model_path, std::ios::binary); -- model_proto.SerializeToOstream(&ofs); -+ ASSERT_TRUE(model_proto.SerializeToOstream(&ofs)); - ofs.flush(); - - ASSERT_TRUE(std::filesystem::exists(serialized_model_path)); -@@ -525,7 +525,7 @@ TEST(EpGraphTest, SerializeToProto_ConstantOfShape) { - handle_initializer_data)); - - std::ofstream ofs(serialized_model_path, std::ios::binary); -- model_proto.SerializeToOstream(&ofs); -+ ASSERT_TRUE(model_proto.SerializeToOstream(&ofs)); - ofs.flush(); - - ASSERT_TRUE(std::filesystem::exists(serialized_model_path)); -@@ -590,7 +590,7 @@ TEST(EpGraphTest, SerializeToProto_3LayerSubgraphs) { - ASSERT_CXX_ORTSTATUS_OK(OrtEpUtils::OrtGraphToProto(test_graph->GetOrtGraph(), model_proto)); - - std::ofstream ofs(serialized_model_path, std::ios::binary); -- model_proto.SerializeToOstream(&ofs); -+ ASSERT_TRUE(model_proto.SerializeToOstream(&ofs)); - ofs.flush(); - - ASSERT_TRUE(std::filesystem::exists(serialized_model_path)); -diff --git a/onnxruntime/test/ir/graph_test.cc b/onnxruntime/test/ir/graph_test.cc -index 4d80cb7047..c69ac46c05 100644 ---- a/onnxruntime/test/ir/graph_test.cc -+++ b/onnxruntime/test/ir/graph_test.cc -@@ -1244,7 +1244,7 @@ TEST_F(GraphTest, GraphConstruction_CheckGraphInputOutputOrderMaintained) { - auto proto = model.ToProto(); - std::string s1; - // std::stringstream s1; -- model.ToProto().SerializeToString(&s1); -+ ASSERT_TRUE(model.ToProto().SerializeToString(&s1)); - - ModelProto model_proto; - // const bool result = model_proto.ParseFromIstream(&s1); -@@ -1313,7 +1313,7 @@ TEST_F(GraphTest, UnusedInitializerAndNodeArgsAreIgnored) { - auto proto = model.ToProto(); - std::string s1; - // std::stringstream s1; -- model.ToProto().SerializeToString(&s1); -+ ASSERT_TRUE(model.ToProto().SerializeToString(&s1)); - - ModelProto model_proto; - const bool result = model_proto.ParseFromString(s1); -@@ -1342,7 +1342,7 @@ TEST_F(GraphTest, UnusedSparseInitializerIsIgnored) { - ConstructASimpleAddGraph(*m_graph, nullptr); - auto* m_sparse_initializer = m_graph->add_sparse_initializer(); - ConstructSparseTensor("unused_sparse_initializer", *m_sparse_initializer); -- model_proto.SerializeToString(&s1); -+ ASSERT_TRUE(model_proto.SerializeToString(&s1)); - } - - ModelProto model_proto_1; -@@ -1940,7 +1940,7 @@ TEST_F(GraphTest, SparseInitializerHandling) { - ConstructASimpleAddGraph(*m_graph, nullptr); - auto* m_sparse_initializer = m_graph->add_sparse_initializer(); - ConstructSparseTensor(input_initializer_name, *m_sparse_initializer); -- model_proto.SerializeToString(&s1); -+ ASSERT_TRUE(model_proto.SerializeToString(&s1)); - } - - ModelProto model_proto_sparse; -diff --git a/onnxruntime/test/optimizer/nchwc_optimizer_test.cc b/onnxruntime/test/optimizer/nchwc_optimizer_test.cc -index fc0ba86c7f..b086040212 100644 ---- a/onnxruntime/test/optimizer/nchwc_optimizer_test.cc -+++ b/onnxruntime/test/optimizer/nchwc_optimizer_test.cc -@@ -185,7 +185,7 @@ void NchwcOptimizerTester(const std::function& bu - - // Serialize the model to a string. - std::string model_data; -- model.ToProto().SerializeToString(&model_data); -+ ASSERT_TRUE(model.ToProto().SerializeToString(&model_data)); - - auto run_model = [&](TransformerLevel level, std::vector& fetches) { - SessionOptions session_options; -diff --git a/onnxruntime/test/providers/compare_provider_test_utils.cc b/onnxruntime/test/providers/compare_provider_test_utils.cc -index 6312014387..578d72cb09 100644 ---- a/onnxruntime/test/providers/compare_provider_test_utils.cc -+++ b/onnxruntime/test/providers/compare_provider_test_utils.cc -@@ -83,7 +83,7 @@ void CompareOpTester::CompareWithCPU(const std::string& target_provider_type, - - // first run with cpu - std::string s1; -- model.ToProto().SerializeToString(&s1); -+ ASSERT_TRUE(model.ToProto().SerializeToString(&s1)); - std::istringstream model_proto_str(s1); - - ASSERT_STATUS_OK(cpu_session_object.Load(model_proto_str)); -@@ -104,7 +104,7 @@ void CompareOpTester::CompareWithCPU(const std::string& target_provider_type, - ASSERT_STATUS_OK(target_session_object.RegisterExecutionProvider(std::move(target_execution_provider))); - - std::string s2; -- tp_model.ToProto().SerializeToString(&s2); -+ ASSERT_TRUE(tp_model.ToProto().SerializeToString(&s2)); - std::istringstream model_proto_str1(s2); - ASSERT_STATUS_OK(target_session_object.Load(model_proto_str1)); - -@@ -159,7 +159,7 @@ void CompareOpTester::CompareEPs(const std::shared_ptr& sour - - // first run with source provider - std::string s1; -- model.ToProto().SerializeToString(&s1); -+ ASSERT_TRUE(model.ToProto().SerializeToString(&s1)); - std::istringstream model_proto_str(s1); - - ASSERT_STATUS_OK(source_session_object.Load(model_proto_str)); -@@ -181,7 +181,7 @@ void CompareOpTester::CompareEPs(const std::shared_ptr& sour - ASSERT_STATUS_OK(target_session_object.RegisterExecutionProvider(target_execution_provider)); - - std::string s2; -- tp_model.ToProto().SerializeToString(&s2); -+ ASSERT_TRUE(tp_model.ToProto().SerializeToString(&s2)); - std::istringstream model_proto_str1(s2); - ASSERT_STATUS_OK(target_session_object.Load(model_proto_str1)); - -diff --git a/onnxruntime/test/unittest_util/graph_transform_test_builder.cc b/onnxruntime/test/unittest_util/graph_transform_test_builder.cc -index 5caafa0f37..327463c615 100644 ---- a/onnxruntime/test/unittest_util/graph_transform_test_builder.cc -+++ b/onnxruntime/test/unittest_util/graph_transform_test_builder.cc -@@ -158,7 +158,7 @@ void TransformerTester(const std::function& buil - - // Serialize the model to a string. - std::string model_data; -- model.ToProto().SerializeToString(&model_data); -+ ASSERT_TRUE(model.ToProto().SerializeToString(&model_data)); - std::shared_ptr ep_shared = ep ? std::move(ep) : nullptr; - - auto run_model = [&](TransformerLevel level, std::vector& fetches, -diff --git a/onnxruntime/test/optimizer/transpose_optimizer_test.cc b/onnxruntime/test/optimizer/transpose_optimizer_test.cc -index 9e9e9e9e9e..8e8e8e8e8e 100644 ---- a/onnxruntime/test/optimizer/transpose_optimizer_test.cc -+++ b/onnxruntime/test/optimizer/transpose_optimizer_test.cc -@@ -4532,7 +4532,7 @@ TEST(TransposeOptimizerTests, RegressionTest_Permute1DConstantEmptyPerm) { - - // Serialize the model to a string. - std::string model_data; -- model.ToProto().SerializeToString(&model_data); -+ ASSERT_TRUE(model.ToProto().SerializeToString(&model_data)); - - SessionOptions session_options; - session_options.graph_optimization_level = TransformerLevel::Level1;