Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fail to build ioq3ded.js on latest emscripten #14

Open
halton opened this issue Apr 5, 2016 · 32 comments
Open

Fail to build ioq3ded.js on latest emscripten #14

halton opened this issue Apr 5, 2016 · 32 comments

Comments

@halton
Copy link

halton commented Apr 5, 2016

Build quakejs master code (237acdf) + ioq3 master code (inolen/ioq3@4f7d7bf) with emscripten master code emscripten-core/emscripten@07b8742, 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
Copy link
Author

halton commented Apr 5, 2016

Refer to emscripten-core/emscripten#1624, Runtime.generateStructInfo is deprecated, the ioq3/code/sys/sys_common.js need to be updated.

@inolen
Copy link
Owner

inolen commented Nov 5, 2016

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 inolen closed this as completed Nov 5, 2016
@inolen inolen reopened this Nov 5, 2016
@esikgabi
Copy link

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

@Kradre
Copy link

Kradre commented Feb 15, 2017

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

@MasGaNo
Copy link

MasGaNo commented Mar 14, 2017

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

@Kradre
Copy link

Kradre commented Mar 15, 2017

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

@MasGaNo
Copy link

MasGaNo commented Mar 15, 2017

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?

@Kradre
Copy link

Kradre commented Mar 15, 2017

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.

@MasGaNo
Copy link

MasGaNo commented Mar 15, 2017

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

$> ./emsdk update

@Kradre
Copy link

Kradre commented Mar 15, 2017

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.

@MasGaNo
Copy link

MasGaNo commented Mar 15, 2017

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

@Kradre
Copy link

Kradre commented Jul 20, 2017

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
Copy link

Kradre commented Aug 7, 2017

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

@vladbpython
Copy link

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

@kungfooman
Copy link

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

@lklacar
Copy link

lklacar commented Oct 23, 2018

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

@kungfooman
Copy link

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

@lklacar
Copy link

lklacar commented Oct 24, 2018

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

@kungfooman
Copy link

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

@a2kas
Copy link

a2kas commented Oct 25, 2018

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

@ghost
Copy link

ghost commented Aug 2, 2019

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
Copy link

ghost commented Aug 4, 2019

Got it working

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

@matthiasseemoo
Copy link

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

@ghost
Copy link

ghost commented Aug 17, 2019

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

@jimnarey
Copy link

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

@ghost
Copy link

ghost commented Apr 4, 2020

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

@Locustv2
Copy link

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

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

@ghost
Copy link

ghost commented Mar 24, 2021

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

@Locustv2
Copy link

@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

@ghost
Copy link

ghost commented Mar 24, 2021

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

@Locustv2
Copy link

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

@ghost
Copy link

ghost commented Mar 24, 2021

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

glennhartmann pushed a commit to glennhartmann/quakejs that referenced this issue Aug 31, 2022
Revert "allow https:// and wss:// servers"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests