# Copyright 2021 The Cobalt Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

config("enable_fake_microphone_public") {
  defines = [ "ENABLE_FAKE_MICROPHONE" ]
}

config("speech_config") {
  if (is_win) {
    cflags = [
      # Dereferencing NULL pointer in generated file
      # google_streaming_api.pb.cc.
      "/wd6011",
    ]
  }

  include_dirs = [ "//third_party/protobuf/src" ]
}

copy("speech_testdata") {
  install_content = true

  sources = [
    "testdata/audio1.raw",
    "testdata/audio2.raw",
    "testdata/audio3.raw",
    "testdata/quit.raw",
  ]

  outputs = [ "$sb_static_contents_output_data_dir/test/{{source_root_relative_dir}}/{{source_file_part}}" ]
}

static_library("speech") {
  has_pedantic_warnings = true

  # Creates cycle with //cobalt/dom
  check_includes = false

  sources = [
    "audio_encoder_flac.cc",
    "audio_encoder_flac.h",
    "cobalt_speech_recognizer.cc",
    "cobalt_speech_recognizer.h",
    "endpointer_delegate.cc",
    "endpointer_delegate.h",
    "google_speech_service.cc",
    "google_speech_service.h",
    "google_streaming_api.pb.cc",
    "google_streaming_api.pb.h",
    "microphone.h",
    "microphone_manager.cc",
    "microphone_manager.h",
    "speech_configuration.h",
    "speech_recognition.cc",
    "speech_recognition.h",
    "speech_recognition_alternative.h",
    "speech_recognition_config.h",
    "speech_recognition_error.cc",
    "speech_recognition_error.h",
    "speech_recognition_event.cc",
    "speech_recognition_event.h",
    "speech_recognition_manager.cc",
    "speech_recognition_manager.h",
    "speech_recognition_result.cc",
    "speech_recognition_result.h",
    "speech_recognition_result_list.cc",
    "speech_recognition_result_list.h",
    "speech_recognizer.cc",
    "speech_recognizer.h",
    "speech_synthesis.cc",
    "speech_synthesis.h",
    "speech_synthesis_error_event.h",
    "speech_synthesis_event.cc",
    "speech_synthesis_event.h",
    "speech_synthesis_utterance.cc",
    "speech_synthesis_utterance.h",
    "speech_synthesis_voice.h",
    "starboard_speech_recognizer.cc",
    "starboard_speech_recognizer.h",
  ]

  configs += [ ":speech_config" ]

  public_deps = [
    # Additionally, ensure that the include directories for generated
    # headers are put on the include directories for targets that depend
    # on this one.
    "//cobalt/browser:generated_types",
  ]

  deps = [
    "//cobalt/base",
    "//cobalt/loader",
    "//cobalt/media",
    "//cobalt/network",
    "//cobalt/script",
    "//cobalt/web:dom_exception",
    "//content/browser/speech",
    "//starboard",
    "//third_party/flac",
    "//third_party/protobuf:protobuf_lite",
    "//url",
  ]

  if (is_starboard) {
    sources += [
      "microphone_starboard.cc",
      "microphone_starboard.h",
    ]
  }

  if (is_starboard && !is_gold) {
    sources += [
      "microphone_fake.cc",
      "microphone_fake.h",
      "url_fetcher_fake.cc",
      "url_fetcher_fake.h",
    ]

    public_configs = [ ":enable_fake_microphone_public" ]
    deps += [ "//cobalt/audio" ]
  }

  if (!is_gold) {
    deps += [ ":speech_testdata" ]
  }
}
