387 lines
10 KiB
Python
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)
|