VirtualBox

Ignore:
Timestamp:
Nov 20, 2024 11:06:26 AM (3 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
166008
Message:

EFI/Firmware: Fix the DLL -> EFI conversion for GCC & CLANGDWARF so it doesn't modify the source files as this seem to confuse kmk into an infinite loop at times. Also, list all the outputs so kmk don't think dependencies it requires are missing (probably exposed by default -j<cpu-count> feature in kmk). With this we CLANGDWARF should work on windows. jiraref:VBP-1458

Location:
trunk/src/VBox/Devices/EFI/Firmware/BaseTools
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/EFI/Firmware/BaseTools/Conf/build_rule.template

    r101291 r107054  
    345345        $(OUTPUT_DIR)(+)$(MODULE_NAME).map
    346346
     347# vbox: Fixing no-rule-to-make ..\DEBUG\mod.efi
     348# Note! Listing .efi more than once causes trouble in ModuleAutoGen.py::_ApplyBuildRule for
     349#       VBoxVgaDxe, so that required hacking as well to make this fix work.
     350    <OutputFile.GCC>
     351        $(DEBUG_DIR)(+)$(MODULE_NAME).efi
     352        $(DEBUG_DIR)(+)$(MODULE_NAME).debug
     353        $(DEBUG_DIR)(+)$(MODULE_NAME).efi-tmp
     354        $(DEBUG_DIR)(+)$(MODULE_NAME).map
     355        $(BIN_DIR)(+)$(MODULE_NAME_GUID).efi
     356        $(BIN_DIR)(+)$(MODULE_NAME_GUID).debug
     357
    347358    <Command.MSFT, Command.INTEL, Command.CLANGPDB>
    348359        "$(GENFW)" -e $(MODULE_TYPE) -o ${dst} ${src} $(GENFW_FLAGS)
     
    352363        -$(CP) $(DEBUG_DIR)(+)*.pdb $(OUTPUT_DIR)
    353364    <Command.GCC>
     365# vbox 2024-11-18 bird: This crap modifies the source file, causing EnglishDxe to spin forever
     366#        $(CP) ${src} $(DEBUG_DIR)(+)$(MODULE_NAME).debug
     367#        "$(OBJCOPY)" $(OBJCOPY_STRIPFLAG) ${src}
     368#
     369#        #
     370#        #The below 2 lines are only needed for UNIXGCC tool chain, which generates PE image directly
     371#        #
     372#        -"$(OBJCOPY)" $(OBJCOPY_ADDDEBUGFLAG) ${src}
     373#        -$(CP) $(DEBUG_DIR)(+)$(MODULE_NAME).debug $(BIN_DIR)(+)$(MODULE_NAME_GUID).debug
     374#
     375#        "$(GENFW)" -e $(MODULE_TYPE) -o ${dst} ${src} $(GENFW_FLAGS)
     376#        $(CP) ${dst} $(DEBUG_DIR)
     377#        $(CP) ${dst} $(BIN_DIR)(+)$(MODULE_NAME_GUID).efi
     378#        -$(CP) $(DEBUG_DIR)(+)*.map $(OUTPUT_DIR)
     379# Rewritten:
    354380        $(CP) ${src} $(DEBUG_DIR)(+)$(MODULE_NAME).debug
    355         "$(OBJCOPY)" $(OBJCOPY_STRIPFLAG) ${src}
    356 
    357         #
    358         #The below 2 lines are only needed for UNIXGCC tool chain, which generates PE image directly
    359         #
    360         -"$(OBJCOPY)" $(OBJCOPY_ADDDEBUGFLAG) ${src}
    361         -$(CP) $(DEBUG_DIR)(+)$(MODULE_NAME).debug $(BIN_DIR)(+)$(MODULE_NAME_GUID).debug
    362 
    363         "$(GENFW)" -e $(MODULE_TYPE) -o ${dst} ${src} $(GENFW_FLAGS)
     381        $(CP) ${src} $(DEBUG_DIR)(+)$(MODULE_NAME).efi-tmp
     382        "$(OBJCOPY)" $(OBJCOPY_STRIPFLAG) $(DEBUG_DIR)(+)$(MODULE_NAME).efi-tmp
     383        "$(GENFW)" -e $(MODULE_TYPE) -o ${dst} $(DEBUG_DIR)(+)$(MODULE_NAME).efi-tmp $(GENFW_FLAGS)
    364384        $(CP) ${dst} $(DEBUG_DIR)
    365385        $(CP) ${dst} $(BIN_DIR)(+)$(MODULE_NAME_GUID).efi
    366         -$(CP) $(DEBUG_DIR)(+)*.map $(OUTPUT_DIR)
     386        $(CP) $(DEBUG_DIR)(+)$(MODULE_NAME).debug $(BIN_DIR)(+)$(MODULE_NAME_GUID).debug
     387        -$(CP) $(DEBUG_DIR)(+)$(MODULE_NAME).map $(OUTPUT_DIR)
    367388
    368389    <Command.XCODE>
  • trunk/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/AutoGen/ModuleAutoGen.py

    r105670 r107054  
    907907            # to avoid cyclic rule
    908908            if FileType in RuleChain:
    909                 EdkLogger.error("build", ERROR_STATEMENT, "Cyclic dependency detected while generating rule for %s" % str(Source))
     909                EdkLogger.error("build", ERROR_STATEMENT, "Cyclic dependency detected while generating rule for %s (FileType=%s RuleChain=%s)" % (str(Source), FileType, RuleChain))
    910910
    911911            RuleChain.add(FileType)
    912             SourceList.extend(Target.Outputs)
     912            # vbox: HACK ALERT! Only add the first .efi output file, otherwise the cyclic error triggers.   # vbox
     913            #                   See modification to [Dynamic-Library-File] in build_rule.template.          # vbox
     914            if len(Target.Outputs) > 1 and Target.Outputs[0].Ext == '.efi':                                 # vbox
     915                SourceList.append(Target.Outputs[0]);                                                       # vbox
     916                for oOutput in Target.Outputs[1:]:                                                          # vbox
     917                    if oOutput.Ext != '.efi':                                                               # vbox
     918                        SourceList.append(oOutput);                                                         # vbox
     919            else:                                                                                           # vbox
     920                SourceList.extend(Target.Outputs)
    913921
    914922        # For each final target name, retrieve the corresponding TargetDescBlock instance.
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette