################################################################################
# Autogenerated by build_tools/bazel_to_cmake/bazel_to_cmake.py from           #
# samples/simple_embedding/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()

if(IREE_HAL_DRIVER_LOCAL_SYNC AND IREE_HAL_EXECUTABLE_LOADER_VMVX_MODULE AND
   (IREE_TARGET_BACKEND_VMVX OR IREE_HOST_BIN_DIR))

iree_cc_binary(
  NAME
    simple_embedding_vmvx_sync
  SRCS
    "device_vmvx_sync.c"
    "simple_embedding.c"
  DEPS
    ::simple_embedding_test_bytecode_module_vmvx_c
    iree::async
    iree::async::util::proactor_pool
    iree::base
    iree::base::threading
    iree::hal
    iree::hal::drivers::local_sync::sync_driver
    iree::hal::local
    iree::hal::local::loaders::vmvx_module_loader
    iree::modules::hal
    iree::vm
    iree::vm::bytecode::module
)

iree_bytecode_module(
  NAME
    simple_embedding_test_bytecode_module_vmvx
  SRC
    "simple_embedding_test.mlir"
  C_IDENTIFIER
    "iree_samples_simple_embedding_test_module_vmvx"
  FLAGS
    "--iree-hal-target-device=local"
    "--iree-hal-local-target-device-backends=vmvx"
  PUBLIC
)

iree_native_test(
  NAME
    "simple_embedding_vmvx_sync_test"
  SRC
    ::simple_embedding_vmvx_sync
)

endif()

iree_compiler_targeting_iree_arch(_IREE_COMPILER_TARGETING_ARM_32 "arm_32")
iree_compiler_targeting_iree_arch(_IREE_COMPILER_TARGETING_ARM_64 "arm_64")
iree_compiler_targeting_iree_arch(_IREE_COMPILER_TARGETING_RISCV_32 "riscv_32")
iree_compiler_targeting_iree_arch(_IREE_COMPILER_TARGETING_RISCV_64 "riscv_64")
iree_compiler_targeting_iree_arch(_IREE_COMPILER_TARGETING_X86_64 "x86_64")
if(IREE_HAL_DRIVER_LOCAL_SYNC AND
   IREE_HAL_EXECUTABLE_LOADER_EMBEDDED_ELF AND
   ((IREE_TARGET_BACKEND_LLVM_CPU AND
    _IREE_COMPILER_TARGETING_ARM_32 AND
    _IREE_COMPILER_TARGETING_ARM_64 AND
    _IREE_COMPILER_TARGETING_RISCV_32 AND
    _IREE_COMPILER_TARGETING_RISCV_64 AND
    _IREE_COMPILER_TARGETING_X86_64) OR IREE_HOST_BIN_DIR))

iree_cc_binary(
  NAME
    simple_embedding_embedded_sync
  SRCS
    "device_embedded_sync.c"
    "simple_embedding.c"
  DEPS
    ::simple_embedding_test_bytecode_module_cpu_arm_64_c
    ::simple_embedding_test_bytecode_module_cpu_riscv_32_c
    ::simple_embedding_test_bytecode_module_cpu_riscv_64_c
    ::simple_embedding_test_bytecode_module_cpu_x86_64_c
    iree::async
    iree::async::util::proactor_pool
    iree::base
    iree::base::threading
    iree::hal
    iree::hal::drivers::local_sync::sync_driver
    iree::hal::local
    iree::hal::local::loaders::embedded_elf_loader
    iree::modules::hal
    iree::vm
    iree::vm::bytecode::module
)

iree_bytecode_module(
  NAME
    simple_embedding_test_bytecode_module_cpu_x86_64
  SRC
    "simple_embedding_test.mlir"
  C_IDENTIFIER
    "iree_samples_simple_embedding_test_module_cpu_x86_64"
  FLAGS
    "--iree-hal-target-device=local"
    "--iree-hal-local-target-device-backends=llvm-cpu"
    "--iree-llvmcpu-target-triple=x86_64-pc-linux-elf"
    "--iree-llvmcpu-target-cpu=generic"
    "--iree-llvmcpu-debug-symbols=false"
    "--iree-vm-bytecode-module-strip-source-map=true"
    "--iree-vm-emit-polyglot-zip=false"
  PUBLIC
)

