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

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::base
    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-backends=vmvx"
  PUBLIC
)

iree_native_test(
  NAME
    "simple_embedding_vmvx_sync_test"
  SRC
    ::simple_embedding_vmvx_sync
)

endif()

if(IREE_HAL_DRIVER_LOCAL_SYNC AND IREE_HAL_EXECUTABLE_LOADER_EMBEDDED_ELF AND
   (IREE_TARGET_BACKEND_LLVM_CPU OR DEFINED IREE_HOST_BINARY_ROOT))

iree_cc_binary(
  NAME
    simple_embedding_embedded_sync
  SRCS
    "device_embedded_sync.c"
    "simple_embedding.c"
  DEPS
    ::simple_embedding_test_bytecode_module_cpu_arm_32_c
    ::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::base
    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-backends=llvm-cpu"
    "--iree-llvm-target-triple=x86_64-pc-linux-elf"
    "--iree-llvm-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-backends=llvm-cpu"
    "--iree-llvm-target-triple=riscv32-pc-linux-elf"
    "--iree-llvm-target-cpu=generic-rv32"
    "--iree-llvm-target-cpu-features=+m,+f"
    "--iree-llvm-target-abi=ilp32"
    "--iree-llvm-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-backends=llvm-cpu"
    "--iree-llvm-target-triple=riscv64-pc-linux-elf"
    "--iree-llvm-target-cpu=generic-rv64"
    "--iree-llvm-target-cpu-features=+m,+a,+f,+d,+c"
    "--iree-llvm-target-abi=lp64d"
    "--iree-llvm-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_32
  SRC
    "simple_embedding_test.mlir"
  C_IDENTIFIER
    "iree_samples_simple_embedding_test_module_cpu_arm_32"
  FLAGS
    "--iree-hal-target-backends=llvm-cpu"
    "--iree-llvm-target-triple=armv7a-pc-linux-elf"
    "--iree-llvm-target-float-abi=hard"
    "--iree-llvm-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-backends=llvm-cpu"
    "--iree-llvm-target-triple=aarch64-pc-linux-elf"
    "--iree-llvm-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_64_c
    ::simple_embedding_test_bytecode_module_cpu_x86_64_c
    iree::base
    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 DEFINED IREE_HOST_BINARY_ROOT))

iree_cc_binary(
  NAME
    simple_embedding_vulkan
  SRCS
    "device_vulkan.c"
    "simple_embedding.c"
  DEPS
    ::simple_embedding_test_bytecode_module_vulkan_c
    iree::base
    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-backends=vulkan-spirv"
    "--iree-llvm-debug-symbols=false"
  PUBLIC
)

iree_native_test(
  NAME
    "simple_embedding_vulkan_test"
  SRC
    ::simple_embedding_vulkan
)

endif()

### BAZEL_TO_CMAKE_PRESERVES_ALL_CONTENT_BELOW_THIS_LINE ###
