Subversion Repositories Kolibri OS

Rev

Rev 145 | Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. ForReading = 1
  2. ForWriting = 2
  3. ForAppending = 8
  4. var fso = new ActiveXObject("Scripting.FileSystemObject");
  5. var wsh = new ActiveXObject("WScript.Shell");
  6. function alert(mes){WScript.Echo(mes);return mes}
  7. function debug(obj){for(key in obj)alert('['+key+']="'+obj[key]+'"')}
  8. function getFileContent(filename){
  9.         var file = fso.OpenTextFile(filename, ForReading);
  10.         var content = file.ReadAll();
  11.         file.close();
  12.         return content;
  13. }
  14. function include(filename){
  15.         eval(getFileContent(filename));
  16. }
  17. function Project(filename){
  18.         var text = getFileContent(filename);
  19.         eval("var config = {"+text+"};")
  20.         for(key in config) this[key] = config[key];
  21.         if(!this.files) this.files = [];
  22.         function getFileExt(name){
  23.                 var i = name.lastIndexOf(".");
  24.                 return (i==-1)? "" : name.substr(i);
  25.         }
  26.         this.getFileList = function(folder){
  27.                 var f = fso.GetFolder(folder);
  28.                 var fc = new Enumerator(f.SubFolders);
  29.                 for (; !fc.atEnd(); fc.moveNext())
  30.                 {
  31.                         var name = fc.item()+"";
  32.                         if(name[0]!='.' && !this.isIgnored(name))
  33.                                 this.getFileList(name);
  34.                 }
  35.                 delete fc;
  36.                 fc = new Enumerator(f.Files);
  37.                 for (; !fc.atEnd(); fc.moveNext())
  38.                 {
  39.                         var name = fc.item()+"";
  40.                         if(name[0]!='.' && !this.isIgnored(name))
  41.                                 this.files.push(name);
  42.                 }
  43.         }
  44.         this.clean = function(){
  45.                 var fl = new Enumerator(this.files);
  46.                 var fo;
  47.                 for (; !fl.atEnd(); fl.moveNext()){
  48.                         var file = fl.item()
  49.                         switch(getFileExt(file)){
  50.                         case ".o":
  51.                         case ".s":
  52.                                 fo = fso.GetFile(file);
  53.                                 fo.Delete();
  54.                                 break;
  55.                         }
  56.                 }
  57.                 delete fl;
  58.         }
  59.         var objList = [];
  60.         this.compile_asm = function(filename){
  61.                 var objname = filename.replace(/.\w{1,3}$/,".o");
  62.                 objList.push(objname);
  63.                 if(fso.FileExists(objname)) return;
  64.                 wsh.Run(this.fasm+' "'+filename+'" "'+objname+'"',0,true);
  65.         }
  66.         this.compile_c = function(filename){
  67.                 var objname = filename.replace(/.\w{1,3}$/,".o");
  68.                 objList.push(objname);
  69.                 if(fso.FileExists(objname)) return;
  70.                 var asmname = filename.replace(/.\w{1,3}$/,".s");
  71.                 var command = "";
  72.                 if(!fso.FileExists(asmname)){
  73.                         command = this.gccpath +"\\"+ this.gccexe + " -nostdinc";
  74.                         if(this.include) command += " -I .\\include";
  75.                         command +=" -DGNUC" +' "'+filename + '" -o "' + asmname + '"';
  76.                         wsh.Run("cmd.exe /c "+command, 0, true);
  77.                 }
  78.                 command = this.gccpath +"\\"+ this.asexe +' "'+ asmname +'" -o "'+ objname +'"';
  79.                 wsh.Run("cmd.exe /c "+command, 0, true);
  80.                 command = this.gccpath +"\\"+ this.objcopyexe +' -O elf32-i386 --remove-leading-char "'+ objname +'"';
  81.                 wsh.Run("cmd.exe /c "+command, 0, true);
  82.         }
  83.         this.build = function(){
  84.                 var fl = new Enumerator(this.files);
  85.                 for (; !fl.atEnd(); fl.moveNext()){
  86.                         var file = fl.item()
  87.                         switch(getFileExt(file)){
  88.                                 case ".c": this.compile_c(file);break;
  89.                                 case ".asm": this.compile_asm(file);break;
  90.                                 case ".o": objList.push(file);break;
  91.                         }
  92.                 }
  93.                 delete fl;
  94.                 fl = new Enumerator(objList);
  95.                
  96. /*              var file = fso.CreateTextFile("OBJLIST.TXT", true);
  97.                 file.Write("CREATE "+this.dstpath+'\\'+this.name+".a\r\n");
  98.                 for (; !fl.atEnd(); fl.moveNext()){file.Write("ADDMOD "+fl.item()+"\r\n");}
  99.                 file.Write("SAVE\r\t");
  100.                 file.Close();
  101.                 wsh.Run(this.gccpath+"\\ar.exe -M < OBJLIST.TXT", 0, true);*/
  102.                
  103.                 var ar = wsh.Exec(this.gccpath+"\\ar.exe -M")
  104.                 ar.StdIn.Write("CREATE "+this.dstpath+'\\'+this.name+".a\r\n");
  105.                 for (; !fl.atEnd(); fl.moveNext()){ar.StdIn.Write("ADDMOD "+fl.item()+"\r\n");}
  106.                 ar.StdIn.Write("SAVE\r\t");
  107.         }
  108.         this.rebuild = function(){
  109.                 this.clean();
  110.                 this.build();
  111.         }
  112.         this.isIgnored = function(value){
  113.                 for(var i=0; i<this.ignored.length; i++)
  114.                         if (this.ignored[i]==value||this.ignored[i]==getFileExt(value)) return true;
  115.                 return false;
  116.         }
  117.         this.nothing = function(){alert("Hello")}
  118.         this.getFileList(this.srcpath);
  119. }
  120.  
  121. try{var confFile = WScript.Arguments(1);}catch(e){var confFile = "make.cfg";}
  122. try{var action = WScript.Arguments(0);}catch(e){var action = "build";}
  123.  
  124. var conf = new Project(confFile);
  125. conf[action]();
  126.  
  127. if(conf.autoclean && action != "clean"){conf["clean"]();}
  128. alert("Done");