Enable Flex delegate for Windows

Since weak symbol overriding is not available on Windows, disable weak symbol
overriding path but use TF_AcquireFlexDelegate() acquisition with DLL.

PiperOrigin-RevId: 321106995
Change-Id: I97398e6b473c78b6f68e418bcb1be3bad03be49a
diff --git a/tensorflow/lite/delegates/flex/delegate.cc b/tensorflow/lite/delegates/flex/delegate.cc
index b8b0d4e..f85b5e6 100644
--- a/tensorflow/lite/delegates/flex/delegate.cc
+++ b/tensorflow/lite/delegates/flex/delegate.cc
@@ -30,9 +30,13 @@
 namespace tflite {
 
 // Corresponding weak declaration found in lite/interpreter_builder.cc.
+#if !defined(_WIN32)
+// If weak symbol is not supported (Windows), it can use
+// TF_AcquireFlexDelegate() path instead.
 TfLiteDelegateUniquePtr AcquireFlexDelegate() {
   return tflite::FlexDelegate::Create();
 }
+#endif
 
 TfLiteDelegateUniquePtr FlexDelegate::Create(
     std::unique_ptr<FlexDelegate> base_delegate) {
@@ -140,6 +144,11 @@
 // Exported C interface function which is used by AcquireFlexDelegate() at
 // interpreter_build.cc. To export the function name globally, the function name
 // must be matched with patterns in tf_version_script.lds
-extern "C" tflite::TfLiteDelegateUniquePtr TF_AcquireFlexDelegate() {
-  return tflite::AcquireFlexDelegate();
+extern "C" {
+#if defined(_WIN32)
+__declspec(dllexport)
+#endif
+    tflite::TfLiteDelegateUniquePtr TF_AcquireFlexDelegate() {
+  return tflite::FlexDelegate::Create();
 }
+}  // extern "C"
diff --git a/tensorflow/lite/python/BUILD b/tensorflow/lite/python/BUILD
index 63be960..dfcf46b 100644
--- a/tensorflow/lite/python/BUILD
+++ b/tensorflow/lite/python/BUILD
@@ -197,7 +197,6 @@
     srcs_version = "PY2AND3",
     tags = [
         "no_mac",  # TODO(b/159077703): Enable Python API Flex support on MacOS.
-        "no_windows",  # TODO(b/159077703): Enable Python API Flex support on Windows.
     ],
     deps = [
         ":lite",
diff --git a/tensorflow/python/BUILD b/tensorflow/python/BUILD
index 8344815..fbfa414 100644
--- a/tensorflow/python/BUILD
+++ b/tensorflow/python/BUILD
@@ -6074,6 +6074,7 @@
         "//tensorflow/core/distributed_runtime:server_lib",
         "//tensorflow/core/platform:stacktrace_handler",
         "//tensorflow/core/profiler/internal:print_model_analysis",
+        "//tensorflow/lite/delegates/flex:delegate",
         "//tensorflow/core/profiler/internal/cpu:python_tracer",
         "//tensorflow/tools/graph_transforms:transform_graph_lib",
         "//tensorflow/core/platform:tf32_utils",
@@ -6088,12 +6089,7 @@
         "@ngraph_tf//:ngraph_tf",
     ]) + if_xla_available([
         "//tensorflow/compiler/aot:tfcompile_lib",
-    ]) + select({
-        "//tensorflow:windows": [],  # TODO(b/159077703): Enable Flex on Windows
-        "//conditions:default": [
-            "//tensorflow/lite/delegates/flex:delegate",
-        ],
-    }) + if_tpu(["//tensorflow/core/tpu:tpu_api_dlsym_initializer"]),
+    ]) + if_tpu(["//tensorflow/core/tpu:tpu_api_dlsym_initializer"]),
 )
 
 # ** Targets for Windows build (start) **