# Copyright 2022 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 """Rules for compiling IREE C modules.""" load("//build_tools/bazel:build_defs.oss.bzl", "iree_runtime_cc_library") def iree_c_module( name, src, h_file_output, flags, deps = [ "//runtime/src/iree/vm", "//runtime/src/iree/vm:ops", "//runtime/src/iree/vm:ops_emitc", "//runtime/src/iree/vm:shims_emitc", ], compile_tool = "//tools:iree-compile", no_runtime = None, static_lib_path = "", **kwargs): """Builds an IREE C module. Args: name: Name of the target src: mlir source file to be compiled to an IREE module. h_file_output: The H header file to output. flags: additional flags to pass to the compile tool. `--output-format=vm-c` is included automatically. deps: Optional. Dependencies to add to the generated library. compile_tool: the compiler to use to generate the module. Defaults to iree-compile. static_lib_path: When set, the module is compiled into a LLVM static library with the specified library path. no_runtime: When set, this target will be built without the runtime library support. **kwargs: any additional attributes to pass to the underlying rules. """ out_files = [h_file_output] flags.append("--output-format=vm-c") if static_lib_path: static_header_path = static_lib_path.replace(".o", ".h") out_files.extend([static_lib_path, static_header_path]) flags += [ "--iree-llvmcpu-link-embedded=false", "--iree-llvmcpu-link-static", "--iree-llvmcpu-static-library-output-path=$(location %s)" % (static_lib_path), ] native.genrule( name = name + "_gen", srcs = [src], outs = out_files, cmd = " && ".join([ " ".join([ "$(location %s)" % (compile_tool), " ".join(flags), "-o $(location %s)" % (h_file_output), "$(location %s)" % (src), ]), ]), tools = [compile_tool], message = "Generating C module %s..." % (name), output_to_bindir = 1, **kwargs ) deps_list = None if not no_runtime: deps_list = deps iree_runtime_cc_library( name = name, hdrs = [h_file_output], srcs = ["//runtime/src/iree/vm:module_impl_emitc.c", h_file_output], copts = [ "-DEMITC_IMPLEMENTATION='\"$(location %s)\"'" % h_file_output, ], deps = deps_list, **kwargs )