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

import("../../src/swiftshader.gni")

import("//testing/test.gni")

config("marl_config") {
  include_dirs = [ "include" ]
}

swiftshader_source_set("Marl_headers") {
  sources = [
    "include/marl/conditionvariable.h",
    "include/marl/containers.h",
    "include/marl/debug.h",
    "include/marl/defer.h",
    "include/marl/finally.h",
    "include/marl/osfiber.h",
    "include/marl/pool.h",
    "include/marl/sal.h",
    "include/marl/scheduler.h",
    "include/marl/thread.h",
    "include/marl/ticket.h",
    "include/marl/trace.h",
    "include/marl/utils.h",
    "include/marl/waitgroup.h",
  ]

  if (is_win) {
    sources += [ "include/marl/osfiber_windows.h" ]
  } else {
    sources += [
      "OSFiber_asm.h",
      "OSFiber_asm_aarch64.h",
      "OSFiber_asm_arm.h",
      "OSFiber_asm_ppc64.h",
      "OSFiber_asm_x64.h",
      "OSFiber_asm_x86.h",
    ]
  }

  public_configs = [
    ":marl_config",
  ]
}

swiftshader_source_set("Marl") {
  sources = [
    "src/debug.cpp",
    "src/scheduler.cpp",
    "src/thread.cpp",
    "src/trace.cpp",
  ]

  if (!is_win) {
    sources += [
      "src/osfiber_aarch64.c",
      "src/osfiber_arm.c",
      "src/osfiber_asm_aarch64.S",
      "src/osfiber_asm_arm.S",
      "src/osfiber_asm_ppc64.S",
      "src/osfiber_asm_x64.S",
      "src/osfiber_asm_x86.S",
      "src/osfiber_x64.c",
      "src/osfiber_x86.c",
    ]
  }

  public_deps = [
    ":Marl_headers",
  ]
}

test("marl_unittests") {
  sources = [
    "src/conditionvariable_test.cpp",
    "src/containers_test.cpp",
    "src/defer_test.cpp",
    "src/osfiber_test.cpp",
    "src/pool_test.cpp",
    "src/scheduler_test.cpp",
    "src/ticket_test.cpp",
    "src/waitgroup_test.cpp",
    "src/marl_test.cpp",
  ]
  deps = [
    ":Marl",
    "//testing/gtest",
    "//testing/gmock",
  ]
}
