Not to use iree_c_module to compile emitc vmvx This CL is similar with https://spacebeaker-review.googlesource.com/c/shodan/sw/vec-iree/+/26228. It is used to fix long compilation time for EmitC VMVX. Change-Id: I1f0698fe8b8c30a96afa22a487a24e9f9e5ec045
diff --git a/cmake/springbok_static_module.cmake b/cmake/springbok_static_module.cmake index 06a0aed..b7295bb 100644 --- a/cmake/springbok_static_module.cmake +++ b/cmake/springbok_static_module.cmake
@@ -92,7 +92,6 @@ endif() if(_RULE_EMITC) - # TODO(b/245584726): iree_c_module causes long build time for some models set(_O_FILE_NAME "${_RULE_NAME}_c.o") set(_H_FILE_NAME "${_RULE_NAME}_emitc.h") set(_MODULE_NAME "${_RULE_NAME}_emitc")
diff --git a/cmake/springbok_vmvx_module.cmake b/cmake/springbok_vmvx_module.cmake index 687b3ef..479fad6 100644 --- a/cmake/springbok_vmvx_module.cmake +++ b/cmake/springbok_vmvx_module.cmake
@@ -78,20 +78,34 @@ endif() if(_RULE_EMITC) - list(APPEND _COMPILER_ARGS "--iree-vm-target-index-bits=32") set(_MODULE_NAME "${_RULE_NAME}_emitc") set(_H_FILE_NAME "${_RULE_NAME}_emitc.h") - iree_c_module( - NAME - ${_MODULE_NAME} - SRC - "${_MLIR_SRC}" - FLAGS - ${_COMPILER_ARGS} - H_FILE_OUTPUT - "${_H_FILE_NAME}" - NO_RUNTIME + + get_filename_component(_MLIR_SRC "${_MLIR_SRC}" REALPATH) + list(APPEND _COMPILER_ARGS "--iree-vm-target-index-bits=32") + list(APPEND _COMPILER_ARGS "--output-format=vm-c") + list(APPEND _COMPILER_ARGS "${_MLIR_SRC}") + list(APPEND _COMPILER_ARGS "-o") + list(APPEND _COMPILER_ARGS "${_H_FILE_NAME}") + + add_custom_command( + OUTPUT ${_H_FILE_NAME} + COMMAND ${_COMPILER_TOOL} ${_COMPILER_ARGS} + DEPENDS ${_COMPILER_TOOL} ${_MLIR_SRC} ) + + set(_EMITC_LIB_NAME "${_PACKAGE_NAME}_${_MODULE_NAME}") + add_library(${_EMITC_LIB_NAME} + ${_H_FILE_NAME} + ) + target_compile_definitions(${_EMITC_LIB_NAME} PUBLIC EMITC_IMPLEMENTATION=\"${_H_FILE_NAME}\") + SET_TARGET_PROPERTIES( + ${_EMITC_LIB_NAME} + PROPERTIES + LINKER_LANGUAGE C + ) + add_library(${_PACKAGE_NS}::${_MODULE_NAME} ALIAS ${_EMITC_LIB_NAME}) + else() # bytecode module path # Generate the embed data with the bytecode module. set(_MODULE_NAME "${_RULE_NAME}")