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