Search Unity

  1. Unity Asset Manager is now available in public beta. Try it out now and join the conversation here in the forums.
    Dismiss Notice
  2. Megacity Metro Demo now available. Download now.
    Dismiss Notice
  3. Unity support for visionOS is now available. Learn more in our blog post.
    Dismiss Notice

Case 1136255 - WebGL - variables being eliminated?

Discussion in '2019.1 Beta' started by siliwangi, Mar 11, 2019.

  1. siliwangi

    siliwangi

    Joined:
    Sep 25, 2009
    Posts:
    303
    I am using Native plugins compilation from my C++ plugin source code, in one of the source i have :
    Code (csharp):
    1.  
    2. const unsigned int TaskManager::max_system_concurrency = 8;
    3.  
    After Unity's emscripten compiled the C++ plugin, the variable seems to be eliminated, because when i try to load the compiled WebGL project in the browser, i have get :
    Code (csharp):
    1.  
    2. failed to asynchronously prepare wasm: LinkError: import object field '__ZN3Oni11TaskManager22max_system_concurrencyE' is not a Number UnityLoader.js:4:11155
    3. LinkError: "import object field '__ZN3Oni11TaskManager22max_system_concurrencyE' is not a Number"
    4.  
    My webgl setting are :
    Code (csharp):
    1.  
    2.         PlayerSettings.WebGL.linkerTarget = WebGLLinkerTarget.Wasm;
    3.         PlayerSettings.WebGL.threadsSupport = true;
    4.         PlayerSettings.WebGL.memorySize = 512;
    5.         PlayerSettings.WebGL.emscriptenArgs = "-O3 -std=c++11 -fms-extensions -s WASM=1 -s AGGRESSIVE_VARIABLE_ELIMINATION=0 -s MODULARIZE=1";
    6.  
    How to keep all of the variables in the Unity's web assembly?
     
  2. siliwangi

    siliwangi

    Joined:
    Sep 25, 2009
    Posts:
    303
    Update :
    Looks like by editing the emscripten args into :
    Code (csharp):
    1.  
    2. PlayerSettings.WebGL.memorySize = 1024;
    3. PlayerSettings.WebGL.emscriptenArgs = "-O0 -std=c++11 -fms-extensions -s WASM=1 -s AGGRESSIVE_VARIABLE_ELIMINATION=0";
    4.  
    Optimization bugs in emscripten?

    But the compiled WebGL still failed to load with error :
    firefox
    Code (csharp):
    1.  
    2. RangeError: bad Table initial size
    3.  
    chrome
    Code (csharp):
    1.  
    2. Invoking error handler due to
    3. Uncaught RangeError: WebAssembly.Module(): Property value 14434314 is above the upper bound 10000000
    4. blob:http://127.0.0.1/9ff9159a-6671-4ba9-a2bd-4477f4866772:2103 Uncaught RangeError: WebAssembly.Module(): Property value 14434314 is above the upper bound 10000000
    5.     at Object.Module.asm (blob:http://127.0.0.1/9ff9159a-6671-4ba9-a2bd-4477f4866772:2103)
    6.     at Object.5353feec13721e8548e171254f360418 (blob:http://127.0.0.1/9ff9159a-6671-4ba9-a2bd-4477f4866772:19578)
    7.     at UnityLoader.loadCode.Module (UnityLoader.js:4)
    8.     at HTMLScriptElement.i.onload (UnityLoader.js:4)
    9.  
     
  3. siliwangi

    siliwangi

    Joined:
    Sep 25, 2009
    Posts:
    303
    When trying to increase TOTAL_MEMORY into 1,25 GB i have got gibberish il2cpp compilation error :
    Code (csharp):
    1.  
    2. Failed running "C:\Program Files\Unity 2019.1.0b6\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten_Win\python\2.7.5.3_64bit\python.exe" -E "C:\Program Files\Unity 2019.1.0b6\Editor\Data\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\emcc" @"C:\Users\nameless\Documents\Works\Projects\Unity\test\Assets\..\Temp\emcc_arguments.resp"
    3.  
    4. stdout:(module (type $FUNCSIG$iii (func (param i32 i32) (result i32))) (type $FUNCSIG$vi (func (param i32))) (type $FUNCSIG$ii (func (param i32) (result i32))) (type $FUNCSIG$fi (func (param i32) (result f32))) (type $FUNCSIG$vii (func (param i32 i32))) (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) (type $FUNCSIG$viif (func (param i32 i32 f32))) (type $FUNCSIG$vid (func (param i32 f64))) (type $FUNCSIG$viiii (func (param i32 i32 i32 i32))) (type $FUNCSIG$viii (func (param i32 i32 i32))) (type $FUNCSIG$vifi (func (param i32 f32 i32))) (type $FUNCSIG$viiiiif (func (param i32 i32 i32 i32 i32 f32))) (type $FUNCSIG$viiiif (func (param i32 i32 i32 i32 f32))) (type $FUNCSIG$viiiiiif (func (param i32 i32 i32 i32 i32 i32 f32))) (type $FUNCSIG$vif (func (param i32 f32))) (type $FUNCSIG$iiiii (func (param i32 i32 i32 i32) (result i32))) (type $FUNCSIG$fii (func (param i32 i32) (result f32))) (type $FUNCSIG$v (func)) (type $FUNCSIG$fif (func (param i32 f32) (result f32))) (type $FUNCSIG$iiiiiii (func (param i32 i32 i32 i32 i32 i32) (result i32))) (type $FUNCSIG$iiif (func (param i32 i32 f32) (result i32))) (type $FUNCSIG$iiffi (func (param i32 f32 f32 i32) (result i32))) (type $FUNCSIG$iiiiii (func (param i32 i32 i32 i32 i32) (result i32))) (type $FUNCSIG$viiiiiiii (func (param i32 i32 i32 i32 i32 i32 i32 i32))) (type $FUNCSIG$ji (func (param i32) (result i64))) (type $FUNCSIG$jii (func (param i32 i32) (result i64))) (type $FUNCSIG$iiijjii (func (param i32 i32 i64 i64 i32 i32) (result i32))) (type $FUNCSIG$viiiiii (func (param i32 i32 i32 i32 i32 i32))) (type $FUNCSIG$viiiii (func (param i32 i32 i32 i32 i32))) (type $FUNCSIG$viiifi (func (param i32 i32 i32 f32 i32))) (type $FUNCSIG$viiiiiii (func (param i32 i32 i32 i32 i32 i32 i32))) (type $FUNCSIG$viiiiiiiii (func (param i32 i32 i32 i32 i32 i32 i32 i32 i32))) (type $FUNCSIG$iiiiiiiiii (func (param i32 i32 i32 i32 i32 i32 i32 i32 i32) (result i32))) (type $FUNCSIG$viiiiiiiiii (func (param i32 i32 i32 i32 i32 i32 i32 i32 i32 i32))) (type $FUNCSIG$viiff (func (param i32 i32 f32 f32))) (type $FUNCSIG$viiiiiiiiiii (func (param i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32))) (type $FUNCSIG$viiiiiiiiiiiiiiiiii (func (param i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32))) (type $FUNCSIG$vifff (func (param i32 f32 f32 f32))) (type $FUNCSIG$viffff (func (param i32 f32 f32 f32 f32))) (type $FUNCSIG$viifff (func (param i32 i32 f32 f32 f32))) (type $FUNCSIG$iiiiiiiii (func (param i32 i32 i32 i32 i32 i32 i32 i32) (result i32))) (type $FUNCSIG$viff (func (param i32 f32 f32))) (type $FUNCSIG$iiiiiiii (func (param i32 i32 i32 i32 i32 i32 i32) (result i32))) (type $FUNCSIG$i (func (result i32))) (type $FUNCSIG$vij (func (param i32 i64))) (type $FUNCSIG$iiiji (func (param i32 i32 i64 i32) (result i32))) (type $FUNCSIG$iiijii (func (param i32 i32 i64 i32 i32) (result i32))) (type $FUNCSIG$ddd (func (param f64 f64) (result f64))) (type $FUNCSIG$ff (func (param f32) (result f32))) (type $FUNCSIG$fff (func (param f32 f32) (result f32))) (type $FUNCSIG$iiiiiiiiiii (func (param i32 i32 i32 i32 i32 i32 i32 i32 i32 i32) (result i32))) (type $FUNCSIG$iijjii (func (param i32 i64 i64 i32 i32) (result i32))) (type $FUNCSIG$iijii (func (param i32 i64 i32 i32) (result i32))) (type $FUNCSIG$iiji (func (param i32 i64 i32) (result i32))) (type $FUNCSIG$jijji (func (param i32 i64 i64 i32) (result i64))) (type $FUNCSIG$iij (func (param i32 i64) (result i32))) (type $FUNCSIG$vffff (func (param f32 f32 f32 f32))) (type $FUNCSIG$vd (func (param f64))) (type $FUNCSIG$vf (func (param f32))) (type $FUNCSIG$viiiiiiiiiiiiiii (func (param i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32))) (type $FUNCSIG$fiiii (func (param i32 i32 i32 i32) (result f32))) (type $FUNCSIG$iiiifiii (func (param i32 i32 i32 f32 i32 i32 i32) (result i32))) (type $FUNCSIG$iiiifii (func (param i32 i32 i32 f32 i32 i32) (result i32))) (type $FUNCSIG$viijii (func (param i32 i32 i64 i32 i32))) (type $FUNCSIG$viid (func (param i32 i32 f64))) (type $FUNCSIG$di (func (param i32) (result f64))) (type $FUNCSIG$viiidi (func (param i32 i32 i32 f64 i32))) (type $FUNCSIG$iiiiiifffiiifiii (func (param i32 i32 i32 i32 i32 f32 f32 f32 i32 i32 i32 f32 i32 i32 i32) (result i32))) (type $FUNCSIG$fiii (func (param i32 i32 i32) (result f32))) (type $FUNCSIG$viiif (func (param i32 i32 i32 f32))) (type $FUNCSIG$fiiiif (func (param i32 i32 i32 i32 f32) (result f32))) (type $FUNCSIG$iifff (func (param i32 f32 f32 f32) (result i32))) (type $FUNCSIG$iiiiifiii (func (param i32 i32 i32 i32 f32 i32 i32 i32) (result i32))) (type $FUNCSIG$iiiiiifiii (func (param i32 i32 i32 i32 i32 f32 i32 i32 i32) (result i32))) (type $FUNCSIG$iif (func (param i32 f32) (result i32))) (type $FUNCSIG$iiiifiiiii (func (param i32 i32 i32 f32 i32 i32 i32 i32 i32) (result i32))) (type $FUNCSIG$iiiiiiifiif (func (param i32 i32 i32 i32 i32 i32 f32 i32 i32 f32) (result i32))) (type $FUNCSIG$iiiiiifiif (func (param i32 i32 i32 i32 i32 f32 i32 i32 f32) (result i32))) (type $FUNCSIG$viiifii (func (param i32 i32 i32 f32 i32 i32))) (type $FUNCSIG$viiiiiiiiiiii (func (param i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32))) (type $FUNCSIG$iiiiifiiiiif (func (param i32 i32 i32 i32 f32 i32 i32 i32 i32 i32 f32) (result i32))) (type $FUNCSIG$viiffi (func (param i32 i32 f32 f32 i32))) (type $FUNCSIG$fiiiiiifiifif (func (param i32 i32 i32 i32 i32 i32 f32 i32 i32 f32 i32 f32) (result f32))) (type $FUNCSIG$fiiiiiifiiiif (func (param i32 i32 i32 i32 i32 i32 f32 i32 i32 i32 i32 f32) (result f32))) (type $FUNCSIG$vifii (func (param i32 f32 i32 i32))) (type $FUNCSIG$iiiifffffi (func (param i32 i32 i32 f32 f32 f32 f32 f32 i32) (result i32))) (type $FUNCSIG$iifi (func (param i32 f32 i32) (result i32))) (type $FUNCSIG$vifiiii (func (param i32 f32 i32 i32 i32 i32))) (type $FUNCSIG$viiiiiiiiiiifii (func (param i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 f32 i32 i32))) (type $FUNCSIG$viij (func (param i32 i32 i64))) (type $FUNCSIG$viiiffii (func (param i32 i32 i32 f32 f32 i32 i32))) (type $FUNCSIG$viffffffffffffiiii (func (param i32 f32 f32 f32 f32 f32 f32 f32 f32 f32 f32 f32 f32 i32 i32 i32 i32))) (type $FUNCSIG$viiifiiiii (func (param i32 i32 i32 f32 i32 i32 i32 i32 i32))) (type $FUNCSIG$viiifffiiij (func (param i32 i32 i32 f32 f32 f32 i32 i32 i32 i64))) (type $FUNCSIG$viiffiiii (func (param i32 i32 f32 f32 i32 i32 i32 i32))) (type $FUNCSIG$vijj (func (param i32 i64 i64))) (type $FUNCSIG$viijj (func (param i32 i32 i64 i64))) (type $FUNCSIG$viji (func (param i32 i64 i32))) (type $FUNCSIG$iiiiiiiiiiiiii (func (param i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32) (result i32))) (type $FUNCSIG$iiiiiiiiiiii (func (param i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32) (result i32))) (type $FUNCSIG$iiiiiiiiiiiii (func (param i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32) (result i32))) (type $FUNCSIG$ifi (func (param f32 i32) (result i32))) (type $FUNCSIG$idi (func (param f64 i32) (result i32))) (type $FUNCSIG$diii (func (param i32 i32 i32) (result f64))) (type $FUNCSIG$viiji (func (param i32 i32 i64 i32))) (type $FUNCSIG$vijijji (func (param i32 i64 i32 i64 i64 i32))) (type $FUNCSIG$jiii (func (param i32 i32 i32) (result i64))) (type $FUNCSIG$iijji (func (param i32 i64 i64 i32) (result i32))) (type $FUNCSIG$iijjji (func (param i32 i64 i64 i64 i32) (result i32))) (type $FUNCSIG$viijji (func (param i32 i32 i64 i64 i32))) (type $FUNCSIG$viijjji (func (param i32 i32 i64 i64 i64 i32))) (type $FUNCSIG$viiiji (func (param i32 i32 i32 i64 i32))) (type $FUNCSIG$jdi (func (param f64 i32) (result i64))) (type $FUNCSIG$dji (func (param i64 i32) (result f64))) (type $FUNCSIG$iji (func (param i64 i32) (result i32))) (type $FUNCSIG$jji (func (param i64 i32) (result i64))) (type $FUNCSIG$jfi (func (param f32 i32) (result i64))) (type $FUNCSIG$fji (func (param i64 i32) (result f32))) (type $FUNCSIG$fdi (func (param f64 i32) (result f32))) (type $FUNCSIG$dii (func (param i32 i32) (result f64))) (type $FUNCSIG$dfi (func (param f32 i32) (result f64))) (type $FUNCSIG$vidi (func (param i32 f64 i32))) (type $FUNCSIG$vijii (func (param i32 i64 i32 i32))) (type $FUNCSIG$vijiii (func (param i32 i64 i32 i32 i32))) (type $FUNCSIG$jidii (func (param i32 f64 i32 i32) (result i64))) (type $FUNCSIG$jidi (func (param i32 f64 i32) (result i64))) (type $FUNCSIG$jiji (func (param i32 i64 i32) (result i64))) (type $FUNCSIG$jiiii (func (param i32 i32 i32 i32) (result i64))) (type $FUNCSIG$jiiiii (func (param i32 i32 i32 i32 i32) (result i64))) (type $FUNCSIG$iidi (func (param i32 f64 i32) (result i32))) (type $FUNCSIG$diiii (func (param i32 i32 i32 i32) (result f64))) (type $FUNCSIG$ddi (func (param f64 i32) (result f64))) (type $FUNCSIG$dddi (func (param f64 f64 i32) (result f64))) (type $FUNCSIG$ffi (func (param f32 i32) (result f32))) (type $FUNCSIG$fffi (func (param f32 f32 i32) (result f32))) (type $FUNCSIG$idiii (func (param f64 i32 i32 i32) (result i32))) (type $FUNCSIG$ijiii (func (param i64 i32 i32 i32) (result i32))) (type $FUNCSIG$ifiii (func (param f32 i32 i32 i32) (result i32))) (type $FUNCSIG$jdii (func (param f64 i32 i32) (result i64))) (type $FUNCSIG$iijiii (func (param i32 i64 i32 i32 i32) (result i32))) (type $FUNCSIG$viidii (func (param i32 i32 f64 i32 i32))) (type $FUNCSIG$iifii (func (param i32 f32 i32 i32) (result i32))) (type $FUNCSIG$iidii (func (param i32 f64 i32 i32) (result i32))) (type $FUNCSIG$jijii (func (param i32 i64 i32 i32) (result i64))) (type $FUNCSIG$viijjiii (func (param i32 i32 i64 i64 i32 i32 i32))) (type $FUNCSIG$jijiii (func (param i32 i64 i32 i32 i32) (result i64))) (type $FUNCSIG$jiiiiiiiiii (func (param i32 i32 i32 i32 i32 i32 i32 i32 i32 i32) (result i64))) (type $FUNCSIG$iiiiiji (func (param i32 i32 i32 i32 i64 i32) (result i32))) (type $FUNCSIG$iiiiji (func (param i32 i32 i32 i64 i32) (result i32))) (type $FUNCSIG$viiiiiiiiiiiiii (func (param i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32))) (type $FUNCSIG$fiffi (func (param i32 f32 f32 i32) (result f32))) (type $FUNCSIG$fifi (func (param i32 f32 i32) (result f32))) (type $FUNCSIG$diddi (func (param i32 f64 f64 i32) (result f64))) (type $FUNCSIG$didi (func (param i32 f64 i32) (result f64))) (type $FUNCSIG$viiijji (func (param i32 i32 i32 i64 i64 i32))) (type $FUNCSIG$jjii (func (param i64 i32 i32) (result i64))) (type $FUNCSIG$jjjji (func (param i64 i64 i64 i32) (result i64))) (type $FUNCSIG$viijijii (func (param i32 i32 i64 i32 i64 i32 i32))) (type $FUNCSIG$viijijiii (func (param i32 i32 i64 i32 i64 i32 i32 i32))) (type $FUNCSIG$vijiji (func (param i32 i64 i32 i64 i32))) (type $FUNCSIG$viijiijiii (func (param i32 i32 i64 i32 i32 i64 i32 i32 i32))) (type $FUNCSIG$viiiijiiii (func (param i32 i32 i32 i32 i64 i32 i32 i32 i32))) (type $FUNCSIG$viifi (func (param i32 i32 f32 i32))) (type $FUNCSIG$jiiiiii (func (param i32 i32 i32 i32 i32 i32) (result i64))) (type $FUNCSIG$vijji (func (param i32 i64 i64 i32))) (type $FUNCSIG$viifiii (func (param i32 i32 f32 i32 i32 i32))) (type $FUNCSIG$viifii (func (param i32 i32 f32 i32 i32))) (type $FUNCSIG$iiiijjii (func (param i32 i32 i32 i64 i64 i32 i32) (result i32))) (type $FUNCSIG$iiiijjiiii (func (param i32 i32 i32 i64 i64 i32 i32 i32 i32) (result i32))) (type $FUNCSIG$ijji (func (param i64 i64 i32) (result i32))) (type $FUNCSIG$iiifii (func (param i32 i32 f32 i32 i32) (result i32))) (type $FUNCSIG$viffffi (func (param i32 f32 f32 f32 f32 i32))) (type $FUNCSIG$viiiiiiiiiiiii (func (param i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32))) (type $FUNCSIG$viiiifi (func (param i32 i32 i32 i32 f32 i32))) (type $FUNCSIG$viiiffi (func (param i32 i32 i32 f32 f32 i32))) (type $FUNCSIG$viiffii (func (param i32 i32 f32 f32 i32 i32))) (type $FUNCSIG$vifffi (func (param i32 f32 f32 f32 i32))) (type $FUNCSIG$viffi (func (param i32 f32 f32 i32))) (type $FUNCSIG$viiiifffi (func (param i32 i32 i32 i32 f32 f32 f32 i32))) (type $FUNCSIG$vfiii (func (param f32 i32 i32 i32))) (type $FUNCSIG$ffffi (func (param f32 f32 f32 i32) (result f32))) (type $FUNCSIG$iffi (func (param f32 f32 i32) (result i32))) (type $FUNCSIG$fffifi (func (param f32 f32 i32 f32 i32) (result f32))) (type $FUNCSIG$fffifffi (func (param f32 f32 i32 f32 f32 f32 i32) (result f32))) (type $FUNCSIG$vijjii (func (param i32 i64 i64 i32 i32))) (type $FUNCSIG$vjiiii (func (param i64 i32 i32 i32 i32))) (type $FUNCSIG$vfi (func (param f32 i32))) (type $FUNCSIG$vifffii (func (param i32 f32 f32 f32 i32 i32))) (type $FUNCSIG$iiifiii (func (param i32 i32 f32 i32 i32 i32) (result i32))) (type $FUNCSIG$iiifiiii (func (param i32 i32 f32 i32 i32 i32 i32) (result i32))) (type $FUNCSIG$iiififiiii (func (param i32 i32 f32 i32 f32 i32 i32 i32 i32) (result i32))) (type $FUNCSIG$iiifiifiii (func (param i32 i32 f32 i32 i32 f32 i32 i32 i32) (result i32))) (type $FUNCSIG$iiifi (func (param i32 i32 f32 i32) (result i32))) (type $FUNCSIG$iiiifi (func (param i32 i32 i32 f32 i32) (result i32))) (type $FUNCSIG$iifiii (func (param i32 f32 i32 i32 i32) (result i32))) (type $FUNCSIG$iifiifiii (func (param i32 f32 i32 i32 f32 i32 i32 i32) (result i32))) (type $FUNCSIG$iiffiii (func (param i32 f32 f32 i32 i32 i32) (result i32))) (type $FUNCSIG$iiififiii (func (param i32 i32 f32 i32 f32 i32 i32 i32) (result i32))) (type $FUNCSIG$iififiii (func (param i32 f32 i32 f32 i32 i32 i32) (result i32))) (type $FUNCSIG$iiiiiiffiiiiiiiiiffffiiii (func (param i32 i32 i32 i32 i32 f32 f32 i32 i32 i32 i32 i32 i32 i32 i32 i32 f32 f32 f32 f32 i32 i32 i32 i32) (result i32))) (type $FUNCSIG$iiiiiiffiiiiiiiiiiiiiii (func (param i32 i32 i32 i32 i32 f32 f32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32) (result i32))) (type $FUNCSIG$viifffi (func (param i32 i32 f32 f32 f32 i32))) (type $FUNCSIG$fifffi (func (param i32 f32 f32 f32 i32) (result f32))) (type $FUNCSIG$fiffffiiiii (func (param i32 f32 f32 f32 f32 i32 i32 i32 i32 i32) (result f32))) (type $FUNCSIG$fiffffii (func (param i32 f32 f32 f32 f32 i32 i32) (result f32))) (type $FUNCSIG$fiffffiiiiii (func (param i32 f32 f32 f32 f32 i32 i32 i32 i32 i32 i32) (result f32))) (type $FUNCSIG$viiiiiffii (func (param i32 i32 i32 i32 i32 f32 f32 i32 i32))) (type $FUNCSIG$fiifi (func (param i32 i32 f32 i32) (result f32))) (type $FUNCSIG$viffffii (func (param i32 f32 f32 f32 f32 i32 i32))) (type $FUNCSIG$viffffiii (func (param i32 f32 f32 f32 f32 i32 i32 i32))) (type $FUNCSIG$viiffffiiiii (func (param i32 i32 f32 f32 f32 f32 i32 i32 i32 i32 i32))) (type $FUNCSIG$viiiifii (func (param i32 i32 i32 i32 f32 i32 i32))) (type $FUNCSIG$viiifiii (func (param i32 i32 i32 f32 i32 i32 i32))) (type $FUNCSIG$viiififi (func (param i32 i32 i32 f32 i32 f32 i32))) (type $FUNCSIG$viiififfi (func (param i32 i32 i32 f32 i32 f32 f32 i32))) (type $FUNCSIG$iiiiifi (func (param i32 i32 i32 i32 f32 i32) (result i32))) (type $FUNCSIG$viijjii (func (param i32 i32 i64 i64 i32 i32))) (type $FUNCSIG$iiijjiiii (func (param i32 i32 i64 i64 i32 i32 i32 i32) (result i32))) (type $FUNCSIG$vifiiiiii (func (param i32 f32 i32 i32 i32 i32 i32 i32))) (type $FUNCSIG$vifffffi (func (param i32 f32 f32 f32 f32 f32 i32))) (type $FUNCSIG$viiffiiiii (func (param i32 i32 f32 f32 i32 i32 i32 i32 i32))) (type $FUNCSIG$viiffiii (func (param i32 i32 f32 f32 i32 i32 i32))) (type $FUNCSIG$viififi (func (param i32 i32 f32 i32 f32 i32))) (type $FUNCSIG$viiiiffi (func (param i32 i32 i32 i32 f32 f32 i32))) (type $FUNCSIG$viiiiifffi (func (param i32 i32 i32 i32 i32 f32 f32 f32 i32))) (type $FUNCSIG$viiifffi (func (param i32 i32 i32 f32 f32 f32 i32))) (type $FUNCSIG$viiiiifi (func (param i32 i32 i32 i32 i32 f32 i32))) (type $FUNCSIG$viifffii (func (param i32 i32 f32 f32 f32 i32 i32))) (type $FUNCSIG$viiiiffffi (func (param i32 i32 i32 i32 f32 f32 f32 f32 i32))) (type $FUNCSIG$viiiifiii (func (param i32 i32 i32 i32 f32 i32 i32 i32))) (type $FUNCSIG$vifiii (func (param i32 f32 i32 i32 i32))) (type $FUNCSIG$fifii (func (param i32 f32 i32 i32) (result f32))) (type $FUNCSIG$fiiiiiffffiifi (func (param i32 i32 i32 i3<message truncated>
    5.  
    The edited emscripten arguments :
    Code (csharp):
    1.  
    2.         PlayerSettings.WebGL.linkerTarget = WebGLLinkerTarget.Wasm;
    3.         PlayerSettings.WebGL.threadsSupport = true;
    4.         //PlayerSettings.WebGL.memorySize = 512;
    5.         PlayerSettings.WebGL.emscriptenArgs = "-O0 -std=c++11 -fms-extensions -s WASM=1 -s TOTAL_MEMORY=1258291200";
    6.  
    [EDITED]
    Compiled my own Chromium version with edited V8 wasm-limits.h to increase the upper-bound into 90000000, found out that -O0 is still eliminating the "TaskManager::max_system_concurrency" variable!
    Code (csharp):
    1.  
    2. LinkError: WebAssembly.instantiate(): Import #9 module="env" function="__ZN3Oni11TaskManager22max_system_concurrencyE" error: global import must be a number or WebAssembly.Global object
    3.  
     
    Last edited: Mar 11, 2019
  4. Schubkraft

    Schubkraft

    Unity Technologies

    Joined:
    Dec 3, 2012
    Posts:
    1,070
    Can you please file a bug report with a repro project? Thank you!
     
  5. siliwangi

    siliwangi

    Joined:
    Sep 25, 2009
    Posts:
    303
  6. jukka_j

    jukka_j

    Unity Technologies

    Joined:
    May 4, 2018
    Posts:
    953
    When C/C++ code defines a variable like const unsigned int TaskManager::max_system_concurrency = 8;, that should not become an import to Wasm (because the variable will be defined inside wasm, so no need to import it there).

    One possibility to double check is that the line const unsigned int TaskManager::max_system_concurrency = 8; definitely made it to the build and did not end up being omitted from link? If that variable was left undefined in the build (check the build logs), then it would be attempted to used as an import like you are seeing here.
     
  7. siliwangi

    siliwangi

    Joined:
    Sep 25, 2009
    Posts:
    303
    @jukka_j
    Can we please move the discussion into the bug report because of the codes involved is proprietary, to answer you, i am quite new with emscripten but afaik unity implementation of it when using 3rd party codes/plugins for webgl is by either compiled it as llvm bitcode (*.bc) or using the source code as native plugins, such as this .

    Like i have mentioned in the bug report, the variables elimination only happened when i am using it as a native plugin, so the only possible way to modified unity compilation involvement is by variable "PlayerSettings.WebGL.emscriptenArgs", other than that it's hard coded by unity, i have put the history of my emscriptenArgs modification in this thread as you can see but no matter what i have done it doesn't even reaches loading the unity webgl engine only reaching the aforementioned variables being eliminated as above.

    The more possible way to doing (using 3rd party code/plugin) is by using the compiled llvm bitcode, as my finding is compiled webgl finally reaches into part of loading unity webgl engine and stopped at " Input Manager initialize..."