blob: 8ffb335984e4b1df4e86ff944b12d49bafed9737 [file] [log] [blame]
# 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
)