WebGL build fails with "bracket nesting level exceeded maximum of 256"

Hi,

I’m trying to build a WebGL player for a project that has some pretty complex calculations. The generated C++ code contains massive amounts of (double) casts. and IL2CPP / gcc fails with this error message:

C:\Users\main\Projects\unityhelikit\Temp\StagingArea\Data\il2cppOutput\Bulk_HeliSharp_0.cpp:18914:2374: fatal error: bracket nesting level exceeded maximum of 256
C:\Users\main\Projects\unityhelikit\Temp\StagingArea\Data\il2cppOutput\Bulk_HeliSharp_0.cpp:18914:2374: note: use -fbracket-depth=N to increase maximum nesting level
1 warning and 1 error generated.
ERROR:root:compiler frontend failed to generate LLVM bitcode, halting

Is it possible to pass a -fbracket-depth=1024 in any way? That would be useful.
Any other ideas and help would be appreciated.

The project I’m trying to build a WebGL player for is at GitHub - minsulander/unityhelikit: Helicopter simulation toolkit for Unity3D

Thanks a bunch,
Martin

Complete error message

Failed running C:\Program Files\Unity\Editor\Data\il2cpp/build/il2cpp.exe --convert-to-cpp --compile-cpp --libil2cpp-static --platform=“WebGL” --architecture=“EmscriptenJavaScript” --configuration=“Release” --outputpath=“C:\Users\main\Projects\unityhelikit\Assets /…/Temp/StagingArea/Data\Native\build.bc” --cachedirectory=“C:\Users\main\Projects\unityhelikit\Assets..\Library/il2cpp_cache” --compiler-flags="-Oz -DIL2CPP_EXCEPTION_DISABLED=1 " --additional-libraries=“C:\Program Files\Unity\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\lib\modules\WebGLSupport_AIModule_Dynamic.bc” --additional-libraries=“C:\Program Files\Unity\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\lib\modules\WebGLSupport_AnimationModule_Dynamic.bc” --additional-libraries=“C:\Program Files\Unity\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\lib\modules\WebGLSupport_AudioModule_Dynamic.bc” --additional-libraries=“C:\Program Files\Unity\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\lib\modules\WebGLSupport_BaselibModule_Dynamic.bc” --additional-libraries=“C:\Program Files\Unity\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\lib\modules\WebGLSupport_ClothModule_Dynamic.bc” --additional-libraries=“C:\Program Files\Unity\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\lib\modules\WebGLSupport_CloudWebServicesModule_Dynamic.bc” --additional-libraries=“C:\Program Files\Unity\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\lib\modules\WebGLSupport_CoreModule_Dynamic.bc” --additional-libraries=“C:\Program Files\Unity\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\lib\modules\WebGLSupport_CrashReportingModule_Dynamic.bc” --additional-libraries=“C:\Program Files\Unity\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\lib\modules\WebGLSupport_DirectorModule_Dynamic.bc” --additional-libraries=“C:\Program Files\Unity\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\lib\modules\WebGLSupport_FacebookModule_Dynamic.bc” --additional-libraries=“C:\Program Files\Unity\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\lib\modules\WebGLSupport_GameCenterModule_Dynamic.bc” --additional-libraries=“C:\Program Files\Unity\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\lib\modules\WebGLSupport_ImageConversionModule_Dynamic.bc” --additional-libraries=“C:\Program Files\Unity\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\lib\modules\WebGLSupport_IMGUIModule_Dynamic.bc” --additional-libraries=“C:\Program Files\Unity\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\lib\modules\WebGLSupport_InputModule_Dynamic.bc” --additional-libraries=“C:\Program Files\Unity\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\lib\modules\WebGLSupport_JSONSerializeModule_Dynamic.bc” --additional-libraries=“C:\Program Files\Unity\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\lib\modules\WebGLSupport_ParticlesLegacyModule_Dynamic.bc” --additional-libraries=“C:\Program Files\Unity\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\lib\modules\WebGLSupport_ParticleSystemModule_Dynamic.bc” --additional-libraries=“C:\Program Files\Unity\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\lib\modules\WebGLSupport_PerformanceReportingModule_Dynamic.bc” --additional-libraries=“C:\Program Files\Unity\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\lib\modules\WebGLSupport_Physics2DModule_Dynamic.bc” --additional-libraries=“C:\Program Files\Unity\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\lib\modules\WebGLSupport_PhysicsModule_Dynamic.bc” --additional-libraries=“C:\Program Files\Unity\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\lib\modules\WebGLSupport_ScreenCaptureModule_Dynamic.bc” --additional-libraries=“C:\Program Files\Unity\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\lib\modules\WebGLSupport_SpriteMaskModule_Dynamic.bc” --additional-libraries=“C:\Program Files\Unity\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\lib\modules\WebGLSupport_StyleSheetsModule_Dynamic.bc” --additional-libraries=“C:\Program Files\Unity\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\lib\modules\WebGLSupport_TerrainModule_Dynamic.bc” --additional-libraries=“C:\Program Files\Unity\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\lib\modules\WebGLSupport_TerrainPhysicsModule_Dynamic.bc” --additional-libraries=“C:\Program Files\Unity\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\lib\modules\WebGLSupport_TextRenderingModule_Dynamic.bc” --additional-libraries=“C:\Program Files\Unity\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\lib\modules\WebGLSupport_TimelineModule_Dynamic.bc” --additional-libraries=“C:\Program Files\Unity\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\lib\modules\WebGLSupport_UIElementsModule_Dynamic.bc” --additional-libraries=“C:\Program Files\Unity\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\lib\modules\WebGLSupport_UIModule_Dynamic.bc” --additional-libraries=“C:\Program Files\Unity\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\lib\modules\WebGLSupport_UmbraModule_Dynamic.bc” --additional-libraries=“C:\Program Files\Unity\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\lib\modules\WebGLSupport_UNETModule_Dynamic.bc” --additional-libraries=“C:\Program Files\Unity\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\lib\modules\WebGLSupport_UnityAnalyticsModule_Dynamic.bc” --additional-libraries=“C:\Program Files\Unity\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\lib\modules\WebGLSupport_UnityConnectModule_Dynamic.bc” --additional-libraries=“C:\Program Files\Unity\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\lib\modules\WebGLSupport_UnityWebRequestAudioModule_Dynamic.bc” --additional-libraries=“C:\Program Files\Unity\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\lib\modules\WebGLSupport_UnityWebRequestModule_Dynamic.bc” --additional-libraries=“C:\Program Files\Unity\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\lib\modules\WebGLSupport_UnityWebRequestTextureModule_Dynamic.bc” --additional-libraries=“C:\Program Files\Unity\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\lib\modules\WebGLSupport_UnityWebRequestWWWModule_Dynamic.bc” --additional-libraries=“C:\Program Files\Unity\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\lib\modules\WebGLSupport_VehiclesModule_Dynamic.bc” --additional-libraries=“C:\Program Files\Unity\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\lib\modules\WebGLSupport_VideoModule_Dynamic.bc” --additional-libraries=“C:\Program Files\Unity\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\lib\modules\WebGLSupport_VRModule_Dynamic.bc” --additional-libraries=“C:\Program Files\Unity\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\lib\modules\WebGLSupport_WebModule_Dynamic.bc” --map-file-parser=“C:\Program Files\Unity\Editor\Data\Tools\MapFileParser\MapFileParser.exe” --assembly=“C:\Users\main\Projects\unityhelikit\Temp\StagingArea\Data\Managed\Assembly-CSharp.dll” --assembly=“C:\Users\main\Projects\unityhelikit\Temp\StagingArea\Data\Managed\UnityEngine.UI.dll” --assembly=“C:\Users\main\Projects\unityhelikit\Temp\StagingArea\Data\Managed\UnityEngine.dll” --generatedcppdir=“C:\Users\main\Projects\unityhelikit\Temp\StagingArea\Data\il2cppOutput”

