chromium/third_party/pthreadpool/BUILD.gn

# Copyright 2022 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//build/config/android/config.gni")
import("//testing/test.gni")

config("pthreadpool_config") {
  include_dirs = [
    "src/include",
    "src/src",
  ]

  # The platform-specific synchronizations are not needed for Chromium Jobs
  # API integration.
  defines = [
    "PTHREADPOOL_USE_EVENT=0",
    "PTHREADPOOL_USE_FUTEX=0",
    "PTHREADPOOL_USE_GCD=0",
    "PTHREADPOOL_USE_CONDVAR=0",
  ]
}

# This is a target that depends on //base.
source_set("pthreadpool") {
  public = [ "src/include/pthreadpool.h" ]

  sources = [
    "src/src/fastpath.c",
    "src/src/memory.c",
    "src/src/portable-api.c",
    "src/src/threadpool-atomics.h",
    "src/src/threadpool-common.h",
    "src/src/threadpool-object.h",
    "src/src/threadpool-utils.h",
  ]

  # Use Chromium Jobs API.
  sources += [ "chromium/jobs.cc" ]

  configs -= [ "//build/config/compiler:chromium_code" ]
  configs += [ "//build/config/compiler:no_chromium_code" ]

  public_configs = [ ":pthreadpool_config" ]

  deps = [
    "//base",
    "//third_party/fxdiv",
  ]
}

test("pthreadpool_unittests") {
  testonly = true

  sources = [ "chromium/pthreadpool_unittests.cc" ]

  public_configs = [ ":pthreadpool_config" ]

  deps = [
    ":pthreadpool",
    "//base/test:run_all_unittests",
    "//base/test:test_support",
    "//testing/gtest",
  ]
}

config("pthreadpool_standalone_config") {
  include_dirs = [
    "src/include",
    "src/src",
  ]
  defines = [ "PTHREADPOOL_USE_GCD=0" ]
}

# This is a target that cannot depend on //base.
source_set("pthreadpool_standalone") {
  public = [ "src/include/pthreadpool.h" ]

  sources = [
    "src/src/fastpath.c",
    "src/src/memory.c",
    "src/src/portable-api.c",
    "src/src/threadpool-atomics.h",
    "src/src/threadpool-common.h",
    "src/src/threadpool-object.h",
    "src/src/threadpool-utils.h",
  ]

  if (is_win) {
    sources += [ "src/src/windows.c" ]
  } else {
    sources += [ "src/src/pthreads.c" ]
  }

  if (!(is_android && use_order_profiling)) {
    assert_no_deps = [ "//base" ]
  }

  configs -= [ "//build/config/compiler:chromium_code" ]
  configs += [ "//build/config/compiler:no_chromium_code" ]
  configs += [ "//build/config/sanitizers:cfi_icall_disable" ]

  public_configs = [ ":pthreadpool_standalone_config" ]

  deps = [ "//third_party/fxdiv" ]
}