################################################################################
# Autogenerated by build_tools/bazel_to_cmake/bazel_to_cmake.py from           #
# runtime/src/iree/builtins/ukernel/arch/riscv_64/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()

iree_compiler_targeting_iree_arch(_IREE_UKERNEL_BITCODE_BUILD_RISCV_64 "riscv_64")
if(_IREE_UKERNEL_BITCODE_BUILD_RISCV_64)

iree_bitcode_library(
  NAME
    ukernel_bitcode_arch_riscv_64_entry_points
  ARCH
    riscv_64
  INTERNAL_HDRS
    "${PROJECT_BINARY_DIR}/runtime/src/iree/builtins/ukernel/internal_headers_filegroup.stamp"
    "${PROJECT_BINARY_DIR}/runtime/src/iree/schemas/cpu_data_headers_filegroup.stamp"
    "common_riscv_64.h"
    "mmt4d_riscv_64_internal.h"
    "mmt4d_riscv_64_tiles.inl"
    "pack_riscv_64_internal.h"
    "unpack_riscv_64_internal.h"
  SRCS
    "mmt4d_riscv_64_entry_point.c"
    "pack_riscv_64_entry_point.c"
    "unpack_riscv_64_entry_point.c"
)

iree_bitcode_library(
  NAME
    ukernel_bitcode_arch_riscv_64_v
  ARCH
    riscv_64
  INTERNAL_HDRS
    "${PROJECT_BINARY_DIR}/runtime/src/iree/builtins/ukernel/internal_headers_filegroup.stamp"
    "${PROJECT_BINARY_DIR}/runtime/src/iree/schemas/cpu_data_headers_filegroup.stamp"
    "common_riscv_64.h"
    "mmt4d_riscv_64_internal.h"
    "mmt4d_riscv_64_tiles.inl"
    "pack_riscv_64_internal.h"
    "unpack_riscv_64_internal.h"
  SRCS
    "mmt4d_riscv_64_v.c"
  COPTS
    "-march=rv64gcv"
)

iree_bitcode_library(
  NAME
    ukernel_bitcode_arch_riscv_64_zvfhmin
  ARCH
    riscv_64
  INTERNAL_HDRS
    "${PROJECT_BINARY_DIR}/runtime/src/iree/builtins/ukernel/internal_headers_filegroup.stamp"
    "${PROJECT_BINARY_DIR}/runtime/src/iree/schemas/cpu_data_headers_filegroup.stamp"
    "common_riscv_64.h"
    "mmt4d_riscv_64_internal.h"
    "mmt4d_riscv_64_tiles.inl"
    "pack_riscv_64_internal.h"
    "unpack_riscv_64_internal.h"
  SRCS
    "mmt4d_riscv_64_zvfhmin.c"
  COPTS
    "-march=rv64gc_zvfhmin"
)

iree_bitcode_library(
  NAME
    ukernel_bitcode_arch_riscv_64_zvfh
  ARCH
    riscv_64
  INTERNAL_HDRS
    "${PROJECT_BINARY_DIR}/runtime/src/iree/builtins/ukernel/internal_headers_filegroup.stamp"
    "${PROJECT_BINARY_DIR}/runtime/src/iree/schemas/cpu_data_headers_filegroup.stamp"
    "common_riscv_64.h"
    "mmt4d_riscv_64_internal.h"
    "mmt4d_riscv_64_tiles.inl"
    "pack_riscv_64_internal.h"
    "unpack_riscv_64_internal.h"
  SRCS
    "mmt4d_riscv_64_zvfh.c"
  COPTS
    "-march=rv64gc_zvfh"
)

iree_link_bitcode(
  NAME
    ukernel_bitcode_arch_riscv_64
  SRCS
    "ukernel_bitcode_arch_riscv_64_entry_points.bc"
    "ukernel_bitcode_arch_riscv_64_v.bc"
    "ukernel_bitcode_arch_riscv_64_zvfh.bc"
    "ukernel_bitcode_arch_riscv_64_zvfhmin.bc"

)

elseif(IREE_BUILD_COMPILER AND IREE_TARGET_BACKEND_LLVM_CPU)
iree_make_empty_file("${CMAKE_CURRENT_BINARY_DIR}/ukernel_bitcode_arch_riscv_64.bc")
endif()  # _IREE_UKERNEL_BITCODE_BUILD_RISCV_64

### BAZEL_TO_CMAKE_PRESERVES_ALL_CONTENT_BELOW_THIS_LINE ###

if (NOT (IREE_ARCH STREQUAL "riscv_64"))
  return()
endif()

iree_select_compiler_opts(IREE_UK_COPTS_RISCV_64_V
  CLANG_OR_GCC
    "-march=rv64gv"
)

