]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/Source/GenBuild/org/tianocore/build/toolchain/ToolChainInfo.java
Change to new XML Schema.
[mirror_edk2.git] / Tools / Source / GenBuild / org / tianocore / build / toolchain / ToolChainInfo.java
diff --git a/Tools/Source/GenBuild/org/tianocore/build/toolchain/ToolChainInfo.java b/Tools/Source/GenBuild/org/tianocore/build/toolchain/ToolChainInfo.java
new file mode 100644 (file)
index 0000000..146f6e5
--- /dev/null
@@ -0,0 +1,219 @@
+package org.tianocore.build.toolchain;\r
+\r
+import java.util.HashMap;\r
+import java.util.LinkedHashSet;\r
+import java.util.Map;\r
+import java.util.Set;\r
+\r
+public class ToolChainInfo {\r
+\r
+    private Set<String> targets = new LinkedHashSet<String>();\r
+    \r
+    private Set<String> tagnames = new LinkedHashSet<String>();\r
+    \r
+    private Set<String> archs = new LinkedHashSet<String>();\r
+    \r
+    private Set<String> commands = new LinkedHashSet<String>();\r
+\r
+    private Map<String, Set<String>> commandMap = new HashMap<String, Set<String>>();\r
+    \r
+    public void addTargets(String targetList) {\r
+        //\r
+        // targetList some targets separated by space " "\r
+        //\r
+        if (targetList == null) {\r
+            targets.add("*");\r
+            return ;\r
+        }\r
+        addTargets(targetList.split(" "));\r
+    }\r
+    \r
+    public void addTargets(String[] targetArray) {\r
+        if (targetArray == null ) {\r
+            return ;\r
+        }\r
+        for (int i = 0; i < targetArray.length; i++) {\r
+            targets.add(targetArray[i]);\r
+        }\r
+    }\r
+    \r
+    public void addTargets(Set<String> targetSet) {\r
+        targets.addAll(targetSet);\r
+    }\r
+    \r
+    public void addTagnames(String tagnameList) {\r
+        //\r
+        // tagnameList some tagnames separated by space " "\r
+        //\r
+        if (tagnameList == null) {\r
+            tagnames.add("*");\r
+            return ;\r
+        }\r
+        addTagnames(tagnameList.split(" "));\r
+    }\r
+    \r
+    public void addTagnames(String[] tagnameArray) {\r
+        if (tagnameArray == null ) {\r
+            return ;\r
+        }\r
+        for (int i = 0; i < tagnameArray.length; i++) {\r
+            tagnames.add(tagnameArray[i]);\r
+        }\r
+    }\r
+    \r
+    public void addTagnames(Set<String> tagnameSet) {\r
+        tagnames.addAll(tagnameSet);\r
+    }\r
+    \r
+    public void addArchs(String archList) {\r
+        //\r
+        // archList some archs separated by space " "\r
+        //\r
+        if (archList == null) {\r
+            archs.add("*");\r
+            return ;\r
+        }\r
+        addArchs(archList.split(" "));\r
+    }\r
+    \r
+    public void addArchs(String[] archArray) {\r
+        if (archArray == null ) {\r
+            return ;\r
+        }\r
+        for (int i = 0; i < archArray.length; i++) {\r
+            archs.add(archArray[i]);\r
+        }\r
+    }\r
+    \r
+    public void addArchs(Set<String> archSet) {\r
+        archs.addAll(archSet);\r
+    }\r
+    \r
+    public void addCommands(String toolChain, String commandList) {\r
+        //\r
+        // archList some archs separated by space " "\r
+        //\r
+        if (commandList == null || commandList.length() == 0) {\r
+            return ;\r
+        }\r
+        addCommands(commandList.split(" "));\r
+    }\r
+    \r
+    public void addCommands(String[] commandArray) {\r
+        if (commandArray == null ) {\r
+            return ;\r
+        }\r
+        for (int i = 0; i < commandArray.length; i++) {\r
+            commands.add(commandArray[i]);\r
+        }\r
+    }\r
+    \r
+    public void addCommands(String toolChain, String[] commandArray) {\r
+        if (commandArray == null) {\r
+            return ;\r
+        }\r
+\r
+        Set<String> toolChainCommandSet = commandMap.get(toolChain);\r
+        if (toolChainCommandSet == null) {\r
+            toolChainCommandSet = new LinkedHashSet<String>();\r
+            commandMap.put(toolChain, toolChainCommandSet);\r
+        }\r
+        for (int i = 0; i < commandArray.length; i++) {\r
+            commands.add(commandArray[i]);\r
+            toolChainCommandSet.add(commandArray[i]);\r
+        }\r
+    }\r
+    \r
+    public void addCommands(String toolChain, Set<String> commandSet) {\r
+        if (commandSet == null) {\r
+            return;\r
+        }\r
+        Set<String> toolChainCommandSet = commandMap.get(toolChain);\r
+        if (toolChainCommandSet == null) {\r
+            toolChainCommandSet = new LinkedHashSet<String>();\r
+            commandMap.put(toolChain, toolChainCommandSet);\r
+        }\r
+        commands.addAll(commandSet);\r
+        toolChainCommandSet.addAll(commandSet);\r
+    }\r
+    \r
+    public ToolChainInfo union(ToolChainInfo info) {\r
+        ToolChainInfo result = new ToolChainInfo();\r
+        result.addTargets(union(this.targets, info.targets));\r
+        result.addTagnames(union(this.tagnames, info.tagnames));\r
+        result.addArchs(union(this.archs, info.archs));\r
+        //result.addCommands(union(this.getCommands(), info.getCommands()));\r
+        return result;\r
+    }\r
+    \r
+    public ToolChainInfo intersection(ToolChainInfo info) {\r
+//        System.out.println(this + "\n" + info);\r
+        ToolChainInfo result = new ToolChainInfo();\r
+        result.addTargets(intersection(this.targets, info.targets));\r
+        result.addTagnames(intersection(this.tagnames, info.tagnames));\r
+        result.addArchs(intersection(this.archs, info.archs));\r
+        // result.addCommands(union(this.commands, info.commands));\r
+//        System.out.println("result: " + result);\r
+        return result;\r
+    }\r
+    \r
+    private Set<String> union(Set<String> set1, Set<String> set2) {\r
+        Set<String> result = new LinkedHashSet<String>();\r
+        result.addAll(set1);\r
+        result.addAll(set2);\r
+        result.remove("*");\r
+        return result;\r
+    }\r
+    \r
+    private Set<String> intersection(Set<String> set1, Set<String> set2) {\r
+        Set<String> result = new LinkedHashSet<String>();\r
+        boolean set1HasWildcard = set1.contains("*");\r
+        boolean set2HasWildcard = set2.contains("*");\r
+\r
+        if (set1HasWildcard && set2HasWildcard) {\r
+            result.addAll(set1);\r
+            result.addAll(set2);\r
+        } else if (set1HasWildcard) {\r
+            result.addAll(set2);\r
+        } else if (set2HasWildcard) {\r
+            result.addAll(set1);\r
+        } else {\r
+            result.addAll(set1);\r
+            result.retainAll(set2);\r
+        }\r
+\r
+//        result.remove("*");\r
+        return result;\r
+    }\r
+    \r
+    public String[] getTargets() {\r
+        return (String[])targets.toArray(new String[targets.size()]);\r
+    }\r
+    \r
+    public String[] getTagnames() {\r
+        return (String[])tagnames.toArray(new String[tagnames.size()]);\r
+    }\r
+    \r
+    public String[] getArchs() {\r
+        return (String[])archs.toArray(new String[archs.size()]);\r
+    }\r
+\r
+    public String[] getCommands() {\r
+        return (String[])commands.toArray(new String[commands.size()]);\r
+    }\r
+\r
+    public Set<String> getCommands(String toolChain) {\r
+        return commandMap.get(toolChain);\r
+    }\r
+    \r
+    public String toString() {\r
+        return targets + "\n" + tagnames + "\n" + archs + "\n" + commands;\r
+    }\r
+    \r
+    public void normalize() {\r
+        targets.remove("*");\r
+        tagnames.remove("*");\r
+        archs.remove("*");\r
+        commands.remove("*");\r
+    }\r
+}\r