# Copyright 2016 The SwiftShader 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.

# Need a separate config to ensure the warnings are added to the end.
config("swiftshader_renderer_private_config") {
  if (is_win) {
    cflags = [
      "/wd4201",  # nameless struct/union
      "/wd4324",  # structure was padded due to alignment specifier
    ]
  } else {
    cflags = [
      "-DLOG_TAG=\"swiftshader_renderer\"",
      "-msse2",
      "-Wno-sign-compare",
    ]
  }
}

source_set("swiftshader_renderer") {
  deps = [
    "../Shader:swiftshader_shader",
  ]

  sources = [
    "Blitter.cpp",
    "Clipper.cpp",
    "Color.cpp",
    "Context.cpp",
    "ETC_Decoder.cpp",
    "Matrix.cpp",
    "PixelProcessor.cpp",
    "Plane.cpp",
    "Point.cpp",
    "QuadRasterizer.cpp",
    "Renderer.cpp",
    "Sampler.cpp",
    "SetupProcessor.cpp",
    "Surface.cpp",
    "TextureStage.cpp",
    "Vector.cpp",
    "VertexProcessor.cpp",
  ]

  if (is_win) {
    configs -= [ "//build/config/win:unicode" ]
  }

  configs += [ ":swiftshader_renderer_private_config" ]

  include_dirs = [
    ".",
    "..",
    "../Common",
    "../Main",
    "../Shader",
  ]
}
