Vuo 2.4.4
Loading...
Searching...
No Matches
VuoCompilerGroup.cc
Go to the documentation of this file.
1
10#include "VuoCompilerGroup.hh"
11
12#include "VuoCompiler.hh"
15#include "VuoCompilerIssue.hh"
16#include "VuoException.hh"
18
26
35VuoCompilerGroup * VuoCompilerGroup::compilersForAllCompatibleDeploymentArchitectures(const string &compositionString, const string &compositionPath)
36{
37 VuoCompiler nominalCompiler(compositionPath);
38 nominalCompiler.setLoadAllModules(false);
39
40 return VuoCompilerGroup::compilersForAllCompatibleDeploymentArchitectures(compositionString, &nominalCompiler);
41}
42
52{
53 VuoCompilerComposition *nominalComposition = VuoCompilerComposition::newCompositionFromGraphvizDeclaration(compositionString, nominalCompiler);
54 set<string> dependencies = nominalCompiler->getDependenciesForComposition(nominalComposition);
55 VuoCompilerCompatibility compatibility = nominalCompiler->getCompatibilityOfDependencies(dependencies);
56
57 string compositionPath = nominalCompiler->getCompositionLocalPath() + "/unused";
58 return VuoCompilerGroup::compilersForAllCompatibleDeploymentArchitectures(compatibility, compositionPath);
59}
60
70{
71 vector<vector<string>> defaultTargets = {
72#ifdef VUO_TARGET_ARCHITECTURE_X86_64
73 {"macos", "x86_64", "10.10", "apple-macosx"},
74#endif
75#ifdef VUO_TARGET_ARCHITECTURE_ARM64
76 {"macos", "arm64", "10.10", "apple-macosx"},
77#endif
78 };
79
80 if (defaultTargets.empty())
81 {
82 VuoCompilerIssue issue(VuoCompilerIssue::IssueType::Error, "setting up compiler", "",
83 "Vuo build misconfigured",
84 "This build of Vuo doesn't support any architectures.");
85 throw VuoCompilerException(issue);
86 }
87
88 vector<VuoCompiler *> compilers;
89 for (vector<string> defaultTarget : defaultTargets)
90 {
91 json_object *platformArchJson = json_object_new_object();
92
93 json_object *platformVal = json_object_new_object();
94 json_object_object_add(platformArchJson, defaultTarget[0].c_str(), platformVal);
95
96 json_object *archVal = json_object_new_string(defaultTarget[1].c_str());
97 json_object *archArray = json_object_new_array_ext(1);
98 json_object_array_put_idx(archArray, 0, archVal);
99 json_object_object_add(platformVal, "arch", archArray);
100
101 VuoCompilerCompatibility platformArchCompatibility(platformArchJson);
102
103 VuoCompilerCompatibility bothCompatibility = platformArchCompatibility.intersection(compatibility);
104
105 if (bothCompatibility.isCompatibleWithPlatform(defaultTarget[0]))
106 {
107 string minVersion = bothCompatibility.getMinVersionOnPlatform(defaultTarget[0]);
108 if (minVersion.empty())
109 minVersion = defaultTarget[2];
110
111 string target = defaultTarget[1] + "-" + defaultTarget[3] + minVersion + ".0";
112
113 VuoCompiler *compiler = new VuoCompiler(compositionPath, target);
114 compilers.push_back(compiler);
115 }
116 }
117
118 return new VuoCompilerGroup(compilers, compatibility);
119}
120
125{
127
128 vector<VuoCompiler *> matchingCompilers;
129 std::copy_if(compilers.begin(), compilers.end(),
130 std::back_inserter(matchingCompilers),
131 [&arch](VuoCompiler *compiler){ return compiler->getArch() == arch; });
132
133 if (matchingCompilers.empty())
134 {
135 VuoCompilerIssue issue(VuoCompilerIssue::IssueType::Error, "setting up compiler", "",
136 "Unsupported architecture",
137 "This build of Vuo doesn't support the current system's architecture (" + arch + ")");
138 throw VuoCompilerException(issue);
139 }
140
141 return matchingCompilers.front();
142}
143
147void VuoCompilerGroup::doForEach(std::function<void(VuoCompiler *)> callback)
148{
149 for (auto compiler : compilers)
150 callback(compiler);
151}
152
157{
158 return compatibleTargets;
159}
160
164VuoCompilerGroup::VuoCompilerGroup(const vector<VuoCompiler *> &compilers, const VuoCompilerCompatibility &compatibleTargets) :
165 compilers(compilers), compatibleTargets(compatibleTargets)
166{
167}
168
173{
174 for (auto compiler : compilers)
175 delete compiler;
176}