Linking error when compiling ngspice with emscripten on ubuntu

143 views
Skip to first unread message

Sam Reid

unread,
Jan 1, 2014, 2:43:50 PM1/1/14
to emscripte...@googlegroups.com
Hi there,

I am trying to get a circuit simulator called ngspice to compile under emscripten, but I am running into a problem during the linking phase.  I posted full details about my configuration and the problem on stack overflow:

Any help would be greatly appreciated, thanks!
Sam

Alon Zakai

unread,
Jan 1, 2014, 3:07:45 PM1/1/14
to emscripte...@googlegroups.com
    CC=~/Documents/srr/emscripten/emcc ../configure

is not correct. You should use emconfigure,

    emconfigure ../configure

so it sets all the proper env variables for you. See https://github.com/kripken/emscripten/wiki/Building-Projects for more info.

Run the last command (that fails) with `EMCC_DEBUG=1` in the environment (or `-v` passed to emcc) to get more info on what is happening there.

- Alon



--
You received this message because you are subscribed to the Google Groups "emscripten-discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email to emscripten-disc...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Sam Reid

unread,
Jan 2, 2014, 12:44:11 PM1/2/14
to emscripte...@googlegroups.com
Thanks for the pointer Alon, the "Building Projects" link was very helpful.  Following those instructions, I was able to get the build working on OS X.  Running those instructions on Ubuntu produced the same linker problem, but when I supplied "--disable-debug" to the emconfig configure call, that problem went away.

Sam
To unsubscribe from this group and stop receiving emails from it, send an email to emscripten-discuss+unsub...@googlegroups.com.

Florian Ludwig

unread,
Mar 16, 2014, 9:51:21 AM3/16/14
to emscripte...@googlegroups.com
Hi Sam,

I am looking into the same matter and I get pass make but using emcc to generate js fails on me, did you get the last step working?

Full Output:
$ emcc ngspice.bc 
warning: Casting a function pointer type to a potentially incompatible one (use -s VERBOSE=1 to see more)
warning: See https://github.com/kripken/emscripten/wiki/CodeGuidelinesAndLimitations#function-pointer-issues for more information on dangerous function pointer casts
warning: Casting a function pointer type to a potentially incompatible one (use -s VERBOSE=1 to see more)
warning: See https://github.com/kripken/emscripten/wiki/CodeGuidelinesAndLimitations#function-pointer-issues for more information on dangerous function pointer casts
Stack: Error
    at assertTrue (eval at globalEval (/home/f.ludwig/emtest/emscripten/src/compiler.js:105:8), <anonymous>:59:26)
    at makeComparison (eval at globalEval (/home/f.ludwig/emtest/emscripten/src/compiler.js:105:8), <anonymous>:2057:5)
    at eval (eval at globalEval (/home/f.ludwig/emtest/emscripten/src/compiler.js:105:8), <anonymous>:1162:18)
    at Array.map (native)
    at eval (eval at globalEval (/home/f.ludwig/emtest/emscripten/src/compiler.js:105:8), <anonymous>:1161:43)
    at Array.forEach (native)
    at switchHandler (eval at globalEval (/home/f.ludwig/emtest/emscripten/src/compiler.js:105:8), <anonymous>:1153:31)
    at eval (eval at globalEval (/home/f.ludwig/emtest/emscripten/src/compiler.js:105:8), <anonymous>:522:34)
    at Array.forEach (native)
    at functionSplitter (eval at globalEval (/home/f.ludwig/emtest/emscripten/src/compiler.js:105:8), <anonymous>:511:16)
