# Copyright 2019 The Dawn Authors
#
# 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.

import("../../../scripts/dawn_overrides_with_defaults.gni")

import("${dawn_root}/generator/dawn_generator.gni")
import("${dawn_root}/scripts/dawn_component.gni")

# Public dawn wire headers so they can be publically visible for dependencies of
# dawn/wire
source_set("headers") {
  public_deps = [ "${dawn_root}/include/dawn:headers" ]
  all_dependent_configs = [ "${dawn_root}/include/dawn:public" ]
  sources = [
    "${dawn_root}/include/dawn/wire/Wire.h",
    "${dawn_root}/include/dawn/wire/WireClient.h",
    "${dawn_root}/include/dawn/wire/WireServer.h",
    "${dawn_root}/include/dawn/wire/dawn_wire_export.h",
  ]
}

dawn_json_generator("gen") {
  target = "wire"
  outputs = [
    "src/dawn/wire/ObjectType_autogen.h",
    "src/dawn/wire/WireCmd_autogen.h",
    "src/dawn/wire/WireCmd_autogen.cpp",
    "src/dawn/wire/client/ApiObjects_autogen.h",
    "src/dawn/wire/client/ApiProcs_autogen.cpp",
    "src/dawn/wire/client/ClientBase_autogen.h",
    "src/dawn/wire/client/ClientHandlers_autogen.cpp",
    "src/dawn/wire/client/ClientPrototypes_autogen.inc",
    "src/dawn/wire/server/ServerBase_autogen.h",
    "src/dawn/wire/server/ServerDoers_autogen.cpp",
    "src/dawn/wire/server/ServerHandlers_autogen.cpp",
    "src/dawn/wire/server/ServerPrototypes_autogen.inc",
  ]
}

dawn_component("wire") {
  DEFINE_PREFIX = "DAWN_WIRE"

  deps = [
    ":gen",
    "${dawn_root}/src/dawn/common",
  ]

  configs = [ "${dawn_root}/src/dawn/common:internal_config" ]
  sources = get_target_outputs(":gen")
  sources += [
    "BufferConsumer.h",
    "BufferConsumer_impl.h",
    "ChunkedCommandHandler.cpp",
    "ChunkedCommandHandler.h",
    "ChunkedCommandSerializer.cpp",
    "ChunkedCommandSerializer.h",
    "ObjectHandle.cpp",
    "ObjectHandle.h",
    "SupportedFeatures.cpp",
    "SupportedFeatures.h",
    "Wire.cpp",
    "WireClient.cpp",
    "WireDeserializeAllocator.cpp",
    "WireDeserializeAllocator.h",
    "WireResult.h",
    "WireServer.cpp",
    "client/Adapter.cpp",
    "client/Adapter.h",
    "client/ApiObjects.h",
    "client/Buffer.cpp",
    "client/Buffer.h",
    "client/Client.cpp",
    "client/Client.h",
    "client/ClientDoers.cpp",
    "client/ClientInlineMemoryTransferService.cpp",
    "client/Device.cpp",
    "client/Device.h",
    "client/Instance.cpp",
    "client/Instance.h",
    "client/LimitsAndFeatures.cpp",
    "client/LimitsAndFeatures.h",
    "client/ObjectBase.cpp",
    "client/ObjectBase.h",
    "client/ObjectStore.cpp",
    "client/ObjectStore.h",
    "client/QuerySet.cpp",
    "client/QuerySet.h",
    "client/Queue.cpp",
    "client/Queue.h",
    "client/RequestTracker.h",
    "client/ShaderModule.cpp",
    "client/ShaderModule.h",
    "client/SwapChain.cpp",
    "client/SwapChain.h",
    "client/Texture.cpp",
    "client/Texture.h",
    "server/ObjectStorage.h",
    "server/Server.cpp",
    "server/Server.h",
    "server/ServerAdapter.cpp",
    "server/ServerBuffer.cpp",
    "server/ServerDevice.cpp",
    "server/ServerInlineMemoryTransferService.cpp",
    "server/ServerInstance.cpp",
    "server/ServerQueue.cpp",
    "server/ServerShaderModule.cpp",
  ]

  # Make headers publicly visible
  public_deps = [ ":headers" ]
}
