# This file was generated by the YaTool build system (https://github.com/yandex/yatool),
# from a source YaTool build configuration provided in ya.make files.
#
# If the repository supports both CMake and ya build configurations, please modify both of them.
#
# If only CMake build configuration is supported then modify only CMake files and note that only
# simple modifications are allowed like adding source-files to targets or adding simple properties
# like target_include_directories. These modifications will be ported to original ya.make files
# by maintainers. Any complex modifications which can't be easily ported back to the ya build
# system may be rejected.
#
# Please refer to the build instructions in the repository for more information about manual
# changes in this file.

add_subdirectory(ut)

add_library(catboost-cuda-cuda_lib)


target_link_libraries(catboost-cuda-cuda_lib PUBLIC
  contrib-libs-cxxsupp
  yutil
  catboost-libs-helpers
  catboost-libs-logging
  library-cpp-blockcodecs
  cpp-cuda-exception
  cpp-cuda-wrappers
  cpp-threading-future
  cpp-threading-local_executor
  cpp-threading-name_guard
  internal-platform-cuda
)

target_sources(catboost-cuda-cuda_lib PRIVATE
  ${PROJECT_SOURCE_DIR}/catboost/cuda/cuda_lib/cache.cpp
  ${PROJECT_SOURCE_DIR}/catboost/cuda/cuda_lib/column_aligment_helper.cpp
  ${PROJECT_SOURCE_DIR}/catboost/cuda/cuda_lib/cpu_reducers.cpp
  ${PROJECT_SOURCE_DIR}/catboost/cuda/cuda_lib/cuda_base.cpp
  ${PROJECT_SOURCE_DIR}/catboost/cuda/cuda_lib/cuda_buffer.cpp
  ${PROJECT_SOURCE_DIR}/catboost/cuda/cuda_lib/cuda_buffer_helpers/buffer_resharding.cpp
  ${PROJECT_SOURCE_DIR}/catboost/cuda/cuda_lib/cuda_events_provider.cpp
  ${PROJECT_SOURCE_DIR}/catboost/cuda/cuda_lib/cuda_kernel_buffer.cpp
  ${PROJECT_SOURCE_DIR}/catboost/cuda/cuda_lib/cuda_manager.cpp
  ${PROJECT_SOURCE_DIR}/catboost/cuda/cuda_lib/cuda_profiler.cpp
  ${PROJECT_SOURCE_DIR}/catboost/cuda/cuda_lib/device_id.cpp
  ${PROJECT_SOURCE_DIR}/catboost/cuda/cuda_lib/device_subtasks_helper.cpp
  ${PROJECT_SOURCE_DIR}/catboost/cuda/cuda_lib/devices_provider.cpp
  ${PROJECT_SOURCE_DIR}/catboost/cuda/cuda_lib/devices_list.cpp
  ${PROJECT_SOURCE_DIR}/catboost/cuda/cuda_lib/future/local_promise_future.cpp
  ${PROJECT_SOURCE_DIR}/catboost/cuda/cuda_lib/future/mpi_promise_future.cpp
  ${PROJECT_SOURCE_DIR}/catboost/cuda/cuda_lib/future/promise_factory.cpp
  ${PROJECT_SOURCE_DIR}/catboost/cuda/cuda_lib/fwd.cpp
  ${PROJECT_SOURCE_DIR}/catboost/cuda/cuda_lib/gpu_single_worker.cpp
  ${PROJECT_SOURCE_DIR}/catboost/cuda/cuda_lib/helpers.cpp
  ${PROJECT_SOURCE_DIR}/catboost/cuda/cuda_lib/hwloc_wrapper.cpp
  ${PROJECT_SOURCE_DIR}/catboost/cuda/cuda_lib/inter_device_stream_section.cpp
  ${PROJECT_SOURCE_DIR}/catboost/cuda/cuda_lib/kernel.cpp
  ${PROJECT_SOURCE_DIR}/catboost/cuda/cuda_lib/mapping.cpp
  ${PROJECT_SOURCE_DIR}/catboost/cuda/cuda_lib/memory_copy_performance.cpp
  ${PROJECT_SOURCE_DIR}/catboost/cuda/cuda_lib/memory_provider_trait.cpp
  ${PROJECT_SOURCE_DIR}/catboost/cuda/cuda_lib/memory_pool/stack_like_memory_pool.cpp
  ${PROJECT_SOURCE_DIR}/catboost/cuda/cuda_lib/mpi/mpi_manager.cpp
  ${PROJECT_SOURCE_DIR}/catboost/cuda/cuda_lib/peer_devices.cpp
  ${PROJECT_SOURCE_DIR}/catboost/cuda/cuda_lib/read_and_write_helpers.cpp
  ${PROJECT_SOURCE_DIR}/catboost/cuda/cuda_lib/remote_objects.cpp
  ${PROJECT_SOURCE_DIR}/catboost/cuda/cuda_lib/serialization/task_factory.cpp
  ${PROJECT_SOURCE_DIR}/catboost/cuda/cuda_lib/single_device.cpp
  ${PROJECT_SOURCE_DIR}/catboost/cuda/cuda_lib/slice.cpp
  ${PROJECT_SOURCE_DIR}/catboost/cuda/cuda_lib/stream_section_tasks_launcher.cpp
  ${PROJECT_SOURCE_DIR}/catboost/cuda/cuda_lib/tasks_impl/cpu_func.cpp
  ${PROJECT_SOURCE_DIR}/catboost/cuda/cuda_lib/tasks_impl/stream_section_task.cpp
  ${PROJECT_SOURCE_DIR}/catboost/cuda/cuda_lib/tasks_queue/mpi_task_queue.cpp
  ${PROJECT_SOURCE_DIR}/catboost/cuda/cuda_lib/tasks_queue/single_host_task_queue.cpp
  ${PROJECT_SOURCE_DIR}/catboost/cuda/cuda_lib/worker_state.cpp
)

