]> git.proxmox.com Git - mirror_edk2.git/blame - .pytool/CISettings.py
BaseTools: BaseTools changes for RISC-V platform.
[mirror_edk2.git] / .pytool / CISettings.py
CommitLineData
4eb2baba
SB
1# @file\r
2#\r
3# Copyright (c) Microsoft Corporation.\r
4# SPDX-License-Identifier: BSD-2-Clause-Patent\r
5##\r
6import os\r
7import logging\r
8from edk2toolext.environment import shell_environment\r
9from edk2toolext.invocables.edk2_ci_build import CiBuildSettingsManager\r
10from edk2toolext.invocables.edk2_setup import SetupSettingsManager, RequiredSubmodule\r
11from edk2toolext.invocables.edk2_update import UpdateSettingsManager\r
12from edk2toolext.invocables.edk2_pr_eval import PrEvalSettingsManager\r
13from edk2toollib.utility_functions import GetHostInfo\r
14\r
15\r
16class Settings(CiBuildSettingsManager, UpdateSettingsManager, SetupSettingsManager, PrEvalSettingsManager):\r
17\r
18 def __init__(self):\r
19 self.ActualPackages = []\r
20 self.ActualTargets = []\r
21 self.ActualArchitectures = []\r
22 self.ActualToolChainTag = ""\r
23\r
24 # ####################################################################################### #\r
25 # Extra CmdLine configuration #\r
26 # ####################################################################################### #\r
27\r
28 def AddCommandLineOptions(self, parserObj):\r
29 pass\r
30\r
31 def RetrieveCommandLineOptions(self, args):\r
32 pass\r
33\r
34 # ####################################################################################### #\r
35 # Default Support for this Ci Build #\r
36 # ####################################################################################### #\r
37\r
38 def GetPackagesSupported(self):\r
39 ''' return iterable of edk2 packages supported by this build.\r
40 These should be edk2 workspace relative paths '''\r
41\r
0358c0bf
SB
42 return ("ArmVirtPkg",\r
43 "EmulatorPkg",\r
44 "MdePkg",\r
4eb2baba
SB
45 "MdeModulePkg",\r
46 "NetworkPkg",\r
47 "PcAtChipsetPkg",\r
48 "SecurityPkg",\r
49 "UefiCpuPkg",\r
50 "FmpDevicePkg",\r
51 "ShellPkg",\r
52 "FatPkg",\r
61364ab9 53 "CryptoPkg",\r
0358c0bf
SB
54 "UnitTestFrameworkPkg",\r
55 "OvmfPkg"\r
4eb2baba
SB
56 )\r
57\r
58 def GetArchitecturesSupported(self):\r
59 ''' return iterable of edk2 architectures supported by this build '''\r
60 return ("IA32",\r
61 "X64",\r
62 "ARM",\r
63 "AARCH64")\r
64\r
65 def GetTargetsSupported(self):\r
66 ''' return iterable of edk2 target tags supported by this build '''\r
67 return ("DEBUG", "RELEASE", "NO-TARGET", "NOOPT")\r
68\r
69 # ####################################################################################### #\r
70 # Verify and Save requested Ci Build Config #\r
71 # ####################################################################################### #\r
72\r
73 def SetPackages(self, list_of_requested_packages):\r
74 ''' Confirm the requested package list is valid and configure SettingsManager\r
75 to build the requested packages.\r
76\r
77 Raise UnsupportedException if a requested_package is not supported\r
78 '''\r
79 unsupported = set(list_of_requested_packages) - \\r
80 set(self.GetPackagesSupported())\r
81 if(len(unsupported) > 0):\r
82 logging.critical(\r
83 "Unsupported Package Requested: " + " ".join(unsupported))\r
84 raise Exception("Unsupported Package Requested: " +\r
85 " ".join(unsupported))\r
86 self.ActualPackages = list_of_requested_packages\r
87\r
88 def SetArchitectures(self, list_of_requested_architectures):\r
89 ''' Confirm the requests architecture list is valid and configure SettingsManager\r
90 to run only the requested architectures.\r
91\r
92 Raise Exception if a list_of_requested_architectures is not supported\r
93 '''\r
94 unsupported = set(list_of_requested_architectures) - \\r
95 set(self.GetArchitecturesSupported())\r
96 if(len(unsupported) > 0):\r
97 logging.critical(\r
98 "Unsupported Architecture Requested: " + " ".join(unsupported))\r
99 raise Exception(\r
100 "Unsupported Architecture Requested: " + " ".join(unsupported))\r
101 self.ActualArchitectures = list_of_requested_architectures\r
102\r
103 def SetTargets(self, list_of_requested_target):\r
104 ''' Confirm the request target list is valid and configure SettingsManager\r
105 to run only the requested targets.\r
106\r
107 Raise UnsupportedException if a requested_target is not supported\r
108 '''\r
109 unsupported = set(list_of_requested_target) - \\r
110 set(self.GetTargetsSupported())\r
111 if(len(unsupported) > 0):\r
112 logging.critical(\r
113 "Unsupported Targets Requested: " + " ".join(unsupported))\r
114 raise Exception("Unsupported Targets Requested: " +\r
115 " ".join(unsupported))\r
116 self.ActualTargets = list_of_requested_target\r
117\r
118 # ####################################################################################### #\r
119 # Actual Configuration for Ci Build #\r
120 # ####################################################################################### #\r
121\r
122 def GetActiveScopes(self):\r
123 ''' return tuple containing scopes that should be active for this process '''\r
61364ab9 124 scopes = ("cibuild", "edk2-build", "host-based-test")\r
4eb2baba
SB
125\r
126 self.ActualToolChainTag = shell_environment.GetBuildVars().GetValue("TOOL_CHAIN_TAG", "")\r
127\r
61364ab9
MK
128 if GetHostInfo().os.upper() == "WINDOWS":\r
129 scopes += ('host-test-win',)\r
130\r
4eb2baba
SB
131 if GetHostInfo().os.upper() == "LINUX" and self.ActualToolChainTag.upper().startswith("GCC"):\r
132 if "AARCH64" in self.ActualArchitectures:\r
133 scopes += ("gcc_aarch64_linux",)\r
134 if "ARM" in self.ActualArchitectures:\r
135 scopes += ("gcc_arm_linux",)\r
136\r
137 return scopes\r
138\r
139 def GetRequiredSubmodules(self):\r
140 ''' return iterable containing RequiredSubmodule objects.\r
141 If no RequiredSubmodules return an empty iterable\r
142 '''\r
61364ab9 143 rs = []\r
4eb2baba
SB
144 rs.append(RequiredSubmodule(\r
145 "ArmPkg/Library/ArmSoftFloatLib/berkeley-softfloat-3", False))\r
146 rs.append(RequiredSubmodule(\r
147 "CryptoPkg/Library/OpensslLib/openssl", False))\r
61364ab9
MK
148 rs.append(RequiredSubmodule(\r
149 "UnitTestFrameworkPkg/Library/CmockaLib/cmocka", False))\r
48b6c60c
SZ
150 rs.append(RequiredSubmodule(\r
151 "MdeModulePkg/Universal/RegularExpressionDxe/oniguruma", False))\r
58802e02
SZ
152 rs.append(RequiredSubmodule(\r
153 "MdeModulePkg/Library/BrotliCustomDecompressLib/brotli", False))\r
06033f5a
SZ
154 rs.append(RequiredSubmodule(\r
155 "BaseTools/Source/C/BrotliCompress/brotli", False))\r
4eb2baba
SB
156 return rs\r
157\r
158 def GetName(self):\r
159 return "Edk2"\r
160\r
161 def GetDependencies(self):\r
61364ab9
MK
162 return [\r
163 ]\r
4eb2baba
SB
164\r
165 def GetPackagesPath(self):\r
166 return ()\r
167\r
168 def GetWorkspaceRoot(self):\r
169 ''' get WorkspacePath '''\r
170 return os.path.dirname(os.path.dirname(os.path.abspath(__file__)))\r
171\r
172 def FilterPackagesToTest(self, changedFilesList: list, potentialPackagesList: list) -> list:\r
173 ''' Filter potential packages to test based on changed files. '''\r
61364ab9
MK
174 build_these_packages = []\r
175 possible_packages = potentialPackagesList.copy()\r
4eb2baba 176 for f in changedFilesList:\r
61364ab9
MK
177 # split each part of path for comparison later\r
178 nodes = f.split("/")\r
4eb2baba
SB
179\r
180 # python file change in .pytool folder causes building all\r
181 if f.endswith(".py") and ".pytool" in nodes:\r
182 build_these_packages = possible_packages\r
183 break\r
184\r
185 # BaseTools files that might change the build\r
186 if "BaseTools" in nodes:\r
187 if os.path.splitext(f) not in [".txt", ".md"]:\r
188 build_these_packages = possible_packages\r
189 break\r
190 return build_these_packages\r