quakejs
quakejs copied to clipboard
Fail to build ioq3ded.js on latest emscripten
Build quakejs master code (https://github.com/inolen/quakejs/commit/237acdf9dea8a64bfec7d26575e0ebf0dbf18a38) + ioq3 master code (https://github.com/inolen/ioq3/commit/4f7d7bf2159aa0a18b79bb417aa760abac817b2a) with emscripten master code https://github.com/kripken/emscripten/commit/07b87426f898d6e9c677db291d9088c839197291, it fails with following errors:
LD build/release-js-js/ioq3ded.js
INFO:root:(Emscripten: Running sanity checks)
error: failure to execute js library "/home/halton/work/projects/github/webvr/quakejs/ioq3/code/sys/sys_common.js": TypeError: Runtime.generateStructInfo is not a function,,TypeError: Runtime.generateStructInfo is not a function
at eval (eval at <anonymous> (eval at globalEval (/home/halton/work/projects/github/emsdk_portable/emscripten/master/src/compiler.js:105:8)), <anonymous>:54:25)
at Object.LibraryManager.load (eval at globalEval (/home/halton/work/projects/github/emsdk_portable/emscripten/master/src/compiler.js:105:8), <anonymous>:146:9)
at JSify (eval at globalEval (/home/halton/work/projects/github/emsdk_portable/emscripten/master/src/compiler.js:105:8), <anonymous>:61:20)
at /home/halton/work/projects/github/webvr/quakejs/ioq3/code/sys/sys_common.js (/home/halton/work/projects/github/emsdk_portable/emscripten/master/src/compiler.js:213:3)
at Module._compile (module.js:434:26)
at Object.Module._extensions..js (module.js:452:10)
at Module.load (module.js:355:32)
at Function.Module._load (module.js:310:12)
at Function.Module.runMain (module.js:475:10)
at startup (node.js:117:18)
preprocessed source (you can run a js engine on this to get a clearer error message sometimes):
=============
var LibrarySysCommon = {
$CRC32: {
TABLE: [
0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3,
0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91,
0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,
0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5,
0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172, 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B,
0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,
0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F,
0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D,
0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,
0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01,
0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457,
0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,
0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB,
0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0, 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9,
0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,
0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD,
0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683,
0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,
0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7,
0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5,
0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,
0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79,
0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236, 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F,
0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,
0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713,
0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21,
0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,
0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45,
0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB,
0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,
0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF,
0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94, 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D
],
Start: function () {
return -1;
},
Update: function (crc, buffer, offset, len) {
for (var i = offset, l = offset + len; i < l; i++) {
crc = CRC32.TABLE[(crc ^ buffer[i]) & 0xff] ^ (crc >>> 8);
}
return crc;
},
Finish: function (crc) {
return (crc ^ -1) >>> 0;
}
},
$SYSC__deps: ['$Browser', '$FS', '$PATH', '$SYS', '$CRC32', 'Com_Printf', 'Com_Error', 'Com_ProxyCallback'],
$SYSC__postset: /* gunzip.min.js */ '(function() {\'use strict\';function n(e){throw e;}var p=void 0,aa=this;function r(e,c){var d=e.split("."),b=aa;!(d[0]in b)&&b.execScript&&b.execScript("var "+d[0]);for(var a;d.length&&(a=d.shift());)!d.length&&c!==p?b[a]=c:b=b[a]?b[a]:b[a]={}};var u="undefined"!==typeof Uint8Array&&"undefined"!==typeof Uint16Array&&"undefined"!==typeof Uint32Array;new (u?Uint8Array:Array)(256);var v;for(v=0;256>v;++v)for(var w=v,ba=7,w=w>>>1;w;w>>>=1)--ba;function x(e,c,d){var b,a="number"===typeof c?c:c=0,f="number"===typeof d?d:e.length;b=-1;for(a=f&7;a--;++c)b=b>>>8^y[(b^e[c])&255];for(a=f>>3;a--;c+=8)b=b>>>8^y[(b^e[c])&255],b=b>>>8^y[(b^e[c+1])&255],b=b>>>8^y[(b^e[c+2])&255],b=b>>>8^y[(b^e[c+3])&255],b=b>>>8^y[(b^e[c+4])&255],b=b>>>8^y[(b^e[c+5])&255],b=b>>>8^y[(b^e[c+6])&255],b=b>>>8^y[(b^e[c+7])&255];return(b^4294967295)>>>0}var z=[0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918E3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117],y=u?new Uint32Array(z):z;function A(){}A.prototype.getName=function(){return this.name};A.prototype.getData=function(){return this.data};A.prototype.G=function(){return this.H};r("Zlib.GunzipMember",A);r("Zlib.GunzipMember.prototype.getName",A.prototype.getName);r("Zlib.GunzipMember.prototype.getData",A.prototype.getData);r("Zlib.GunzipMember.prototype.getMtime",A.prototype.G);function C(e){var c=e.length,d=0,b=Number.POSITIVE_INFINITY,a,f,g,k,m,q,t,h,l;for(h=0;h<c;++h)e[h]>d&&(d=e[h]),e[h]<b&&(b=e[h]);a=1<<d;f=new (u?Uint32Array:Array)(a);g=1;k=0;for(m=2;g<=d;){for(h=0;h<c;++h)if(e[h]===g){q=0;t=k;for(l=0;l<g;++l)q=q<<1|t&1,t>>=1;for(l=q;l<a;l+=m)f[l]=g<<16|h;++k}++g;k<<=1;m<<=1}return[f,d,b]};var D=[],E;for(E=0;288>E;E++)switch(!0){case 143>=E:D.push([E+48,8]);break;case 255>=E:D.push([E-144+400,9]);break;case 279>=E:D.push([E-256+0,7]);break;case 287>=E:D.push([E-280+192,8]);break;default:n("invalid literal: "+E)}var ca=function(){function e(a){switch(!0){case 3===a:return[257,a-3,0];case 4===a:return[258,a-4,0];case 5===a:return[259,a-5,0];case 6===a:return[260,a-6,0];case 7===a:return[261,a-7,0];case 8===a:return[262,a-8,0];case 9===a:return[263,a-9,0];case 10===a:return[264,a-10,0];case 12>=a:return[265,a-11,1];case 14>=a:return[266,a-13,1];case 16>=a:return[267,a-15,1];case 18>=a:return[268,a-17,1];case 22>=a:return[269,a-19,2];case 26>=a:return[270,a-23,2];case 30>=a:return[271,a-27,2];case 34>=a:return[272,a-31,2];case 42>=a:return[273,a-35,3];case 50>=a:return[274,a-43,3];case 58>=a:return[275,a-51,3];case 66>=a:return[276,a-59,3];case 82>=a:return[277,a-67,4];case 98>=a:return[278,a-83,4];case 114>=a:return[279,a-99,4];case 130>=a:return[280,a-115,4];case 162>=a:return[281,a-131,5];case 194>=a:return[282,a-163,5];case 226>=a:return[283,a-195,5];case 257>=a:return[284,a-227,5];case 258===a:return[285,a-258,0];default:n("invalid length: "+a)}}var c=[],d,b;for(d=3;258>=d;d++)b=e(d),c[d]=b[2]<<24|b[1]<<16|b[0];return c}();u&&new Uint32Array(ca);function G(e,c){this.i=[];this.j=32768;this.d=this.f=this.c=this.n=0;this.input=u?new Uint8Array(e):e;this.o=!1;this.k=H;this.w=!1;if(c||!(c={}))c.index&&(this.c=c.index),c.bufferSize&&(this.j=c.bufferSize),c.bufferType&&(this.k=c.bufferType),c.resize&&(this.w=c.resize);switch(this.k){case I:this.a=32768;this.b=new (u?Uint8Array:Array)(32768+this.j+258);break;case H:this.a=0;this.b=new (u?Uint8Array:Array)(this.j);this.e=this.D;this.q=this.A;this.l=this.C;break;default:n(Error("invalid inflate mode"))}}var I=0,H=1;G.prototype.g=function(){for(;!this.o;){var e=J(this,3);e&1&&(this.o=!0);e>>>=1;switch(e){case 0:var c=this.input,d=this.c,b=this.b,a=this.a,f=p,g=p,k=p,m=b.length,q=p;this.d=this.f=0;f=c[d++];f===p&&n(Error("invalid uncompressed block header: LEN (first byte)"));g=f;f=c[d++];f===p&&n(Error("invalid uncompressed block header: LEN (second byte)"));g|=f<<8;f=c[d++];f===p&&n(Error("invalid uncompressed block header: NLEN (first byte)"));k=f;f=c[d++];f===p&&n(Error("invalid uncompressed block header: NLEN (second byte)"));k|=f<<8;g===~k&&n(Error("invalid uncompressed block header: length verify"));d+g>c.length&&n(Error("input buffer is broken"));switch(this.k){case I:for(;a+g>b.length;){q=m-a;g-=q;if(u)b.set(c.subarray(d,d+q),a),a+=q,d+=q;else for(;q--;)b[a++]=c[d++];this.a=a;b=this.e();a=this.a}break;case H:for(;a+g>b.length;)b=this.e({t:2});break;default:n(Error("invalid inflate mode"))}if(u)b.set(c.subarray(d,d+g),a),a+=g,d+=g;else for(;g--;)b[a++]=c[d++];this.c=d;this.a=a;this.b=b;break;case 1:this.l(da,ea);break;case 2:fa(this);break;default:n(Error("unknown BTYPE: "+e))}}return this.q()};var K=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],L=u?new Uint16Array(K):K,N=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,258,258],O=u?new Uint16Array(N):N,P=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0],Q=u?new Uint8Array(P):P,T=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577],ga=u?new Uint16Array(T):T,ha=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],U=u?new Uint8Array(ha):ha,V=new (u?Uint8Array:Array)(288),W,ia;W=0;for(ia=V.length;W<ia;++W)V[W]=143>=W?8:255>=W?9:279>=W?7:8;var da=C(V),X=new (u?Uint8Array:Array)(30),Y,ja;Y=0;for(ja=X.length;Y<ja;++Y)X[Y]=5;var ea=C(X);function J(e,c){for(var d=e.f,b=e.d,a=e.input,f=e.c,g;b<c;)g=a[f++],g===p&&n(Error("input buffer is broken")),d|=g<<b,b+=8;g=d&(1<<c)-1;e.f=d>>>c;e.d=b-c;e.c=f;return g}function Z(e,c){for(var d=e.f,b=e.d,a=e.input,f=e.c,g=c[0],k=c[1],m,q,t;b<k;){m=a[f++];if(m===p)break;d|=m<<b;b+=8}q=g[d&(1<<k)-1];t=q>>>16;e.f=d>>t;e.d=b-t;e.c=f;return q&65535}function fa(e){function c(a,c,b){var d,e,f,g;for(g=0;g<a;)switch(d=Z(this,c),d){case 16:for(f=3+J(this,2);f--;)b[g++]=e;break;case 17:for(f=3+J(this,3);f--;)b[g++]=0;e=0;break;case 18:for(f=11+J(this,7);f--;)b[g++]=0;e=0;break;default:e=b[g++]=d}return b}var d=J(e,5)+257,b=J(e,5)+1,a=J(e,4)+4,f=new (u?Uint8Array:Array)(L.length),g,k,m,q;for(q=0;q<a;++q)f[L[q]]=J(e,3);g=C(f);k=new (u?Uint8Array:Array)(d);m=new (u?Uint8Array:Array)(b);e.l(C(c.call(e,d,g,k)),C(c.call(e,b,g,m)))}G.prototype.l=function(e,c){var d=this.b,b=this.a;this.r=e;for(var a=d.length-258,f,g,k,m;256!==(f=Z(this,e));)if(256>f)b>=a&&(this.a=b,d=this.e(),b=this.a),d[b++]=f;else{g=f-257;m=O[g];0<Q[g]&&(m+=J(this,Q[g]));f=Z(this,c);k=ga[f];0<U[f]&&(k+=J(this,U[f]));b>=a&&(this.a=b,d=this.e(),b=this.a);for(;m--;)d[b]=d[b++-k]}for(;8<=this.d;)this.d-=8,this.c--;this.a=b};G.prototype.C=function(e,c){var d=this.b,b=this.a;this.r=e;for(var a=d.length,f,g,k,m;256!==(f=Z(this,e));)if(256>f)b>=a&&(d=this.e(),a=d.length),d[b++]=f;else{g=f-257;m=O[g];0<Q[g]&&(m+=J(this,Q[g]));f=Z(this,c);k=ga[f];0<U[f]&&(k+=J(this,U[f]));b+m>a&&(d=this.e(),a=d.length);for(;m--;)d[b]=d[b++-k]}for(;8<=this.d;)this.d-=8,this.c--;this.a=b};G.prototype.e=function(){var e=new (u?Uint8Array:Array)(this.a-32768),c=this.a-32768,d,b,a=this.b;if(u)e.set(a.subarray(32768,e.length));else{d=0;for(b=e.length;d<b;++d)e[d]=a[d+32768]}this.i.push(e);this.n+=e.length;if(u)a.set(a.subarray(c,c+32768));else for(d=0;32768>d;++d)a[d]=a[c+d];this.a=32768;return a};G.prototype.D=function(e){var c,d=this.input.length/this.c+1|0,b,a,f,g=this.input,k=this.b;e&&("number"===typeof e.t&&(d=e.t),"number"===typeof e.z&&(d+=e.z));2>d?(b=(g.length-this.c)/this.r[2],f=258*(b/2)|0,a=f<k.length?k.length+f:k.length<<1):a=k.length*d;u?(c=new Uint8Array(a),c.set(k)):c=k;return this.b=c};G.prototype.q=function(){var e=0,c=this.b,d=this.i,b,a=new (u?Uint8Array:Array)(this.n+(this.a-32768)),f,g,k,m;if(0===d.length)return u?this.b.subarray(32768,this.a):this.b.slice(32768,this.a);f=0;for(g=d.length;f<g;++f){b=d[f];k=0;for(m=b.length;k<m;++k)a[e++]=b[k]}f=32768;for(g=this.a;f<g;++f)a[e++]=c[f];this.i=[];return this.buffer=a};G.prototype.A=function(){var e,c=this.a;u?this.w?(e=new Uint8Array(c),e.set(this.b.subarray(0,c))):e=this.b.subarray(0,c):(this.b.length>c&&(this.b.length=c),e=this.b);return this.buffer=e};function $(e){this.input=e;this.c=0;this.m=[];this.s=!1}$.prototype.F=function(){this.s||this.g();return this.m.slice()};$.prototype.g=function(){for(var e=this.input.length;this.c<e;){var c=new A,d=p,b=p,a=p,f=p,g=p,k=p,m=p,q=p,t=p,h=this.input,l=this.c;c.u=h[l++];c.v=h[l++];(31!==c.u||139!==c.v)&&n(Error("invalid file signature:"+c.u+","+c.v));c.p=h[l++];switch(c.p){case 8:break;default:n(Error("unknown compression method: "+c.p))}c.h=h[l++];q=h[l++]|h[l++]<<8|h[l++]<<16|h[l++]<<24;c.H=new Date(1E3*q);c.N=h[l++];c.M=h[l++];0<(c.h&4)&&(c.I=h[l++]|h[l++]<<8,l+=c.I);if(0<(c.h&8)){m=[];for(k=0;0<(g=h[l++]);)m[k++]=String.fromCharCode(g);c.name=m.join("")}if(0<(c.h&16)){m=[];for(k=0;0<(g=h[l++]);)m[k++]=String.fromCharCode(g);c.J=m.join("")}0<(c.h&2)&&(c.B=x(h,0,l)&65535,c.B!==(h[l++]|h[l++]<<8)&&n(Error("invalid header crc16")));d=h[h.length-4]|hTraceback (most recent call last):
File "/home/halton/work/projects/github/emsdk_portable/emscripten/master/emcc", line 13, in <module>
emcc.run()
File "/home/halton/work/projects/github/emsdk_portable/emscripten/master/emcc.py", line 1392, in run
final = shared.Building.emscripten(final, append_ext=False, extra_args=extra_args)
File "/home/halton/work/projects/github/emsdk_portable/emscripten/master/tools/shared.py", line 1588, in emscripten
call_emscripten(cmdline)
File "/home/halton/work/projects/github/emsdk_portable/emscripten/master/emscripten.py", line 1657, in _main
temp_files.run_and_clean(lambda: main(
File "/home/halton/work/projects/github/emsdk_portable/emscripten/master/tools/tempfiles.py", line 64, in run_and_clean
return func()
File "/home/halton/work/projects/github/emsdk_portable/emscripten/master/emscripten.py", line 1663, in <lambda>
DEBUG_CACHE=DEBUG_CACHE,
File "/home/halton/work/projects/github/emsdk_portable/emscripten/master/emscripten.py", line 1560, in main
temp_files=temp_files, DEBUG=DEBUG, DEBUG_CACHE=DEBUG_CACHE)
File "/home/halton/work/projects/github/emsdk_portable/emscripten/master/emscripten.py", line 234, in emscript
cwd=path_from_root('src'), error_limit=300)
File "/home/halton/work/projects/github/emsdk_portable/emscripten/master/tools/jsrun.py", line 75, in run_js
raise Exception('Expected the command ' + str(command) + ' to finish with return code ' + str(assert_returncode) + ', but it returned with code ' + str(proc.returncode) + ' instead! Output: ' + str(ret)[:error_limit])
Exception: Expected the command ['/home/halton/work/projects/github/emsdk_portable/node/4.1.1_64bit/bin/node', '/home/halton/work/projects/github/emsdk_portable/emscripten/master/src/compiler.js', '/tmp/tmpG1K9wK.txt', '/home/halton/work/projects/github/webvr/quakejs/ioq3/code/sys/sys_common.js', '/home/halton/work/projects/github/webvr/quakejs/ioq3/code/sys/sys_node.js', '/home/halton/work/projects/github/webvr/quakejs/ioq3/code/qcommon/vm_js.js', '/home/halton/work/projects/github/emsdk_portable/emscripten/master/src/library_pthread_stub.js'] to finish with return code 0, but it returned with code 1 instead! Output: // The Module object: Our interface to the outside world. We import
// and export values on it, and do the work to get that through
// closure compiler if necessary. There are various ways Module can be used:
// 1. Not defined. We create it here
// 2. A function parameter, function(Module) { ..gener
Makefile:2260: recipe for target 'build/release-js-js/ioq3ded.js' failed
make[2]: *** [build/release-js-js/ioq3ded.js] Error 1
make[2]: Leaving directory '/home/halton/work/projects/github/webvr/quakejs/ioq3'
Makefile:1289: recipe for target 'targets' failed
make[1]: *** [targets] Error 2
make[1]: Leaving directory '/home/halton/work/projects/github/webvr/quakejs/ioq3'
Makefile:1263: recipe for tar
Refer to https://github.com/kripken/emscripten/pull/1624, Runtime.generateStructInfo
is deprecated, the ioq3/code/sys/sys_common.js
need to be updated.
Right, there have been significant changes to emscripten since I last built ioq3. It would probably be a good bit of work to make sure it compiles and works with latest emscripten.
Hi Guys,
@inolen Could you infrom, what was the emscirpten's version/tag which can build ioq3? I would like to build it and I don't care if it isn't the latest, just can build it.
@halton Have you found any solution for this problem?
Thanks, Gabor
So, could anyone say, what version of emscripten could be good for this?
You can use the 1.12.0 version for that:
$> /emsdk_portable/emsdk list --old
$> /emsdk_portable/emsdk install sdk-1.12.0-64bit
$> /emsdk_portable/emsdk activate sdk-1.12.0-64bit
$> /emsdk_portable/emsdk activate clang-3.2-64bit
$> /emsdk_portable/emsdk activate emscripten-1.12.0
# copy the path into your $PATH
$> cd /inolen/quakejs/ioq3
$> make PLATFORM=js EMSCRIPTEN="/emsdk_portable/emscripten/1.12.0/"
For people who have this error:
make[2]: *** No rule to make target `.git/index', needed by `build/release-js-js/ded/common.o'. Stop.
make[1]: *** [targets] Error 2
make: *** [release] Error 2
It's because you maybe clone the project with:
$> git clone --recursive https://github.com/inolen/quakejs.git
So you need to modify the Makefile and replace these lines:
# Extra dependencies to ensure the git version is incorporated
ifeq ($(USE_GIT),1)
$(B)/client/cl_console.o : .git/index
$(B)/client/common.o : .git/index
$(B)/ded/common.o : .git/index
endif
by
# Extra dependencies to ensure the git version is incorporated
ifeq ($(USE_GIT),1)
$(B)/client/cl_console.o : ../.git/modules/ioq3/index
$(B)/client/common.o : ../.git/modules/ioq3/index
$(B)/ded/common.o : ../.git/modules/ioq3/index
endif
Enjoy :)
@MasGaNo Thank you! But there's a problem - 1.12.0 whole sdk is no longer downloadable in emsdk. (I could only download emscripten 1.12.0, but it still requires libs from clang (i think)) If you have it, could you put it on some file hosing?
Ah? This is strange... I'm using the Portable Emscripten SDK for Linux and OS X, and if I use the command I mention in my previous message:
$> /emsdk_portable/emsdk list --old
The following precompiled tool packages are available for download:
* clang-3.2-64bit INSTALLED
clang-3.3-64bit
clang-e1.13.0-64bit INSTALLED
clang-e1.13.1-64bit
clang-e1.16.0-64bit
clang-e1.21.0-64bit INSTALLED
clang-e1.22.0-64bit
clang-e1.25.0-64bit
clang-e1.27.0-64bit
clang-e1.29.0-64bit
clang-e1.30.0-64bit
clang-e1.34.1-64bit
clang-e1.35.0-64bit INSTALLED
* node-0.10.18-64bit INSTALLED
node-0.12.2-64bit
node-4.1.1-64bit INSTALLED
spidermonkey-27.0.1-64bit
spidermonkey-nightly-2014-03-13-64bit
spidermonkey-30.0.0-64bit
spidermonkey-37.0.1-64bit
spidermonkey-nightly-2015-04-12-64bit
emscripten-1.5.6
emscripten-1.7.1
emscripten-1.7.8
emscripten-1.8.2
emscripten-1.9.5
emscripten-1.10.4
(*) emscripten-1.12.0 INSTALLED
emscripten-1.13.0 INSTALLED
emscripten-1.13.1
emscripten-1.16.0
emscripten-1.21.0 INSTALLED
emscripten-1.22.0
emscripten-1.25.0
emscripten-1.27.0
emscripten-1.29.0
emscripten-1.30.0
emscripten-1.34.1
emscripten-1.35.0 INSTALLED
crunch-1.04
The following tools can be compiled from source:
clang-tag-e1.28.2-32bit
clang-tag-e1.28.3-32bit
clang-tag-e1.29.0-32bit
[...]
clang-master-32bit
clang-master-64bit
emscripten-tag-1.28.2-32bit
emscripten-tag-1.28.3-32bit
[...]
emscripten-tag-1.37.2-64bit
emscripten-tag-1.37.3-64bit
emscripten-incoming-32bit
emscripten-master-32bit
emscripten-incoming-64bit
emscripten-master-64bit
The following precompiled SDKs are available for download:
sdk-1.5.6-64bit
sdk-1.7.1-64bit
sdk-1.7.8-64bit
sdk-1.8.2-64bit
sdk-1.9.5-64bit
sdk-1.10.4-64bit
* sdk-1.12.0-64bit INSTALLED
sdk-1.13.0-64bit INSTALLED
sdk-1.13.1-64bit
sdk-1.16.0-64bit
sdk-1.21.0-64bit INSTALLED
sdk-1.22.0-64bit
sdk-1.25.0-64bit
sdk-1.27.0-64bit
sdk-1.29.0-64bit
sdk-1.30.0-64bit
sdk-1.34.1-64bit
sdk-1.35.0-64bit INSTALLED
The following SDKs can be compiled from source:
sdk-incoming-64bit
sdk-master-64bit
You need to add the --old
option to see the previous versions :-)
So normally it's possible to install previous version of all dependencies. But for that, you need to install directly the sdk-1.12.0-64bit
and then to activate all the modules manually (I don't try to find an automatic way):
$> /emsdk_portable/emsdk install sdk-1.12.0-64bit
$> /emsdk_portable/emsdk activate sdk-1.12.0-64bit
$> /emsdk_portable/emsdk activate clang-3.2-64bit
$> /emsdk_portable/emsdk activate emscripten-1.12.0
$> /emsdk_portable/emsdk activate node-0.10.18-64bit
Then, don't forget to copy/paste the full generated path in your $PATH.
Could you try this way? Can you show me your error message if you get one?
root@ragewell:~/test2/emsdk_portable# ./emsdk list --old
The following precompiled tool packages are available for download:
node-4.1.1-32bit
node-4.1.1-64bit
emscripten-1.5.6
emscripten-1.7.1
emscripten-1.7.8
emscripten-1.8.2
emscripten-1.9.5
emscripten-1.10.4
emscripten-1.12.0
emscripten-1.13.0
emscripten-1.13.1
emscripten-1.16.0
emscripten-1.21.0
emscripten-1.22.0
emscripten-1.25.0
emscripten-1.27.0
emscripten-1.29.0
emscripten-1.30.0
emscripten-1.34.1
emscripten-1.35.0
The following tools can be compiled from source:
clang-tag-e1.28.2-32bit
clang-tag-e1.28.3-32bit
clang-tag-e1.29.0-32bit
clang-tag-e1.29.1-32bit
clang-tag-e1.29.2-32bit
clang-tag-e1.29.3-32bit
clang-tag-e1.29.4-32bit
clang-tag-e1.29.5-32bit
clang-tag-e1.29.6-32bit
clang-tag-e1.29.7-32bit
clang-tag-e1.29.8-32bit
clang-tag-e1.29.9-32bit
clang-tag-e1.29.10-32bit
clang-tag-e1.29.11-32bit
clang-tag-e1.29.12-32bit
clang-tag-e1.30.0-32bit
clang-tag-e1.30.1-32bit
clang-tag-e1.30.2-32bit
clang-tag-e1.30.3-32bit
clang-tag-e1.30.4-32bit
clang-tag-e1.30.5-32bit
clang-tag-e1.30.6-32bit
clang-tag-e1.31.0-32bit
clang-tag-e1.31.1-32bit
clang-tag-e1.31.2-32bit
clang-tag-e1.31.3-32bit
clang-tag-e1.32.0-32bit
clang-tag-e1.32.1-32bit
clang-tag-e1.32.2-32bit
clang-tag-e1.32.3-32bit
clang-tag-e1.32.4-32bit
clang-tag-e1.33.0-32bit
clang-tag-e1.33.1-32bit
clang-tag-e1.33.2-32bit
clang-tag-e1.34.0-32bit
clang-tag-e1.34.1-32bit
clang-tag-e1.34.2-32bit
clang-tag-e1.34.3-32bit
clang-tag-e1.34.4-32bit
clang-tag-e1.34.5-32bit
clang-tag-e1.34.6-32bit
clang-tag-e1.34.7-32bit
clang-tag-e1.34.8-32bit
clang-tag-e1.34.9-32bit
clang-tag-e1.34.10-32bit
clang-tag-e1.34.11-32bit
clang-tag-e1.34.12-32bit
clang-tag-e1.35.0-32bit
clang-tag-e1.35.1-32bit
clang-tag-e1.35.2-32bit
clang-tag-e1.35.3-32bit
clang-tag-e1.35.4-32bit
clang-tag-e1.35.5-32bit
clang-tag-e1.35.6-32bit
clang-tag-e1.35.7-32bit
clang-tag-e1.35.8-32bit
clang-tag-e1.35.9-32bit
clang-tag-e1.28.2-64bit
clang-tag-e1.28.3-64bit
clang-tag-e1.29.0-64bit
clang-tag-e1.29.1-64bit
clang-tag-e1.29.2-64bit
clang-tag-e1.29.3-64bit
clang-tag-e1.29.4-64bit
clang-tag-e1.29.5-64bit
clang-tag-e1.29.6-64bit
clang-tag-e1.29.7-64bit
clang-tag-e1.29.8-64bit
clang-tag-e1.29.9-64bit
clang-tag-e1.29.10-64bit
clang-tag-e1.29.11-64bit
clang-tag-e1.29.12-64bit
clang-tag-e1.30.0-64bit
clang-tag-e1.30.1-64bit
clang-tag-e1.30.2-64bit
clang-tag-e1.30.3-64bit
clang-tag-e1.30.4-64bit
clang-tag-e1.30.5-64bit
clang-tag-e1.30.6-64bit
clang-tag-e1.31.0-64bit
clang-tag-e1.31.1-64bit
clang-tag-e1.31.2-64bit
clang-tag-e1.31.3-64bit
clang-tag-e1.32.0-64bit
clang-tag-e1.32.1-64bit
clang-tag-e1.32.2-64bit
clang-tag-e1.32.3-64bit
clang-tag-e1.32.4-64bit
clang-tag-e1.33.0-64bit
clang-tag-e1.33.1-64bit
clang-tag-e1.33.2-64bit
clang-tag-e1.34.0-64bit
clang-tag-e1.34.1-64bit
clang-tag-e1.34.2-64bit
clang-tag-e1.34.3-64bit
clang-tag-e1.34.4-64bit
clang-tag-e1.34.5-64bit
clang-tag-e1.34.6-64bit
clang-tag-e1.34.7-64bit
clang-tag-e1.34.8-64bit
clang-tag-e1.34.9-64bit
clang-tag-e1.34.10-64bit
clang-tag-e1.34.11-64bit
clang-tag-e1.34.12-64bit
clang-tag-e1.35.0-64bit
clang-tag-e1.35.1-64bit
clang-tag-e1.35.2-64bit
clang-tag-e1.35.3-64bit
clang-tag-e1.35.4-64bit
clang-tag-e1.35.5-64bit
clang-tag-e1.35.6-64bit
clang-tag-e1.35.7-64bit
clang-tag-e1.35.8-64bit
clang-tag-e1.35.9-64bit
clang-incoming-32bit
clang-incoming-64bit
clang-master-32bit
clang-master-64bit
emscripten-tag-1.28.2-32bit
emscripten-tag-1.28.3-32bit
emscripten-tag-1.29.0-32bit
emscripten-tag-1.29.1-32bit
emscripten-tag-1.29.2-32bit
emscripten-tag-1.29.3-32bit
emscripten-tag-1.29.4-32bit
emscripten-tag-1.29.5-32bit
emscripten-tag-1.29.6-32bit
emscripten-tag-1.29.7-32bit
emscripten-tag-1.29.8-32bit
emscripten-tag-1.29.9-32bit
emscripten-tag-1.29.10-32bit
emscripten-tag-1.29.11-32bit
emscripten-tag-1.29.12-32bit
emscripten-tag-1.30.0-32bit
emscripten-tag-1.30.1-32bit
emscripten-tag-1.30.2-32bit
emscripten-tag-1.30.3-32bit
emscripten-tag-1.30.4-32bit
emscripten-tag-1.30.5-32bit
emscripten-tag-1.30.6-32bit
emscripten-tag-1.31.0-32bit
emscripten-tag-1.31.1-32bit
emscripten-tag-1.31.2-32bit
emscripten-tag-1.31.3-32bit
emscripten-tag-1.32.0-32bit
emscripten-tag-1.32.1-32bit
emscripten-tag-1.32.2-32bit
emscripten-tag-1.32.3-32bit
emscripten-tag-1.32.4-32bit
emscripten-tag-1.33.0-32bit
emscripten-tag-1.33.1-32bit
emscripten-tag-1.33.2-32bit
emscripten-tag-1.34.0-32bit
emscripten-tag-1.34.1-32bit
emscripten-tag-1.34.2-32bit
emscripten-tag-1.34.3-32bit
emscripten-tag-1.34.4-32bit
emscripten-tag-1.34.5-32bit
emscripten-tag-1.34.6-32bit
emscripten-tag-1.34.7-32bit
emscripten-tag-1.34.8-32bit
emscripten-tag-1.34.9-32bit
emscripten-tag-1.34.10-32bit
emscripten-tag-1.34.11-32bit
emscripten-tag-1.34.12-32bit
emscripten-tag-1.35.0-32bit
emscripten-tag-1.35.1-32bit
emscripten-tag-1.35.2-32bit
emscripten-tag-1.35.3-32bit
emscripten-tag-1.35.4-32bit
emscripten-tag-1.35.5-32bit
emscripten-tag-1.35.6-32bit
emscripten-tag-1.35.7-32bit
emscripten-tag-1.35.8-32bit
emscripten-tag-1.35.9-32bit
emscripten-tag-1.28.2-64bit
emscripten-tag-1.28.3-64bit
emscripten-tag-1.29.0-64bit
emscripten-tag-1.29.1-64bit
emscripten-tag-1.29.2-64bit
emscripten-tag-1.29.3-64bit
emscripten-tag-1.29.4-64bit
emscripten-tag-1.29.5-64bit
emscripten-tag-1.29.6-64bit
emscripten-tag-1.29.7-64bit
emscripten-tag-1.29.8-64bit
emscripten-tag-1.29.9-64bit
emscripten-tag-1.29.10-64bit
emscripten-tag-1.29.11-64bit
emscripten-tag-1.29.12-64bit
emscripten-tag-1.30.0-64bit
emscripten-tag-1.30.1-64bit
emscripten-tag-1.30.2-64bit
emscripten-tag-1.30.3-64bit
emscripten-tag-1.30.4-64bit
emscripten-tag-1.30.5-64bit
emscripten-tag-1.30.6-64bit
emscripten-tag-1.31.0-64bit
emscripten-tag-1.31.1-64bit
emscripten-tag-1.31.2-64bit
emscripten-tag-1.31.3-64bit
emscripten-tag-1.32.0-64bit
emscripten-tag-1.32.1-64bit
emscripten-tag-1.32.2-64bit
emscripten-tag-1.32.3-64bit
emscripten-tag-1.32.4-64bit
emscripten-tag-1.33.0-64bit
emscripten-tag-1.33.1-64bit
emscripten-tag-1.33.2-64bit
emscripten-tag-1.34.0-64bit
emscripten-tag-1.34.1-64bit
emscripten-tag-1.34.2-64bit
emscripten-tag-1.34.3-64bit
emscripten-tag-1.34.4-64bit
emscripten-tag-1.34.5-64bit
emscripten-tag-1.34.6-64bit
emscripten-tag-1.34.7-64bit
emscripten-tag-1.34.8-64bit
emscripten-tag-1.34.9-64bit
emscripten-tag-1.34.10-64bit
emscripten-tag-1.34.11-64bit
emscripten-tag-1.34.12-64bit
emscripten-tag-1.35.0-64bit
emscripten-tag-1.35.1-64bit
emscripten-tag-1.35.2-64bit
emscripten-tag-1.35.3-64bit
emscripten-tag-1.35.4-64bit
emscripten-tag-1.35.5-64bit
emscripten-tag-1.35.6-64bit
emscripten-tag-1.35.7-64bit
emscripten-tag-1.35.8-64bit
emscripten-tag-1.35.9-64bit
emscripten-incoming-32bit
emscripten-master-32bit
emscripten-incoming-64bit
emscripten-master-64bit
The following precompiled SDKs are available for download:
The following SDKs can be compiled from source:
sdk-incoming-32bit
sdk-incoming-64bit
sdk-master-32bit
sdk-master-64bit
sdk-tag-1.28.2-32bit
sdk-tag-1.28.3-32bit
sdk-tag-1.29.0-32bit
sdk-tag-1.29.1-32bit
sdk-tag-1.29.2-32bit
sdk-tag-1.29.3-32bit
sdk-tag-1.29.4-32bit
sdk-tag-1.29.5-32bit
sdk-tag-1.29.6-32bit
sdk-tag-1.29.7-32bit
sdk-tag-1.29.8-32bit
sdk-tag-1.29.9-32bit
sdk-tag-1.29.10-32bit
sdk-tag-1.29.11-32bit
sdk-tag-1.29.12-32bit
sdk-tag-1.30.0-32bit
sdk-tag-1.30.1-32bit
sdk-tag-1.30.2-32bit
sdk-tag-1.30.3-32bit
sdk-tag-1.30.4-32bit
sdk-tag-1.30.5-32bit
sdk-tag-1.30.6-32bit
sdk-tag-1.31.0-32bit
sdk-tag-1.31.1-32bit
sdk-tag-1.31.2-32bit
sdk-tag-1.31.3-32bit
sdk-tag-1.32.0-32bit
sdk-tag-1.32.1-32bit
sdk-tag-1.32.2-32bit
sdk-tag-1.32.3-32bit
sdk-tag-1.32.4-32bit
sdk-tag-1.33.0-32bit
sdk-tag-1.33.1-32bit
sdk-tag-1.33.2-32bit
sdk-tag-1.34.0-32bit
sdk-tag-1.34.1-32bit
sdk-tag-1.34.2-32bit
sdk-tag-1.34.3-32bit
sdk-tag-1.34.4-32bit
sdk-tag-1.34.5-32bit
sdk-tag-1.34.6-32bit
sdk-tag-1.34.7-32bit
sdk-tag-1.34.8-32bit
sdk-tag-1.34.9-32bit
sdk-tag-1.34.10-32bit
sdk-tag-1.34.11-32bit
sdk-tag-1.34.12-32bit
sdk-tag-1.35.0-32bit
sdk-tag-1.35.1-32bit
sdk-tag-1.35.2-32bit
sdk-tag-1.35.3-32bit
sdk-tag-1.35.4-32bit
sdk-tag-1.35.5-32bit
sdk-tag-1.35.6-32bit
sdk-tag-1.35.7-32bit
sdk-tag-1.35.8-32bit
sdk-tag-1.35.9-32bit
Items marked with * are activated for the current user.
Even with --old tag, it's not showing those. Strange o-O If im trying to install it anyway, it'll say that package not found.
Strange... 😮 Did you already execute this command after downloading this package?:
$> ./emsdk update
I tried it with and without that command - it didn't helped me at all :c Can you can your emscripten-tags.txt file? Just to check if there's other versions too.
Yes sure:
$> cat emscripten-tags.txt
1.28.2
1.28.3
1.29.0
1.29.1
1.29.2
1.29.3
1.29.4
1.29.5
1.29.6
1.29.7
1.29.8
1.29.9
1.29.10
1.29.11
1.29.12
1.30.0
1.30.1
1.30.2
1.30.3
1.30.4
1.30.5
1.30.6
1.31.0
1.31.1
1.31.2
1.31.3
1.32.0
1.32.1
1.32.2
1.32.3
1.32.4
1.33.0
1.33.1
1.33.2
1.34.0
1.34.1
1.34.2
1.34.3
1.34.4
1.34.5
1.34.6
1.34.7
1.34.8
1.34.9
1.34.10
1.34.11
1.34.12
1.35.0
1.35.1
1.35.2
1.35.3
1.35.4
1.35.5
1.35.6
1.35.7
1.35.8
1.35.9
1.35.10
1.35.11
1.35.12
1.35.13
1.35.14
1.35.15
1.35.16
1.35.17
1.35.18
1.35.19
1.35.20
1.35.21
1.35.22
1.35.23
1.36.0
1.36.1
1.36.2
1.36.3
1.36.4
1.36.5
1.36.6
1.36.7
1.36.8
1.36.9
1.36.10
1.36.11
1.36.12
1.36.13
1.36.14
1.37.0
1.37.1
1.37.2
1.37.3
But maybe you want my manifest file?:
$> cat emsdk_manifest.json
{
"tools": [
{
"id": "clang",
"version": "3.2",
"bitness": 32,
"windows_url": "clang_3.2_32bit.zip",
"activated_path": "%installation_dir%",
"activated_cfg": "LLVM_ROOT='%installation_dir%'",
"is_old": true
},
{
"id": "clang",
"version": "3.2",
"bitness": 64,
"windows_url": "clang_3.2_64bit.zip",
"activated_path": "%installation_dir%/bin",
"activated_cfg": "LLVM_ROOT='%installation_dir%/bin'",
"is_old": true
},
{
"id": "clang",
"version": "3.3",
"bitness": 32,
"windows_url": "clang_3.3_32bit.zip",
"activated_path": "%installation_dir%",
"activated_cfg": "LLVM_ROOT='%installation_dir%'",
"is_old": true
},
{
"id": "clang",
"version": "3.3",
"bitness": 64,
"windows_url": "clang_3.3_64bit.zip",
"activated_path": "%installation_dir%",
"activated_cfg": "LLVM_ROOT='%installation_dir%'",
"is_old": true
},
{
"id": "clang",
"version": "3.2",
"bitness": 64,
"osx_url": "clang%2Bllvm-3.2-x86_64-apple-darwin11.tar.gz",
"activated_path": "%installation_dir%/bin",
"activated_cfg": "LLVM_ROOT='%installation_dir%/bin'",
"is_old": true
},
{
"id": "clang",
"version": "3.3",
"bitness": 64,
"osx_url": "clang%2Bllvm-3.3-x86_64-apple-darwin12.tar.gz",
"activated_path": "%installation_dir%/bin",
"activated_cfg": "LLVM_ROOT='%installation_dir%/bin'",
"is_old": true
},
{
"id": "clang",
"version": "tag-e%tag%",
"bitness": 32,
"append_bitness": false,
"windows_url": "https://github.com/kripken/emscripten-fastcomp/archive/%tag%.zip",
"unix_url": "https://github.com/kripken/emscripten-fastcomp/archive/%tag%.tar.gz",
"windows_clang_url": "https://github.com/kripken/emscripten-fastcomp-clang/archive/%tag%.zip",
"unix_clang_url": "https://github.com/kripken/emscripten-fastcomp-clang/archive/%tag%.tar.gz",
"custom_install_script": "build_fastcomp",
"activated_path": "%installation_dir%/%fastcomp_build_bin_dir%",
"activated_cfg": "LLVM_ROOT='%installation_dir%/%fastcomp_build_bin_dir%'",
"cmake_build_type": "RelWithDebInfo"
},
{
"id": "clang",
"version": "tag-e%tag%",
"bitness": 64,
"append_bitness": false,
"windows_url": "https://github.com/kripken/emscripten-fastcomp/archive/%tag%.zip",
"unix_url": "https://github.com/kripken/emscripten-fastcomp/archive/%tag%.tar.gz",
"windows_clang_url": "https://github.com/kripken/emscripten-fastcomp-clang/archive/%tag%.zip",
"unix_clang_url": "https://github.com/kripken/emscripten-fastcomp-clang/archive/%tag%.tar.gz",
"custom_install_script": "build_fastcomp",
"activated_path": "%installation_dir%/%fastcomp_build_bin_dir%",
"activated_cfg": "LLVM_ROOT='%installation_dir%/%fastcomp_build_bin_dir%'",
"cmake_build_type": "RelWithDebInfo"
},
{
"id": "clang",
"version": "incoming",
"bitness": 32,
"install_path": "clang/fastcomp",
"url": "https://github.com/kripken/emscripten-fastcomp/",
"clang_url": "https://github.com/kripken/emscripten-fastcomp-clang/",
"git_branch": "incoming",
"custom_install_script": "build_fastcomp",
"activated_path": "%installation_dir%/%fastcomp_build_bin_dir%",
"activated_cfg": "LLVM_ROOT='%installation_dir%/%fastcomp_build_bin_dir%'",
"cmake_build_type": "RelWithDebInfo"
},
{
"id": "clang",
"version": "incoming",
"bitness": 64,
"install_path": "clang/fastcomp",
"git_branch": "incoming",
"url": "https://github.com/kripken/emscripten-fastcomp/",
"clang_url": "https://github.com/kripken/emscripten-fastcomp-clang/",
"custom_install_script": "build_fastcomp",
"activated_path": "%installation_dir%/%fastcomp_build_bin_dir%",
"activated_cfg": "LLVM_ROOT='%installation_dir%/%fastcomp_build_bin_dir%'",
"cmake_build_type": "RelWithDebInfo"
},
{
"id": "clang",
"version": "master",
"bitness": 32,
"install_path": "clang/fastcomp",
"url": "https://github.com/kripken/emscripten-fastcomp/",
"clang_url": "https://github.com/kripken/emscripten-fastcomp-clang/",
"git_branch": "master",
"custom_install_script": "build_fastcomp",
"activated_path": "%installation_dir%/%fastcomp_build_bin_dir%",
"activated_cfg": "LLVM_ROOT='%installation_dir%/%fastcomp_build_bin_dir%'",
"cmake_build_type": "Release"
},
{
"id": "clang",
"version": "master",
"bitness": 64,
"install_path": "clang/fastcomp",
"git_branch": "master",
"url": "https://github.com/kripken/emscripten-fastcomp/",
"clang_url": "https://github.com/kripken/emscripten-fastcomp-clang/",
"custom_install_script": "build_fastcomp",
"activated_path": "%installation_dir%/%fastcomp_build_bin_dir%",
"activated_cfg": "LLVM_ROOT='%installation_dir%/%fastcomp_build_bin_dir%'",
"cmake_build_type": "Release"
},
{
"id": "clang",
"version": "e1.13.0",
"bitness": 64,
"windows_url": "emscripten-clang_e1.13.0.zip",
"osx_url": "emscripten-clang_e1.13.0.tar.gz",
"activated_path": "%installation_dir%",
"activated_cfg": "LLVM_ROOT='%installation_dir%'",
"is_old": true
},
{
"id": "clang",
"version": "e1.13.1",
"bitness": 64,
"windows_url": "emscripten-clang_e1.13.1.zip",
"osx_url": "emscripten-clang_e1.13.1.tar.gz",
"activated_path": "%installation_dir%",
"activated_cfg": "LLVM_ROOT='%installation_dir%'",
"is_old": true
},
{
"id": "clang",
"version": "e1.16.0",
"bitness": 64,
"windows_url": "emscripten-clang_e1.16.0.zip",
"osx_url": "emscripten-clang_e1.16.0.tar.gz",
"activated_path": "%installation_dir%",
"activated_cfg": "LLVM_ROOT='%installation_dir%'",
"is_old": true
},
{
"id": "clang",
"version": "e1.21.0",
"bitness": 64,
"windows_url": "emscripten-clang_e1.21.0.zip",
"osx_url": "emscripten-clang_e1.21.0.tar.gz",
"activated_path": "%installation_dir%",
"activated_cfg": "LLVM_ROOT='%installation_dir%'",
"is_old": true
},
{
"id": "clang",
"version": "e1.22.0",
"bitness": 64,
"windows_url": "emscripten-clang_e1.22.0.zip",
"osx_url": "emscripten-clang_e1.22.0.tar.gz",
"activated_path": "%installation_dir%",
"activated_cfg": "LLVM_ROOT='%installation_dir%'",
"is_old": true
},
{
"id": "clang",
"version": "e1.25.0",
"bitness": 64,
"windows_url": "emscripten-clang_e1.25.0.zip",
"osx_url": "emscripten-clang_e1.25.0.tar.gz",
"activated_path": "%installation_dir%",
"activated_cfg": "LLVM_ROOT='%installation_dir%'",
"is_old": true
},
{
"id": "clang",
"version": "e1.27.0",
"bitness": 64,
"windows_url": "emscripten-clang_e1.27.0.zip",
"osx_url": "emscripten-clang_e1.27.0.tar.gz",
"activated_path": "%installation_dir%",
"activated_cfg": "LLVM_ROOT='%installation_dir%'",
"is_old": true
},
{
"id": "clang",
"version": "e1.29.0",
"bitness": 64,
"windows_url": "emscripten-clang_e1.29.0.zip",
"osx_url": "emscripten-clang_e1.29.0.tar.gz",
"activated_path": "%installation_dir%",
"activated_cfg": "LLVM_ROOT='%installation_dir%';EMSCRIPTEN_NATIVE_OPTIMIZER='%installation_dir%/optimizer%.exe%'",
"is_old": true
},
{
"id": "clang",
"version": "e1.30.0",
"bitness": 64,
"windows_url": "emscripten-clang_e1.30.0.zip",
"osx_url": "emscripten-clang_e1.30.0.tar.gz",
"activated_path": "%installation_dir%",
"activated_cfg": "LLVM_ROOT='%installation_dir%';EMSCRIPTEN_NATIVE_OPTIMIZER='%installation_dir%/optimizer%.exe%'"
},
{
"id": "clang",
"version": "e1.34.1",
"bitness": 64,
"windows_url": "emscripten-clang_e1.34.1.zip",
"osx_url": "emscripten-clang_e1.34.1.tar.gz",
"activated_path": "%installation_dir%",
"activated_cfg": "LLVM_ROOT='%installation_dir%';EMSCRIPTEN_NATIVE_OPTIMIZER='%installation_dir%/optimizer%.exe%'"
},
{
"id": "clang",
"version": "e1.35.0",
"bitness": 64,
"windows_url": "emscripten-clang_e1.35.0.zip",
"osx_url": "emscripten-clang_e1.35.0.tar.gz",
"activated_path": "%installation_dir%",
"activated_cfg": "LLVM_ROOT='%installation_dir%';EMSCRIPTEN_NATIVE_OPTIMIZER='%installation_dir%/optimizer%.exe%'"
},
{
"id": "node",
"version": "0.10.17",
"bitness": 32,
"windows_url": "node_0.10.17_32bit.exe",
"windows_install_path": "node/0.10.17_32bit/node.exe",
"activated_path": "%installation_dir%",
"activated_cfg": "NODE_JS='%installation_dir%/node.exe'",
"is_old": true
},
{
"id": "node",
"version": "0.10.17",
"bitness": 64,
"windows_url": "node_0.10.17_64bit.exe",
"windows_install_path": "node/0.10.17_64bit/node.exe",
"activated_path": "%installation_dir%",
"activated_cfg": "NODE_JS='%installation_dir%/node.exe'",
"is_old": true
},
{
"id": "node",
"version": "0.10.18",
"bitness": 64,
"osx_url": "node-v0.10.18-darwin-x64.tar.gz",
"activated_path": "%installation_dir%/bin",
"activated_cfg": "NODE_JS='%installation_dir%/bin/node'",
"is_old": true
},
{
"id": "node",
"version": "0.12.2",
"bitness": 32,
"windows_url": "node_0.12.2_32bit.exe",
"windows_install_path": "node/0.12.2_32bit/node.exe",
"activated_path": "%installation_dir%",
"activated_cfg": "NODE_JS='%installation_dir%/node.exe'",
"is_old": true
},
{
"id": "node",
"version": "0.12.2",
"bitness": 64,
"windows_url": "node_0.12.2_64bit.exe",
"windows_install_path": "node/0.12.2_64bit/node.exe",
"activated_path": "%installation_dir%",
"activated_cfg": "NODE_JS='%installation_dir%/node.exe'",
"is_old": true
},
{
"id": "node",
"version": "0.12.2",
"bitness": 64,
"osx_url": "node-v0.12.2-darwin-x64.tar.gz",
"activated_path": "%installation_dir%/bin",
"activated_cfg": "NODE_JS='%installation_dir%/bin/node'",
"is_old": true
},
{
"id": "node",
"version": "4.1.1",
"bitness": 32,
"windows_url": "node_4.1.1_32bit.zip",
"linux_url": "node-v4.1.1-linux-x86.tar.gz",
"activated_path": "%installation_dir%/bin",
"activated_cfg": "NODE_JS='%installation_dir%/bin/node'"
},
{
"id": "node",
"version": "4.1.1",
"bitness": 64,
"osx_url": "node-v4.1.1-darwin-x64.tar.gz",
"windows_url": "node_4.1.1_64bit.zip",
"linux_url": "node-v4.1.1-linux-x64.tar.gz",
"activated_path": "%installation_dir%/bin",
"activated_cfg": "NODE_JS='%installation_dir%/bin/node'"
},
{
"id": "python",
"version": "2.7.5.1",
"bitness": 32,
"windows_url": "python_2.7.5.1_32bit.zip",
"activated_path": "%installation_dir%",
"activated_cfg": "PYTHON='%installation_dir%/python%.exe%'",
"is_old": true
},
{
"id": "python",
"version": "2.7.5",
"bitness": 64,
"windows_url": "python_2.7.5_64bit.zip",
"activated_path": "%installation_dir%",
"activated_cfg": "PYTHON='%installation_dir%/python%.exe%'",
"is_old": true
},
{
"id": "python",
"version": "2.7.5.3",
"bitness": 32,
"windows_url": "python_2.7.5.3_32bit.zip",
"activated_path": "%installation_dir%",
"activated_cfg": "PYTHON='%installation_dir%/python%.exe%'"
},
{
"id": "python",
"version": "2.7.5.3",
"bitness": 64,
"windows_url": "python_2.7.5.3_64bit.zip",
"activated_path": "%installation_dir%",
"activated_cfg": "PYTHON='%installation_dir%/python%.exe%'"
},
{
"id": "java",
"version": "7.45",
"bitness": 32,
"windows_url": "portable_jre_7_update_45_32bit.zip",
"activated_path": "%installation_dir%/bin",
"activated_env": "JAVA_HOME=%installation_dir%",
"activated_cfg": "JAVA='%installation_dir%/bin/java%.exe%'"
},
{
"id": "java",
"version": "7.45",
"bitness": 64,
"windows_url": "portable_jre_7_update_45_64bit.zip",
"activated_path": "%installation_dir%/bin",
"activated_env": "JAVA_HOME=%installation_dir%",
"activated_cfg": "JAVA='%installation_dir%/bin/java%.exe%'"
},
{
"id": "spidermonkey",
"version": "27.0.1",
"bitness": 64,
"windows_url": "spidermonkey-27.0.1.zip",
"osx_url": "spidermonkey-27.0.1.tar.gz",
"activated_path": "%installation_dir%",
"activated_cfg": "SPIDERMONKEY_ENGINE='%installation_dir%/js%.exe%'",
"is_old": true
},
{
"id": "spidermonkey",
"version": "nightly-2014-03-13",
"bitness": 64,
"windows_url": "spidermonkey-nightly-2014-03-13.zip",
"osx_url": "spidermonkey-nightly-2014-03-13.tar.gz",
"activated_path": "%installation_dir%",
"activated_cfg": "SPIDERMONKEY_ENGINE='%installation_dir%/js%.exe%'",
"is_old": true
},
{
"id": "spidermonkey",
"version": "30.0.0",
"bitness": 64,
"windows_url": "spidermonkey-30.0.0.zip",
"osx_url": "spidermonkey-30.0.0.tar.gz",
"activated_path": "%installation_dir%",
"activated_cfg": "SPIDERMONKEY_ENGINE='%installation_dir%/js%.exe%'",
"is_old": true
},
{
"id": "spidermonkey",
"version": "37.0.1",
"bitness": 64,
"windows_url": "spidermonkey-37.0.1_64bit.zip",
"osx_url": "spidermonkey-37.0.1_64bit.tar.gz",
"activated_path": "%installation_dir%",
"activated_cfg": "SPIDERMONKEY_ENGINE='%installation_dir%/js%.exe%'"
},
{
"id": "spidermonkey",
"version": "nightly-2015-04-12",
"bitness": 64,
"windows_url": "spidermonkey-nightly-2015-04-12_64bit.zip",
"osx_url": "spidermonkey-nightly-2015-04-12_64bit.tar.gz",
"activated_path": "%installation_dir%",
"activated_cfg": "SPIDERMONKEY_ENGINE='%installation_dir%/js%.exe%'"
},
{
"id": "git",
"version": "1.8.3",
"windows_url": "git_1.8.3.zip",
"activated_path": "%installation_dir%/bin;%installation_dir%/cmd",
"activated_cfg": "EMSDK_GIT='%installation_dir%'",
"is_old": true
},
{
"id": "git",
"version": "1.9.4",
"windows_url": "git_1.9.4.zip",
"activated_path": "%installation_dir%/bin;%installation_dir%/cmd",
"activated_cfg": "EMSDK_GIT='%installation_dir%'"
},
{
"id": "emscripten",
"version": "1.5.6",
"windows_url": "emscripten_1.5.6.zip",
"unix_url": "emscripten_1.5.6.tar.gz",
"activated_cfg": "EMSCRIPTEN_ROOT='%installation_dir%'",
"activated_path": "%installation_dir%",
"activated_env": "EMSCRIPTEN=%installation_dir%",
"is_old": true
},
{
"id": "emscripten",
"version": "1.7.1",
"windows_url": "emscripten-1.7.1.zip",
"unix_url": "emscripten-1.7.1.tar.gz",
"activated_cfg": "EMSCRIPTEN_ROOT='%installation_dir%'",
"activated_path": "%installation_dir%",
"activated_env": "EMSCRIPTEN=%installation_dir%",
"is_old": true
},
{
"id": "emscripten",
"version": "1.7.8",
"windows_url": "emscripten-1.7.8.zip",
"unix_url": "emscripten-1.7.8.tar.gz",
"activated_cfg": "EMSCRIPTEN_ROOT='%installation_dir%'",
"activated_path": "%installation_dir%",
"activated_env": "EMSCRIPTEN=%installation_dir%",
"is_old": true
},
{
"id": "emscripten",
"version": "1.8.2",
"windows_url": "emscripten-1.8.2.zip",
"unix_url": "emscripten-1.8.2.tar.gz",
"activated_cfg": "EMSCRIPTEN_ROOT='%installation_dir%'",
"activated_path": "%installation_dir%",
"activated_env": "EMSCRIPTEN=%installation_dir%",
"is_old": true
},
{
"id": "emscripten",
"version": "1.9.5",
"windows_url": "emscripten-1.9.5.zip",
"unix_url": "emscripten-1.9.5.tar.gz",
"activated_cfg": "EMSCRIPTEN_ROOT='%installation_dir%'",
"activated_path": "%installation_dir%",
"activated_env": "EMSCRIPTEN=%installation_dir%",
"is_old": true
},
{
"id": "emscripten",
"version": "1.10.4",
"windows_url": "emscripten-1.10.4.zip",
"unix_url": "emscripten-1.10.4.tar.gz",
"activated_cfg": "EMSCRIPTEN_ROOT='%installation_dir%'",
"activated_path": "%installation_dir%",
"activated_env": "EMSCRIPTEN=%installation_dir%",
"is_old": true
},
{
"id": "emscripten",
"version": "1.12.0",
"windows_url": "emscripten-1.12.0.zip",
"unix_url": "emscripten-1.12.0.tar.gz",
"activated_cfg": "EMSCRIPTEN_ROOT='%installation_dir%'",
"activated_path": "%installation_dir%",
"activated_env": "EMSCRIPTEN=%installation_dir%",
"is_old": true
},
{
"id": "emscripten",
"version": "1.13.0",
"windows_url": "emscripten-1.13.0.zip",
"unix_url": "emscripten-1.13.0.tar.gz",
"activated_cfg": "EMSCRIPTEN_ROOT='%installation_dir%'",
"activated_path": "%installation_dir%",
"activated_env": "EMSCRIPTEN=%installation_dir%",
"is_old": true
},
{
"id": "emscripten",
"version": "1.13.1",
"windows_url": "emscripten-1.13.1.zip",
"unix_url": "emscripten-1.13.1.tar.gz",
"activated_cfg": "EMSCRIPTEN_ROOT='%installation_dir%'",
"activated_path": "%installation_dir%",
"activated_env": "EMSCRIPTEN=%installation_dir%",
"is_old": true
},
{
"id": "emscripten",
"version": "1.16.0",
"windows_url": "emscripten-1.16.0.zip",
"unix_url": "emscripten-1.16.0.tar.gz",
"activated_cfg": "EMSCRIPTEN_ROOT='%installation_dir%'",
"activated_path": "%installation_dir%",
"activated_env": "EMSCRIPTEN=%installation_dir%",
"is_old": true
},
{
"id": "emscripten",
"version": "1.21.0",
"windows_url": "emscripten-1.21.0.zip",
"unix_url": "emscripten-1.21.0.tar.gz",
"activated_cfg": "EMSCRIPTEN_ROOT='%installation_dir%'",
"activated_path": "%installation_dir%",
"activated_env": "EMSCRIPTEN=%installation_dir%",
"is_old": true
},
{
"id": "emscripten",
"version": "1.22.0",
"windows_url": "emscripten-1.22.0.zip",
"unix_url": "emscripten-1.22.0.tar.gz",
"activated_cfg": "EMSCRIPTEN_ROOT='%installation_dir%'",
"activated_path": "%installation_dir%",
"activated_env": "EMSCRIPTEN=%installation_dir%",
"is_old": true
},
{
"id": "emscripten",
"version": "1.25.0",
"windows_url": "emscripten-1.25.0.zip",
"unix_url": "emscripten-1.25.0.tar.gz",
"activated_cfg": "EMSCRIPTEN_ROOT='%installation_dir%'",
"activated_path": "%installation_dir%",
"activated_env": "EMSCRIPTEN=%installation_dir%",
"is_old": true
},
{
"id": "emscripten",
"version": "1.27.0",
"windows_url": "emscripten-1.27.0.zip",
"unix_url": "emscripten-1.27.0.tar.gz",
"activated_cfg": "EMSCRIPTEN_ROOT='%installation_dir%'",
"activated_path": "%installation_dir%",
"activated_env": "EMSCRIPTEN=%installation_dir%",
"is_old": true
},
{
"id": "emscripten",
"version": "1.29.0",
"windows_url": "emscripten-1.29.0.zip",
"unix_url": "emscripten-1.29.0.tar.gz",
"activated_cfg": "EMSCRIPTEN_ROOT='%installation_dir%'",
"activated_path": "%installation_dir%",
"activated_env": "EMSCRIPTEN=%installation_dir%",
"is_old": true
},
{
"id": "emscripten",
"version": "1.30.0",
"windows_url": "emscripten-1.30.0.zip",
"unix_url": "emscripten-1.30.0.tar.gz",
"activated_cfg": "EMSCRIPTEN_ROOT='%installation_dir%'",
"activated_path": "%installation_dir%",
"activated_env": "EMSCRIPTEN=%installation_dir%"
},
{
"id": "emscripten",
"version": "1.34.1",
"windows_url": "emscripten-1.34.1.zip",
"unix_url": "emscripten-1.34.1.tar.gz",
"activated_cfg": "EMSCRIPTEN_ROOT='%installation_dir%'",
"activated_path": "%installation_dir%",
"activated_env": "EMSCRIPTEN=%installation_dir%"
},
{
"id": "emscripten",
"version": "1.35.0",
"windows_url": "emscripten-1.35.0.zip",
"unix_url": "emscripten-1.35.0.tar.gz",
"activated_cfg": "EMSCRIPTEN_ROOT='%installation_dir%'",
"activated_path": "%installation_dir%",
"activated_env": "EMSCRIPTEN=%installation_dir%"
},
{
"id": "emscripten",
"version": "tag-%tag%",
"bitness": 32,
"append_bitness": false,
"windows_url": "https://github.com/kripken/emscripten/archive/%tag%.zip",
"unix_url": "https://github.com/kripken/emscripten/archive/%tag%.tar.gz",
"zipfile_prefix": "emscripten-e",
"activated_cfg": "EMSCRIPTEN_ROOT='%installation_dir%';EMSCRIPTEN_NATIVE_OPTIMIZER='%installation_dir%_32bit_optimizer/%cmake_build_type_on_win%optimizer%.exe%'",
"activated_path": "%installation_dir%",
"activated_env": "EMSCRIPTEN=%installation_dir%",
"cmake_build_type": "RelWithDebInfo",
"custom_install_script": "build_optimizer",
"custom_is_installed_script": "is_optimizer_installed",
"custom_uninstall_script": "uninstall_optimizer"
},
{
"id": "emscripten",
"version": "tag-%tag%",
"bitness": 64,
"append_bitness": false,
"windows_url": "https://github.com/kripken/emscripten/archive/%tag%.zip",
"unix_url": "https://github.com/kripken/emscripten/archive/%tag%.tar.gz",
"activated_cfg": "EMSCRIPTEN_ROOT='%installation_dir%';EMSCRIPTEN_NATIVE_OPTIMIZER='%installation_dir%_64bit_optimizer/%cmake_build_type_on_win%optimizer%.exe%'",
"activated_path": "%installation_dir%",
"activated_env": "EMSCRIPTEN=%installation_dir%",
"cmake_build_type": "RelWithDebInfo",
"custom_install_script": "build_optimizer",
"custom_is_installed_script": "is_optimizer_installed",
"custom_uninstall_script": "uninstall_optimizer"
},
{
"id": "emscripten",
"version": "incoming",
"bitness": 32,
"append_bitness": false,
"url": "https://github.com/kripken/emscripten/",
"git_branch": "incoming",
"activated_cfg": "EMSCRIPTEN_ROOT='%installation_dir%';EMSCRIPTEN_NATIVE_OPTIMIZER='%installation_dir%_32bit_optimizer/%cmake_build_type_on_win%optimizer%.exe%'",
"activated_path": "%installation_dir%",
"activated_env": "EMSCRIPTEN=%installation_dir%",
"cmake_build_type": "RelWithDebInfo",
"custom_install_script": "build_optimizer",
"custom_is_installed_script": "is_optimizer_installed",
"custom_uninstall_script": "uninstall_optimizer"
},
{
"id": "emscripten",
"version": "master",
"bitness": 32,
"append_bitness": false,
"url": "https://github.com/kripken/emscripten/",
"git_branch": "master",
"activated_cfg": "EMSCRIPTEN_ROOT='%installation_dir%';EMSCRIPTEN_NATIVE_OPTIMIZER='%installation_dir%_32bit_optimizer/%cmake_build_type_on_win%optimizer%.exe%'",
"activated_path": "%installation_dir%",
"activated_env": "EMSCRIPTEN=%installation_dir%",
"cmake_build_type": "Release",
"custom_install_script": "build_optimizer",
"custom_is_installed_script": "is_optimizer_installed",
"custom_uninstall_script": "uninstall_optimizer"
},
{
"id": "emscripten",
"version": "incoming",
"bitness": 64,
"append_bitness": false,
"url": "https://github.com/kripken/emscripten/",
"git_branch": "incoming",
"activated_cfg": "EMSCRIPTEN_ROOT='%installation_dir%';EMSCRIPTEN_NATIVE_OPTIMIZER='%installation_dir%_64bit_optimizer/%cmake_build_type_on_win%optimizer%.exe%'",
"activated_path": "%installation_dir%",
"activated_env": "EMSCRIPTEN=%installation_dir%",
"cmake_build_type": "RelWithDebInfo",
"custom_install_script": "build_optimizer",
"custom_is_installed_script": "is_optimizer_installed",
"custom_uninstall_script": "uninstall_optimizer"
},
{
"id": "emscripten",
"version": "master",
"bitness": 64,
"append_bitness": false,
"url": "https://github.com/kripken/emscripten/",
"git_branch": "master",
"activated_cfg": "EMSCRIPTEN_ROOT='%installation_dir%';EMSCRIPTEN_NATIVE_OPTIMIZER='%installation_dir%_64bit_optimizer/%cmake_build_type_on_win%optimizer%.exe%'",
"activated_path": "%installation_dir%",
"activated_env": "EMSCRIPTEN=%installation_dir%",
"cmake_build_type": "Release",
"custom_install_script": "build_optimizer",
"custom_is_installed_script": "is_optimizer_installed",
"custom_uninstall_script": "uninstall_optimizer"
},
{
"id": "vs-tool",
"version": "0.9.0",
"windows_url": "vs-tool_0.9.0.zip",
"windows_install_path": "%MSBuildPlatformsDir%/Emscripten",
"is_old": true
},
{
"id": "vs-tool",
"version": "0.9.1",
"windows_url": "vs-tool_0.9.1.zip",
"windows_install_path": "%MSBuildPlatformsDir%/Emscripten",
"is_old": true
},
{
"id": "vs-tool",
"version": "0.9.2",
"windows_url": "vs-tool_0.9.2.zip",
"windows_install_path": "%MSBuildPlatformsDir%/Emscripten",
"is_old": true
},
{
"id": "vs-tool",
"version": "0.9.3",
"windows_url": "vs-tool_0.9.3.zip",
"windows_install_path": "%MSBuildPlatformsDir%/Emscripten",
"is_old": true
},
{
"id": "vs-tool",
"version": "0.9.4",
"windows_url": "vs-tool_0.9.4.zip",
"windows_install_path": "%MSBuildPlatformsDir%/Emscripten"
},
{
"id": "crunch",
"version": "1.03",
"windows_url": "crunch_1.03.zip",
"activated_cfg": "CRUNCH='%installation_dir%/crunch.exe'",
"activated_path": "%installation_dir%"
},
{
"id": "crunch",
"version": "1.04",
"osx_url": "crunch_osx_1.04.tar.gz",
"activated_cfg": "CRUNCH='%installation_dir%/crunch'",
"activated_path": "%installation_dir%"
},
{
"id": "mingw",
"version": "4.6.2",
"bitness": 32,
"windows_url": "mingw_4.6.2_32bit.zip",
"activated_cfg": "MINGW_ROOT='%installation_dir%'",
"activated_path": "%installation_dir%"
}
],
"sdks": [
{
"version": "incoming",
"bitness": 32,
"uses": ["clang-incoming-32bit", "node-4.1.1-32bit", "python-2.7.5.3-32bit", "java-7.45-32bit", "emscripten-incoming-32bit"],
"os": "win"
},
{
"version": "incoming",
"bitness": 64,
"uses": ["clang-incoming-64bit", "node-4.1.1-64bit", "python-2.7.5.3-64bit", "java-7.45-64bit", "emscripten-incoming-64bit"],
"os": "win"
},
{
"version": "incoming",
"bitness": 64,
"uses": ["clang-incoming-64bit", "node-4.1.1-64bit", "emscripten-incoming-64bit"],
"os": "osx"
},
{
"version": "incoming",
"bitness": 32,
"uses": ["clang-incoming-32bit", "node-4.1.1-32bit", "emscripten-incoming-32bit"],
"os": "linux"
},
{
"version": "incoming",
"bitness": 64,
"uses": ["clang-incoming-64bit", "node-4.1.1-64bit", "emscripten-incoming-64bit"],
"os": "linux"
},
{
"version": "master",
"bitness": 32,
"uses": ["clang-master-32bit", "node-4.1.1-32bit", "python-2.7.5.3-32bit", "java-7.45-32bit", "emscripten-master-32bit"],
"os": "win"
},
{
"version": "master",
"bitness": 64,
"uses": ["clang-master-64bit", "node-4.1.1-64bit", "python-2.7.5.3-64bit", "java-7.45-64bit", "emscripten-master-64bit"],
"os": "win"
},
{
"version": "master",
"bitness": 64,
"uses": ["clang-master-64bit", "node-4.1.1-64bit", "emscripten-master-64bit"],
"os": "osx"
},
{
"version": "master",
"bitness": 32,
"uses": ["clang-master-32bit", "node-4.1.1-32bit", "emscripten-master-32bit"],
"os": "linux"
},
{
"version": "master",
"bitness": 64,
"uses": ["clang-master-64bit", "node-4.1.1-64bit", "emscripten-master-64bit"],
"os": "linux"
},
{
"version": "tag-%tag%",
"bitness": 32,
"uses": ["clang-tag-e%tag%-32bit", "node-4.1.1-32bit", "python-2.7.5.3-32bit", "java-7.45-32bit", "emscripten-tag-%tag%-32bit"],
"os": "win"
},
{
"version": "tag-%tag%",
"bitness": 64,
"uses": ["clang-tag-e%tag%-64bit", "node-4.1.1-64bit", "python-2.7.5.3-64bit", "java-7.45-64bit", "emscripten-tag-%tag%-64bit"],
"os": "win"
},
{
"version": "tag-%tag%",
"bitness": 32,
"uses": ["clang-tag-e%tag%-32bit", "node-4.1.1-32bit", "emscripten-tag-%tag%-32bit"],
"os": "linux"
},
{
"version": "tag-%tag%",
"bitness": 64,
"uses": ["clang-tag-e%tag%-64bit", "node-4.1.1-64bit", "emscripten-tag-%tag%-64bit"],
"os": "unix"
},
{
"version": "1.5.6",
"bitness": 32,
"uses": ["clang-3.2-32bit", "node-0.10.17-32bit", "python-2.7.5.1-32bit", "java-7.45-32bit", "emscripten-1.5.6"],
"os": "win",
"is_old": true
},
{
"version": "1.5.6",
"bitness": 64,
"uses": ["clang-3.2-64bit", "node-0.10.17-64bit", "python-2.7.5-64bit", "java-7.45-64bit", "emscripten-1.5.6"],
"os": "win",
"is_old": true
},
{
"version": "1.5.6",
"bitness": 64,
"uses": ["clang-3.2-64bit", "node-0.10.18-64bit", "emscripten-1.5.6"],
"os": "osx",
"is_old": true
},
{
"version": "1.7.1",
"bitness": 32,
"uses": ["clang-3.2-32bit", "node-0.10.17-32bit", "python-2.7.5.1-32bit", "java-7.45-32bit", "emscripten-1.7.1"],
"os": "win",
"is_old": true
},
{
"version": "1.7.1",
"bitness": 64,
"uses": ["clang-3.2-64bit", "node-0.10.17-64bit", "python-2.7.5-64bit", "java-7.45-64bit", "emscripten-1.7.1"],
"os": "win",
"is_old": true
},
{
"version": "1.7.1",
"bitness": 64,
"uses": ["clang-3.2-64bit", "node-0.10.18-64bit", "emscripten-1.7.1"],
"os": "osx",
"is_old": true
},
{
"version": "1.7.8",
"bitness": 32,
"uses": ["clang-3.2-32bit", "node-0.10.17-32bit", "python-2.7.5.3-32bit", "java-7.45-32bit", "emscripten-1.7.8"],
"os": "win",
"is_old": true
},
{
"version": "1.7.8",
"bitness": 64,
"uses": ["clang-3.2-64bit", "node-0.10.17-64bit", "python-2.7.5.3-64bit", "java-7.45-64bit", "emscripten-1.7.8"],
"os": "win",
"is_old": true
},
{
"version": "1.7.8",
"bitness": 64,
"uses": ["clang-3.2-64bit", "node-0.10.18-64bit", "emscripten-1.7.8"],
"os": "osx",
"is_old": true
},
{
"version": "1.8.2",
"bitness": 32,
"uses": ["clang-3.2-32bit", "node-0.10.17-32bit", "python-2.7.5.3-32bit", "emscripten-1.8.2"],
"os": "win",
"is_old": true
},
{
"version": "1.8.2",
"bitness": 64,
"uses": ["clang-3.2-64bit", "node-0.10.17-64bit", "python-2.7.5.3-64bit", "emscripten-1.8.2"],
"os": "win",
"is_old": true
},
{
"version": "1.8.2",
"bitness": 64,
"uses": ["clang-3.2-64bit", "node-0.10.18-64bit", "emscripten-1.8.2"],
"os": "osx",
"is_old": true
},
{
"version": "1.9.5",
"bitness": 32,
"uses": ["clang-3.2-32bit", "node-0.10.17-32bit", "python-2.7.5.3-32bit", "emscripten-1.9.5"],
"os": "win",
"is_old": true
},
{
"version": "1.9.5",
"bitness": 64,
"uses": ["clang-3.2-64bit", "node-0.10.17-64bit", "python-2.7.5.3-64bit", "emscripten-1.9.5"],
"os": "win",
"is_old": true
},
{
"version": "1.9.5",
"bitness": 64,
"uses": ["clang-3.2-64bit", "node-0.10.18-64bit", "emscripten-1.9.5"],
"os": "osx",
"is_old": true
},
{
"version": "1.10.4",
"bitness": 32,
"uses": ["clang-3.2-32bit", "node-0.10.17-32bit", "python-2.7.5.3-32bit", "emscripten-1.10.4"],
"os": "win",
"is_old": true
},
{
"version": "1.10.4",
"bitness": 64,
"uses": ["clang-3.2-64bit", "node-0.10.17-64bit", "python-2.7.5.3-64bit", "emscripten-1.10.4"],
"os": "win",
"is_old": true
},
{
"version": "1.10.4",
"bitness": 64,
"uses": ["clang-3.2-64bit", "node-0.10.18-64bit", "emscripten-1.10.4"],
"os": "osx",
"is_old": true
},
{
"version": "1.12.0",
"bitness": 32,
"uses": ["clang-3.2-32bit", "node-0.10.17-32bit", "python-2.7.5.3-32bit", "emscripten-1.12.0"],
"os": "win",
"is_old": true
},
{
"version": "1.12.0",
"bitness": 64,
"uses": ["clang-3.2-64bit", "node-0.10.17-64bit", "python-2.7.5.3-64bit", "emscripten-1.12.0"],
"os": "win",
"is_old": true
},
{
"version": "1.12.0",
"bitness": 64,
"uses": ["clang-3.2-64bit", "node-0.10.18-64bit", "emscripten-1.12.0"],
"os": "osx",
"is_old": true
},
{
"version": "1.13.0",
"bitness": 64,
"uses": ["clang-e1.13.0-64bit", "node-0.10.17-64bit", "python-2.7.5.3-64bit", "emscripten-1.13.0"],
"os": "win",
"is_old": true
},
{
"version": "1.13.0",
"bitness": 64,
"uses": ["clang-e1.13.0-64bit", "node-0.10.18-64bit", "emscripten-1.13.0"],
"os": "osx",
"is_old": true
},
{
"version": "1.13.1",
"bitness": 64,
"uses": ["clang-e1.13.1-64bit", "node-0.10.17-64bit", "python-2.7.5.3-64bit", "emscripten-1.13.1"],
"os": "win",
"is_old": true
},
{
"version": "1.13.1",
"bitness": 64,
"uses": ["clang-e1.13.1-64bit", "node-0.10.18-64bit", "emscripten-1.13.1"],
"os": "osx",
"is_old": true
},
{
"version": "1.16.0",
"bitness": 64,
"uses": ["clang-e1.16.0-64bit", "node-0.10.17-64bit", "python-2.7.5.3-64bit", "emscripten-1.16.0"],
"os": "win",
"is_old": true
},
{
"version": "1.16.0",
"bitness": 64,
"uses": ["clang-e1.16.0-64bit", "node-0.10.18-64bit", "emscripten-1.16.0"],
"os": "osx",
"is_old": true
},
{
"version": "1.21.0",
"bitness": 64,
"uses": ["clang-e1.21.0-64bit", "node-0.10.17-64bit", "python-2.7.5.3-64bit", "emscripten-1.21.0"],
"os": "win",
"is_old": true
},
{
"version": "1.21.0",
"bitness": 64,
"uses": ["clang-e1.21.0-64bit", "node-0.10.18-64bit", "emscripten-1.21.0"],
"os": "osx",
"is_old": true
},
{
"version": "1.22.0",
"bitness": 64,
"uses": ["clang-e1.22.0-64bit", "node-0.10.17-64bit", "python-2.7.5.3-64bit", "emscripten-1.22.0"],
"os": "win",
"is_old": true
},
{
"version": "1.22.0",
"bitness": 64,
"uses": ["clang-e1.22.0-64bit", "node-0.10.18-64bit", "emscripten-1.22.0"],
"os": "osx",
"is_old": true
},
{
"version": "1.25.0",
"bitness": 64,
"uses": ["clang-e1.25.0-64bit", "node-0.10.17-64bit", "python-2.7.5.3-64bit", "emscripten-1.25.0"],
"os": "win",
"is_old": true
},
{
"version": "1.25.0",
"bitness": 64,
"uses": ["clang-e1.25.0-64bit", "node-0.10.18-64bit", "emscripten-1.25.0"],
"os": "osx",
"is_old": true
},
{
"version": "1.27.0",
"bitness": 64,
"uses": ["clang-e1.27.0-64bit", "node-0.10.17-64bit", "python-2.7.5.3-64bit", "emscripten-1.27.0"],
"os": "win",
"is_old": true
},
{
"version": "1.27.0",
"bitness": 64,
"uses": ["clang-e1.27.0-64bit", "node-0.10.18-64bit", "emscripten-1.27.0"],
"os": "osx",
"is_old": true
},
{
"version": "1.29.0",
"bitness": 64,
"uses": ["clang-e1.29.0-64bit", "node-0.10.17-64bit", "python-2.7.5.3-64bit", "emscripten-1.29.0"],
"os": "win",
"is_old": true
},
{
"version": "1.29.0",
"bitness": 64,
"uses": ["clang-e1.29.0-64bit", "node-0.10.18-64bit", "emscripten-1.29.0"],
"os": "osx",
"is_old": true
},
{
"version": "1.30.0",
"bitness": 64,
"uses": ["clang-e1.30.0-64bit", "node-0.12.2-64bit", "python-2.7.5.3-64bit", "emscripten-1.30.0"],
"os": "win"
},
{
"version": "1.30.0",
"bitness": 64,
"uses": ["clang-e1.30.0-64bit", "node-0.12.2-64bit", "emscripten-1.30.0"],
"os": "osx"
},
{
"version": "1.34.1",
"bitness": 64,
"uses": ["clang-e1.34.1-64bit", "node-0.12.2-64bit", "python-2.7.5.3-64bit", "emscripten-1.34.1"],
"os": "win"
},
{
"version": "1.34.1",
"bitness": 64,
"uses": ["clang-e1.34.1-64bit", "node-0.12.2-64bit", "emscripten-1.34.1"],
"os": "osx"
},
{
"version": "1.35.0",
"bitness": 64,
"uses": ["clang-e1.35.0-64bit", "node-4.1.1-64bit", "python-2.7.5.3-64bit", "emscripten-1.35.0"],
"os": "win"
},
{
"version": "1.35.0",
"bitness": 64,
"uses": ["clang-e1.35.0-64bit", "node-4.1.1-64bit", "emscripten-1.35.0"],
"os": "osx"
}
]
}
Answering after a long time - sorry about that. Looks now emsdk 1.12.0 only exists on windows. Can i ask you for a build of this repo? @MasGaNo
@MasGaNo Or maybe a emsdk of this version? Just wanting to build this version
Good day how to built emsdk 1.12.0 for linux(Ubuntu/Debian)?
IMO it's useless trying to get ioq3ded compiled via emscripten (bad for debugging, worse performance etc.). We can simply use the native udp dedi server and "websockify" it, like:
node proxy.js
var Buffer = require('buffer').Buffer;
var dgram = require('dgram');
var WebSocketServer = require('ws').Server;
var wss = new WebSocketServer({port: 8080});
var SERVER_IP = '127.0.0.1'
var SERVER_PORT = 27961
wss.on('connection', function(error) {
console.log("error", error);
});
wss.on('connection', function(ws) {
try {
console.log("on connection....", ws);
//Create a udp socket for this websocket connection
var udpClient = dgram.createSocket('udp4');
//ws.send("HAIIII");
//When a message is received from udp server send it to the ws client
udpClient.on('message', function(msg, rinfo) {
//console.log("udp -> ws", msg);
try {
ws.send(msg);
} catch(e) { console.log("ws.send(msg)") }
//ws.send("test");
});
//When a message is received from ws client send it to udp server.
ws.on('message', function(message) {
var msgBuff = new Buffer(message);
try {
udpClient.send(msgBuff, 0, msgBuff.length, SERVER_PORT, SERVER_IP);
} catch(e) { console.log("udpClient.send") }
//console.log("ws -> udp", message);
});
} catch (e) {
console.log(e);
}
});
That kills alot of the "hard" emscripten stuff like running the VM's and would make keeping this project up to date way easier. People only care about playing in browser, right? No need to do the serverside stuff.
ATM my plan is to make a FFI interface for ioquake3 (make native shared library out of ioq3), so we could reuse any kind of scripting language (nodejs, julia, whatever) to use their websocket implementations, since:
- this simple nodejs proxy can't tell the real ip addresses e.g. in
/status
command - the proxy process is just useless overhead
- cba to implement websocket aids in C
- able to debug the ioq3 dedi server via Visual Studio by simply attaching to the ffi process
@kungfooman I agree with you. That approach works perfectly, however, I am unable to broadcast heartbeat to the master server. Please note that I did indeed change the master server to master.quakejs.com, but for some reason it doesn't seem to appear on the website. (also, the port is forwarded correctly, both for the native server and the node proxy, and running the old prebuilt ioq3ded.js works fine). Do you perhaps have any suggestion on why this isn't working.
@lklacar Oh well, that was more than a year ago. In that time I turned the latest ioq3 into WebAssembly myself and learned a great deal. But my project diverged a lot from Quake3. Pretty much I wanna do my own game.
I wouldn't suggest the FFI way anymore, because it:
- drags in dependencies, like the ffi/fastcall module
- those dependencies don't compile everywhere flawlessly (depends on OS, installed compilers, then all the issues with 32bit vs 64bit etc.)
- if something in the .dll crashes, the complete process dies
WebAssembly is really nice in this way, when something isn't allowed "to execute", then only a simple exception is thrown. No big deal to catch it, print it, fix it later and just move on. It also has no dependencies, native builtin into Node and all browsers. "Build once, works everywhere"
In the last year zturtleman worked a lot on the GLES1/GLES2 stuff in ioquake3, mostly for his RasperryPI. But the same code you could use now for WebGL (which is GLES2). I don't know how much work you are willing to invest.
@kungfooman Thanks for the suggestion. I don't really have much experience with emscripten, but I'll see what I can do. I'll post my results once I'm done.
@lklacar nice, you can also join ioquake3 discord http://wiki.ioquake3.org/Live_Chat
anyone have built project with latest emscripten version? how to resolve Runtime.generateStructInfo
problem?
Changing Makefile to $(B)/client/cl_console.o : ../.git/modules/ioq3/index
worked.
Getting error Assigning a non-existent settings attribute "OUTLINING_LIMIT"
now.
Got it working
https://github.com/briancullinan/planet_quake/
@megamindbrian Thank you very much. Now it compiles ;-). However, I did not manage to start a game in my browser. I used the webserver files from quakejs and started a server using node bin/web.js --config ./web.json
. In the web console, I get the following error message: ReferenceError: ioq3 is not defined 0.0.0.0:8080:97:4
. Any hints on how to solve this issue?
Got a new build out on https://quake.games if anyone wants to pull just the static JS files.
https://quake.games/?set%20name%20MyName
Got it working
@briancullinan Hi - would you mind posting some details of how you built your emscripten environment to get a successful build? I have tried many combinations of your repo @ at the given commit and the inolen's repo with the latest emsdk, the emscripten/llvm etc versions in the Ubuntu 18.04 repos and emscripten 1.12.0 (the last with either the other parts of the latest sdk or the repo version of llvm).
If you have everything in a single emsdk folder and could zip and post somewhere that would be even better (any OS).
@jimnarey Sorry it took so long to get back to you. We are currently working on building a dockerfile with everything configured. If you are looking at the latest master branch here: https://github.com/briancullinan/planet_quake/
That includes lazily loading graphics. It works pretty well, the first 30 seconds are pretty bad, but the benefit is, it only loads the graphics and sounds used for that specific round. No repacking necessary, which means faster startup times. It also includes a proxy server, a new repack script, new options for starting an HTTP server with live reloading.
Basic steps are as follows:
install your OS build-essentials and headers
npm install
npm run install:emsdk
make PLATFORM=js
npm run repack -- --no-graph /path/to/baseq3
npm run start -- -R /assets/baseq3-cc /path/to/temp/baseq3-cc
Then open your browser at http://localhost:8080/?set%20fs_basegame%20baseq3-cc&set%20fs_game%20baseq3-cc
EDIT: I am currently in the process of converting Quake3e to emscripten, might be a little more stable and faster. I can get 125 FPS pretty easily, even 160. EDIT: I should add, I am using native ioq3ded build. I have added ioquake3.js to bin directory if you want to skip building and just run it with npm run start.
Getting error
Assigning a non-existent settings attribute "OUTLINING_LIMIT"
now.
How did you fix that? I am also getting this error
@Locustv2 Remove -s OUTLINING_LIMIT=20000
from the Makefile line ~917
@briancullinan which version of emscripten did you use? I am using the latest and now, after removing the outlining, i am getting:
ReferenceError: makeGetSlabs is not defined
@Locustv2 I dug this up for inolen last year. This is the last point that I applied quakejs concepts to newer ioquake3. After this I started removing some designs and eventually switched to Q3e. https://github.com/briancullinan/planet_quake/commit/83a729d1b2dfb0c7bc0c859b3ab6ed2973a8d13c
But even that file, I've already removed the CRC stuff. Ideally, instead of the whole manifest file, we could just download the journal.dat file, and the engine already has the factories to do CRC checking built in. I am disabling the experimental features in my master branch and it should be back to working order https://github.com/briancullinan/planet_quake soon.
@briancullinan okay awesome. i am already having a headache with this emscripten version... it's like a chain of exceptions.
@Locustv2 Completely agree. Emscripten is a huge pain. It might be worth it to remove it altogether and compile to Web Assembly with only the OS calls that are needed implemented in JS.