blob: 752d99edb9b10258b42119655456b7da105abd63 [file] [log] [blame]
# Copyright 2023 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# sparrow_modules()
#
# A wrapper for the sparrow_static_module and sparrow_vmvx_module to apply common iree-compile 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.
# TFLITE_OUTPUT: TFLite output array name
# RVV_OFF: Indicate RVV is OFF (default: ON)
# VMVX: Compile VMVX backend
# INLINE_HAL: Use inline HAL.
#
# Examples:
# sparrow_modules(
# NAME
# dare_devel
# SRC
# "daredevil_quant.tflite"
# C_IDENTIFIER
# "daredevil_bytecode_module_static"
# FLAGS
# "-iree-input-type=tosa"
# )
#
# sparrow_modules(
# NAME
# simple_float_mul
# SRC
# "simple_float_mul.mlir"
# C_IDENTIFIER
# "simple_float_mul"
# FLAGS
# "-iree-input-type=mhlo"
# RVV_OFF
# PUBLIC
# )
#
function(sparrow_modules)
cmake_parse_arguments(
_RULE
"PUBLIC;RVV_OFF;VMVX;INLINE_HAL"
"NAME;SRC;C_IDENTIFIER;TFLITE_OUTPUT"
"FLAGS"
${ARGN}
)
if (${_RULE_RVV_OFF} OR (NOT ${BUILD_WITH_RVV}))
set(_RVV_OFF_ARG "RVV_OFF")
endif()
if (${_RULE_INLINE_HAL})
set(_INLINE_HAL_ARG "INLINE_HAL")
endif()
sparrow_static_module(
NAME
"${_RULE_NAME}_bytecode_module_static"
SRC
"${_RULE_SRC}"
C_IDENTIFIER
"${_RULE_C_IDENTIFIER}_bytecode_module_static"
TFLITE_OUTPUT
"${_RULE_TFLITE_OUTPUT}"
FLAGS
"${_RULE_FLAGS}"
"${_RVV_OFF_ARG}"
"${_INLINE_HAL_ARG}"
)
sparrow_static_module(
NAME
"${_RULE_NAME}_c_module_static"
SRC
"${_RULE_SRC}"
TFLITE_OUTPUT
"${_RULE_TFLITE_OUTPUT}"
FLAGS
"${_RULE_FLAGS}"
"${_RVV_OFF_ARG}"
"${_INLINE_HAL_ARG}"
EMITC
)
if (${_RULE_VMVX})
sparrow_vmvx_module(
NAME
"${_RULE_NAME}_bytecode_module_vmvx"
SRC
"${_RULE_SRC}"
C_IDENTIFIER
"${_RULE_C_IDENTIFIER}_bytecode_module_vmvx"
TFLITE_OUTPUT
"${_RULE_TFLITE_OUTPUT}"
FLAGS
"${_RULE_FLAGS}"
"${_INLINE_HAL_ARG}"
)
sparrow_vmvx_module(
NAME
"${_RULE_NAME}_c_module_vmvx"
SRC
"${_RULE_SRC}"
TFLITE_OUTPUT
"${_RULE_TFLITE_OUTPUT}"
FLAGS
"${_RULE_FLAGS}"
"${_INLINE_HAL_ARG}"
EMITC
)
endif()
endfunction()