| # Copyright 2026 The IREE Authors | |
| # | |
| # Licensed under the Apache License v2.0 with LLVM Exceptions. | |
| # See https://llvm.org/LICENSE.txt for license information. | |
| # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | |
| # iree_vmasm_module() | |
| # | |
| # Builds an IREE bytecode module from VM assembly. | |
| # | |
| # Parameters: | |
| # NAME: Name of target. | |
| # SRC: Source file to assemble into a bytecode module. | |
| # MODULE_FILE_NAME: Optional output bytecode module file name. Defaults to | |
| # ${NAME}.vmfb. | |
| # ASSEMBLE_TOOL: Assembler tool target or executable path to invoke. Defaults | |
| # to iree-as-module. | |
| # C_IDENTIFIER: Identifier to use for generated C embed code. If omitted then | |
| # no C embed code will be generated. | |
| # DEPS: Library dependencies to add to the generated embed cc library. | |
| # TESTONLY: When added, this target will only be built if IREE_BUILD_TESTS=ON. | |
| # PUBLIC: Add this so that generated libraries are exported under ${PACKAGE}::. | |
| function(iree_vmasm_module) | |
| cmake_parse_arguments( | |
| _RULE | |
| "PUBLIC;TESTONLY" | |
| "NAME;SRC;MODULE_FILE_NAME;ASSEMBLE_TOOL;C_IDENTIFIER" | |
| "DEPS" | |
| ${ARGN} | |
| ) | |
| if(_RULE_TESTONLY AND NOT IREE_BUILD_TESTS) | |
| return() | |
| endif() | |
| if(DEFINED _RULE_ASSEMBLE_TOOL) | |
| set(_ASSEMBLE_TOOL ${_RULE_ASSEMBLE_TOOL}) | |
| elseif(IREE_HOST_BIN_DIR) | |
| set(_ASSEMBLE_TOOL "${IREE_HOST_BIN_DIR}/iree-as-module") | |
| else() | |
| set(_ASSEMBLE_TOOL "iree-as-module") | |
| endif() | |
| if(TARGET "${_ASSEMBLE_TOOL}") | |
| set(_ASSEMBLE_TOOL_COMMAND "$<TARGET_FILE:${_ASSEMBLE_TOOL}>") | |
| else() | |
| set(_ASSEMBLE_TOOL_COMMAND "${_ASSEMBLE_TOOL}") | |
| endif() | |
| if(DEFINED _RULE_MODULE_FILE_NAME) | |
| set(_MODULE_FILE_NAME "${_RULE_MODULE_FILE_NAME}") | |
| else() | |
| set(_MODULE_FILE_NAME "${_RULE_NAME}.vmfb") | |
| endif() | |
| get_filename_component(_SRC_PATH "${_RULE_SRC}" REALPATH) | |
| add_custom_command( | |
| OUTPUT | |
| "${_MODULE_FILE_NAME}" | |
| COMMAND | |
| ${_ASSEMBLE_TOOL_COMMAND} | |
| "--output=${_MODULE_FILE_NAME}" | |
| "${_SRC_PATH}" | |
| DEPENDS | |
| "${_SRC_PATH}" | |
| ${_ASSEMBLE_TOOL} | |
| COMMENT | |
| "Assembling IREE VM module ${_RULE_NAME}" | |
| VERBATIM | |
| ) | |
| iree_package_name(_PACKAGE_NAME) | |
| add_custom_target("${_PACKAGE_NAME}_${_RULE_NAME}" | |
| DEPENDS | |
| "${_MODULE_FILE_NAME}" | |
| ) | |
| if(_RULE_TESTONLY) | |
| set(_TESTONLY_ARG "TESTONLY") | |
| endif() | |
| if(_RULE_PUBLIC) | |
| set(_PUBLIC_ARG "PUBLIC") | |
| endif() | |
| if(_RULE_C_IDENTIFIER) | |
| iree_c_embed_data( | |
| NAME | |
| "${_RULE_NAME}_c" | |
| SRCS | |
| "${_MODULE_FILE_NAME}" | |
| C_FILE_OUTPUT | |
| "${_RULE_NAME}_c.c" | |
| H_FILE_OUTPUT | |
| "${_RULE_NAME}_c.h" | |
| IDENTIFIER | |
| "${_RULE_C_IDENTIFIER}" | |
| FLATTEN | |
| "${_PUBLIC_ARG}" | |
| "${_TESTONLY_ARG}" | |
| DEPS | |
| ${_RULE_DEPS} | |
| ) | |
| endif() | |
| endfunction() |