Files
UnrealEngine/Engine/Source/ThirdParty/Intel/oneAPILevelZero/1.21.9/scripts/generate_code.py
Brandyn / Techy fcc1b09210 init
2026-04-04 15:40:51 -05:00

387 lines
10 KiB
Python

"""
Copyright (C) 2019-2021 Intel Corporation
SPDX-License-Identifier: MIT
"""
import os
import re
import util
templates_dir = os.path.join(os.path.dirname(os.path.realpath(__file__)), "templates")
tracing_templates_dir = os.path.join(templates_dir, "tracing")
validation_templates_dir = os.path.join(templates_dir, "validation")
"""
generates c/c++ files from the specification documents
"""
def _mako_ddi_cpp(path, namespace, tags, version, specs, meta):
template = "ddi.h.mako"
fin = os.path.join(templates_dir, template)
filename = "%s_ddi.h"%(namespace)
fout = os.path.join(path, filename)
print("Generating %s..."%fout)
return util.makoWrite(
fin, fout,
ver=version,
namespace=namespace,
tags=tags,
specs=specs,
meta=meta)
"""
generates c/c++ files from the specification documents
"""
def _mako_lib_cpp(path, namespace, tags, version, specs, meta):
loc = 0
template = "libapi.cpp.mako"
fin = os.path.join(templates_dir, template)
name = "%s_libapi"%(namespace)
filename = "%s.cpp"%(name)
fout = os.path.join(path, filename)
print("Generating %s..."%fout)
loc += util.makoWrite(
fin, fout,
name = name,
ver=version,
namespace=namespace,
tags=tags,
specs=specs,
meta = meta)
template = "libddi.cpp.mako"
fin = os.path.join(templates_dir, template)
name = "%s_libddi"%(namespace)
filename = "%s.cpp"%(name)
fout = os.path.join(path, filename)
print("Generating %s..."%fout)
loc += util.makoWrite(
fin, fout,
name=name,
ver=version,
namespace=namespace,
tags=tags,
specs=specs,
meta=meta)
return loc
"""
generates c/c++ files from the specification documents
"""
def _mako_wrapper_cpp(path, namespace, tags, version, specs, meta):
loc = 0
template = "wprapi.cpp.mako"
fin = os.path.join(templates_dir, template)
name = "%s_wprapi"%(namespace)
filename = "%s.cpp"%(name)
fout = os.path.join(path, filename)
print("Generating %s..."%fout)
loc += util.makoWrite(
fin, fout,
name = name,
ver=version,
namespace=namespace,
tags=tags,
specs=specs,
meta = meta)
return loc
"""
generates c/c++ files from the specification documents
"""
def _mako_loader_cpp(path, namespace, tags, version, specs, meta):
print("make_loader_cpp path %s namespace %s version %s\n" %(path, namespace, version))
loc = 0
template = "ldrddi.h.mako"
fin = os.path.join(templates_dir, template)
name = "%s_ldrddi"%(namespace)
filename = "%s.h"%(name)
fout = os.path.join(path, filename)
print("Generating %s..."%fout)
loc += util.makoWrite(
fin, fout,
name=name,
ver=version,
namespace=namespace,
tags=tags,
specs=specs,
meta=meta)
template = "ze_loader_internal.h.mako"
fin = os.path.join(templates_dir, template)
name = "%s_loader_internal_tmp"%(namespace)
filename = "%s.h"%(name)
fout = os.path.join(path, filename)
print("Generating %s..."%fout)
loc += util.makoWrite(
fin, fout,
name=name,
ver=version,
namespace=namespace,
tags=tags,
specs=specs,
meta=meta)
template = "ldrddi.cpp.mako"
fin = os.path.join(templates_dir, template)
name = "%s_ldrddi"%(namespace)
filename = "%s.cpp"%(name)
fout = os.path.join(path, filename)
print("Generating %s..."%fout)
loc += util.makoWrite(
fin, fout,
name=name,
ver=version,
namespace=namespace,
tags=tags,
specs=specs,
meta=meta)
return loc
"""
generates c/c++ files from the specification documents
"""
# 'input_file_name' : (output_dir, output_filename)
validation_files = {
'valddi.cpp.mako': ('','valddi.cpp'),
'entry_points.h.mako' : ('common', 'entry_points.h'),
'param.cpp.mako' : ('checkers/parameter_validation', 'parameter_validation.cpp'),
'param.h.mako' : ('checkers/parameter_validation', 'parameter_validation.h'),
'handle_lifetime.h.mako' : ('handle_lifetime_tracking', 'handle_lifetime.h'),
'handle_lifetime.cpp.mako' : ('handle_lifetime_tracking', 'handle_lifetime.cpp')
}
def _mako_validation_layer_cpp(path, namespace, tags, version, specs, meta):
loc = 0
for input_file in validation_files:
dstpath = os.path.join(path, "validation")
os.makedirs(dstpath, exist_ok=True)
template = input_file
fin = os.path.join(validation_templates_dir, template)
filename = "%s_%s"%(namespace, validation_files[input_file][1])
dstpath = os.path.join(dstpath, validation_files[input_file][0])
fout = os.path.join(dstpath, filename)
print("Generating %s..."%fout)
loc += util.makoWrite(
fin, fout,
name=filename,
ver=version,
namespace=namespace,
tags=tags,
specs=specs,
meta=meta)
return loc
"""
generates c/c++ files from the specification documents
"""
def _mako_tracing_layer_h(path, namespace, tags, version, specs, meta):
dstpath = os.path.join(path, "layers")
os.makedirs(dstpath, exist_ok=True)
template = "trc_setters.h.mako"
fin = os.path.join(tracing_templates_dir, template)
name = "zel_tracing_register_cb"
filename = "%s.h"%(name)
fout = os.path.join(dstpath, filename)
print("Generating %s..."%fout)
return util.makoWrite(
fin, fout,
name=name,
ver=version,
namespace=namespace,
tags=tags,
specs=specs,
meta=meta)
"""
generates c/c++ files from the specification documents
"""
def _mako_tracing_layer_cpp(path, namespace, tags, version, specs, meta):
dstpath = os.path.join(path, "tracing")
os.makedirs(dstpath, exist_ok=True)
template = "trcddi.cpp.mako"
fin = os.path.join(tracing_templates_dir, template)
name = "%s_trcddi"%(namespace)
filename = "%s.cpp"%(name)
fout = os.path.join(dstpath, filename)
print("Generating %s..."%fout)
loc = util.makoWrite(
fin, fout,
name=name,
ver=version,
namespace=namespace,
tags=tags,
specs=specs,
meta=meta)
template = "trc_setters.cpp.mako"
fin = os.path.join(tracing_templates_dir, template)
name = "ze_tracing_register_cb"
filename = "%s.cpp"%(name)
fout = os.path.join(dstpath, filename)
print("Generating %s..."%fout)
loc += util.makoWrite(
fin, fout,
name=name,
ver=version,
namespace=namespace,
tags=tags,
specs=specs,
meta=meta)
template = "trc_cb_struct.h.mako"
fin = os.path.join(tracing_templates_dir, template)
name = "ze_tracing_cb_structs"
filename = "%s.h"%(name)
fout = os.path.join(dstpath, filename)
print("Generating %s..."%fout)
loc += util.makoWrite(
fin, fout,
name=name,
ver=version,
namespace=namespace,
tags=tags,
specs=specs,
meta=meta)
return loc
"""
generates c/c++ files from the specification documents
"""
def _mako_tracing_lib_cpp(path, namespace, tags, version, specs, meta):
dstpath = os.path.join(path, "lib")
os.makedirs(dstpath, exist_ok=True)
template = "trc_register_cb_libapi.cpp.mako"
fin = os.path.join(tracing_templates_dir, template)
name = "ze_tracing_register_cb_libapi"
filename = "%s.cpp"%(name)
fout = os.path.join(dstpath, filename)
print("Generating %s..."%fout)
return util.makoWrite(
fin, fout,
name=name,
ver=version,
namespace=namespace,
tags=tags,
specs=specs,
meta=meta)
"""
generates c/c++ files from the specification documents
"""
def _mako_null_driver_cpp(path, namespace, tags, version, specs, meta):
dstpath = os.path.join(path, "null")
os.makedirs(dstpath, exist_ok=True)
template = "nullddi.cpp.mako"
fin = os.path.join(templates_dir, template)
name = "%s_nullddi"%(namespace)
filename = "%s.cpp"%(name)
fout = os.path.join(dstpath, filename)
print("Generating %s..."%fout)
return util.makoWrite(
fin, fout,
name=name,
ver=version,
namespace=namespace,
tags=tags,
specs=specs,
meta=meta)
"""
Entry-point:
generates lib code
"""
def generate_lib(path, section, namespace, tags, version, specs, meta):
dstpath = os.path.join(path, "lib")
os.makedirs(dstpath, exist_ok=True)
loc = 0
loc += _mako_lib_cpp(dstpath, namespace, tags, version, specs, meta)
print("Generated %s lines of code.\n"%loc)
"""
Entry-point:
generates loader for level_zero driver
"""
def generate_loader(path, section, namespace, tags, version, specs, meta):
dstpath = os.path.join(path, "loader")
os.makedirs(dstpath, exist_ok=True)
loc = 0
loc += _mako_loader_cpp(dstpath, namespace, tags, version, specs, meta)
print("Generated %s lines of code.\n"%loc)
"""
Entry-point:
generates layers for level_zero driver
"""
def generate_layers(path, section, namespace, tags, version, specs, meta):
print("GL section %s\n"%section)
print("GL namespace %s\n"%namespace)
layer_dstpath = os.path.join(path, "layers")
include_dstpath = os.path.join(path, "../include")
os.makedirs(layer_dstpath, exist_ok=True)
os.makedirs(include_dstpath, exist_ok=True)
loc = 0
loc += _mako_validation_layer_cpp(layer_dstpath, namespace, tags, version, specs, meta)
print("VALIDATION Generated %s lines of code.\n"%loc)
if section == "core":
loc += _mako_tracing_layer_cpp(layer_dstpath, namespace, tags, version, specs, meta)
print("TRACING Generated %s lines of code.\n"%loc)
loc += _mako_tracing_lib_cpp(path, namespace, tags, version, specs, meta)
print("TRACING Generated %s lines of code.\n"%loc)
loc += _mako_tracing_layer_h(include_dstpath, namespace, tags, version, specs, meta)
print("TRACING header Generated %s lines of code.\n"%loc)
"""
Entry-point:
generates drivers for level_zero driver
"""
def generate_drivers(path, section, namespace, tags, version, specs, meta):
dstpath = os.path.join(path, "drivers")
os.makedirs(dstpath, exist_ok=True)
loc = 0
loc += _mako_null_driver_cpp(dstpath, namespace, tags, version, specs, meta)
print("Generated %s lines of code.\n"%loc)