quakejs icon indicating copy to clipboard operation
quakejs copied to clipboard

Fail to build ioq3ded.js on latest emscripten

Open halton opened this issue 8 years ago • 32 comments

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

halton avatar Apr 05 '16 05:04 halton

Refer to https://github.com/kripken/emscripten/pull/1624, Runtime.generateStructInfo is deprecated, the ioq3/code/sys/sys_common.js need to be updated.

halton avatar Apr 05 '16 08:04 halton

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.

inolen avatar Nov 05 '16 16:11 inolen

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

esikgabi avatar Dec 23 '16 13:12 esikgabi

So, could anyone say, what version of emscripten could be good for this?

Kradre avatar Feb 15 '17 03:02 Kradre

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 avatar Mar 14 '17 07:03 MasGaNo

@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?

Kradre avatar Mar 15 '17 01:03 Kradre

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?

MasGaNo avatar Mar 15 '17 06:03 MasGaNo

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.

Kradre avatar Mar 15 '17 12:03 Kradre

Strange... 😮 Did you already execute this command after downloading this package?:

$> ./emsdk update

MasGaNo avatar Mar 15 '17 12:03 MasGaNo

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.

Kradre avatar Mar 15 '17 12:03 Kradre

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"
  }
  ]
}

MasGaNo avatar Mar 15 '17 14:03 MasGaNo

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

Kradre avatar Jul 20 '17 07:07 Kradre

@MasGaNo Or maybe a emsdk of this version? Just wanting to build this version

Kradre avatar Aug 07 '17 08:08 Kradre

Good day how to built emsdk 1.12.0 for linux(Ubuntu/Debian)?

vladbpython avatar Aug 11 '17 14:08 vladbpython

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:

  1. this simple nodejs proxy can't tell the real ip addresses e.g. in /status command
  2. the proxy process is just useless overhead
  3. cba to implement websocket aids in C
  4. able to debug the ioq3 dedi server via Visual Studio by simply attaching to the ffi process

kungfooman avatar Aug 16 '17 02:08 kungfooman

@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 avatar Oct 23 '18 19:10 lklacar

@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:

  1. drags in dependencies, like the ffi/fastcall module
  2. those dependencies don't compile everywhere flawlessly (depends on OS, installed compilers, then all the issues with 32bit vs 64bit etc.)
  3. 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 avatar Oct 24 '18 07:10 kungfooman

@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 avatar Oct 24 '18 08:10 lklacar

@lklacar nice, you can also join ioquake3 discord http://wiki.ioquake3.org/Live_Chat

kungfooman avatar Oct 24 '18 08:10 kungfooman

anyone have built project with latest emscripten version? how to resolve Runtime.generateStructInfo problem?

a2kas avatar Oct 25 '18 09:10 a2kas

Changing Makefile to $(B)/client/cl_console.o : ../.git/modules/ioq3/index worked.

Getting error Assigning a non-existent settings attribute "OUTLINING_LIMIT" now.

ghost avatar Aug 02 '19 21:08 ghost

Got it working

https://github.com/briancullinan/planet_quake/

ghost avatar Aug 04 '19 04:08 ghost

@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?

matthiasseemoo avatar Aug 05 '19 23:08 matthiasseemoo

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

ghost avatar Aug 17 '19 23:08 ghost

Got it working

briancullinan/ioq3@8d19f86

@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 avatar Feb 18 '20 19:02 jimnarey

@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.

ghost avatar Apr 04 '20 23:04 ghost

Getting error Assigning a non-existent settings attribute "OUTLINING_LIMIT" now.

How did you fix that? I am also getting this error

Locustv2 avatar Mar 24 '21 18:03 Locustv2

@Locustv2 Remove -s OUTLINING_LIMIT=20000 from the Makefile line ~917

ghost avatar Mar 24 '21 18:03 ghost

@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 avatar Mar 24 '21 19:03 Locustv2

@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.

ghost avatar Mar 24 '21 19:03 ghost

@briancullinan okay awesome. i am already having a headache with this emscripten version... it's like a chain of exceptions.

Locustv2 avatar Mar 24 '21 20:03 Locustv2

@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.

briancullinan avatar Mar 24 '21 20:03 briancullinan