| 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() |