summaryrefslogtreecommitdiffstats
path: root/MdePkg/Library/MipiSysTLib/GenMipiSystH.py
diff options
context:
space:
mode:
Diffstat (limited to 'MdePkg/Library/MipiSysTLib/GenMipiSystH.py')
-rw-r--r--MdePkg/Library/MipiSysTLib/GenMipiSystH.py132
1 files changed, 132 insertions, 0 deletions
diff --git a/MdePkg/Library/MipiSysTLib/GenMipiSystH.py b/MdePkg/Library/MipiSysTLib/GenMipiSystH.py
new file mode 100644
index 0000000000..ee48285590
--- /dev/null
+++ b/MdePkg/Library/MipiSysTLib/GenMipiSystH.py
@@ -0,0 +1,132 @@
+## @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()