]> git.proxmox.com Git - mirror_edk2.git/blobdiff - .pytool/CISettings.py
FatPkg: Consume MdeLibs.dsc.inc for RegisterFilterLib
[mirror_edk2.git] / .pytool / CISettings.py
index ce177937e135f778cc811f1d53d88aa7c7b10fd5..5f71eca1992e370fa4d0110c8c4e980c06c840d6 100644 (file)
@@ -1,6 +1,8 @@
 # @file\r
 #\r
 # Copyright (c) Microsoft Corporation.\r
+# Copyright (c) 2020, Hewlett Packard Enterprise Development LP. All rights reserved.<BR>\r
+# Copyright (c) 2020 - 2021, ARM Limited. All rights reserved.<BR>\r
 # SPDX-License-Identifier: BSD-2-Clause-Patent\r
 ##\r
 import os\r
@@ -20,16 +22,24 @@ class Settings(CiBuildSettingsManager, UpdateSettingsManager, SetupSettingsManag
         self.ActualTargets = []\r
         self.ActualArchitectures = []\r
         self.ActualToolChainTag = ""\r
+        self.UseBuiltInBaseTools = None\r
+        self.ActualScopes = None\r
 \r
     # ####################################################################################### #\r
     #                             Extra CmdLine configuration                                 #\r
     # ####################################################################################### #\r
 \r
     def AddCommandLineOptions(self, parserObj):\r
-        pass\r
+        group = parserObj.add_mutually_exclusive_group()\r
+        group.add_argument("-force_piptools", "--fpt", dest="force_piptools", action="store_true", default=False, help="Force the system to use pip tools")\r
+        group.add_argument("-no_piptools", "--npt", dest="no_piptools", action="store_true", default=False, help="Force the system to not use pip tools")\r
 \r
     def RetrieveCommandLineOptions(self, args):\r
-        pass\r
+        super().RetrieveCommandLineOptions(args)\r
+        if args.force_piptools:\r
+            self.UseBuiltInBaseTools = True\r
+        if args.no_piptools:\r
+            self.UseBuiltInBaseTools = False\r
 \r
     # ####################################################################################### #\r
     #                        Default Support for this Ci Build                                #\r
@@ -39,7 +49,10 @@ class Settings(CiBuildSettingsManager, UpdateSettingsManager, SetupSettingsManag
         ''' return iterable of edk2 packages supported by this build.\r
         These should be edk2 workspace relative paths '''\r
 \r
-        return ("MdePkg",\r
+        return ("ArmVirtPkg",\r
+                "DynamicTablesPkg",\r
+                "EmulatorPkg",\r
+                "MdePkg",\r
                 "MdeModulePkg",\r
                 "NetworkPkg",\r
                 "PcAtChipsetPkg",\r
@@ -47,16 +60,22 @@ class Settings(CiBuildSettingsManager, UpdateSettingsManager, SetupSettingsManag
                 "UefiCpuPkg",\r
                 "FmpDevicePkg",\r
                 "ShellPkg",\r
+                "StandaloneMmPkg",\r
                 "FatPkg",\r
-                "CryptoPkg"\r
+                "CryptoPkg",\r
+                "UnitTestFrameworkPkg",\r
+                "OvmfPkg",\r
+                "RedfishPkg"\r
                 )\r
 \r
     def GetArchitecturesSupported(self):\r
         ''' return iterable of edk2 architectures supported by this build '''\r
-        return ("IA32",\r
+        return (\r
+                "IA32",\r
                 "X64",\r
                 "ARM",\r
-                "AARCH64")\r
+                "AARCH64",\r
+                "RISCV64")\r
 \r
     def GetTargetsSupported(self):\r
         ''' return iterable of edk2 target tags supported by this build '''\r
@@ -117,34 +136,66 @@ class Settings(CiBuildSettingsManager, UpdateSettingsManager, SetupSettingsManag
 \r
     def GetActiveScopes(self):\r
         ''' return tuple containing scopes that should be active for this process '''\r
-        scopes = ("cibuild","edk2-build")\r
-\r
-        self.ActualToolChainTag = shell_environment.GetBuildVars().GetValue("TOOL_CHAIN_TAG", "")\r
-\r
-        if GetHostInfo().os.upper() == "LINUX" and self.ActualToolChainTag.upper().startswith("GCC"):\r
-            if "AARCH64" in self.ActualArchitectures:\r
-                scopes += ("gcc_aarch64_linux",)\r
-            if "ARM" in self.ActualArchitectures:\r
-                scopes += ("gcc_arm_linux",)\r
-\r
-        return scopes\r
+        if self.ActualScopes is None:\r
+            scopes = ("cibuild", "edk2-build", "host-based-test")\r
+\r
+            self.ActualToolChainTag = shell_environment.GetBuildVars().GetValue("TOOL_CHAIN_TAG", "")\r
+\r
+            is_linux = GetHostInfo().os.upper() == "LINUX"\r
+\r
+            if self.UseBuiltInBaseTools is None:\r
+                is_linux = GetHostInfo().os.upper() == "LINUX"\r
+                # try and import the pip module for basetools\r
+                try:\r
+                    import edk2basetools\r
+                    self.UseBuiltInBaseTools = True\r
+                except ImportError:\r
+                    self.UseBuiltInBaseTools = False\r
+                    pass\r
+\r
+            if self.UseBuiltInBaseTools == True:\r
+                scopes += ('pipbuild-unix',) if is_linux else ('pipbuild-win',)\r
+                logging.warning("Using Pip Tools based BaseTools")\r
+            else:\r
+                logging.warning("Falling back to using in-tree BaseTools")\r
+\r
+            if is_linux and self.ActualToolChainTag.upper().startswith("GCC"):\r
+                if "AARCH64" in self.ActualArchitectures:\r
+                    scopes += ("gcc_aarch64_linux",)\r
+                if "ARM" in self.ActualArchitectures:\r
+                    scopes += ("gcc_arm_linux",)\r
+                if "RISCV64" in self.ActualArchitectures:\r
+                    scopes += ("gcc_riscv64_unknown",)\r
+            self.ActualScopes = scopes\r
+        return self.ActualScopes\r
 \r
     def GetRequiredSubmodules(self):\r
         ''' return iterable containing RequiredSubmodule objects.\r
         If no RequiredSubmodules return an empty iterable\r
         '''\r
-        rs=[]\r
+        rs = []\r
         rs.append(RequiredSubmodule(\r
             "ArmPkg/Library/ArmSoftFloatLib/berkeley-softfloat-3", False))\r
         rs.append(RequiredSubmodule(\r
             "CryptoPkg/Library/OpensslLib/openssl", False))\r
+        rs.append(RequiredSubmodule(\r
+            "UnitTestFrameworkPkg/Library/CmockaLib/cmocka", False))\r
+        rs.append(RequiredSubmodule(\r
+            "MdeModulePkg/Universal/RegularExpressionDxe/oniguruma", False))\r
+        rs.append(RequiredSubmodule(\r
+            "MdeModulePkg/Library/BrotliCustomDecompressLib/brotli", False))\r
+        rs.append(RequiredSubmodule(\r
+            "BaseTools/Source/C/BrotliCompress/brotli", False))\r
+        rs.append(RequiredSubmodule(\r
+            "RedfishPkg/Library/JsonLib/jansson", False))\r
         return rs\r
 \r
     def GetName(self):\r
         return "Edk2"\r
 \r
     def GetDependencies(self):\r
-        return []\r
+        return [\r
+        ]\r
 \r
     def GetPackagesPath(self):\r
         return ()\r
@@ -155,10 +206,11 @@ class Settings(CiBuildSettingsManager, UpdateSettingsManager, SetupSettingsManag
 \r
     def FilterPackagesToTest(self, changedFilesList: list, potentialPackagesList: list) -> list:\r
         ''' Filter potential packages to test based on changed files. '''\r
-        build_these_packages=[]\r
-        possible_packages=potentialPackagesList.copy()\r
+        build_these_packages = []\r
+        possible_packages = potentialPackagesList.copy()\r
         for f in changedFilesList:\r
-            nodes=f.split("/")  # split each part of path for comparison later\r
+            # split each part of path for comparison later\r
+            nodes = f.split("/")\r
 \r
             # python file change in .pytool folder causes building all\r
             if f.endswith(".py") and ".pytool" in nodes:\r