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}")