1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-10 04:22:20 +02:00

Working on properly rebuilding target even if we restart ide

This commit is contained in:
Brian Fiete 2019-09-28 09:48:37 -07:00
parent 3eeeaf647e
commit 959da9884c
10 changed files with 289 additions and 126 deletions

View file

@ -44,7 +44,7 @@
//#define DBG_FORCE_SYNCHRONIZED
// This is used for the Release DLL thunk and the build.dat file
#define BF_CODEGEN_VERSION 13
#define BF_CODEGEN_VERSION 14
#undef DEBUG
@ -85,7 +85,8 @@ void BfCodeGenDirectoryData::Read()
return;
#endif
while (!fileStream.Eof())
int numFiles = fileStream.ReadInt32();
for (int fileIdx = 0; fileIdx < numFiles; fileIdx++)
{
String fileName = fileStream.ReadAscii32SizedString();
BfCodeGenFileData fileData;
@ -95,6 +96,14 @@ void BfCodeGenDirectoryData::Read()
mFileMap[fileName] = fileData;
}
int numValues = fileStream.ReadInt32();
for (int valIdx = 0; valIdx < numValues; valIdx++)
{
String key = fileStream.ReadAscii32SizedString();
String value = fileStream.ReadAscii32SizedString();
mBuildSettings[key] = value;
}
mFileTime = GetFileTimeWrite(fileName);
}
@ -129,6 +138,7 @@ void BfCodeGenDirectoryData::Write()
fileStream.Write(BF_CODEGEN_VERSION);
fileStream.WriteT(mCodeGen->mBackendHash);
fileStream.Write((int)mFileMap.size());
for (auto& pair : mFileMap)
{
fileStream.Write(pair.mKey);
@ -137,6 +147,13 @@ void BfCodeGenDirectoryData::Write()
fileStream.Write(&pair.mValue.mLastWasObjectWrite, sizeof(bool));
}
fileStream.Write((int)mBuildSettings.size());
for (auto& pair : mBuildSettings)
{
fileStream.Write(pair.mKey);
fileStream.Write(pair.mValue);
}
fileStream.Close();
mFileTime = GetFileTimeWrite(fileName);
}
@ -161,6 +178,7 @@ void BfCodeGenDirectoryData::Verify()
void BfCodeGenDirectoryData::Clear()
{
mFileMap.Clear();
mBuildSettings.Clear();
}
bool BfCodeGenDirectoryData::CheckCache(const StringImpl& fileName, Val128 hash, Val128* outOrderedHash, bool disallowObjectWrite)
@ -211,6 +229,21 @@ void BfCodeGenDirectoryData::FileFailed()
mFileFailed = true;
}
String BfCodeGenDirectoryData::GetValue(const StringImpl& key)
{
String* valuePtr = NULL;
if (mBuildSettings.TryGetValue(key, &valuePtr))
{
return *valuePtr;
}
return String();
}
void BfCodeGenDirectoryData::SetValue(const StringImpl& key, const StringImpl& value)
{
mBuildSettings[key] = value;
}
//////////////////////////////////////////////////////////////////////////
void BfCodeGenRequest::DbgSaveData()
@ -285,22 +318,8 @@ void BfCodeGenThread::RunLoop()
#ifndef CODEGEN_DISABLE_CACHE
{
AutoCrit autoCrit(mCodeGen->mCacheCritSect);
BfCodeGenDirectoryData** dirCachePtr = NULL;
if (mCodeGen->mDirectoryCache.TryAdd(cacheDir, NULL, &dirCachePtr))
{
dirCache = new BfCodeGenDirectoryData();
*dirCachePtr = dirCache;
dirCache->mCodeGen = mCodeGen;
dirCache->mDirectoryName = cacheDir;
if (!mCodeGen->mDisableCacheReads)
dirCache->Read();
}
else
{
dirCache = *dirCachePtr;
}
AutoCrit autoCrit(mCodeGen->mCacheCritSect);
dirCache = mCodeGen->GetDirCache(cacheDir);
//For testing only!
/*{
@ -872,6 +891,27 @@ void BfCodeGen::WriteObjectFile(BfModule* bfModule, const StringImpl& outFileNam
#endif
}
String BfCodeGen::GetBuildValue(const StringImpl& buildDir, const StringImpl& key)
{
AutoCrit autoCrit(mCacheCritSect);
BfCodeGenDirectoryData* dirCache = GetDirCache(buildDir);
return dirCache->GetValue(key);
}
void BfCodeGen::SetBuildValue(const StringImpl& buildDir, const StringImpl & key, const StringImpl & value)
{
AutoCrit autoCrit(mCacheCritSect);
BfCodeGenDirectoryData* dirCache = GetDirCache(buildDir);
dirCache->SetValue(key, value);
}
void BfCodeGen::WriteBuildCache(const StringImpl& buildDir)
{
AutoCrit autoCrit(mCacheCritSect);
BfCodeGenDirectoryData* dirCache = GetDirCache(buildDir);
dirCache->Write();
}
void BfCodeGen::RequestComplete(BfCodeGenRequest* request)
{
mCompletionCount++;
@ -936,6 +976,26 @@ void BfCodeGen::ProcessErrors(BfPassInstance* passInstance, bool canceled)
}
}
BfCodeGenDirectoryData * BfCodeGen::GetDirCache(const StringImpl & cacheDir)
{
BfCodeGenDirectoryData* dirCache = NULL;
BfCodeGenDirectoryData** dirCachePtr = NULL;
if (mDirectoryCache.TryAdd(cacheDir, NULL, &dirCachePtr))
{
dirCache = new BfCodeGenDirectoryData();
*dirCachePtr = dirCache;
dirCache->mCodeGen = this;
dirCache->mDirectoryName = cacheDir;
if (!mDisableCacheReads)
dirCache->Read();
}
else
{
dirCache = *dirCachePtr;
}
return dirCache;
}
void BfCodeGen::Cancel()
{
for (auto thread : mThreads)