Fix bindings cache to rely on project name and version

This commit is contained in:
Wojtek Figat
2021-03-21 14:19:34 +01:00
parent e095b610fd
commit a3eddd5b3b
3 changed files with 14 additions and 9 deletions

View File

@@ -1092,7 +1092,7 @@ namespace Flax.Build.Bindings
private static unsafe void GenerateCSharp(BuildData buildData, IGrouping<string, Module> binaryModule)
{
// Skip generating C# bindings code for native-only modules
if (binaryModule.Any(x => !x.BuildCSharp))
if (binaryModule.All(x => !x.BuildCSharp))
return;
var contents = new StringBuilder();

View File

@@ -18,7 +18,8 @@ namespace Flax.Build.Bindings
partial class BindingsGenerator
{
private static readonly Dictionary<string, Type> _typeCache = new Dictionary<string, Type>();
private static readonly Dictionary<string, Type> TypeCache = new Dictionary<string, Type>();
private const int CacheVersion = 7;
internal static void Write(BinaryWriter writer, string e)
{
@@ -160,7 +161,7 @@ namespace Flax.Build.Bindings
var typename = reader.ReadString();
if (string.IsNullOrEmpty(typename))
return e;
if (!_typeCache.TryGetValue(typename, out var type))
if (!TypeCache.TryGetValue(typename, out var type))
{
type = Builder.BuildTypes.FirstOrDefault(x => x.FullName == typename);
if (type == null)
@@ -169,7 +170,7 @@ namespace Flax.Build.Bindings
Log.Error(msg);
throw new Exception(msg);
}
_typeCache.Add(typename, type);
TypeCache.Add(typename, type);
}
e = (T)Activator.CreateInstance(type);
e.Read(reader);
@@ -185,7 +186,7 @@ namespace Flax.Build.Bindings
for (int i = 0; i < count; i++)
{
var typename = reader.ReadString();
if (!_typeCache.TryGetValue(typename, out var type))
if (!TypeCache.TryGetValue(typename, out var type))
{
type = Builder.BuildTypes.FirstOrDefault(x => x.FullName == typename);
if (type == null)
@@ -194,7 +195,7 @@ namespace Flax.Build.Bindings
Log.Error(msg);
throw new Exception(msg);
}
_typeCache.Add(typename, type);
TypeCache.Add(typename, type);
}
var e = (T)Activator.CreateInstance(type);
e.Read(reader);
@@ -218,7 +219,7 @@ namespace Flax.Build.Bindings
using (var writer = new BinaryWriter(stream, Encoding.UTF8))
{
// Version
writer.Write(5);
writer.Write(CacheVersion);
writer.Write(File.GetLastWriteTime(Assembly.GetExecutingAssembly().Location).Ticks);
// Build options
@@ -254,7 +255,7 @@ namespace Flax.Build.Bindings
{
// Version
var version = reader.ReadInt32();
if (version != 5)
if (version != CacheVersion)
return false;
if (File.GetLastWriteTime(Assembly.GetExecutingAssembly().Location).Ticks != reader.ReadInt64())
return false;

View File

@@ -34,6 +34,8 @@ namespace Flax.Build.Bindings
BindingsGenerator.Write(writer, Module.BinaryModuleName);
writer.Write(Module.BuildNativeCode);
writer.Write(Module.BuildCSharp);
writer.Write(Globals.Project.Name);
writer.Write(Globals.Project.Version.ToString());
base.Write(writer);
}
@@ -44,7 +46,9 @@ namespace Flax.Build.Bindings
reader.ReadString() != Module.FilePath ||
BindingsGenerator.Read(reader, Module.BinaryModuleName) != Module.BinaryModuleName ||
reader.ReadBoolean() != Module.BuildNativeCode ||
reader.ReadBoolean() != Module.BuildCSharp
reader.ReadBoolean() != Module.BuildCSharp ||
reader.ReadString() != Globals.Project.Name ||
reader.ReadString() != Globals.Project.Version.ToString()
)
throw new Exception();