iree_select_compiler_opts(IREE_UK_COPTS_RISCV_64_ZVFHMIN
  CLANG_OR_GCC
    "-march=rv64gc_zvfhmin"
)

iree_select_compiler_opts(IREE_UK_COPTS_RISCV_64_ZVFH
  CLANG_OR_GCC
    "-march=rv64gc_zvfh"
)

check_cxx_compiler_flag("${IREE_UK_COPTS_RISCV_64_V}" IREE_UK_BUILD_RISCV_64_V)
check_cxx_compiler_flag("${IREE_UK_COPTS_RISCV_64_ZVFH}" IREE_UK_BUILD_RISCV_64_ZVFH)

# CPU features that we will try checking compiler support for, unless
# we set them to OFF below.

set(IREE_UK_TRY_RISCV_64_ZVFHMIN ON)

# Compiler emits '__extendhfsf2' call for the
# C code below. So, the following test checks whether
# compiler can link '__extendhfsf2' successfully.
# This is needed because riscv toolchain used by
# 'Test RISC-V 64 CI job' fails to link '__extendhfsf2'
# builtin. See: https://github.com/iree-org/iree/issues/22303.
# Once this issue is resolved, we won't need this check.
if(IREE_UK_TRY_RISCV_64_ZVFHMIN)
  string(REPLACE ";" " " CMAKE_REQUIRED_FLAGS "${IREE_UK_COPTS_RISCV_64_ZVFHMIN}")
  string(JOIN "\n" IREE_UK_BUILD_RISCV_64_ZVFHMIN_ZVFH_TEST
"int main() {"
"  volatile _Float16 val_f16 = 100.0;"
"  volatile float val_f32 = (float)val_f16;"
"  return 0;"
"}"
  )
  check_c_source_compiles(
    "${IREE_UK_BUILD_RISCV_64_ZVFHMIN_ZVFH_TEST}"
    IREE_UK_BUILD_RISCV_64_ZVFHMIN
  )
  unset(CMAKE_REQUIRED_FLAGS)
else()
  set(IREE_UK_BUILD_RISCV_64_ZVFHMIN OFF)
endif()

configure_file("config_riscv_64.h.in" "config_riscv_64.h")

iree_cc_library(
  NAME
    common_riscv_64
  HDRS
    "common_riscv_64.h"
  DEPS
    iree::builtins::ukernel::internal_headers
    iree::schemas::cpu_data
)
set(IREE_UK_RISCV_64_DEPS "")

if(IREE_UK_BUILD_RISCV_64_V)
iree_cc_library(
  NAME
    riscv_64_v
  SRCS
    "mmt4d_riscv_64_v.c"
  COPTS
    "${IREE_UK_COPTS_RISCV_64_V}"
  DEPS
    iree::builtins::ukernel::internal_headers
)
list(APPEND IREE_UK_RISCV_64_DEPS "::riscv_64_v")
endif()  # IREE_UK_BUILD_RISCV_64_V

if(IREE_UK_BUILD_RISCV_64_ZVFHMIN)
iree_cc_library(
  NAME
    riscv_64_zvfhmin
  SRCS
    "mmt4d_riscv_64_zvfhmin.c"
  COPTS
    "${IREE_UK_COPTS_RISCV_64_ZVFHMIN}"
  DEPS
    iree::builtins::ukernel::internal_headers
)
list(APPEND IREE_UK_RISCV_64_DEPS "::riscv_64_zvfhmin")
endif()  # IREE_UK_BUILD_RISCV_64_ZVFHMIN

if(IREE_UK_BUILD_RISCV_64_ZVFH)
iree_cc_library(
  NAME
    riscv_64_zvfh
  SRCS
    "mmt4d_riscv_64_zvfh.c"
  COPTS
    "${IREE_UK_COPTS_RISCV_64_ZVFH}"
  DEPS
    iree::builtins::ukernel::internal_headers
)
list(APPEND IREE_UK_RISCV_64_DEPS "::riscv_64_zvfh")
endif()  # IREE_UK_BUILD_RISCV_64_ZVFH

iree_cc_library(
  NAME
    riscv_64
  SRCS
    "mmt4d_riscv_64_entry_point.c"
    "pack_riscv_64_entry_point.c"
    "unpack_riscv_64_entry_point.c"
    "query_tile_sizes_riscv_64_entry_point.c"
  DEPS
    ::common_riscv_64
    iree::base::core_headers
    iree::schemas::cpu_data
    iree::builtins::ukernel::internal_headers
    ${IREE_UK_RISCV_64_DEPS}
  PUBLIC
)

set(IREE_UK_ARCH_DEPS "iree::builtins::ukernel::arch::riscv_64" PARENT_SCOPE)