target_cuda_sources(catboost-cuda-cuda_lib PRIVATE
  ${PROJECT_SOURCE_DIR}/catboost/cuda/cuda_lib/kernel/kernel.cu
  ${PROJECT_SOURCE_DIR}/catboost/cuda/cuda_lib/kernel/reduce.cu
)


target_cuda_flags(catboost-cuda-cuda_lib
  -Wno-deprecated-gpu-targets
)

add_global_library_for(catboost-cuda-cuda_lib.global
  catboost-cuda-cuda_lib)


target_link_libraries(catboost-cuda-cuda_lib.global PUBLIC
  contrib-libs-cxxsupp
  yutil
  catboost-libs-helpers
  catboost-libs-logging
  library-cpp-blockcodecs
  cpp-cuda-exception
  cpp-cuda-wrappers
  cpp-threading-future
  cpp-threading-local_executor
  cpp-threading-name_guard
  internal-platform-cuda
)

target_sources(catboost-cuda-cuda_lib.global PRIVATE
  ${PROJECT_SOURCE_DIR}/catboost/cuda/cuda_lib/cuda_buffer_helpers/reduce_scatter.cpp
  ${PROJECT_SOURCE_DIR}/catboost/cuda/cuda_lib/task.cpp
  ${PROJECT_SOURCE_DIR}/catboost/cuda/cuda_lib/tasks_impl/enable_peers.cpp
  ${PROJECT_SOURCE_DIR}/catboost/cuda/cuda_lib/tasks_impl/host_tasks.cpp
  ${PROJECT_SOURCE_DIR}/catboost/cuda/cuda_lib/tasks_impl/kernel_task.cpp
  ${PROJECT_SOURCE_DIR}/catboost/cuda/cuda_lib/tasks_impl/memory_allocation.cpp
  ${PROJECT_SOURCE_DIR}/catboost/cuda/cuda_lib/tasks_impl/memory_copy_tasks.cpp
  ${PROJECT_SOURCE_DIR}/catboost/cuda/cuda_lib/tasks_impl/memory_state_func.cpp
  ${PROJECT_SOURCE_DIR}/catboost/cuda/cuda_lib/tasks_impl/request_stream_task.cpp
)

if (USE_MPI)
  set(MPI_ASSUME_NO_BUILTIN_MPI 1)
  set(MPI_SKIP_COMPILER_WRAPPER 1)

  find_package(MPI REQUIRED)

  target_compile_definitions(catboost-cuda-cuda_lib PUBLIC USE_MPI)
  target_link_libraries(catboost-cuda-cuda_lib PUBLIC MPI::MPI_C)

  target_compile_definitions(catboost-cuda-cuda_lib.global PUBLIC USE_MPI)
  target_link_libraries(catboost-cuda-cuda_lib.global PUBLIC MPI::MPI_C)

  if (WITHOUT_CUDA_AWARE_MPI)
    target_compile_definitions(catboost-cuda-cuda_lib PUBLIC WITHOUT_CUDA_AWARE_MPI)
    target_compile_definitions(catboost-cuda-cuda_lib.global PUBLIC WITHOUT_CUDA_AWARE_MPI)
  endif()

  if (WRITE_MPI_MESSAGE_LOG)
    target_compile_definitions(catboost-cuda-cuda_lib PUBLIC WRITE_MPI_MESSAGE_LOG)
    target_compile_definitions(catboost-cuda-cuda_lib.global PUBLIC WRITE_MPI_MESSAGE_LOG)
  endif()
endif()
