################################################################################
# Autogenerated by build_tools/bazel_to_cmake/bazel_to_cmake.py from           #
# runtime/src/iree/task/BUILD.bazel                                            #
#                                                                              #
# Use iree_cmake_extra_content from iree/build_defs.oss.bzl to add arbitrary   #
# CMake-only content.                                                          #
#                                                                              #
# To disable autogeneration for this file entirely, delete this header.        #
################################################################################

iree_add_all_subdirs()

# Task-based executor requires threading support.
if(NOT IREE_ENABLE_THREADING)
  return()
endif()

# cpuinfo can be conditionally disabled when it is not supported.
# If disabled then by default the task system will use 1 thread.
set(IREE_CPUINFO_TARGET)
if(IREE_ENABLE_CPUINFO)
  set(IREE_CPUINFO_TARGET cpuinfo)
endif()

iree_cc_library(
  NAME
    api
  HDRS
    "api.h"
  SRCS
    "api.c"
  DEPS
    ::task
    iree::base
    iree::base::internal::flags
  PUBLIC
)

iree_cc_library(
  NAME
    task
  HDRS
    "affinity_set.h"
    "executor.h"
    "list.h"
    "poller.h"
    "pool.h"
    "queue.h"
    "scope.h"
    "submission.h"
    "task.h"
    "topology.h"
    "tuning.h"
  SRCS
    "executor.c"
    "executor_impl.h"
    "list.c"
    "poller.c"
    "pool.c"
    "post_batch.c"
    "post_batch.h"
    "queue.c"
    "scope.c"
    "submission.c"
    "task.c"
    "task_impl.h"
    "topology.c"
    "topology_cpuinfo.c"
    "topology_darwin.c"
    "topology_emscripten.c"
    "topology_win32.c"
    "worker.c"
    "worker.h"
  DEPS
    ${IREE_CPUINFO_TARGET}
    iree::base
    iree::base::internal
    iree::base::internal::atomic_slist
    iree::base::internal::cpu
    iree::base::internal::event_pool
    iree::base::internal::fpu_state
    iree::base::internal::prng
    iree::base::internal::synchronization
    iree::base::internal::threading
    iree::base::internal::wait_handle
  PUBLIC
)

iree_cc_test(
  NAME
    executor_demo
  SRCS
    "executor_demo.cc"
  DEPS
    ::task
    iree::base
    iree::base::internal::prng
    iree::task::testing::test_util
)

iree_cc_test(
  NAME
    executor_test
  SRCS
    "executor_test.cc"
  DEPS
    ::task
    iree::base
    iree::task::testing::test_util
    iree::testing::gtest
    iree::testing::gtest_main
)

iree_cc_test(
  NAME
    list_test
  SRCS
    "list_test.cc"
  DEPS
    ::task
    iree::base
    iree::task::testing::test_util
    iree::testing::gtest
    iree::testing::gtest_main
)

iree_cc_test(
  NAME
    pool_test
  SRCS
    "pool_test.cc"
  DEPS
    ::task
    iree::base
    iree::task::testing::test_util
    iree::testing::gtest
    iree::testing::gtest_main
)

iree_cc_test(
  NAME
    queue_test
  SRCS
    "queue_test.cc"
  DEPS
    ::task
    iree::base
    iree::base::internal::threading
    iree::task::testing::test_util
    iree::testing::gtest
    iree::testing::gtest_main
)

iree_cc_test(
  NAME
    scope_test
  SRCS
    "scope_test.cc"
    "task_impl.h"
  DEPS
    ::task
    iree::base
    iree::task::testing::test_util
    iree::testing::gtest
    iree::testing::gtest_main
)

iree_cc_test(
  NAME
    task_tests
  SRCS
    "task_test_barrier.cc"
    "task_test_call.cc"
    "task_test_dispatch.cc"
    "task_test_fence.cc"
    "task_test_nop.cc"
    "task_test_wait.cc"
  DEPS
    ::task
    iree::base
    iree::task::testing::task_test
    iree::testing::gtest
    iree::testing::gtest_main
)

iree_cc_test(
  NAME
    topology_test
  SRCS
    "topology_test.cc"
  DEPS
    ::task
    iree::base
    iree::testing::gtest
    iree::testing::gtest_main
  LABELS
    "noasan"
)

### BAZEL_TO_CMAKE_PRESERVES_ALL_CONTENT_BELOW_THIS_LINE ###

if(NOT IREE_ENABLE_CPUINFO)
  target_compile_definitions(iree_task_task
    PUBLIC
      "IREE_TASK_CPUINFO_DISABLED=1"
  )
endif()
