Android: Add Android.bp files to compile openscreen for host.

This only compiles the openscreen discovery code, which does not
rely on boringssl/jsoncpp. The library uses a local copy of abseil.

Test: mmm external/openscreen
Change-Id: Idf8abbc00144f251677c922c4e4a6c517b9b2276
diff --git a/Android.bp b/Android.bp
new file mode 100644
index 0000000..19545b9
--- /dev/null
+++ b/Android.bp
@@ -0,0 +1,169 @@
+cc_defaults {
+    name: "openscreen_defaults",
+
+    cflags: [
+        "-O2",
+        "-g",
+        "-fno-strict-aliasing",
+        "-W",
+        "-Wall",
+        "-Wextra",
+        "-Wno-address-of-packed-member",
+        "-Wno-array-bounds",
+        "-Wno-pointer-sign",
+        "-Wno-unused",
+        "-Wno-unused-but-set-variable",
+        "-Wno-unused-parameter",
+        "-Wno-missing-field-initializers",
+        "-Werror=implicit-function-declaration",
+        "-D_DEBUG",
+        "-DOPENSCREEN_TEST_DATA_DIR=\"$ANDROID_BUILD_TOP/external/openscreen/test/data/\"",
+    ],
+    cppflags: [
+        "-fno-exceptions",
+        "-fno-unwind-tables",
+        "-fno-asynchronous-unwind-tables",
+    ],
+    header_libs: [
+        "libopenscreen_absl_headers",
+    ],
+
+//    cpp_std: "c++17",
+}
+
+osp_discovery_srcs = [
+    "discovery/dnssd/impl/conversion_layer.cc",
+    "discovery/dnssd/impl/dns_data_graph.cc",
+    "discovery/dnssd/impl/instance_key.cc",
+    "discovery/dnssd/impl/network_interface_config.cc",
+    "discovery/dnssd/impl/publisher_impl.cc",
+    "discovery/dnssd/impl/querier_impl.cc",
+    "discovery/dnssd/impl/service_dispatcher.cc",
+    "discovery/dnssd/impl/service_instance.cc",
+    "discovery/dnssd/impl/service_key.cc",
+    "discovery/dnssd/public/dns_sd_instance.cc",
+    "discovery/dnssd/public/dns_sd_instance_endpoint.cc",
+    "discovery/dnssd/public/dns_sd_txt_record.cc",
+    "discovery/mdns/mdns_probe.cc",
+    "discovery/mdns/mdns_probe_manager.cc",
+    "discovery/mdns/mdns_publisher.cc",
+    "discovery/mdns/mdns_querier.cc",
+    "discovery/mdns/mdns_reader.cc",
+    "discovery/mdns/mdns_receiver.cc",
+    "discovery/mdns/mdns_records.cc",
+    "discovery/mdns/mdns_responder.cc",
+    "discovery/mdns/mdns_sender.cc",
+    "discovery/mdns/mdns_service_impl.cc",
+    "discovery/mdns/mdns_trackers.cc",
+    "discovery/mdns/mdns_writer.cc",
+    "discovery/mdns/public/mdns_service.cc",
+]
+
+osp_discovery_testing_srcs = [
+    "discovery/dnssd/testing/fake_dns_record_factory.cc",
+    "discovery/mdns/testing/mdns_test_util.cc",
+]
+
+osp_discovery_unittest_srcs = [
+    "discovery/dnssd/impl/conversion_layer_unittest.cc",
+    "discovery/dnssd/impl/dns_data_graph_unittest.cc",
+    "discovery/dnssd/impl/instance_key_unittest.cc",
+    "discovery/dnssd/impl/publisher_impl_unittest.cc",
+    "discovery/dnssd/impl/querier_impl_unittest.cc",
+    "discovery/dnssd/impl/service_key_unittest.cc",
+    "discovery/dnssd/public/dns_sd_instance_endpoint_unittest.cc",
+    "discovery/dnssd/public/dns_sd_instance_unittest.cc",
+    "discovery/dnssd/public/dns_sd_txt_record_unittest.cc",
+    "discovery/mdns/mdns_probe_manager_unittest.cc",
+    "discovery/mdns/mdns_probe_unittest.cc",
+    "discovery/mdns/mdns_publisher_unittest.cc",
+    "discovery/mdns/mdns_querier_unittest.cc",
+    "discovery/mdns/mdns_random_unittest.cc",
+    "discovery/mdns/mdns_reader_unittest.cc",
+    "discovery/mdns/mdns_receiver_unittest.cc",
+    "discovery/mdns/mdns_records_unittest.cc",
+    "discovery/mdns/mdns_responder_unittest.cc",
+    "discovery/mdns/mdns_sender_unittest.cc",
+    "discovery/mdns/mdns_trackers_unittest.cc",
+    "discovery/mdns/mdns_writer_unittest.cc",
+    "discovery/public/dns_sd_service_watcher_unittest.cc",
+]
+
+osp_platform_base_srcs = [
+    "platform/base/error.cc",
+    "platform/base/interface_info.cc",
+    "platform/base/ip_address.cc",
+    "platform/base/udp_packet.cc",
+]
+
+osp_platform_api_srcs = [
+    "platform/api/udp_socket.cc",
+]
+
+osp_util_srcs = [
+    "util/alarm.cc",
+    "util/big_endian.cc",
+]
+
+//#########################
+
+// This library contains reference implementations for the platform api, and may not be
+// optimal for every embedder's needs. Only files added are for adb (the only embedder ATM).
+cc_library_host_static {
+    name: "libopenscreen-platform-impl",
+    defaults: ["openscreen_defaults"],
+    stl: "libc++_static",
+
+    srcs: [
+        "platform/impl/time.cc",
+        "platform/impl/network_interface.cc",
+    ],
+
+
+    target: {
+        linux: {
+            srcs: [
+                "platform/impl/network_interface_linux.cc",
+            ],
+        },
+        darwin: {
+            srcs: [
+                "platform/impl/network_interface_mac.cc",
+            ],
+            cflags: [
+                // Required, to use the new IPv6 Sockets options introduced by RFC 3542.
+                "-D__APPLE_USE_RFC_3542",
+            ],
+        },
+        windows: {
+            enabled: true,
+            srcs: [
+                "platform/impl/network_interface_win.cc",
+            ],
+        },
+    },
+
+    export_include_dirs: ["."],
+}
+
+// TODO: enable the osp discovery unittests
+cc_library_host_static {
+    name: "libopenscreen-discovery",
+    defaults: ["openscreen_defaults"],
+    stl: "libc++_static",
+
+    srcs: osp_platform_api_srcs +
+          osp_platform_base_srcs +
+          osp_util_srcs +
+          osp_discovery_srcs,
+
+    whole_static_libs: [
+        "libopenscreen_absl",
+    ],
+
+    target: {
+        windows: {
+            enabled: true,
+        },
+    }
+}
diff --git a/third_party/abseil/Android.bp b/third_party/abseil/Android.bp
new file mode 100644
index 0000000..27c05f4
--- /dev/null
+++ b/third_party/abseil/Android.bp
@@ -0,0 +1,58 @@
+cc_defaults {
+    name: "libopenscreen_absl_defaults",
+    visibility: [
+        "//external/openscreen:__subpackages__",
+    ],
+}
+
+cc_library_headers {
+    name: "libopenscreen_absl_headers",
+    defaults: ["libopenscreen_absl_defaults"],
+    device_supported: false,
+    host_supported: true,
+    export_include_dirs: ["src"],
+    target: {
+        windows: {
+            enabled: true,
+        },
+    }
+}
+
+// Source set from openscreen's third_party/abseil/BUILD.gn
+cc_library_host_static {
+    name: "libopenscreen_absl",
+    defaults: ["libopenscreen_absl_defaults"],
+    header_libs: [
+        "libopenscreen_absl_headers",
+    ],
+    srcs: [
+      "src/absl/base/internal/raw_logging.cc",
+      "src/absl/base/internal/throw_delegate.cc",
+      "src/absl/hash/internal/city.cc",
+      "src/absl/hash/internal/hash.cc",
+      "src/absl/numeric/int128.cc",
+      "src/absl/strings/ascii.cc",
+      "src/absl/strings/charconv.cc",
+      "src/absl/strings/escaping.cc",
+      "src/absl/strings/internal/charconv_bigint.cc",
+      "src/absl/strings/internal/charconv_parse.cc",
+      "src/absl/strings/internal/escaping.cc",
+      "src/absl/strings/internal/memutil.cc",
+      "src/absl/strings/internal/utf8.cc",
+      "src/absl/strings/match.cc",
+      "src/absl/strings/numbers.cc",
+      "src/absl/strings/str_cat.cc",
+      "src/absl/strings/str_replace.cc",
+      "src/absl/strings/str_split.cc",
+      "src/absl/strings/string_view.cc",
+      "src/absl/strings/substitute.cc",
+      "src/absl/types/bad_optional_access.cc",
+      "src/absl/types/bad_variant_access.cc",
+    ],
+
+    target: {
+        windows: {
+            enabled: true,
+        },
+    }
+}