aborting from js compiler due to exception: Assertion failed: undefined | undefined
aborting from js compiler due to exception: unhandleable illegal icmp: slt | undefined
Traceback (most recent call last):
  File "/home/f.ludwig/emtest/emscripten/emscripten.py", line 1405, in <module>
    _main(environ=os.environ)
  File "/home/f.ludwig/emtest/emscripten/emscripten.py", line 1393, in _main
    temp_files.run_and_clean(lambda: main(
  File "/home/f.ludwig/emtest/emscripten/tools/tempfiles.py", line 39, in run_and_clean
    return func()
  File "/home/f.ludwig/emtest/emscripten/emscripten.py", line 1401, in <lambda>
    DEBUG_CACHE=DEBUG_CACHE,
  File "/home/f.ludwig/emtest/emscripten/emscripten.py", line 1288, in main
    jcache=jcache, temp_files=temp_files, DEBUG=DEBUG, DEBUG_CACHE=DEBUG_CACHE)
  File "/home/f.ludwig/emtest/emscripten/emscripten.py", line 292, in emscript
    assert len(output) == 2, 'Did not receive forwarded data in an output - process failed? We only got: ' + output[0][-3000:]
AssertionError: Did not receive forwarded data in an output - process failed? We only got: EAPF64[(($311)>>3)]=$313;
 var $314=($12)+($21);
 var $315=($314)+($25);
 var $316=($_lobit|0);
 var $317=($19)+($23);
 var $318=($316)*($317);
 var $319=($315)+($318);
 var $320=($319)*($79);
 var $321=HEAP32[(($112)>>2)];
 var $322=HEAPF64[(($321)>>3)];
 var $323=($320)+($322);
 HEAPF64[(($321)>>3)]=$323;
 var $324=($14)+($21);
 var $325=($324)+($27);
 var $326=($_lobit17_not|0);
 var $327=($326)*($317);
 var $328=($327)+($325);
 var $329=($328)*($79);
 var $330=HEAP32[(($125)>>2)];
 var $331=HEAPF64[(($330)>>3)];
 var $332=($329)+($331);
 HEAPF64[(($330)>>3)]=$332;
 var $333=(($here_019+420)|0);
 var $334=HEAP32[(($333)>>2)];
 var $335=HEAPF64[(($334)>>3)];
 var $336=($335)-($299);
 HEAPF64[(($334)>>3)]=$336;
 var $337=(($here_019+436)|0);
 var $338=HEAP32[(($337)>>2)];
 var $339=HEAPF64[(($338)>>3)];
 var $340=($339)-($304);
 HEAPF64[(($338)>>3)]=$340;
 var $341=($25)*($79);
 var $342=HEAP32[(($193)>>2)];
 var $343=HEAPF64[(($342)>>3)];
 var $344=($343)-($341);
 HEAPF64[(($342)>>3)]=$344;
 var $345=($27)*($79);
 var $346=HEAP32[(($206)>>2)];
 var $347=HEAPF64[(($346)>>3)];
 var $348=($347)-($345);
 HEAPF64[(($346)>>3)]=$348;
 var $349=(($here_019+452)|0);
 var $350=HEAP32[(($349)>>2)];
 var $351=HEAPF64[(($350)>>3)];
 var $352=($351)-($299);
 HEAPF64[(($350)>>3)]=$352;
 var $353=((($_lobit17_not)-($_lobit))|0);
 var $354=($353|0);
 var $355=($354)*($19);
 var $356=($355)*($79);
 var $357=HEAP32[(($219)>>2)];
 var $358=HEAPF64[(($357)>>3)];
 var $359=($356)+($358);
 HEAPF64[(($357)>>3)]=$359;
 var $360=($354)*($23);
 var $361=($360)-($25);
 var $362=($361)*($79);
 var $363=HEAP32[(($235)>>2)];
 var $364=HEAPF64[(($363)>>3)];
 var $365=($362)+($364);
 HEAPF64[(($363)>>3)]=$365;
 var $366=((-.0))-($21);
 var $367=($366)-($327);
 var $368=($367)*($79);
 var $369=HEAP32[(($248)>>2)];
 var $370=HEAPF64[(($369)>>3)];
 var $371=($368)+($370);
 HEAPF64[(($369)>>3)]=$371;
 var $372=(((-$353))|0);
 var $373=($372|0);
 var $374=($373)*($19);
 var $375=($374)*($79);
 var $376=HEAP32[(($261)>>2)];
 var $377=HEAPF64[(($376)>>3)];
 var $378=($375)+($377);
 HEAPF64[(($376)>>3)]=$378;
 var $379=(($here_019+468)|0);
 var $380=HEAP32[(($379)>>2)];
 var $381=HEAPF64[(($380)>>3)];
 var $382=($381)-($304);
 HEAPF64[(($380)>>3)]=$382;
 var $383=((-.0))-($27);
 var $384=($383)-($360);
 var $385=($384)*($79);
 var $386=HEAP32[(($276)>>2)];
 var $387=HEAPF64[(($386)>>3)];
 var $388=($385)+($387);
 HEAPF64[(($386)>>3)]=$388;
 var $389=($366)-($318);
 var $390=($389)*($79);
 var $391=HEAP32[(($289)>>2)];
 var $392=HEAPF64[(($391)>>3)];
 var $393=($390)+($392);
 HEAPF64[(($391)>>3)]=$393;
 var $394=(($here_019+4)|0);
 var $here_0=HEAP32[(($394)>>2)];
 var $395=($here_0|0)==0;
 if($395){label=5;break;}else{var $here_019=$here_0;label=4;break;}
 case 5: 
 var $396=(($model_020+4)|0);
 var $397=HEAP32[(($396)>>2)];
 var $398=($397|0)==0;
 if($398){label=6;break;}else{var $model_020=$397;label=3;break;}
 case 6: 
 return 0;
  default: assert(0, "bad label: " + label);
 }

}