stdout:
Building build.bc with EmscriptenToolChain.
Output directory: C:\Users\main\Projects\unityhelikit\Temp\StagingArea\Data\Native
Cache directory: C:\Users\main\Projects\unityhelikit\Library\il2cpp_cache
il2cpp.exe didn’t catch exception: Unity.IL2CPP.Building.BuilderFailedException: WARNING:root:did not see a source tree above or next to the LLVM root directory (guessing based on directory of C:\Program Files\Unity\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten_FastComp_Win\llc), could not verify version numbers match
INFO:root:(Emscripten: Running sanity checks)
WARNING:root:java does not seem to exist, required for closure compiler, which is optional (define JAVA in C:\Program Files\Unity\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\emscripten.config if you want it)
WARNING:root:closure compiler will not be available
In file included from C:\Users\main\Projects\unityhelikit\Temp\StagingArea\Data\il2cppOutput\Bulk_HeliSharp_0.cpp:18:
In file included from C:\Program Files\Unity\Editor\Data\il2cpp\libil2cpp\codegen/il2cpp-codegen.h:30:
C:\Program Files\Unity\Editor\Data\il2cpp\libil2cpp\codegen/il2cpp-codegen-il2cpp.h:342:1: warning: control may reach end of non-void function [-Wreturn-type]
}
^
C:\Users\main\Projects\unityhelikit\Temp\StagingArea\Data\il2cppOutput\Bulk_HeliSharp_0.cpp:18914:2374: fatal error: bracket nesting level exceeded maximum of 256
C:\Users\main\Projects\unityhelikit\Temp\StagingArea\Data\il2cppOutput\Bulk_HeliSharp_0.cpp:18914:2374: note: use -fbracket-depth=N to increase maximum nesting level
1 warning and 1 error generated.
ERROR:root:compiler frontend failed to generate LLVM bitcode, halting

