VirtualBox

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

EFI/Firmware: Added support for kmk makefile generation in a kBuild enviornment. This is more or less a prereq for us getting CLANGDWARF tool working on windows. jiraref:VBP-1458

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

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/AutoGen/GenMake.py

    r105670 r107053  
    5656NMAKE_FILETYPE = "nmake"
    5757GMAKE_FILETYPE = "gmake"
     58KMK_FILETYPE   = "kmk";             # vbox
    5859WIN32_PLATFORM = "win32"
    5960POSIX_PLATFORM = "posix"
     61KBUILD_PLATFORM = "kbuild";         # vbox
    6062
    6163## BuildFile class
     
    7375    _FILE_NAME_ = {
    7476        NMAKE_FILETYPE :   "Makefile",
     77        KMK_FILETYPE :     "Makefile.kmk", # vbox
    7578        GMAKE_FILETYPE :   "GNUmakefile"
    7679    }
     
    101104    _FILE_HEADER_ = {
    102105        NMAKE_FILETYPE :   _MAKEFILE_HEADER % _FILE_NAME_[NMAKE_FILETYPE],
     106        KMK_FILETYPE :     _MAKEFILE_HEADER % _FILE_NAME_[KMK_FILETYPE],    # vbox
    103107        GMAKE_FILETYPE :   _MAKEFILE_HEADER % _FILE_NAME_[GMAKE_FILETYPE]
    104108    }
     
    113117    _SHELL_CMD_ = {
    114118        WIN32_PLATFORM : {
    115             "CP"    :   "copy /y",
    116             "MV"    :   "move /y",
    117             "RM"    :   "del /f /q",
    118             "MD"    :   "mkdir",
    119             "RD"    :   "rmdir /s /q",
     119            "CP"    :  "copy /y",
     120            "MV"    :  "move /y",
     121            "RM"    :  "del /f /q",
     122            "MD"    :  "mkdir",
     123            "RD"    :  "rmdir /s /q",
    120124        },
     125
     126        KBUILD_PLATFORM : {                     # vbox
     127            "CP"    :  "kmk_builtin_cp -f",     # vbox
     128            "MV"    :  "kmk_builtin_mv -f",     # vbox
     129            "MD"    :  "kmk_builtin_mkdir -p",  # vbox
     130            "RM"    :  "kmk_builtin_rm -f",     # vbox
     131            "RD"    :  "kmk_builtin_rm -Rf",    # vbox
     132        },                                      # vbox
    121133
    122134        POSIX_PLATFORM : {
     
    132144    _SEP_ = {
    133145        WIN32_PLATFORM :   "\\",
     146        KBUILD_PLATFORM :  "\\" if sys.platform == "win32" else '/',                        # vbox
    134147        POSIX_PLATFORM :   "/"
    135148    }
     
    138151    _MD_TEMPLATE_ = {
    139152        WIN32_PLATFORM :   'if not exist %(dir)s $(MD) %(dir)s',
     153        KBUILD_PLATFORM :  "$(MD) -- %(dir)s",                                              # vbox
    140154        POSIX_PLATFORM :   "$(MD) %(dir)s"
    141155    }
     
    144158    _RD_TEMPLATE_ = {
    145159        WIN32_PLATFORM :   'if exist %(dir)s $(RD) %(dir)s',
     160        KBUILD_PLATFORM :  "$(RD) -- %(dir)s",                                              # vbox
    146161        POSIX_PLATFORM :   "$(RD) %(dir)s"
    147162    }
     
    149164    _CP_TEMPLATE_ = {
    150165        WIN32_PLATFORM :   'if exist %(Src)s $(CP) %(Src)s %(Dst)s',
     166        KBUILD_PLATFORM :  "kmk_builtin_test -f %(Src)s -- $(CP) -- %(Src)s %(Dst)s",       # vbox
    151167        POSIX_PLATFORM :   "test -f %(Src)s && $(CP) %(Src)s %(Dst)s"
    152168    }
     
    154170    _CD_TEMPLATE_ = {
    155171        WIN32_PLATFORM :   'if exist %(dir)s cd %(dir)s',
     172        KBUILD_PLATFORM :  "test -e %(dir)s && cd %(dir)s",                                 # vbox
    156173        POSIX_PLATFORM :   "test -e %(dir)s && cd %(dir)s"
    157174    }
     
    159176    _MAKE_TEMPLATE_ = {
    160177        WIN32_PLATFORM :   'if exist %(file)s "$(MAKE)" $(MAKE_FLAGS) -f %(file)s',
     178        KBUILD_PLATFORM :  '+kmk_test -e %(file)s -- "$(MAKE)" $(MAKE_FLAGS) -f %(file)s',  # vbox
    161179        POSIX_PLATFORM :   'test -e %(file)s && "$(MAKE)" $(MAKE_FLAGS) -f %(file)s'
    162180    }
     
    164182    _INCLUDE_CMD_ = {
    165183        NMAKE_FILETYPE :   '!INCLUDE',
     184        KMK_FILETYPE :     "include",                                                       # vbox
    166185        GMAKE_FILETYPE :   "include"
    167186    }
     
    181200        if "nmake" in MakePath:
    182201            self._FileType = NMAKE_FILETYPE
     202        elif "kmk" in MakePath:                     # vbox
     203            self._FileType = KMK_FILETYPE           # vbox
    183204        else:
    184205            self._FileType = GMAKE_FILETYPE
     
    188209        else:
    189210            self._Platform = POSIX_PLATFORM
     211        # vbox start
     212        if self._FileType == KMK_FILETYPE:
     213            self._Platform = KBUILD_PLATFORM
     214        # vbox end
    190215
    191216    ## Create build file.
     
    244269                    break
    245270            return Path
     271
     272    # VBox begin
     273    def FixQuietAndRedirForCommandList(self, asCommands):
     274        asRet = [];
     275        for sCmd in asCommands:
     276            sCmd = sCmd.strip();
     277            if sCmd:
     278                if sCmd.startswith('if exist ') and self._FileType == KMK_FILETYPE:
     279                    raise Exception('sCmd=%s' % (sCmd,));
     280
     281                if self._FileType == KMK_FILETYPE and sCmd.count('>') == 1 and '&' not in sCmd:
     282                    sCmd, sOutput = sCmd.split('>');
     283                    sCmd = 'kmk_builtin_redirect -wto %s -- %s' % (sOutput.strip(), sCmd.strip());
     284
     285                if sCmd[0] == '-' and self._FileType == NMAKE_FILETYPE:
     286                    sCmd = '-$(EFI_QUIET)' + sCmd[1:];
     287                else:
     288                    sCmd = '$(EFI_QUIET)' + sCmd;
     289            asRet.append(sCmd);
     290        return asRet;
     291    # VBox end
    246292
    247293## ModuleMakefile class
     
    10501096                        Deps.append("$(%s)" % T.ListFileMacro)
    10511097
    1052                 # VBox - begin: Add $(QUIET)
    1053                 sAllCmds = None;
    1054                 for sCmd in T.Commands:
    1055                     sCmd = sCmd.strip();
    1056                     if len(sCmd) > 0:
    1057                         if sCmd[0] == '-' and self._FileType == 'nmake':
    1058                             sCmd = '-$(EFI_QUIET)' + sCmd[1:];
    1059                         else:
    1060                             sCmd = '$(EFI_QUIET)' + sCmd;
    1061                         if sAllCmds is None:
    1062                             sAllCmds = sCmd;
    1063                         else:
    1064                             sAllCmds += '\n\t' + sCmd;
    1065                 # VBox - end.
    1066 
    10671098                if self._AutoGenObject.BuildRuleFamily == TAB_COMPILER_MSFT and Type == TAB_C_CODE_FILE:
    10681099                    T, CmdTarget, CmdTargetDict, CmdCppDict = self.ParserCCodeFile(T, Type, CmdSumDict, CmdTargetDict,
     
    10701101                                                                                   ToolsDef, resp_file_number)
    10711102                    resp_file_number += 1
    1072                     TargetDict = {"target": self.PlaceMacro(T.Target.Path, self.Macros), "cmd": "\n\t".join(T.Commands),"deps": CCodeDeps}
    1073                     # VBox: Original: TargetDict = {"target": self.PlaceMacro(T.Target.Path, self.Macros), "cmd": sAllCmds,"deps": CCodeDeps}
    1074                     CmdLine = self._BUILD_TARGET_TEMPLATE.Replace(TargetDict).rstrip().replace('\t$(OBJLIST', '$(OBJLIST')
     1103                    TargetDict = {"target": self.PlaceMacro(T.Target.Path, self.Macros), "cmd": "\n\t".join(self.FixQuietAndRedirForCommandList(T.Commands)),"deps": CCodeDeps}
     1104                    CmdLine = self._BUILD_TARGET_TEMPLATE.Replace(TargetDict).rstrip().replace('\t$(OBJLIST', '$(OBJLIST').replace('\t$(EFI_QUIET)$(OBJLIST', '$(OBJLIST')
    10751105                    if T.Commands:
    10761106                        CmdLine = '%s%s' %(CmdLine, TAB_LINE_BREAK)
     
    10781108                        self.BuildTargetList.append(CmdLine)
    10791109                else:
    1080                     TargetDict = {"target": self.PlaceMacro(T.Target.Path, self.Macros), "cmd": "\n\t".join(T.Commands),"deps": Deps}
    1081                     # VBox: Original: TargetDict = {"target": self.PlaceMacro(T.Target.Path, self.Macros), "cmd": sAllCmds,"deps": Deps}
     1110                    TargetDict = {"target": self.PlaceMacro(T.Target.Path, self.Macros), "cmd": "\n\t".join(self.FixQuietAndRedirForCommandList(T.Commands)),"deps": Deps}
     1111                    if self._FileType == KMK_FILETYPE and len(T.Outputs) > 1:                               # vbox
     1112                        # kmk has syntax for multiple output files.                                         # vbox
     1113                        asTargets = [TargetDict["target"],];                                                # vbox
     1114                        for oOutput in T.Outputs[1:]:                                                       # vbox
     1115                            asTargets.append(self.PlaceMacro(oOutput.Path, self.Macros));                   # vbox
     1116                        TargetDict["target"] = ' +| '.join(asTargets)                                       # vbox
    10821117                    self.BuildTargetList.append(self._BUILD_TARGET_TEMPLATE.Replace(TargetDict))
    10831118
    1084                     # Add a Makefile rule for targets generating multiple files.
    1085                     # The main output is a prerequisite for the other output files.
    1086                     for i in T.Outputs[1:]:
    1087                         AnnexeTargetDict = {"target": self.PlaceMacro(i.Path, self.Macros), "cmd": "", "deps": self.PlaceMacro(T.Target.Path, self.Macros)}
    1088                         self.BuildTargetList.append(self._BUILD_TARGET_TEMPLATE.Replace(AnnexeTargetDict))
     1119                    if self._FileType != KMK_FILETYPE:                                                      # vbox
     1120                        # Add a Makefile rule for targets generating multiple files.
     1121                        # The main output is a prerequisite for the other output files.
     1122                        for i in T.Outputs[1:]:
     1123                            AnnexeTargetDict = {"target": self.PlaceMacro(i.Path, self.Macros), "cmd": "", "deps": self.PlaceMacro(T.Target.Path, self.Macros)}
     1124                            self.BuildTargetList.append(self._BUILD_TARGET_TEMPLATE.Replace(AnnexeTargetDict))
    10891125
    10901126    def ParserCCodeFile(self, T, Type, CmdSumDict, CmdTargetDict, CmdCppDict, DependencyDict, RespFile, ToolsDef,
  • trunk/src/VBox/Devices/EFI/Firmware/BaseTools/Source/Python/GenFds/GenFdsGlobalVariable.py

    r99404 r107053  
    509509            SaveFileOnChange(CommandFile, ' '.join(Cmd), False)
    510510            if IsMakefile:
    511                 if sys.platform == "win32":
     511                if True:                                                # vbox: badly abstracted.
     512                    Cmd = ['kmk_test', '-e', Input[0], '--'] + Cmd      # vbox: badly abstracted.
     513                elif sys.platform == "win32":
    512514                    Cmd = ['if', 'exist', Input[0]] + Cmd
    513515                else:
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