Patch the code in the tools directory so that it loads the NNAPI delegate
correctly without needing to define __ANDROID__

diff --git a/tensorflow/lite/tools/delegates/nnapi_delegate_provider.cc b/tensorflow/lite/tools/delegates/nnapi_delegate_provider.cc
index bde9c0e0..ddbbfe60 100644
--- a/tensorflow/lite/tools/delegates/nnapi_delegate_provider.cc
+++ b/tensorflow/lite/tools/delegates/nnapi_delegate_provider.cc
@@ -16,9 +16,7 @@ limitations under the License.

 #include "tensorflow/lite/tools/delegates/delegate_provider.h"
 #include "tensorflow/lite/tools/evaluation/utils.h"
-#if defined(__ANDROID__)
 #include "tensorflow/lite/nnapi/nnapi_util.h"
-#endif

 namespace tflite {
 namespace tools {
@@ -26,7 +24,6 @@ namespace tools {
 class NnapiDelegateProvider : public DelegateProvider {
  public:
   NnapiDelegateProvider() {
-#if defined(__ANDROID__)
     default_params_.AddParam("use_nnapi", ToolParam::Create<bool>(false));
     default_params_.AddParam("nnapi_execution_preference",
                              ToolParam::Create<std::string>(""));
@@ -36,7 +33,6 @@ class NnapiDelegateProvider : public DelegateProvider {
                              ToolParam::Create<bool>(false));
     default_params_.AddParam("nnapi_allow_fp16",
                              ToolParam::Create<bool>(false));
-#endif
   }

   std::vector<Flag> CreateFlags(ToolParams* params) const final;
@@ -51,7 +47,6 @@ REGISTER_DELEGATE_PROVIDER(NnapiDelegateProvider);

 std::vector<Flag> NnapiDelegateProvider::CreateFlags(ToolParams* params) const {
   std::vector<Flag> flags = {
-#if defined(__ANDROID__)
     CreateFlag<bool>("use_nnapi", params, "use nnapi delegate api"),
     CreateFlag<std::string>("nnapi_execution_preference", params,
                             "execution preference for nnapi delegate. Should "
@@ -64,14 +59,12 @@ std::vector<Flag> NnapiDelegateProvider::CreateFlags(ToolParams* params) const {
                      "Disable the NNAPI CPU device"),
     CreateFlag<bool>("nnapi_allow_fp16", params,
                      "Allow fp32 computation to be run in fp16")
-#endif
   };

   return flags;
 }

 void NnapiDelegateProvider::LogParams(const ToolParams& params) const {
-#if defined(__ANDROID__)
   TFLITE_LOG(INFO) << "Use nnapi : [" << params.Get<bool>("use_nnapi") << "]";
   if (params.Get<bool>("use_nnapi")) {
     if (!params.Get<std::string>("nnapi_execution_preference").empty()) {
@@ -97,13 +90,11 @@ void NnapiDelegateProvider::LogParams(const ToolParams& params) const {
                        << params.Get<bool>("nnapi_allow_fp16") << "]";
     }
   }
-#endif
 }

 TfLiteDelegatePtr NnapiDelegateProvider::CreateTfLiteDelegate(
     const ToolParams& params) const {
   TfLiteDelegatePtr delegate(nullptr, [](TfLiteDelegate*) {});
-#if defined(__ANDROID__)
   if (params.Get<bool>("use_nnapi")) {
     StatefulNnApiDelegate::Options options;
     std::string accelerator_name =
@@ -163,7 +154,6 @@ TfLiteDelegatePtr NnapiDelegateProvider::CreateTfLiteDelegate(
                      << params.Get<std::string>("nnapi_execution_preference")
                      << ") to be used.";
   }
-#endif
   return delegate;
 }

diff --git a/tensorflow/lite/tools/evaluation/BUILD b/tensorflow/lite/tools/evaluation/BUILD
index 85dfb183..92478a3d 100644
--- a/tensorflow/lite/tools/evaluation/BUILD
+++ b/tensorflow/lite/tools/evaluation/BUILD
@@ -46,7 +46,9 @@ cc_library(
             "//tensorflow/lite/delegates/gpu:delegate",
             "//tensorflow/lite/delegates/nnapi:nnapi_delegate",
         ],
-        "//conditions:default": [],
+        "//conditions:default": [
+            "//tensorflow/lite/delegates/nnapi:nnapi_delegate",
+        ],
     }) + select({
         "//tensorflow:android_arm": [
             "//tensorflow/lite/delegates/hexagon:hexagon_delegate",
diff --git a/tensorflow/lite/tools/evaluation/utils.cc b/tensorflow/lite/tools/evaluation/utils.cc
index c766a932..d3880647 100644
--- a/tensorflow/lite/tools/evaluation/utils.cc
+++ b/tensorflow/lite/tools/evaluation/utils.cc
@@ -95,24 +95,18 @@ TfLiteStatus GetSortedFileNames(

 // TODO(b/138448769): Migrate delegate helper APIs to lite/testing.
 TfLiteDelegatePtr CreateNNAPIDelegate() {
-#if defined(__ANDROID__)
   return TfLiteDelegatePtr(
       NnApiDelegate(),
       // NnApiDelegate() returns a singleton, so provide a no-op deleter.
       [](TfLiteDelegate*) {});
-#else
-  return CreateNullDelegate();
-#endif  // defined(__ANDROID__)
 }

-#if defined(__ANDROID__)
 TfLiteDelegatePtr CreateNNAPIDelegate(StatefulNnApiDelegate::Options options) {
   return TfLiteDelegatePtr(
       new StatefulNnApiDelegate(options), [](TfLiteDelegate* delegate) {
         delete reinterpret_cast<StatefulNnApiDelegate*>(delegate);
       });
 }
-#endif  // defined(__ANDROID__)

 #if defined(__ANDROID__)
 TfLiteDelegatePtr CreateGPUDelegate(TfLiteGpuDelegateOptionsV2* options) {
diff --git a/tensorflow/lite/tools/evaluation/utils.h b/tensorflow/lite/tools/evaluation/utils.h
index 5d9920cf..5dbc035c 100644
--- a/tensorflow/lite/tools/evaluation/utils.h
+++ b/tensorflow/lite/tools/evaluation/utils.h
@@ -21,9 +21,9 @@ limitations under the License.
 #include <unordered_set>
 #include <vector>

+#include "tensorflow/lite/delegates/nnapi/nnapi_delegate.h"
 #if defined(__ANDROID__)
 #include "tensorflow/lite/delegates/gpu/delegate.h"
-#include "tensorflow/lite/delegates/nnapi/nnapi_delegate.h"
 #if (defined(__arm__) || defined(__aarch64__))
 #include "tensorflow/lite/delegates/hexagon/hexagon_delegate.h"
 #endif
@@ -62,9 +62,7 @@ inline TfLiteStatus GetSortedFileNames(const std::string& directory,
 }

 TfLiteDelegatePtr CreateNNAPIDelegate();
-#if defined(__ANDROID__)
 TfLiteDelegatePtr CreateNNAPIDelegate(StatefulNnApiDelegate::Options options);
-#endif

 TfLiteDelegatePtr CreateGPUDelegate();
 #if defined(__ANDROID__)