Invocation was: Executable: “C:\Program Files\Unity\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten_Win\python\2.7.5.3_64bit\python.exe”
Arguments: “C:\Program Files\Unity\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\em++” -Wno-unused-value -Wno-invalid-offsetof -nostdinc -fno-strict-overflow -std=c++11 -Oz -DIL2CPP_EXCEPTION_DISABLED=1 -DRUNTIME_IL2CPP -DNDEBUG -I"C:\Program Files\Unity\Editor\Data\il2cpp\libil2cpp" -I"C:\Program Files\Unity\Editor\Data\il2cpp\external\boehmgc\include" -I"C:\Users\main\Projects\unityhelikit\Temp\StagingArea\Data\il2cppOutput" “C:\Users\main\Projects\unityhelikit\Temp\StagingArea\Data\il2cppOutput\Bulk_HeliSharp_0.cpp” -o “C:\Users\main\Projects\unityhelikit\Library\il2cpp_cache\994D263E5CA707AA5C575B77EC05373D.o”

at Unity.IL2CPP.Building.CppProgramBuilder.BuildAllCppFiles(IEnumerable`1 sourceFilesToCompile, IBuildStatisticsCollector statisticsCollector)
at Unity.IL2CPP.Building.CppProgramBuilder.Build(IBuildStatistics& statistics)
at Unity.IL2CPP.Building.Statistics.BuildingTestRunnerHelper.BuildAndLogStatsForTestRunner(CppProgramBuilder builder, IBuildStatistics& statistics)
at il2cpp.Program.DoRun(String[ ] args)
at il2cpp.Program.Run(String[ ] args)
at il2cpp.Program.Main(String[ ] args)
stderr:

Unhandled Exception: Unity.IL2CPP.Building.BuilderFailedException: WARNING:root:did not see a source tree above or next to the LLVM root directory (guessing based on directory of C:\Program Files\Unity\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten_FastComp_Win\llc), could not verify version numbers match
INFO:root:(Emscripten: Running sanity checks)
WARNING:root:java does not seem to exist, required for closure compiler, which is optional (define JAVA in C:\Program Files\Unity\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\emscripten.config if you want it)
WARNING:root:closure compiler will not be available
In file included from C:\Users\main\Projects\unityhelikit\Temp\StagingArea\Data\il2cppOutput\Bulk_HeliSharp_0.cpp:18:
In file included from C:\Program Files\Unity\Editor\Data\il2cpp\libil2cpp\codegen/il2cpp-codegen.h:30:
C:\Program Files\Unity\Editor\Data\il2cpp\libil2cpp\codegen/il2cpp-codegen-il2cpp.h:342:1: warning: control may reach end of non-void function [-Wreturn-type]
}
^
C:\Users\main\Projects\unityhelikit\Temp\StagingArea\Data\il2cppOutput\Bulk_HeliSharp_0.cpp:18914:2374: fatal error: bracket nesting level exceeded maximum of 256
C:\Users\main\Projects\unityhelikit\Temp\StagingArea\Data\il2cppOutput\Bulk_HeliSharp_0.cpp:18914:2374: note: use -fbracket-depth=N to increase maximum nesting level
1 warning and 1 error generated.
ERROR:root:compiler frontend failed to generate LLVM bitcode, halting

Invocation was: Executable: “C:\Program Files\Unity\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten_Win\python\2.7.5.3_64bit\python.exe”
Arguments: “C:\Program Files\Unity\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\em++” -Wno-unused-value -Wno-invalid-offsetof -nostdinc -fno-strict-overflow -std=c++11 -Oz -DIL2CPP_EXCEPTION_DISABLED=1 -DRUNTIME_IL2CPP -DNDEBUG -I"C:\Program Files\Unity\Editor\Data\il2cpp\libil2cpp" -I"C:\Program Files\Unity\Editor\Data\il2cpp\external\boehmgc\include" -I"C:\Users\main\Projects\unityhelikit\Temp\StagingArea\Data\il2cppOutput" “C:\Users\main\Projects\unityhelikit\Temp\StagingArea\Data\il2cppOutput\Bulk_HeliSharp_0.cpp” -o “C:\Users\main\Projects\unityhelikit\Library\il2cpp_cache\994D263E5CA707AA5C575B77EC05373D.o”

at Unity.IL2CPP.Building.CppProgramBuilder.BuildAllCppFiles(IEnumerable`1 sourceFilesToCompile, IBuildStatisticsCollector statisticsCollector)
at Unity.IL2CPP.Building.CppProgramBuilder.Build(IBuildStatistics& statistics)
at Unity.IL2CPP.Building.Statistics.BuildingTestRunnerHelper.BuildAndLogStatsForTestRunner(CppProgramBuilder builder, IBuildStatistics& statistics)
at il2cpp.Program.DoRun(String[ ] args)
at il2cpp.Program.Run(String[ ] args)
at il2cpp.Program.Main(String[ ] args)

