Brian Sune 3ba9b1f7bd Cyclone V Board handsoff script
Since turning from old build flow.
New Altera SoCFPGA requires converting handsoff
conversion via the python script. This is from
official provided, and now sync to U-Boot with
better location at tools/cv_xxxx. Meantime,
requirement.txt is also provided to further
explain the libraries require for these scripts.

Signed-off-by: Brian Sune <briansune@gmail.com>
Reviewed-by: Tien Fong Chee <tien.fong.chee@altera.com>
2025-12-01 14:01:12 +08:00

244 lines
6.6 KiB
Python
Executable File

# SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
"""
Generic document construction classes.
These classes are templates for creating documents that are not bound
to a specific usage or data model.
Copyright (C) 2022 Intel Corporation <www.intel.com>
Author: Lee, Kah Jing <kah.jing.lee@intel.com>
"""
class document(object):
"""
An abstract document class which does not dictate
how a document should be constructed or manipulated.
It's sole purpose is to describe the entire document
in smaller units
"""
class entry(object):
"""
An entry is the smallest unit
"""
def __init__(self, parent):
""" entry initialization """
if parent != None:
parent.add(self)
class block(entry):
"""
A block is the smallest collection unit
consists of entries and blocks.
"""
def __init__(self, parent):
""" block initialization """
super(document.block, self).__init__(parent)
self.entries = []
def add(self, entry):
""" add entry to block """
self.entries.append(entry)
def __init__(self):
""" document initialization """
self.entries = []
def add(self, entry):
""" add entry to entry list """
self.entries.append(entry)
class text(document):
"""
A simple text document implementation
"""
class string(document.entry):
"""
The smallest unit of a text file is a string
"""
def __init__(self, parent, stringString=None):
""" string initialization """
super(text.string, self).__init__(parent)
self.stringString = stringString
def __str__(self):
""" convert None to empty string """
if (self.stringString != None):
return self.stringString
else:
return ""
class line(string):
"""
A line is a string with EOL character
"""
def __str__(self):
""" convert string with newline """
return super(text.line, self).__str__() + "\n"
class block(document.block):
"""
A block of text which can be made up of
strings or lines
"""
def __str__(self):
""" concatenate strings or lines """
blockString = ""
for entry in self.entries:
blockString += str(entry)
return blockString
def __str__(self):
""" concatenate strings or lines """
textString = ""
for entry in self.entries:
textString += str(entry)
return textString
class c_source(text):
"""
A simple C header document implementation
"""
class define(text.string):
"""
C header define
"""
def __init__(self, parent, id, token=None):
""" c header constructor initialization """
super(c_source.define, self).__init__(parent, id)
self.token = token
def __str__(self):
""" c header to strings """
defineString = "#define" + " " + super(c_source.define, self).__str__()
if self.token != None:
defineString += " " + self.token
defineString += "\n"
return defineString
class comment_string(text.string):
"""
C header comment
"""
def __str__(self):
""" c comment """
return "/*" + " " + super(c_source.comment_string, self).__str__() + " " + "*/"
class comment_line(comment_string):
"""
C header comment with newline
"""
def __str__(self):
""" c comment with newline """
return super(c_source.comment_line, self).__str__() + "\n"
class block(text.block):
"""
A simple C block string implementation
"""
def __init__(self, parent, prologue=None, epilogue=None):
""" ifdef block string implementation """
super(c_source.block, self).__init__(parent)
self.prologue = None
self.epilogue = None
if prologue != None:
self.prologue = prologue
if epilogue != None:
self.epilogue = epilogue
def __str__(self):
""" convert ifdef to string """
blockString = ""
if self.prologue != None:
blockString += str(self.prologue)
blockString += super(c_source.block, self).__str__()
if self.epilogue != None:
blockString += str(self.epilogue)
return blockString
class comment_block(block):
"""
A simple C header block comment implementation
"""
def __init__(self, parent, comments):
""" block comment initialization """
super(c_source.comment_block, self).__init__(parent, "/*\n", " */\n")
for comment in comments.split("\n"):
self.add(comment)
def add(self, entry):
""" add line to block comment """
super(c_source.block, self).add(" * " + entry + "\n")
class ifndef_block(block):
"""
A simple C header ifndef implementation
"""
def __init__(self, parent, id):
""" ifndef block initialization """
prologue = text.line(None, "#ifndef" + " " + id)
epilogue = text.block(None)
text.string(epilogue, "#endif")
text.string(epilogue, " ")
c_source.comment_line(epilogue, id)
super(c_source.ifndef_block, self).__init__(parent, prologue, epilogue)
class generated_c_source(c_source):
"""
Caller to generate c format files using the helper classes
"""
def __init__(self, filename):
""" Generate c header file with license, copyright, comment,
ifdef block
"""
super(generated_c_source, self).__init__()
self.entries.append(c_source.comment_line(None, "SPDX-License-Identifier: BSD-3-Clause"))
self.entries.append(c_source.comment_block(None, "Copyright (C) 2022 Intel Corporation <www.intel.com>"))
self.entries.append(c_source.comment_block(None, "Altera SoCFPGA Clock and PLL configuration"))
self.entries.append(text.line(None))
self.body = c_source.ifndef_block(None, filename)
self.body.add(c_source.define(None, filename))
self.entries.append(self.body)
def add(self, entry):
""" add content to be written into c header file """
self.body.add(entry)