oleg-st/ZstdSharp

Unity WebGL build gives an IL2CPP error

Fleurman opened this issue · 10 comments

Hi,

I'm on an Unity project that uses MongoDB.
I have all the MongoDB assemblies and dependencies wich includes ZstdSharp.

When building for WebGL, I get this error:

Error: IL2CPP error for method 'System.Void ZstdSharp.Unsafe.Methods::.cctor()' in assembly 'C:\Users\Fleurman\Scriipts\Library\Bee\artifacts\WebGL\ManagedStripped\ZstdSharp.dll'
 
System.ArgumentOutOfRangeException: Cannot create a constant value for types of System.UIntPtr for System.UIntPtr ZstdSharp.Unsafe.Methods::ZSTD_blockHeaderSize (Parameter 'declaredParameterOrFieldType')

I asked for help on the Unity forum and got this explanation:
"Unity uses the IL2CPP scripting backend to convert .NET assemblies to C++ to support AOT (Ahead Of Time) compilation which is a requirement on platforms like WebGL. The System.UIntPtr type in your error message is a pointer type and pointer arithmetic is not supported in IL2CPP which could be causing the error."

Also I'm told to "Check if there's a version of ZstdSharp that's compatible with WebGL."

I know it is more likely to be an issue with Unity and their IL2CPP, but do you think there is a way I could make it work ?

Thanks a lot !

While IL2CPP does support the System.UIntPtr and pointer arithmetic, constant nint/nuint are a recent addition to C# and IL2CPP clearly does not handle them well.

public const nuint ZSTD_blockHeaderSize = 3;

Potential fix would be changing this const to a static readonly, or reporting a IL2CPP bug and waiting.

Hi,

I am not familiar with the Unity.
How I can reproduce this issue?

Is it possible to run IL2CPP itself with ZstSharp?

@Fleurman
I think it's fixed in 0.7.2
Could you check it?

It is fixed !
You are formidable thank you very much !!

PS: to answer to your first question, I don't think you can run IL2CPP by istelf.

Hi, it's fixed in version 0.7.2, but reopen in version 0.7.3, please check

@hoainam1593
What version of the Unity are you using?

it happen on both unity 2021.3.22 and 2022.3.13

The compilation error for 0.7.3 can be fixed, but now I'm getting a runtime error for 0.7.2 with Unity 2022.3.13f1 for code that previously worked

@hoainam1593
Released 0.7.4 with compilation fix for IL2CPP, runtime error still needs to be looked into

it works now on v0.7.4, many thanks