| ## @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() |