Vuo 2.4.4
Loading...
Searching...
No Matches
VuoModuleCache.hh
Go to the documentation of this file.
1
10#pragma once
11
12#include <mutex>
13#include <thread>
14#include "VuoFileUtilities.hh"
17class VuoCompiler;
19
30{
31public:
32 static shared_ptr<VuoModuleCache> newBuiltInCache(void);
33 static shared_ptr<VuoModuleCache> newSystemCache(void);
34 static shared_ptr<VuoModuleCache> newUserCache(void);
35 static shared_ptr<VuoModuleCache> newCache(const string &uniquePath);
36 string getCompiledModulesPath(bool isGenerated, const string &targetArch);
37 string getOverriddenCompiledModulesPath(bool isGenerated, const string &targetArch);
38 bool modifyCompiledModules(std::function<bool(void)> modify);
39 void makeAvailable(bool shouldUseExistingCache, vector<shared_ptr<VuoModuleCache>> prerequisiteModuleCaches, double &lastPrerequisiteModuleCacheRebuild, const VuoModuleCacheManifest &expectedManifest, vector<VuoModuleInfoIterator> expectedModules, const set<string> &dylibsToLinkTo, const set<string> &frameworksToLinkTo, const vector<string> &runPathSearchPaths, VuoCompiler *compiler, const string &targetArch = "");
40 static void waitForCachesToBuild(void);
41 shared_ptr<VuoModuleCacheRevision> useCurrentRevision(void);
42 void invalidate(void);
43 static void deleteOldCaches(void);
44
45private:
46 VuoModuleCache(const string &cacheDirectoryPath, bool builtIn);
47 static string getCacheDirectoryPath(const string &uniquePath);
48 static string getRelativePathOfModulesDirectory(bool isGenerated, const string &targetArch);
49 string getDescription(void);
50 string getManifestPath(const string &targetArch = "");
51 string getDylibPath(const string &targetArch = "");
52 string findLatestRevisionOfDylib(double &lastModified);
53 static bool areDifferentRevisionsOfSameDylib(const string &dylibPath1, const string &dylibPath2);
54
55 string cacheDirectoryPath;
56 bool builtIn;
57 bool available;
58 bool invalidated;
59 shared_ptr<VuoModuleCacheRevision> currentRevision;
60 double lastRebuild;
61 std::mutex statusMutex;
62 std::mutex contentsMutex;
63 static std::mutex buildMutex;
64 static int buildsInProgress;
65 static std::condition_variable buildsInProgressCondition;
66 static std::mutex buildsInProgressMutex;
67
68 static const string builtInCacheDirName;
69 static const string systemCacheDirName;
70 static const string userCacheDirName;
71 static const string pidCacheDirPrefix;
72
81 class LockInfo
82 {
83 public:
84 LockInfo(void);
85 ~LockInfo(void);
86
87 bool needsLock;
88 VuoFileUtilities::File *dylibLockFile;
89 VuoFileUtilities::File *compiledModulesLockFile;
90 bool hasLockForWriting;
91 };
92
93 static map<string, LockInfo *> interprocessLockInfo;
94 bool hasInterprocessLock;
95
96 friend class TestModuleCaches;
97 friend class ModuleCachesDiff;
98 friend class ModuleScope;
99};