# Copyright 2018 The Hafnium 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
#
#     https://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/linux/linux.gni")

# TODO: Having all third_party targets defined in this file means they share
# the same $target_out_dir folder. Ideally we would like to avoid that.

config("gtest_config") {
  visibility = [ ":gtest" ]

  include_dirs = [
    "googletest/googletest/include",
    "googletest/googlemock/include",
  ]

  ldflags = [ "-pthread" ]
}

source_set("gtest") {
  testonly = true

  sources = [
    "googletest/googlemock/src/gmock-all.cc",
    "googletest/googletest/src/gtest-all.cc",
  ]

  include_dirs = [
    "googletest/googletest",
    "googletest/googlemock",
  ]

  all_dependent_configs = [ ":gtest_config" ]
}

source_set("gtest_main") {
  testonly = true

  sources = [
    "googletest/googlemock/src/gmock_main.cc",
  ]

  deps = [
    ":gtest",
  ]
}

linux_kernel("linux") {
  kernel_dir = "linux"
  prebuilt = "//prebuilts/linux-aarch64/linux/vmlinuz"
}
