# Copyright 2018 The Shaderc 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.

import("//build_overrides/build.gni")
import("//build_overrides/shaderc.gni")

glslang_dir = shaderc_glslang_dir
spirv_tools_dir = shaderc_spirv_tools_dir

config("shaderc_util_public") {
  include_dirs = [ "libshaderc_util/include" ]
}

source_set("shaderc_util_sources") {
  sources = [
    "libshaderc_util/include/libshaderc_util/counting_includer.h",
    "libshaderc_util/include/libshaderc_util/exceptions.h",
    "libshaderc_util/include/libshaderc_util/file_finder.h",
    "libshaderc_util/include/libshaderc_util/format.h",
    "libshaderc_util/include/libshaderc_util/io_shaderc.h",
    "libshaderc_util/include/libshaderc_util/message.h",
    "libshaderc_util/include/libshaderc_util/mutex.h",
    "libshaderc_util/include/libshaderc_util/resources.h",
    "libshaderc_util/include/libshaderc_util/spirv_tools_wrapper.h",
    "libshaderc_util/include/libshaderc_util/string_piece.h",
    "libshaderc_util/include/libshaderc_util/universal_unistd.h",
    "libshaderc_util/include/libshaderc_util/version_profile.h",
    "libshaderc_util/src/compiler.cc",
    "libshaderc_util/src/file_finder.cc",
    "libshaderc_util/src/io_shaderc.cc",
    "libshaderc_util/src/message.cc",
    "libshaderc_util/src/resources.cc",
    "libshaderc_util/src/shader_stage.cc",
    "libshaderc_util/src/spirv_tools_wrapper.cc",
    "libshaderc_util/src/version_profile.cc",
  ]

  # Configure Glslang's interface to include HLSL-related entry points.
  defines = [ "ENABLE_HLSL=1" ]

  public_configs = [ ":shaderc_util_public" ]

  deps = [
    "${glslang_dir}:glslang_sources",
    "${spirv_tools_dir}:spvtools",
  ]

  if (build_with_chromium) {
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
  }
}

config("shaderc_public") {
  include_dirs = [ "libshaderc/include" ]
  if (is_component_build) {
    defines = [ "SHADERC_SHAREDLIB" ]
  }
}

component("libshaderc") {
  public_configs = [
    ":shaderc_public",
    ":shaderc_util_public",
  ]

  defines = [ "SHADERC_IMPLEMENTATION" ]

  sources = [
    "libshaderc/include/shaderc/env.h",
    "libshaderc/include/shaderc/shaderc.h",
    "libshaderc/include/shaderc/shaderc.hpp",
    "libshaderc/include/shaderc/status.h",
    "libshaderc/include/shaderc/visibility.h",
    "libshaderc/src/shaderc.cc",
    "libshaderc/src/shaderc_private.h",
  ]

  deps = [
    ":shaderc_util_sources",
    "${spirv_tools_dir}:spvtools",
    "${spirv_tools_dir}:spvtools_val",
    "${glslang_dir}:glslang_sources",
  ]

  if (build_with_chromium) {
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]
  }
}
