Detect region out of order or overlap.
[efi/basetools/.git] / Source / Python / GenFds / CompressSection.py
1 ## @file\r
2 # process compress section generation\r
3 #\r
4 #  Copyright (c) 2007, Intel Corporation\r
5 #\r
6 #  All rights reserved. This program and the accompanying materials\r
7 #  are licensed and made available under the terms and conditions of the BSD License\r
8 #  which accompanies this distribution.  The full text of the license may be found at\r
9 #  http://opensource.org/licenses/bsd-license.php\r
10 #\r
11 #  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
12 #  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
13 #\r
14 \r
15 ##\r
16 # Import Modules\r
17 #\r
18 from Ffs import Ffs\r
19 import Section\r
20 import subprocess\r
21 import os\r
22 from GenFdsGlobalVariable import GenFdsGlobalVariable\r
23 from CommonDataClass.FdfClassObject import CompressSectionClassObject\r
24 \r
25 ## generate compress section\r
26 #\r
27 #\r
28 class CompressSection (CompressSectionClassObject) :\r
29     \r
30     ## compress types: PI standard and non PI standard    \r
31     CompTypeDict = {\r
32         'PI_STD'     : ' -c PI_STD ',\r
33         'NON_PI_STD' : ' -c NON_PI_STD '\r
34     }\r
35     \r
36     ## The constructor\r
37     #\r
38     #   @param  self        The object pointer\r
39     #\r
40     def __init__(self):\r
41         CompressSectionClassObject.__init__(self)\r
42         \r
43     ## GenSection() method\r
44     #\r
45     #   Generate compressed section\r
46     #\r
47     #   @param  self        The object pointer\r
48     #   @param  OutputPath  Where to place output file\r
49     #   @param  ModuleName  Which module this section belongs to\r
50     #   @param  SecNum      Index of section\r
51     #   @param  KeyStringList  Filter for inputs of section generation\r
52     #   @param  FfsInf      FfsInfStatement object that contains this section data\r
53     #   @param  Dict        dictionary contains macro and its value\r
54     #   @retval tuple       (Generated file name, section alignment)\r
55     #\r
56     def GenSection(self, OutputPath, ModuleName, SecNum, KeyStringList, FfsInf = None, Dict = {}):\r
57         \r
58         if FfsInf != None:\r
59             self.CompType = FfsInf.__ExtendMacro__(self.CompType)\r
60             self.Alignment = FfsInf.__ExtendMacro__(self.Alignment)\r
61             \r
62         SectFiles = ''\r
63         Index = 0\r
64         for Sect in self.SectionList:\r
65             Index = Index + 1\r
66             SecIndex = '%s.%d' %(SecNum, Index)\r
67             ReturnSectList, AlignValue = Sect.GenSection(OutputPath, ModuleName, SecIndex, KeyStringList, FfsInf, Dict)\r
68             if ReturnSectList != []:\r
69                 for FileData in ReturnSectList:\r
70                    SectFiles = SectFiles + \\r
71                                ' '       + \\r
72                                FileData\r
73                         \r
74 \r
75         OutputFile = OutputPath + \\r
76                      os.sep     + \\r
77                      ModuleName + \\r
78                      'SEC'      + \\r
79                      SecNum     + \\r
80                      Ffs.SectionSuffix['COMPRESS']\r
81         OutputFile = os.path.normpath(OutputFile)\r
82         \r
83         GenSectionCmd = 'GenSec -o '                                  + \\r
84                          OutputFile                                   + \\r
85                          ' -s '                                       + \\r
86                          Section.Section.SectionType['COMPRESS']      + \\r
87                          self.CompTypeDict[self.CompType]             + \\r
88                          SectFiles\r
89         #\r
90         # Call GenSection\r
91         #\r
92         GenFdsGlobalVariable.CallExternalTool(GenSectionCmd, "GenSection Failed!")\r
93         OutputFileList = []\r
94         OutputFileList.append(OutputFile)\r
95         return OutputFileList, self.Alignment\r
96 \r
97         \r