Gurinder Singh [mailto:[email protected]] wrote:
]Hi guys, ] ]I tried to get the resource compiler invoked in the build process. ]However, I am not quite sure how I can link the .res file generated ]by the resource compiler to the efi file (you need to link to the .res ]file for the file metadata to get baked into the binary). How do I ]hook into the EDKII build chain and get this to work? Any ideas? ] ]Thanks in advance. ] ]-Gurinder The .res can be converted to .obj using cvtres.exe, or you can let the linker do it automatically. But in either case, naming the file .obj causes the build system to put it in a library, and the linker will throw out resource data found in libraries. A work around is to name the rc.exe output file so that it has a .lib extension. That way, the edk2 build system will pass it to the linker directly. That causes the resource section to be placed into both the DLL and EFI file. A problem is that the Windows explorer will show file version resource data only for file types such as .sys, .dll, and .exe. So for example Windows will show version data for shell.dll but not for shell.efi. Other resource viewers are available that do not have this limitation. For example, this one shows the file version resource data for .efi files: http://sourceforge.net/projects/resourcesviewer/ Here is a patch that demonstrates adding version resource data to shell.efi: Index: BaseTools/Conf/build_rule.template =================================================================== --- BaseTools/Conf/build_rule.template (revision 16219) +++ BaseTools/Conf/build_rule.template (working copy) @@ -572,3 +572,15 @@ GenFw -o $(OUTPUT_DIR)(+)$(MODULE_NAME)hii.rc -g $(MODULE_GUID) --hiibinpackage $(HII_BINARY_PACKAGES) +[Resource-File] + <InputFile> + ?.rc + + <ExtraDependency> + $(MAKE_FILE) + + <OutputFile> + $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.lib + + <Command.MSFT, Command.INTEL> + "$(RC)" /Fo$(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.lib $(RC_FLAGS) ${src} Index: ShellPkg/Application/Shell/Resource.rc =================================================================== --- ShellPkg/Application/Shell/Resource.rc (revision 0) +++ ShellPkg/Application/Shell/Resource.rc (working copy) @@ -0,0 +1,25 @@ + 1 VERSIONINFO + FILEVERSION 1,2,3,4 + PRODUCTVERSION 2,2,2,2 + FILEOS 0x00040004 + FILETYPE 2 + FILEFLAGSMASK 0x3F +{ + BLOCK "StringFileInfo" + { + BLOCK "040904b0" + { + VALUE "CompanyName", "Company name" + VALUE "FileDescription", "your text goes here" + VALUE "FileVersion", "0.1.a prerelease beta" + VALUE "LegalCopyright", "yes" + VALUE "OriginalFilename", "Shell.dll" + VALUE "ProductName", "Shell" + VALUE "ProductVersion", "experimental" + } + } + BLOCK "VarFileInfo" + { + VALUE "Translation", 0x409, 1200 + } + } Index: ShellPkg/Application/Shell/Shell.inf =================================================================== --- ShellPkg/Application/Shell/Shell.inf (revision 16219) +++ ShellPkg/Application/Shell/Shell.inf (working copy) @@ -47,6 +47,7 @@ ConsoleLogger.h ConsoleWrappers.c ConsoleWrappers.h + Resource.rc [Packages] MdePkg/MdePkg.dec -- With this patch, the http://sourceforge.net/projects/resourcesviewer/ shows this output for shell.efi: FixedFileInfo Signature: 0xFEEF04BD (VS_FFI_SIGNATURE) StrucVersion: 0x00010000 (VS_FFI_STRUCVERSION) FileVersion: 1.2.3.4 ProductVersion: 2.2.2.2 FileFlagsMask: 0x0000003F (VS_FFI_FILEFLAGSMASK) FileFlags: 0x00000000 FileOS: 0x00040004 (VOS_NT_WINDOWS32) FileType: 0x00000002 (VFT_DLL) FileSubType: 0x00000000 (VFT2_UNKNOWN) FileDate: 01/01/0001 12:00:00 AM StringFileInfo BlockHeader: 040904b0 (en-US, Unicode) CompanyName: Company name FileDescription: your text goes here FileVersion: 0.1.a prerelease beta LegalCopyright: yes OriginalFilename: Shell.dll ProductName: Shell ProductVersion: experimental VarFileInfo Translation 04B00409 (en-US, Unicode) Thanks, Scott ]On Mon, Oct 13, 2014 at 4:45 PM, Gurinder Singh <[email protected]> wrote: ]Hi guys, ] ]How can I set the Windows files system fields like "File Version", "File Description", "Product Name", "Copyright" etc. on an ].efi binary I'm building? ] ]I know I can do this by creating a resource file containing these fields and then linking it to the .efi. But I was wondering if ]there's some standard way of achieving this in EDKII (perhaps by setting some fields in the .inf file or something). ] ]Thanks in advance. ] ]Regards, ]Gurinder
shell-version-resource.patch
Description: Binary data
------------------------------------------------------------------------------ Comprehensive Server Monitoring with Site24x7. Monitor 10 servers for $9/Month. Get alerted through email, SMS, voice calls or mobile push notifications. Take corrective actions from your mobile device. http://p.sf.net/sfu/Zoho
_______________________________________________ edk2-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/edk2-devel
