audk/MdePkg/Library/MipiSysTLib/GenMipiSystH.py

133 lines
4.7 KiB
Python

## @file
# This python script update content from mipi_syst.h.in in mipi sys-T submodule
# and generate it as mipi_syst.h. mipi_syst.h include necessary data structure and
# definition that will be consumed by MipiSysTLib itself, mipi sys-T submodule
# and other library.
#
# This script needs to be done once by a developer when adding some
# project-relating definition or a new version of mipi_syst.h.in is released.
# Normal users do not need to do this, since the resulting file is stored
# in the EDK2 git repository.
#
# Customize structures mentioned below to generate updated mipi_syst.h file:
# 1. ExistingValueToBeReplaced
# -> To replace existing value in mipi_syst.h.in to newer one.
# 2. ExistingDefinitionToBeRemoved
# -> To #undef a existing definition in mipi_syst.h.in.
# 3. NewItemToBeAdded
# -> Items in this structure will be placed at the end of mipi_syst.h as a customized section.
#
# Run GenMipiSystH.py without any parameters as normal python script after customizing.
#
# Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>
#
# SPDX-License-Identifier: BSD-2-Clause-Patent
#
##
import os
import re
#
# A existing value to be customized should place this structure
# Definitions in this customizable structure will be processed by ReplaceOldValue()
# e.g:
# Before: @SYST_CFG_VERSION_MAJOR@
# After: 1
#
ExistingValueToBeReplaced = [
["@SYST_CFG_VERSION_MAJOR@", "1"], # Major version
["@SYST_CFG_VERSION_MINOR@", "0"], # Minor version
["@SYST_CFG_VERSION_PATCH@", "0"], # Patch version
["@SYST_CFG_CONFORMANCE_LEVEL@", "30"], # Feature level of mipi sys-T submodule
["mipi_syst/platform.h", "Platform.h"],
]
#
# A existing definition to be removed should place this structure
# Definitions in this customizable structure will be processed by RemoveDefinition()
# e.g:
# Before:
# #define MIPI_SYST_PCFG_ENABLE_PLATFORM_STATE_DATA
# After:
# #define MIPI_SYST_PCFG_ENABLE_PLATFORM_STATE_DATA
# #undef MIPI_SYST_PCFG_ENABLE_PLATFORM_STATE_DATA
#
ExistingDefinitionToBeRemoved = [
"MIPI_SYST_PCFG_ENABLE_PLATFORM_STATE_DATA",
"MIPI_SYST_PCFG_ENABLE_HEAP_MEMORY",
"MIPI_SYST_PCFG_ENABLE_PRINTF_API",
"MIPI_SYST_PCFG_ENABLE_LOCATION_RECORD",
"MIPI_SYST_PCFG_ENABLE_LOCATION_ADDRESS",
]
#
# Items in this structure will be placed at the end of mipi_syst.h as a customized section.
#
NewItemToBeAdded = [
"typedef struct mipi_syst_handle_flags MIPI_SYST_HANDLE_FLAGS;",
"typedef struct mipi_syst_msg_tag MIPI_SYST_MSG_TAG;",
"typedef struct mipi_syst_guid MIPI_SYST_GUID;",
"typedef enum mipi_syst_severity MIPI_SYST_SEVERITY;",
"typedef struct mipi_syst_handle MIPI_SYST_HANDLE;",
"typedef struct mipi_syst_header MIPI_SYST_HEADER;",
]
def ProcessSpecialCharacter(Str):
Str = Str.rstrip(" \n")
Str = Str.replace("\t", " ")
Str += "\n"
return Str
def ReplaceOldValue(Str):
for i in range(len(ExistingValueToBeReplaced)):
Result = re.search(ExistingValueToBeReplaced[i][0], Str)
if Result is not None:
Str = Str.replace(ExistingValueToBeReplaced[i][0], ExistingValueToBeReplaced[i][1])
break
return Str
def RemoveDefinition(Str):
Result = re.search("\*", Str)
if Result is None:
for i in range(len(ExistingDefinitionToBeRemoved)):
Result = re.search(ExistingDefinitionToBeRemoved[i], Str)
if Result is not None:
Result = re.search("defined", Str)
if Result is None:
Str = Str + "#undef " + ExistingDefinitionToBeRemoved[i]
break
return Str
def main():
MipiSystHSrcDir = "mipisyst/library/include/mipi_syst.h.in"
MipiSystHRealSrcDir = os.path.join(os.getcwd(), os.path.normpath(MipiSystHSrcDir))
MipiSystHRealDstDir = os.path.join(os.getcwd(), "mipi_syst.h")
#
# Read content from mipi_syst.h.in and process each line by demand
#
with open(MipiSystHRealSrcDir, "r") as rfObj:
SrcFile = rfObj.readlines()
for lineIndex in range(len(SrcFile)):
SrcFile[lineIndex] = ProcessSpecialCharacter(SrcFile[lineIndex])
SrcFile[lineIndex] = ReplaceOldValue(SrcFile[lineIndex])
SrcFile[lineIndex] = RemoveDefinition(SrcFile[lineIndex])
#
# Typedef a structure or enum type
#
i = -1
for struct in NewItemToBeAdded:
struct += "\n"
SrcFile.insert(i, struct)
i -= 1
#
# Save edited content to mipi_syst.h
#
with open(MipiSystHRealDstDir, "w") as wfObj:
wfObj.writelines(SrcFile)
if __name__ == '__main__':
main()