]> git.proxmox.com Git - mirror_edk2.git/blame - Tools/Source/GenBuild/org/tianocore/build/toolchain/ToolChainInfo.java
Added copyright&license header.
[mirror_edk2.git] / Tools / Source / GenBuild / org / tianocore / build / toolchain / ToolChainInfo.java
CommitLineData
5f42a4ba 1/** @file\r
2This file is to define ToolChainInfo class.\r
3\r
4Copyright (c) 2006, Intel Corporation\r
5All rights reserved. This program and the accompanying materials\r
6are licensed and made available under the terms and conditions of the BSD License\r
7which accompanies this distribution. The full text of the license may be found at\r
8http://opensource.org/licenses/bsd-license.php\r
9\r
10THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
11WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
12**/\r
13\r
a29c47e0 14package org.tianocore.build.toolchain;\r
15\r
16import java.util.HashMap;\r
17import java.util.LinkedHashSet;\r
18import java.util.Map;\r
19import java.util.Set;\r
20\r
21public class ToolChainInfo {\r
5f42a4ba 22 //\r
23 // build target set\r
24 // \r
a29c47e0 25 private Set<String> targets = new LinkedHashSet<String>();\r
5f42a4ba 26 //\r
27 // tool chain tag name set\r
28 // \r
a29c47e0 29 private Set<String> tagnames = new LinkedHashSet<String>();\r
5f42a4ba 30 //\r
31 // build archs set\r
32 // \r
a29c47e0 33 private Set<String> archs = new LinkedHashSet<String>();\r
5f42a4ba 34 //\r
35 // build commands set\r
36 // \r
a29c47e0 37 private Set<String> commands = new LinkedHashSet<String>();\r
5f42a4ba 38 //\r
39 // build commands for specific tool chain\r
40 // \r
a29c47e0 41 private Map<String, Set<String>> commandMap = new HashMap<String, Set<String>>();\r
5f42a4ba 42 /**\r
43 Add a list of targets in the form of string separated by space\r
44\r
45 @param targetList target list string\r
46 **/\r
a29c47e0 47 public void addTargets(String targetList) {\r
48 //\r
49 // targetList some targets separated by space " "\r
50 //\r
51 if (targetList == null) {\r
52 targets.add("*");\r
53 return ;\r
54 }\r
55 addTargets(targetList.split(" "));\r
56 }\r
5f42a4ba 57 /**\r
58 Add a list of targets in the form of string array\r
59 \r
60 @param targetArray target string array\r
61 **/\r
a29c47e0 62 public void addTargets(String[] targetArray) {\r
63 if (targetArray == null ) {\r
64 return ;\r
65 }\r
66 for (int i = 0; i < targetArray.length; i++) {\r
67 targets.add(targetArray[i]);\r
68 }\r
69 }\r
5f42a4ba 70 /**\r
71 Add a list of target in the form of set\r
72 \r
73 @param targetSet target string set\r
74 **/\r
a29c47e0 75 public void addTargets(Set<String> targetSet) {\r
76 targets.addAll(targetSet);\r
77 }\r
5f42a4ba 78 /**\r
79 Add a list of tool chain tag name in the form of string separated by space\r
80\r
81 @param tagnameList\r
82 **/\r
a29c47e0 83 public void addTagnames(String tagnameList) {\r
84 //\r
85 // tagnameList some tagnames separated by space " "\r
86 //\r
87 if (tagnameList == null) {\r
88 tagnames.add("*");\r
89 return ;\r
90 }\r
91 addTagnames(tagnameList.split(" "));\r
92 }\r
93 \r
94 public void addTagnames(String[] tagnameArray) {\r
95 if (tagnameArray == null ) {\r
96 return ;\r
97 }\r
98 for (int i = 0; i < tagnameArray.length; i++) {\r
99 tagnames.add(tagnameArray[i]);\r
100 }\r
101 }\r
102 \r
103 public void addTagnames(Set<String> tagnameSet) {\r
104 tagnames.addAll(tagnameSet);\r
105 }\r
106 \r
107 public void addArchs(String archList) {\r
108 //\r
109 // archList some archs separated by space " "\r
110 //\r
111 if (archList == null) {\r
112 archs.add("*");\r
113 return ;\r
114 }\r
115 addArchs(archList.split(" "));\r
116 }\r
117 \r
118 public void addArchs(String[] archArray) {\r
119 if (archArray == null ) {\r
120 return ;\r
121 }\r
122 for (int i = 0; i < archArray.length; i++) {\r
123 archs.add(archArray[i]);\r
124 }\r
125 }\r
126 \r
127 public void addArchs(Set<String> archSet) {\r
128 archs.addAll(archSet);\r
129 }\r
130 \r
131 public void addCommands(String toolChain, String commandList) {\r
132 //\r
133 // archList some archs separated by space " "\r
134 //\r
135 if (commandList == null || commandList.length() == 0) {\r
136 return ;\r
137 }\r
138 addCommands(commandList.split(" "));\r
139 }\r
140 \r
141 public void addCommands(String[] commandArray) {\r
142 if (commandArray == null ) {\r
143 return ;\r
144 }\r
145 for (int i = 0; i < commandArray.length; i++) {\r
146 commands.add(commandArray[i]);\r
147 }\r
148 }\r
149 \r
150 public void addCommands(String toolChain, String[] commandArray) {\r
151 if (commandArray == null) {\r
152 return ;\r
153 }\r
154\r
155 Set<String> toolChainCommandSet = commandMap.get(toolChain);\r
156 if (toolChainCommandSet == null) {\r
157 toolChainCommandSet = new LinkedHashSet<String>();\r
158 commandMap.put(toolChain, toolChainCommandSet);\r
159 }\r
160 for (int i = 0; i < commandArray.length; i++) {\r
161 commands.add(commandArray[i]);\r
162 toolChainCommandSet.add(commandArray[i]);\r
163 }\r
164 }\r
165 \r
166 public void addCommands(String toolChain, Set<String> commandSet) {\r
167 if (commandSet == null) {\r
168 return;\r
169 }\r
170 Set<String> toolChainCommandSet = commandMap.get(toolChain);\r
171 if (toolChainCommandSet == null) {\r
172 toolChainCommandSet = new LinkedHashSet<String>();\r
173 commandMap.put(toolChain, toolChainCommandSet);\r
174 }\r
175 commands.addAll(commandSet);\r
176 toolChainCommandSet.addAll(commandSet);\r
177 }\r
178 \r
179 public ToolChainInfo union(ToolChainInfo info) {\r
180 ToolChainInfo result = new ToolChainInfo();\r
181 result.addTargets(union(this.targets, info.targets));\r
182 result.addTagnames(union(this.tagnames, info.tagnames));\r
183 result.addArchs(union(this.archs, info.archs));\r
a29c47e0 184 return result;\r
185 }\r
186 \r
187 public ToolChainInfo intersection(ToolChainInfo info) {\r
a29c47e0 188 ToolChainInfo result = new ToolChainInfo();\r
189 result.addTargets(intersection(this.targets, info.targets));\r
190 result.addTagnames(intersection(this.tagnames, info.tagnames));\r
191 result.addArchs(intersection(this.archs, info.archs));\r
a29c47e0 192 return result;\r
193 }\r
194 \r
195 private Set<String> union(Set<String> set1, Set<String> set2) {\r
196 Set<String> result = new LinkedHashSet<String>();\r
197 result.addAll(set1);\r
198 result.addAll(set2);\r
199 result.remove("*");\r
200 return result;\r
201 }\r
202 \r
203 private Set<String> intersection(Set<String> set1, Set<String> set2) {\r
204 Set<String> result = new LinkedHashSet<String>();\r
205 boolean set1HasWildcard = set1.contains("*");\r
206 boolean set2HasWildcard = set2.contains("*");\r
207\r
208 if (set1HasWildcard && set2HasWildcard) {\r
209 result.addAll(set1);\r
210 result.addAll(set2);\r
211 } else if (set1HasWildcard) {\r
212 result.addAll(set2);\r
213 } else if (set2HasWildcard) {\r
214 result.addAll(set1);\r
215 } else {\r
216 result.addAll(set1);\r
217 result.retainAll(set2);\r
218 }\r
219\r
a29c47e0 220 return result;\r
221 }\r
222 \r
223 public String[] getTargets() {\r
224 return (String[])targets.toArray(new String[targets.size()]);\r
225 }\r
226 \r
227 public String[] getTagnames() {\r
228 return (String[])tagnames.toArray(new String[tagnames.size()]);\r
229 }\r
230 \r
231 public String[] getArchs() {\r
232 return (String[])archs.toArray(new String[archs.size()]);\r
233 }\r
234\r
235 public String[] getCommands() {\r
236 return (String[])commands.toArray(new String[commands.size()]);\r
237 }\r
238\r
239 public Set<String> getCommands(String toolChain) {\r
240 return commandMap.get(toolChain);\r
241 }\r
242 \r
243 public String toString() {\r
244 return targets + "\n" + tagnames + "\n" + archs + "\n" + commands;\r
245 }\r
246 \r
247 public void normalize() {\r
248 targets.remove("*");\r
249 tagnames.remove("*");\r
250 archs.remove("*");\r
251 commands.remove("*");\r
252 }\r
253}\r