Updated the revision of source files build.exe was generated from
[mirror_edk2.git] / BaseTools / ReadMe.txt
53ca26a2 1This directory contains the next generation of EDK II build tools and template files.\r
2Templates are located in the Conf directory, while the tools executables for\r
3Microsoft Windows 32-bit Operating Systems are located in the Bin\Win32 directory.\r
5The binary tools will be updated only after passing developer testing.\r
7The BaseTools package will be updated with new tools only after all testing on a set\r
8of binary tools has successfully completed.\r
10Current state of the tools is Proto-Type - not all tool functions have been implemented\r
11and there may be bugs in these tools. These tools are under constant development at\r
12this time.\r
c7f7ef1e 14BaseTools Simple Usage:\r
151) Change the directory to the EDK2 root directory, where the edksetup.bat is\r
162) Run "edksetup.bat NewBuild"\r
173) Set the ACTIVE_PLATFORM to your desired platform description file \r
18 (%WORKSPACE%\Conf\target.txt)\r
194) To build platform, run "build" command in non-module directory\r
205) To build module individually, run "build" command in module directory, i.e. where the \r
21 *.inf file is\r
5157f1d7 241) The tree structure generated by build tools is similar to Ant build system.\r
252) Makefile can be called directly by nmake for both top level platform and module. But\r
c7f7ef1e 26 after you call "nmake cleanall", you have to call "build" command to rebuild platform\r
27 or modules because the AutoGen.* files have been be removed. The "makefile" itself\r
28 cannot generate AutoGen.* files. Only "build" command can.\r
5157f1d7 293) build.exe in %WORKSPACE%\BaseTools\Bin\Win32 is generated from following revision of\r
30 Python source code:\r
4070a6c6 31 r658 <buildtools_project>\BaseTools\Source\Python\Autogen\r
32 r658 <buildtools_project>\BaseTools\Source\Python\build\r
33 r658 <buildtools_project>\BaseTools\Source\Python\Common\r
34 r658 <buildtools_project>\BaseTools\Source\Python\CommonDataClass\r
65010787 35 r564 <buildtools_project>\BaseTools\Source\Python\GenFds\r
4070a6c6 36 r576 <buildtools_project>\BaseTools\Source\Python\GenFds\FfsInfStatement.py\r
b3af5df6 374) GenFds.exe has is a combo of the follow python source.(This is a temporary branch)\r
38 r641 <buildtools_project>\BaseTools\Source\Python\Common\r
39 r641 <buildtools_project>\BaseTools\Source\Python\CommonDataClass\r
40 r564 <buildtools_project>\BaseTools\Source\Python\GenFds\r
41 \r
6f5554bd 42Brief usage for Migration Tool MigrationMsa2Inf.exe:\r
2b3b50f9 431. Command line format:\r
6f5554bd 44 MigrationMsa2Inf [options]\r
2b3b50f9 452. Input Files:\r
46 A syntactically valid MSA file\r
473. Output Files:\r
48 An extended INF file with possible auto-generated EntryPoint.c, CommonHeader.h/CommonHeader.txt, depending on options and module contents.\r
494. Prerequisite:\r
dfb780e3 50 a. The workspace directory must be specified either by environment variable or -w option. \r
2b3b50f9 51 b. The Framework Database file must exist to specify the available packages in current workspace. \r
52 Two possible locations are: (The first location overrides the second)\r
53 $(WORKSPACE)\Tools\Conf\FrameworkDatabase.db\r
54 $(WORKSPACE)\Conf\FrameworkDatabase.db. \r
55 The <PackageList> field in FrameworkDatabase.db lists all available packages in current workspace. \r
56 One example:\r
57 <PackageList>\r
58 <Filename>MdePkg/MdePkg.nspd</Filename>\r
59 <Filename>MdeModulePkg/MdeModulePkg.spd</Filename>\r
60 <Filename>IntelFrameworkPkg/IntelFrameworkPkg.spd</Filename>\r
61 </PackageList>\r
62 The package list in FrameworkDatabase.db is important to the final quality of migration:\r
63 (1) It suggests the new package location: Translate package dependency Guid in MSA to Workspace relative path. \r
64 If the package dependency Guid cannot be found in current workspace a warning message is raised. \r
65 (2) It collects the Protocol/Guid/Ppi GuidCName a package contains. \r
66 The GuidCName acts as "clue" to add e.g. #include <Protocol/DiskIo.h> in CommonHeader.h\r
67 \r
685. Example:\r
69 WORKSAPCE has already been set: $(WORKSPACE) = c:\work\EdkII. \r
70 \r
6f5554bd 71 a. MigrationMsa2Inf -f c:\work\EdkII\Nt32Pkg\WinNtThunkDxe\WinNtThunk.msa -o c:\work\EdkII\Nt32Pkg\WinNtThunkDxe\WinNtThunk.inf\r
72 b. MigrationMsa2Inf -f c:\work\EdkII\Nt32Pkg\WinNtThunkDxe\WinNtThunk.msa -a\r
2b3b50f9 73 Example a & b are equivalent to migrate WinNtThunk driver from EDKII to EDKII' code base.\r
74 \r
6f5554bd 75 c. MigrationMsa2Inf -f c:\work\EdkII\Nt32Pkg\WinNtThunkDxe\WinNtThunk.msa -a -c\r
dfb780e3 76 The extra "-c" option performs several hardcode mapping due to the naming change in EDKII': \r
2b3b50f9 77 OldMdePkg Guid -> MdePkgGuid, \r
78 EdkModulePkg Guid -> MdeModulePkgGuid, \r
79 EdkGraphicsLib -> GraphicsLib\r
80 HiiLib -> HiiLibFramework\r
81 ...\r
82 \r
6f5554bd 83 d. MigrationMsa2Inf -f c:\work\EdkII\Nt32Pkg\WinNtThunkDxe\WinNtThunk.msa -m\r
2b3b50f9 84 The extra "-m" option suppresses the generation of "CommonHeader.h" and leave all C files intact. \r
85 Instead, it generates "CommonHeader.txt". Developers can manually copy its content to a local common header file in a module. \r
86 \r
876. Known Limitations:\r
dfb780e3 88 a. Tool does not handle Exit Boot Services Callback & Virtual Address Changed Event. Developers need to handle it manually.\r
2b3b50f9 89 b. The #include <Library/AbcLib.h> is based on library class naming convention: The header filename for "AbcLib" class are "AbcLib.h" by convention.\r
90 c. The #include <Guid/Xyz.h>, <Protocol/Xyz.h> and <Ppi/Xyz.h> are added based on gGuidCName listed in MSA. \r
91 If a GuidCName cannot map to a package Guid/Protocol/Ppi header file, a warning message is raised.\r
92 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.\r
93 d. The [Depex] sections are generated from DXS files with Guid Macro translated to Guid CName by naming convention, etc.\r
94 If tool fails to "guess" the Guid CName from Guid Macro, it will leave the GuidMacro in [Depex] section for manual resolution.\r
95 e. When tool generates [Sources] section, the modifiers for source files are lost. (Need to add proper tool chain, etc)\r
96 f. When tool generates [LibraryClasses] section, the recommended library instances are lost. (No impact to build)\r
97 \r
8ea69778 987. Pyton Source\r
99 r633 <buildtools_project>\BaseTools\Source\Python\MigrationMsa2Inf\r
2b3b50f9 100\r
b3af5df6 101\r
102Brief Usage for PcdSyntax Update:\r
104 PcdSyntaxUpdate.exe <directory_name>\r
105It searches all INF, DEC and DSC file under <directory_name> and update them with the following rules:\r
1061. Update INF files to conform to INF spec 0.44: \r
107 a. Rename PCD section name: e.g. [PcdsFeatureFlag] -> [FeaturePcd]\r
108 b. Adjust PCD section item format: e.g. PcdDebugClearMemoryValue|gEfiMdePkgTokenSpaceGuid -> gEfiMdePkgTokenSpaceGuid.PcdDebugClearMemoryValue\r
109 c. Update the syntax of binary INF file (not PCD related) \r
1102. Update DEC files to confirm to DEC spec 0.36\r
111 Adjust PCD section item format: e.g. PcdWinNtPhysicalDisk|0x00001000|gEfiNt32PkgTokenSpaceGuid|VOID*|L"E:RW;245760;512"-> gEfiNt32PkgTokenSpaceGuid.PcdWinNtFlashFvRecoverySize|0x0|UINT32|0x00001011\r
1123. Update DSC files to confirm to DSC spec \r
113 a. Adjust string/array typed PCD item format: e.g. PcdWinNtMemorySizeForSecMain|gEfiNt32PkgTokenSpaceGuid|L"64!64"|12 -> gEfiNt32PkgTokenSpaceGuid.PcdWinNtMemorySizeForSecMain|L"64!64"|VOID*|12\r
114 b. Adjust non-string/array typed PCD item format: e.g. PcdWinNtBootMode|gEfiNt32PkgTokenSpaceGuid|1 -> gEfiNt32PkgTokenSpaceGuid.PcdWinNtBootMode|1\r
115 c. Update the override library class in [Components] section: e.g.\r
116 <LibraryClass> {\r
117 PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf\r
118 }\r
119 To \r
120 <LibraryClasses> {\r
121 PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf\r
122 }\r