mirror of https://github.com/acidanthera/audk.git
133 lines
4.7 KiB
Python
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()
|