Traceback (most recent call last):
  File "../emscripten/emcc", line 1525, in <module>
    final = shared.Building.emscripten(final, append_ext=False, extra_args=extra_args)
  File "/home/f.ludwig/emtest/emscripten/tools/shared.py", line 1276, in emscripten
    assert os.path.exists(filename + '.o.js') and len(open(filename + '.o.js', 'r').read()) > 0, 'Emscripten failed to generate .js: ' + str(compiler_output)
AssertionError: Emscripten failed to generate .js: 

Sam Reid

unread,
Mar 24, 2014, 3:32:28 PM3/24/14
to emscripte...@googlegroups.com
I did get ngpsice to compile to the point where it would run and print some ngspice text to the console.  I had my best success when I switched to OS X and complied from there--could never get certain issues resolved on my Ubuntu.  Also, I wrote a list of all the steps I had to do to compile and run ngpsice on OS X.  Note this list is a bit old and may be incomplete:

Building ngspice with emscripten on OSX:

Download emscripten SDK and ngspice.

Mkdir release

Cd release

Hack configure to fail sigsetjmp tests, see https://groups.google.com/forum/#!topic/emscripten-discuss/nvq18u4lj6E

Run emconfigure ../configure --(some shared library option?) possibly with --disable-debug?

Emmake make

Overwrite the ngmakeidx file that cannot be run.

Rename the ngspice binary to ngspice.o

Cd src

Emcc ngspice

Memory limit is wrong, fix it in the code TOTAL_MEMORY

Now we are missing sigsetjmp, which the config said we do not have.

We are also missing siglongjmp

We are also missing logb


Not sure what to do next, let me know if you make any progress with ngspice to JS though!  Thanks!



--
You received this message because you are subscribed to a topic in the Google Groups "emscripten-discuss" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/emscripten-discuss/MUjETZKxBgs/unsubscribe.
To unsubscribe from this group and all its topics, send an email to emscripten-disc...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Florian Ludwig

unread,
Mar 25, 2014, 1:06:59 PM3/25/14
to emscripte...@googlegroups.com
Hi,


I was using llvm3.3, switching to 3.2 and adding some compile flags (-s ALLOW_MEMORY_GROWTH=1 -s TOTAL_MEMORY=52428800) made it compile. 

Notes:
  • Using the shared lib option did not work out well for me so I am not using it currently.
  • Also I use --without-x so it does not try to get anything output related running. (maybe only on linux needed)
  • I installed a compiled ngspice version so I can run ngmakeidx from the compiled version)
  • Some debug functions can be rewritten so disable-debug is not needed, I will do this later, maybe that helps for the problem I am now at (see below)

I wrote a python script to make the process more reproducible. Currently only tested on fedora linux though.

My current state is:


$ node ngspice.js
fopen("/proc/%d/statm"): No such file or directory
fopen("/proc/meminfo"): No such file or directory
Note: can't find init file.
******
** ngspice-25 : Circuit level simulation program
** The U. C. Berkeley CAD Group
** Copyright 1985-1994, Regents of the University of California.
** Please get your ngspice manual from http://ngspice.sourceforge.net/docs.html
** Please file your bug-reports at http://ngspice.sourceforge.net/bugrep.html
** Creation Date: Tue Mar 25 15:34:26 CET 2014
******
Assertion failed: undefined
Assertion failed: undefined

/home/f.ludwig/ve/ngspice/src/ngspice-25/ngspice.js:1012566
      throw e;
            ^
abort() at Error
    at stackTrace (/home/f.ludwig/ve/ngspice/src/ngspice-25/ngspice.js:1032:15)
    at abort (/home/f.ludwig/ve/ngspice/src/ngspice-25/ngspice.js:1012650:25)
    at assert (/home/f.ludwig/ve/ngspice/src/ngspice-25/ngspice.js:545:5)
    at Pointer_stringify (/home/f.ludwig/ve/ngspice/src/ngspice-25/ngspice.js:778:5)
    at _fopen (/home/f.ludwig/ve/ngspice/src/ngspice-25/ngspice.js:63792:14)
    at _tmpfile (/home/f.ludwig/ve/ngspice/src/ngspice-25/ngspice.js:64100:14)
    at Object._main (/home/f.ludwig/ve/ngspice/src/ngspice-25/ngspice.js:66709:11)
    at Object.callMain (/home/f.ludwig/ve/ngspice/src/ngspice-25/ngspice.js:1012547:30)
    at doRun (/home/f.ludwig/ve/ngspice/src/ngspice-25/ngspice.js:1012600:25)
    at run (/home/f.ludwig/ve/ngspice/src/ngspice-25/ngspice.js:1012615:5)

Reply all
Reply to author
Forward
0 new messages