blob: 427139e069204b4758afdac8a826b68db1df63a5 [file] [log] [blame]
include(CMakeParseArguments)
# springbok_bytecode_module()
#
# A wrapper for the iree_bytecode_module to apply common iree-translate flags
# Parameters:
# NAME: Name of target.
# SRC: Source file to compile into a bytecode module. Support relative path.
# FLAGS: Flags to pass to the translation tool (list of strings).
# C_IDENTIFIER: Identifier to use for generate c embed code.
# If omitted then no C embed code will be generated.
#
# Examples:
# springbok_bytecode_module(
# NAME
# dare_devel_bytecode_module_dylib
# SRC
# "daredevil_quant.tflite"
# C_IDENTIFIER
# "daredevil_bytecode_module_dylib"
# FLAGS
# "-iree-input-type=tosa"
# )
#
# springbok_bytecode_module(
# NAME
# simple_float_mul_bytecode_module_dylib
# SRC
# "simple_float_mul.mlir"
# C_IDENTIFIER
# "simple_float_mul_bytecode_module_dylib"
# FLAGS
# "-iree-input-type=mhlo"
# PUBLIC
# )
#
function(springbok_bytecode_module)
cmake_parse_arguments(
_RULE
""
"NAME;SRC;C_IDENTIFIER"
"FLAGS"
${ARGN}
)
set(_MLIR_SRC "${_RULE_SRC}")
string(FIND "${_RULE_SRC}" ".tflite" _IS_TFLITE REVERSE)
if(${_IS_TFLITE} GREATER 0)
find_program(IREE_IMPORT_TFLITE_TOOL "iree-import-tflite" REQUIRED)
set(_MLIR_SRC "${CMAKE_CURRENT_BINARY_DIR}/${_RULE_NAME}.mlir")
get_filename_component(_SRC_PATH "${_RULE_SRC}" REALPATH)
set(_ARGS "${_SRC_PATH}")
list(APPEND _ARGS "-o")
list(APPEND _ARGS "${_RULE_NAME}.mlir")
# Only add the custom_command here. The output is passed to
# iree_bytecode_module as the source.
add_custom_command(
OUTPUT
"${_RULE_NAME}.mlir"
COMMAND
${IREE_IMPORT_TFLITE_TOOL}
${_ARGS}
DEPENDS
${IREE_IMPORT_TFLITE_TOOL}
)
endif()
iree_bytecode_module(
NAME
"${_RULE_NAME}"
SRC
"${_MLIR_SRC}"
C_IDENTIFIER
"${_RULE_C_IDENTIFIER}"
FLAGS
"-iree-mlir-to-vm-bytecode-module"
"-iree-hal-target-backends=dylib-llvm-aot"
"-iree-llvm-target-triple=riscv32-pc-linux-elf"
"-iree-llvm-target-cpu=generic-rv32"
"-iree-llvm-target-cpu-features=+m,+f,+experimental-v"
"-iree-llvm-target-abi=ilp32"
"-iree-llvm-link-embedded=true"
"-iree-llvm-debug-symbols=false"
"${_RULE_FLAGS}"
PUBLIC
)
endfunction()