]> git.proxmox.com Git - mirror_edk2.git/blob - BaseTools/ReadMe.txt
Fix a security hole in shell binaries:
[mirror_edk2.git] / BaseTools / ReadMe.txt
1 This directory contains the next generation of EDK II build tools and template files.
2 Templates are located in the Conf directory, while the tools executables for
3 Microsoft Windows 32-bit Operating Systems are located in the Bin\Win32 directory, other
4 directory contatins tools source.
5
6 1. Build step to generate the binary tools.
7
8 === Windows/Visual Studio Notes ===
9
10 To build the BaseTools, you should run the standard vsvars32.bat script.
11
12 In addition to this, you should set the following environment variables:
13
14 * EDK_TOOLS_PATH - Path to the BaseTools sub directory under the edk2 tree
15 * BASE_TOOLS_PATH - The directory where the BaseTools source is located.
16 (It is the same directory where this README.txt is located.)
17 * PYTHON_FREEZER_PATH - Path to where the python freezer tool is installed
18
19 After this, you can run the toolsetup.bat file, which is in the same
20 directory as this file. It should setup the remainder of the environment,
21 and build the tools if necessary.
22
23 Please also refer to the 'BuildNotes.txt' file for more information on
24 building under Windows.
25
26 === Unix-like operating systems ===
27
28 To build on Unix-like operating systems, you only need to type 'make' in
29 the base directory of the project.
30
31 === Ubuntu Notes ===
32
33 On Ubuntu, the following command should install all the necessary build
34 packages to build all the C BaseTools:
35
36 sudo apt-get install build-essentials uuid-dev
37
38 === Python sqlite3 module ===
39 On Windows, the cx_freeze will not copy the sqlite3.dll to the frozen
40 binary directory (the same directory as build.exe and GenFds.exe).
41 Please copy it manually from <PythonHome>\DLLs.
42
43 The Python distributed with most recent Linux will have sqlite3 module
44 built in. If not, please install sqlit3 package separately.
45
46 2. The binary tools will be updated only after passing developer testing.
47
48 Current state of the tools is Proto-Type - not all tool functions have been implemented
49 and there may be bugs in these tools. These tools are under constant development at
50 this time.
51
52 3. Tool usage introduction.
53 BaseTools Simple Usage:
54 1) Change the directory to the EDK2 root directory, where the edksetup.bat is
55 2) Run "edksetup.bat NewBuild"
56 3) Set the ACTIVE_PLATFORM to your desired platform description file
57 (%WORKSPACE%\Conf\target.txt)
58 4) To build platform, run "build" command in non-module directory
59 5) To build module individually, run "build" command in module directory, i.e. where the
60 *.inf file is
61
62 Notes:
63 1) The tree structure generated by build tools is similar to Ant build system.
64 2) Makefile can be called directly by nmake for both top level platform and module. But
65 after you call "nmake cleanall", you have to call "build" command to rebuild platform
66 or modules because the AutoGen.* files have been be removed. The "makefile" itself
67 cannot generate AutoGen.* files. Only "build" command can.
68 3) All .exe binary file including C and python tools are generated from:
69 r1707 <buildtools_project>\BaseTools\Source\ + r1707 VfrCompiler tool update
70
71 Brief usage for Migration Tool MigrationMsa2Inf.exe:
72 1. Command line format:
73 MigrationMsa2Inf [options]
74 2. Input Files:
75 A syntactically valid MSA file
76 3. Output Files:
77 An extended INF file with possible auto-generated EntryPoint.c, CommonHeader.h/CommonHeader.txt, depending on options and module contents.
78 4. Prerequisite:
79 a. The workspace directory must be specified either by environment variable or -w option.
80 b. The Framework Database file must exist to specify the available packages in current workspace.
81 Two possible locations are: (The first location overrides the second)
82 $(WORKSPACE)\Tools\Conf\FrameworkDatabase.db
83 $(WORKSPACE)\Conf\FrameworkDatabase.db.
84 The <PackageList> field in FrameworkDatabase.db lists all available packages in current workspace.
85 One example:
86 <PackageList>
87 <Filename>MdePkg/MdePkg.nspd</Filename>
88 <Filename>MdeModulePkg/MdeModulePkg.spd</Filename>
89 <Filename>IntelFrameworkPkg/IntelFrameworkPkg.spd</Filename>
90 </PackageList>
91 The package list in FrameworkDatabase.db is important to the final quality of migration:
92 (1) It suggests the new package location: Translate package dependency Guid in MSA to Workspace relative path.
93 If the package dependency Guid cannot be found in current workspace a warning message is raised.
94 (2) It collects the Protocol/Guid/Ppi GuidCName a package contains.
95 The GuidCName acts as "clue" to add e.g. #include <Protocol/DiskIo.h> in CommonHeader.h
96
97 5. Example:
98 WORKSAPCE has already been set: $(WORKSPACE) = c:\work\EdkII.
99
100 a. MigrationMsa2Inf -f c:\work\EdkII\Nt32Pkg\WinNtThunkDxe\WinNtThunk.msa -o c:\work\EdkII\Nt32Pkg\WinNtThunkDxe\WinNtThunk.inf
101 b. MigrationMsa2Inf -f c:\work\EdkII\Nt32Pkg\WinNtThunkDxe\WinNtThunk.msa -a
102 Example a & b are equivalent to migrate WinNtThunk driver from EDKII to EDKII' code base.
103
104 c. MigrationMsa2Inf -f c:\work\EdkII\Nt32Pkg\WinNtThunkDxe\WinNtThunk.msa -a -c
105 The extra "-c" option performs several hardcode mapping due to the naming change in EDKII':
106 OldMdePkg Guid -> MdePkgGuid,
107 EdkModulePkg Guid -> MdeModulePkgGuid,
108 EdkGraphicsLib -> GraphicsLib
109 HiiLib -> HiiLibFramework
110 ...
111
112 d. MigrationMsa2Inf -f c:\work\EdkII\Nt32Pkg\WinNtThunkDxe\WinNtThunk.msa -m
113 The extra "-m" option suppresses the generation of "CommonHeader.h" and leave all C files intact.
114 Instead, it generates "CommonHeader.txt". Developers can manually copy its content to a local common header file in a module.
115
116 6. Known Limitations:
117 a. Tool does not handle Exit Boot Services Callback & Virtual Address Changed Event. Developers need to handle it manually.
118 b. The #include <Library/AbcLib.h> is based on library class naming convention: The header filename for "AbcLib" class are "AbcLib.h" by convention.
119 c. The #include <Guid/Xyz.h>, <Protocol/Xyz.h> and <Ppi/Xyz.h> are added based on gGuidCName listed in MSA.
120 If a GuidCName cannot map to a package Guid/Protocol/Ppi header file, a warning message is raised.
121 If a module uses the definition in a pakcage Guid/Protocol/Ppi header file without list its associative GuidCName, the build will beak. Developer needs to manually add the include statement.
122 d. The [Depex] sections are generated from DXS files with Guid Macro translated to Guid CName by naming convention, etc.
123 If tool fails to "guess" the Guid CName from Guid Macro, it will leave the GuidMacro in [Depex] section for manual resolution.
124 e. When tool generates [Sources] section, the modifiers for source files are lost. (Need to add proper tool chain, etc)
125 f. When tool generates [LibraryClasses] section, the recommended library instances are lost. (No impact to build)
126
127 7. Pyton Source
128 r682 <buildtools_project>\BaseTools\Source\Python\MigrationMsa2Inf
129
130
131 Brief Usage for PcdSyntax Update:
132 Usage:
133 PcdSyntaxUpdate.exe <directory_name>
134 It searches all INF, DEC and DSC file under <directory_name> and update them with the following rules:
135 1. Update INF files to conform to INF spec 0.44:
136 a. Rename PCD section name: e.g. [PcdsFeatureFlag] -> [FeaturePcd]
137 b. Adjust PCD section item format: e.g. PcdDebugClearMemoryValue|gEfiMdePkgTokenSpaceGuid -> gEfiMdePkgTokenSpaceGuid.PcdDebugClearMemoryValue
138 c. Update the syntax of binary INF file (not PCD related)
139 2. Update DEC files to confirm to DEC spec 0.36
140 Adjust PCD section item format: e.g. PcdWinNtPhysicalDisk|0x00001000|gEfiNt32PkgTokenSpaceGuid|VOID*|L"E:RW;245760;512"-> gEfiNt32PkgTokenSpaceGuid.PcdWinNtFlashFvRecoverySize|0x0|UINT32|0x00001011
141 3. Update DSC files to confirm to DSC spec
142 a. Adjust string/array typed PCD item format: e.g. PcdWinNtMemorySizeForSecMain|gEfiNt32PkgTokenSpaceGuid|L"64!64"|12 -> gEfiNt32PkgTokenSpaceGuid.PcdWinNtMemorySizeForSecMain|L"64!64"|VOID*|12
143 b. Adjust non-string/array typed PCD item format: e.g. PcdWinNtBootMode|gEfiNt32PkgTokenSpaceGuid|1 -> gEfiNt32PkgTokenSpaceGuid.PcdWinNtBootMode|1
144 c. Update the override library class in [Components] section: e.g.
145 <LibraryClass> {
146 PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf
147 }
148 To
149 <LibraryClasses> {
150 PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf
151 }
152
153 Brief usage for Migration Tool Spd2Dec.exe:
154 1. Command line format:
155 Spd2Dec [options] input_filename
156 2. Input File:
157 A syntactically valid SPD file
158 3. Output Files:
159 A DEC file whose syntax confirms to DEC spec.
160
161 4. Example:
162 a. Spd2Dec -o c:\work\EdkII\Nt32Pkg\Nt32.spd c:\work\EdkII\Nt32Pkg\Nt32.dec
163 b. Spd2Dec -a c:\work\EdkII\Nt32Pkg\Nt32.spd
164 Example a & b are equivalent to migrate Nt32 package SPD file from EDKII to EDKII' snytax.
165
166 6. Pyton Source
167 r777 <buildtools_project>\BaseTools\Source\Python\spd2Dec
168
169 Brief usage for Migration Tool Fpd2Dsc.exe:
170 1. Command line format:
171 Fpd2Dsc [options] input_filename
172 2. Input File:
173 A syntactically valid FPD file
174 3. Output Files:
175 A DSC file which syntax confirms to DSC spec.
176 4. Prerequisite:
177 a. The workspace directory must be specified either by environment variable or -w option.
178
179 5. Example:
180 WORKSAPCE has already been set: $(WORKSPACE) = c:\work\EdkII.
181
182 a. Fpd2Dsc -o c:\work\EdkII\Nt32Pkg\Nt32.dsc c:\work\EdkII\Nt32Pkg\Nt32.fpd
183 b. Fpd2Dsc -a c:\work\EdkII\Nt32Pkg\Nt32.fpd
184 Example a & b are equivalent to migrate Nt32 platform description file from EDKII to EDKII' snytax.
185
186 6. Known Limitations:
187 a. Tool does not handle Libraries Section since no related info in original FPD file. Developers need to handle it manually in the output DSC file.
188 b. If MSA file which is corresponds to module guid could not be found in currect workspace, tool will dump the module guid.
189
190 7. Pyton Source
191 r767 <buildtools_project>\BaseTools\Source\Python\Fpd2Dsc
192
193 10-Sep-2009