]> git.proxmox.com Git - mirror_edk2.git/blame - Tools/Source/GenBuild/org/tianocore/build/toolchain/ToolChainInfo.java
Support prebuild and postbuild for UserExtension for Platform build. If UserExtension...
[mirror_edk2.git] / Tools / Source / GenBuild / org / tianocore / build / toolchain / ToolChainInfo.java
CommitLineData
a29c47e0 1package org.tianocore.build.toolchain;\r
2\r
3import java.util.HashMap;\r
4import java.util.LinkedHashSet;\r
5import java.util.Map;\r
6import java.util.Set;\r
7\r
8public class ToolChainInfo {\r
9\r
10 private Set<String> targets = new LinkedHashSet<String>();\r
11 \r
12 private Set<String> tagnames = new LinkedHashSet<String>();\r
13 \r
14 private Set<String> archs = new LinkedHashSet<String>();\r
15 \r
16 private Set<String> commands = new LinkedHashSet<String>();\r
17\r
18 private Map<String, Set<String>> commandMap = new HashMap<String, Set<String>>();\r
19 \r
20 public void addTargets(String targetList) {\r
21 //\r
22 // targetList some targets separated by space " "\r
23 //\r
24 if (targetList == null) {\r
25 targets.add("*");\r
26 return ;\r
27 }\r
28 addTargets(targetList.split(" "));\r
29 }\r
30 \r
31 public void addTargets(String[] targetArray) {\r
32 if (targetArray == null ) {\r
33 return ;\r
34 }\r
35 for (int i = 0; i < targetArray.length; i++) {\r
36 targets.add(targetArray[i]);\r
37 }\r
38 }\r
39 \r
40 public void addTargets(Set<String> targetSet) {\r
41 targets.addAll(targetSet);\r
42 }\r
43 \r
44 public void addTagnames(String tagnameList) {\r
45 //\r
46 // tagnameList some tagnames separated by space " "\r
47 //\r
48 if (tagnameList == null) {\r
49 tagnames.add("*");\r
50 return ;\r
51 }\r
52 addTagnames(tagnameList.split(" "));\r
53 }\r
54 \r
55 public void addTagnames(String[] tagnameArray) {\r
56 if (tagnameArray == null ) {\r
57 return ;\r
58 }\r
59 for (int i = 0; i < tagnameArray.length; i++) {\r
60 tagnames.add(tagnameArray[i]);\r
61 }\r
62 }\r
63 \r
64 public void addTagnames(Set<String> tagnameSet) {\r
65 tagnames.addAll(tagnameSet);\r
66 }\r
67 \r
68 public void addArchs(String archList) {\r
69 //\r
70 // archList some archs separated by space " "\r
71 //\r
72 if (archList == null) {\r
73 archs.add("*");\r
74 return ;\r
75 }\r
76 addArchs(archList.split(" "));\r
77 }\r
78 \r
79 public void addArchs(String[] archArray) {\r
80 if (archArray == null ) {\r
81 return ;\r
82 }\r
83 for (int i = 0; i < archArray.length; i++) {\r
84 archs.add(archArray[i]);\r
85 }\r
86 }\r
87 \r
88 public void addArchs(Set<String> archSet) {\r
89 archs.addAll(archSet);\r
90 }\r
91 \r
92 public void addCommands(String toolChain, String commandList) {\r
93 //\r
94 // archList some archs separated by space " "\r
95 //\r
96 if (commandList == null || commandList.length() == 0) {\r
97 return ;\r
98 }\r
99 addCommands(commandList.split(" "));\r
100 }\r
101 \r
102 public void addCommands(String[] commandArray) {\r
103 if (commandArray == null ) {\r
104 return ;\r
105 }\r
106 for (int i = 0; i < commandArray.length; i++) {\r
107 commands.add(commandArray[i]);\r
108 }\r
109 }\r
110 \r
111 public void addCommands(String toolChain, String[] commandArray) {\r
112 if (commandArray == null) {\r
113 return ;\r
114 }\r
115\r
116 Set<String> toolChainCommandSet = commandMap.get(toolChain);\r
117 if (toolChainCommandSet == null) {\r
118 toolChainCommandSet = new LinkedHashSet<String>();\r
119 commandMap.put(toolChain, toolChainCommandSet);\r
120 }\r
121 for (int i = 0; i < commandArray.length; i++) {\r
122 commands.add(commandArray[i]);\r
123 toolChainCommandSet.add(commandArray[i]);\r
124 }\r
125 }\r
126 \r
127 public void addCommands(String toolChain, Set<String> commandSet) {\r
128 if (commandSet == null) {\r
129 return;\r
130 }\r
131 Set<String> toolChainCommandSet = commandMap.get(toolChain);\r
132 if (toolChainCommandSet == null) {\r
133 toolChainCommandSet = new LinkedHashSet<String>();\r
134 commandMap.put(toolChain, toolChainCommandSet);\r
135 }\r
136 commands.addAll(commandSet);\r
137 toolChainCommandSet.addAll(commandSet);\r
138 }\r
139 \r
140 public ToolChainInfo union(ToolChainInfo info) {\r
141 ToolChainInfo result = new ToolChainInfo();\r
142 result.addTargets(union(this.targets, info.targets));\r
143 result.addTagnames(union(this.tagnames, info.tagnames));\r
144 result.addArchs(union(this.archs, info.archs));\r
145 //result.addCommands(union(this.getCommands(), info.getCommands()));\r
146 return result;\r
147 }\r
148 \r
149 public ToolChainInfo intersection(ToolChainInfo info) {\r
150// System.out.println(this + "\n" + info);\r
151 ToolChainInfo result = new ToolChainInfo();\r
152 result.addTargets(intersection(this.targets, info.targets));\r
153 result.addTagnames(intersection(this.tagnames, info.tagnames));\r
154 result.addArchs(intersection(this.archs, info.archs));\r
155 // result.addCommands(union(this.commands, info.commands));\r
156// System.out.println("result: " + result);\r
157 return result;\r
158 }\r
159 \r
160 private Set<String> union(Set<String> set1, Set<String> set2) {\r
161 Set<String> result = new LinkedHashSet<String>();\r
162 result.addAll(set1);\r
163 result.addAll(set2);\r
164 result.remove("*");\r
165 return result;\r
166 }\r
167 \r
168 private Set<String> intersection(Set<String> set1, Set<String> set2) {\r
169 Set<String> result = new LinkedHashSet<String>();\r
170 boolean set1HasWildcard = set1.contains("*");\r
171 boolean set2HasWildcard = set2.contains("*");\r
172\r
173 if (set1HasWildcard && set2HasWildcard) {\r
174 result.addAll(set1);\r
175 result.addAll(set2);\r
176 } else if (set1HasWildcard) {\r
177 result.addAll(set2);\r
178 } else if (set2HasWildcard) {\r
179 result.addAll(set1);\r
180 } else {\r
181 result.addAll(set1);\r
182 result.retainAll(set2);\r
183 }\r
184\r
185// result.remove("*");\r
186 return result;\r
187 }\r
188 \r
189 public String[] getTargets() {\r
190 return (String[])targets.toArray(new String[targets.size()]);\r
191 }\r
192 \r
193 public String[] getTagnames() {\r
194 return (String[])tagnames.toArray(new String[tagnames.size()]);\r
195 }\r
196 \r
197 public String[] getArchs() {\r
198 return (String[])archs.toArray(new String[archs.size()]);\r
199 }\r
200\r
201 public String[] getCommands() {\r
202 return (String[])commands.toArray(new String[commands.size()]);\r
203 }\r
204\r
205 public Set<String> getCommands(String toolChain) {\r
206 return commandMap.get(toolChain);\r
207 }\r
208 \r
209 public String toString() {\r
210 return targets + "\n" + tagnames + "\n" + archs + "\n" + commands;\r
211 }\r
212 \r
213 public void normalize() {\r
214 targets.remove("*");\r
215 tagnames.remove("*");\r
216 archs.remove("*");\r
217 commands.remove("*");\r
218 }\r
219}\r