iree_bytecode_module(
  NAME
    simple_embedding_test_bytecode_module_cpu_riscv_32
  SRC
    "simple_embedding_test.mlir"
  C_IDENTIFIER
    "iree_samples_simple_embedding_test_module_cpu_riscv_32"
  FLAGS
    "--iree-hal-target-device=local"
    "--iree-hal-local-target-device-backends=llvm-cpu"
    "--iree-llvmcpu-target-triple=riscv32-pc-linux-elf"
    "--iree-llvmcpu-target-cpu-features=+m,+f"
    "--iree-llvmcpu-target-abi=ilp32"
    "--iree-llvmcpu-debug-symbols=false"
    "--iree-vm-bytecode-module-strip-source-map=true"
    "--iree-vm-emit-polyglot-zip=false"
  PUBLIC
)

iree_bytecode_module(
  NAME
    simple_embedding_test_bytecode_module_cpu_riscv_64
  SRC
    "simple_embedding_test.mlir"
  C_IDENTIFIER
    "iree_samples_simple_embedding_test_module_cpu_riscv_64"
  FLAGS
    "--iree-hal-target-device=local"
    "--iree-hal-local-target-device-backends=llvm-cpu"
    "--iree-llvmcpu-target-triple=riscv64-pc-linux-elf"
    "--iree-llvmcpu-target-cpu-features=+m,+a,+f,+d,+c"
    "--iree-llvmcpu-target-abi=lp64d"
    "--iree-llvmcpu-debug-symbols=false"
    "--iree-vm-bytecode-module-strip-source-map=true"
    "--iree-vm-emit-polyglot-zip=false"
  PUBLIC
)

iree_bytecode_module(
  NAME
    simple_embedding_test_bytecode_module_cpu_arm_64
  SRC
    "simple_embedding_test.mlir"
  C_IDENTIFIER
    "iree_samples_simple_embedding_test_module_cpu_arm_64"
  FLAGS
    "--iree-hal-target-device=local"
    "--iree-hal-local-target-device-backends=llvm-cpu"
    "--iree-llvmcpu-target-triple=aarch64-pc-linux-elf"
    "--iree-llvmcpu-target-cpu=generic"
    "--iree-llvmcpu-debug-symbols=false"
    "--iree-vm-bytecode-module-strip-source-map=true"
    "--iree-vm-emit-polyglot-zip=false"
  PUBLIC
)

iree_native_test(
  NAME
    "simple_embedding_embedded_sync_test"
  SRC
    ::simple_embedding_embedded_sync
)

if(IREE_HAL_DRIVER_LOCAL_TASK AND IREE_HAL_EXECUTABLE_LOADER_EMBEDDED_ELF)

iree_cc_binary(
  NAME
    simple_embedding_embedded
  SRCS
    "device_embedded.c"
    "simple_embedding.c"
  DEPS
    ::simple_embedding_test_bytecode_module_cpu_arm_64_c
    ::simple_embedding_test_bytecode_module_cpu_riscv_32_c
    ::simple_embedding_test_bytecode_module_cpu_riscv_64_c
    ::simple_embedding_test_bytecode_module_cpu_x86_64_c
    iree::async
    iree::async::util::proactor_pool
    iree::base
    iree::base::threading
    iree::hal
    iree::hal::drivers::local_task::task_driver
    iree::hal::local
    iree::hal::local::loaders::embedded_elf_loader
    iree::modules::hal
    iree::task::api
    iree::vm
    iree::vm::bytecode::module
)

iree_native_test(
  NAME
    "simple_embedding_embedded_test"
  SRC
    ::simple_embedding_embedded
)

endif()

endif()

if(IREE_HAL_DRIVER_VULKAN AND
   (IREE_TARGET_BACKEND_VULKAN_SPIRV OR IREE_HOST_BIN_DIR))

iree_cc_binary(
  NAME
    simple_embedding_vulkan
  SRCS
    "device_vulkan.c"
    "simple_embedding.c"
  DEPS
    ::simple_embedding_test_bytecode_module_vulkan_c
    iree::async
    iree::async::util::proactor_pool
    iree::base
    iree::base::threading
    iree::hal
    iree::hal::drivers::vulkan::registration
    iree::modules::hal
    iree::vm
    iree::vm::bytecode::module
)

iree_bytecode_module(
  NAME
    simple_embedding_test_bytecode_module_vulkan
  SRC
    "simple_embedding_test.mlir"
  C_IDENTIFIER
    "iree_samples_simple_embedding_test_module_vulkan"
  FLAGS
    "--iree-hal-target-device=vulkan"
    "--iree-llvmcpu-debug-symbols=false"
  PUBLIC
)

iree_native_test(
  NAME
    "simple_embedding_vulkan_test"
  SRC
    ::simple_embedding_vulkan
  LABELS
    "driver=vulkan"
)

endif()

### BAZEL_TO_CMAKE_PRESERVES_ALL_CONTENT_BELOW_THIS_LINE ###
