# This file defines a template for running llvm-tblgen. # # Parameters: # # args (required) # [list of strings] Flags to pass to llvm-tblgen. # # output_name (optional) # Basename of the generated output file. # Defaults to target name with ".inc" appended. # # td_file (optional) # The .td file to pass to llvm-tblgen. # Defaults to target name with ".td" appended. # # visibility (optional) # GN's regular visibility attribute, see `gn help visibility`. # # Example use: # # tablegen("attributes_compat_func_gen") { # visibility = [ ":IR" ] # args = [ "-gen-attrs" ] # td_file = "AttributesCompatFunc.td" # } import("//llvm/utils/gn/build/compiled_action.gni") template("tablegen") { assert(defined(invoker.args), "must set 'args' in $target_name") config_name = "${target_name}_config" config(config_name) { visibility = [ ":$target_name" ] include_dirs = [ target_gen_dir ] } compiled_action(target_name) { forward_variables_from(invoker, [ "visibility" ]) if (defined(invoker.tblgen_target)) { tool = invoker.tblgen_target } else { tool = "//llvm/utils/TableGen:llvm-tblgen" } if (defined(invoker.td_file)) { td_file = invoker.td_file } else { td_file = "$target_name.td" } inputs = [ td_file ] if (defined(invoker.output_name)) { gen_output = "$target_gen_dir/" + invoker.output_name } else { gen_output = "$target_gen_dir/$target_name.inc" } depfile = "$gen_output.d" td_file = rebase_path(td_file, root_build_dir) args = [ "--write-if-changed", "-I", rebase_path("//llvm/include", root_build_dir), # FIXME: Rather than duplicating this -I flag in both the CMake and # the gn build, let tablegen add input dir to include search path # instead? "-I", get_path_info(td_file, "dir"), "-d", rebase_path(depfile, root_build_dir), "-o", rebase_path(gen_output, root_build_dir), td_file, ] + invoker.args outputs = [ gen_output ] # Let targets depending on this find the generated file. public_configs = [ ":$config_name" ] } }