Not to use iree_c_module to compile emitc static library Using iree_c_module to compile emitc static library caused very long build time for some models, e.g., barcode. The root cause is still under investigation. This CL is a workaround to not use iree_c_module and doesn't have this problem. BUG: 245584726 Change-Id: If8fa0dcda3604201a085bf51c08c19468a4b19bb
diff --git a/cmake/springbok_static_module.cmake b/cmake/springbok_static_module.cmake index 0853335..873c518 100644 --- a/cmake/springbok_static_module.cmake +++ b/cmake/springbok_static_module.cmake
@@ -87,22 +87,42 @@ list(APPEND _COMPILER_ARGS "-iree-llvm-link-embedded=false") 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") - iree_c_module( - NAME - ${_MODULE_NAME} - SRC - "${_MLIR_SRC}" - FLAGS - ${_COMPILER_ARGS} - H_FILE_OUTPUT - "${_H_FILE_NAME}" - STATIC_LIB_PATH - "${_O_FILE_NAME}" - NO_RUNTIME + + get_filename_component(_MLIR_SRC "${_MLIR_SRC}" REALPATH) + list(APPEND _COMPILER_ARGS "-output-format=vm-c") + list(APPEND _COMPILER_ARGS "-iree-llvm-link-static") + list(APPEND _COMPILER_ARGS "-iree-llvm-static-library-output-path=${_O_FILE_NAME}") + list(APPEND _COMPILER_ARGS "${_MLIR_SRC}") + list(APPEND _COMPILER_ARGS "-o") + list(APPEND _COMPILER_ARGS "${_H_FILE_NAME}") + + set(_OUTPUT_FILES "${_H_FILE_NAME}") + string(REPLACE ".o" ".h" _STATIC_HDR_PATH "${_O_FILE_NAME}") + list(APPEND _OUTPUT_FILES "${_O_FILE_NAME}" "${_STATIC_HDR_PATH}") + + add_custom_command( + OUTPUT ${_OUTPUT_FILES} + COMMAND ${_COMPILER_TOOL} ${_COMPILER_ARGS} + DEPENDS ${_COMPILER_TOOL} ${_MLIR_SRC} ) + + set(_EMITC_LIB_NAME "${_PACKAGE_NAME}_${_MODULE_NAME}") + add_library(${_EMITC_LIB_NAME} + STATIC + ${_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(_O_FILE_NAME "${_RULE_NAME}.o")