UnityEngine.Debug:LogError(Object)
UnityEditorInternal.Runner:RunProgram(Program, String, String, String, CompilerOutputParserBase) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/BuildUtils.cs:128)
UnityEditorInternal.Runner:RunManagedProgram(String, String, String, CompilerOutputParserBase, Action1) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/BuildUtils.cs:73) UnityEditorInternal.IL2CPPBuilder:RunIl2CppWithArguments(List1, Action1, String) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs:324) UnityEditorInternal.IL2CPPBuilder:ConvertPlayerDlltoCpp(ICollection1, String, String) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs:305)
UnityEditorInternal.IL2CPPBuilder:Run() (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs:151)
UnityEditorInternal.IL2CPPUtils:RunIl2Cpp(String, IIl2CppPlatformProvider, Action`1, RuntimeClassRegistry, Boolean) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs:41)
UnityEditor.HostView:OnGUI()

Section of generated C++ code

double L_2033 = V_25;
double L_2034 = Rotor_get_e_m2910629112(__this, /hidden argument/NULL);
double L_2035 = V_9;
double L_2036 = Rotor_powi_m3316912122(__this, L_2035, 2, /hidden argument/NULL);
__this->set_CQ_27(((double)((double)((double)((double)((double)((double)(0.010416666666666666)(double)L_1038))(double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)((double)(6.0)(double)L_1040))(double)L_1041))*(double)L_1042)) …

and so on… the line above is thousands of characters long.

This looks like a bug in the way IL2CPP is generating the code. Can you submit a bug report for this issue so that we can track it? We should correct this.

Thanks Josh. I submitted a bug report, 955059.

1 Like

Thanks for the bug report.

For the time being you can workaround it with:

PlayerSettings.SetAdditionalIl2CppArgs("--compiler-flags=\"-fbracket-depth=512\"");

I’m still getting this error with this same project and an iOS build.

I tried settings the compiler flag as suggested for a workaround (made a small editor script/menu calling the line above)
but still getting the same error.

Ideas? ty

I think the build toolchain is different with iOS. For iOS, Unity generates an Xcode project which does the compilation of the C++ code. Can you try adding this option to the generated Xcode project?

Thank you for the prompt response. I assume I’ll be adding the compiler flag directly in Xcode somewhere (you happen to know where?) as opposed to the command above.

So I’m looking to add -fbracket-depth=512 as a compiler option.

yes?

Yes, you should be able to add that to “Other C++ Flags” in the Xcode build settings.

Worked. Ty @JoshPeterson .

Just added the flag in the Build Settings tab (under the other c flags / other c++ flags)

@minsulander I must thank you for HeliSharp. Enjoying it very much.

1 Like