]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - keystone-rtos/wdtimer.git/blob - build/buildlib.xs
PRSDK-2194: Added RULES_MAKE macro
[keystone-rtos/wdtimer.git] / build / buildlib.xs
1 /******************************************************************************
2  * FILE PURPOSE: Build Library Utilities
3  ******************************************************************************
4  * FILE NAME: buildlib.xs
5  *
6  * DESCRIPTION: 
7  *  This file contains common routines that are used by the various WatchdogTimer 
8  *  components.
9  *
10  * Copyright (C) 2012-2015, Texas Instruments, Inc.
11  *****************************************************************************/
13 /**************************************************************************
14  * FUNCTION NAME : listAllFiles
15  **************************************************************************
16  * DESCRIPTION   :
17  *  Utility function which lists all files with a specific extension 
18  *  present in a directory and any directory inside it.
19  **************************************************************************/
20 function listAllFiles(ext, dir, recurse)
21 {     
22     var srcFile = [];
23     var d;
25     /* If recurse parameter is not specified we default to recursive search. */
26     if (recurse == null)
27         recurse = true;
29     if (dir == undefined) 
30           d = ".";
31     else 
32       d = dir;
34     /* Get access to the current directory. */
35     var file = new java.io.File(d);
37     /* Check if the file exists and it is a directory. */
38     if (file.exists() && file.isDirectory()) 
39     {
40         /* Get a list of all files in the specific directory. */
41         var fileList = file.listFiles();
42         for (var i = 0; i < fileList.length; i++) 
43         {
44             /* Dont add the generated directory 'package' and any of its files 
45              * to the list here. */
46             if (fileList[i].getName().matches("package") == false)
47             {
48                 /* Check if the detected file is a directory */
49                 if (fileList[i].isDirectory())
50                 {
51                     /* We will recurse into the subdirectory only if required to do so. */
52                     if (recurse == true)
53                     {
54                         /* Generate the directory Name in which we will recurse. */ 
55                         var directoryName = d + "/" + fileList[i].getName();
57                         /* Get a list of all files in this directory */
58                         var fileListing = listAllFiles (ext, directoryName, recurse);
59                         if (fileListing != null)
60                         {
61                             /* Return a list of all file names in the directory. */
62                             for (var j = 0 ; j < fileListing.length; j++) 
63                                 srcFile[srcFile.length++] = fileListing[j];
64                         }
65                     }
66                 }
67                 else
68                 {
69                     /* This was a file. Check if the file name matches the extension */
70                     if (fileList[i].getName().endsWith(ext) == true)
71                         srcFile[srcFile.length++] = d + "/" + fileList[i].getName();
72                 }
73             }
74         }
76         return srcFile;
77     }
78     return null;
79 }
82 function createMake(makefile)
83 {
84     /* Create the main make file */
85     var fileModule = xdc.module('xdc.services.io.File');
86     if(makefile==undefined)
87     {
88       try{
89           makefile = fileModule.open("makefile", "w");
90          } catch (ex)
91          {
92            print("makefile cannot be written to. Please check Writing Permissions.");
93            java.lang.System.exit(1);
94          }   
95     
96       Pkg.makePrologue += "\ninclude makefile\n"; 
97          
98       Pkg.makeEpilogue += "\nclean::\n\t-$(RM)  makefile\n";
99       makefile.writeLine("#*******************************************************************************");
100       makefile.writeLine("#* FILE PURPOSE: Top level makefile for Creating Component Libraries");
101       makefile.writeLine("#*******************************************************************************");
102       makefile.writeLine("#* FILE NAME: makefile");
103       makefile.writeLine("#*");
104       makefile.writeLine("#* DESCRIPTION: Defines Compiler tools paths, libraries , Build Options ");
105       makefile.writeLine("#*");
106       makefile.writeLine("#*");
107       makefile.writeLine("#*******************************************************************************");
108       makefile.writeLine("#*");
109       makefile.writeLine("# (Mandatory) Specify where various tools are installed.");
111       var file = xdc.module('xdc.services.io.File');
112     
113       
114       makefile.writeLine("\n# Output for prebuilt generated libraries");
115       makefile.writeLine("export LIBDIR ?= ./lib");
116       /* use sectti from path */
117       makefile.writeLine("export SECTTI ?= sectti");
119       /* Create INCDIR from XDCPATH */
120     
121       /* copy the environment array from the current environment */
122       var env   = java.lang.System.getenv();
123       var getxdcpath=String(java.lang.System.getenv("XDCPATH"));
124       getxdcpath= getxdcpath.replace(/\\/g,"/");
125       var keys  = env.keySet().toArray();
126       var key;
127       var stat={};
128       var env_j=[];
129       var listxdcpath = new Array();
130       for (var i = 0; i < keys.length; i++) {
131            key = String(keys[i]);
132            if((key.match("INSTALL_PATH")) || (key.match("INSTALLDIR")))
133            {
134              var keyPath=String(env.get(key));
135              keyPath=keyPath.replace(/\\/g,"/");
136              var file = xdc.module('xdc.services.io.File');
137              keyPath=file.getDOSPath(keyPath);
138              if(getxdcpath.toString().match(keyPath))
139              {
140                  listxdcpath.push({keyname: key,keypath: keyPath});
141                  while(getxdcpath.toString().match(keyPath))
142                  {
143                    getxdcpath=getxdcpath.toString().replace(keyPath,"$("+key+")");
144                  }
145              }
146            }
147     
148      }
149        var pkgroot="..";
150        for (var i = Pkg.name.split('.').length; i > 1; i--) {
151               pkgroot+="/..";
152           }
153         
154       makefile.writeLine("\n# ROOT Directory");        
155       makefile.writeLine("export ROOTDIR := "+pkgroot);
157       makefile.writeLine("\n# Include Rules.make");
158       makefile.writeLine("ifndef PDK_INSTALL_DIR_RECIPE");
159       makefile.writeLine("ifeq ($(RULES_MAKE),)");
160       makefile.writeLine("include $(PDK_INSTALL_PATH)/ti/build/Rules.make");
161       makefile.writeLine("else");
162       makefile.writeLine("include $(RULES_MAKE)");
163       makefile.writeLine("endif");
164       makefile.writeLine("endif");
166       makefile.writeLine("\n# INCLUDE Directory");
167       makefile.writeLine("export INCDIR := "+getxdcpath+";$(ROOTDIR)");       
168     
169       makefile.writeLine("\n# Common Macros used in make");  
170       makefile.writeLine("\nifndef RM");     
171       makefile.writeLine("export RM = rm -f");
172       makefile.writeLine("endif");        
173     
174       makefile.writeLine("\nifndef CP");     
175       makefile.writeLine("export CP = cp -p");    
176       makefile.writeLine("endif");    
177         
178       makefile.writeLine("\nexport MKDIR = mkdir -p");
179     
180       makefile.writeLine("\nifndef RMDIR");         
181       makefile.writeLine("export RMDIR = rm -rf");
182       makefile.writeLine("endif");        
183     
184       makefile.writeLine("\nifndef SED"); 
185       makefile.writeLine("export SED = sed");    
186       makefile.writeLine("endif");    
187     
188       makefile.writeLine("\nifndef MAKE"); 
189       makefile.writeLine("export MAKE = make");    
190       makefile.writeLine("endif");        
192       makefile.writeLine("\n# PHONY Targets");                
193       makefile.writeLine(".PHONY: all clean cleanall ");    
194       
195       makefile.writeLine("\n# FORCE Targets");                
196       makefile.writeLine("FORCE: ");          
197       
198       makefile.writeLine("\n# all rule");                
199       makefile.writeLine("all: .executables");           
200       makefile.writeLine(".executables: .libraries");
201       makefile.writeLine(".libraries:");
202       
203       makefile.writeLine("\n# Clean Rule");          
204       makefile.writeLine("clean:: clean_package");                  
205       makefile.writeLine("# Clean Top Level Object Directory ");          
206       makefile.writeLine("clean_package :\n\t$(RMDIR) $(LIBDIR)/*/");  
207       makefile.writeLine("\t$(RMDIR) package/cfg");            
208    }
209    else
210    {
211      try{
212           makefile = fileModule.open("makefile", "a");
213          } catch (ex)
214          {
215            print("makefile cannot be written to. Please check Writing Permissions.");
216            java.lang.System.exit(1);
217          }  
218     
219     }
221  return makefile;
224 function createLibMake(device, makelibname,targetname, objectPath)
226    var tooldir;
227    var cmdprefix;
228    var targetDir;
229    var stringname=String(targetname).replace("(xdc.bld.ITarget.Module)","");
230    
231    switch(stringname)
232    {
233     case String(C66LE):
234       tooldir="C6X_GEN_INSTALL_PATH";
235       cmdprefix="";
236       targetDir="c66";
237       targetname=C66LE;
238       break;
239     case String(C66BE):
240       tooldir="C6X_GEN_INSTALL_PATH";
241       cmdprefix="";
242       targetDir="c66";
243       targetname=C66BE;
244       break;
245     case String(A15LE):
246       tooldir="TOOLCHAIN_PATH_A15"; 
247       cmdprefix="CROSS_TOOL_PRFX";
248       targetDir="armv7";
249       targetname=A15LE;
250       break;
251     case String(A9LE):
252       tooldir="TOOLCHAIN_PATH_A9";
253       cmdprefix="CROSS_TOOL_PRFX";
254       targetDir="armv7";
255       targetname=A9LE;
256       break;
257     case String(A8LE):
258       tooldir="TOOLCHAIN_PATH_A8";
259       cmdprefix="CROSS_TOOL_PRFX";
260       targetDir="armv7";
261       targetname=A8LE;
262       break;
263     case String(M4LE):
264       tooldir="TOOLCHAIN_PATH_M4";
265       cmdprefix="";
266       targetDir="m4";
267       targetname=M4LE;
268       break;
269     case String(ARM11):
270       tooldir="TI_ARM11_GEN_INSTALL_PATH"; 
271       break;
272    }
274     var fileModule = xdc.module('xdc.services.io.File');
275     try{
276      var dstFile = new java.io.File(makelibname);
277      dstFile.getParentFile().mkdirs();    
278      libmakefile = fileModule.open(makelibname, "w");
279      /* Add to Archive list */
280     } catch (ex)
281     {
282      print(makelibname+" cannot be written to. Please check Writing Permissions.");
283      java.lang.System.exit(1);
284     }   
285     libmakefile.writeLine("#*******************************************************************************");
286     libmakefile.writeLine("#* FILE PURPOSE: Lower level makefile for Creating Component Libraries");
287     libmakefile.writeLine("#*******************************************************************************");
288     libmakefile.writeLine("#* FILE NAME: "+makelibname);
289     libmakefile.writeLine("#*");
290     libmakefile.writeLine("#* DESCRIPTION: Defines Source Files, Compilers flags and build rules");
291     libmakefile.writeLine("#*");
292     libmakefile.writeLine("#*");
293     libmakefile.writeLine("#*******************************************************************************");
294     libmakefile.writeLine("#");
295     libmakefile.writeLine("");
296     libmakefile.writeLine("#");
297     libmakefile.writeLine("# Macro definitions referenced below");
298     libmakefile.writeLine("#");
299     libmakefile.writeLine("empty =");
300     libmakefile.writeLine("space =$(empty) $(empty)");
301   
302     if ((targetname.name == "A15F") || (targetname.name == "A9F") || (targetname.name == "A8F"))
303     {
304     
305         if(stringname.match("gnu.targets"))
306         {
307             libmakefile.writeLine("CC = $("+tooldir+")/bin/$("+cmdprefix+")gcc");
308             libmakefile.writeLine("AC = $("+tooldir+")/bin/$("+cmdprefix+")as");    
309             libmakefile.writeLine("ARIN = $("+tooldir+")/bin/$("+cmdprefix+")ar");    
310             libmakefile.writeLine("LD = $("+tooldir+")/bin/$("+cmdprefix+")gcc");   
311         }
312         else
313         {
314             print("Error: Non-GNU targets are not currently supported ");
315             java.lang.System.exit(1);
317         }
318         
319         libmakefile.writeLine("INCS = -I. -I$(strip $(subst ;, -I,$(subst $(space),\\$(space),$(INCDIR)))) -I$("+tooldir+")/include");
320         libmakefile.writeLine("OBJEXT = o"+targetname.suffix); 
321         libmakefile.writeLine("AOBJEXT = s"+targetname.suffix);     
322         libmakefile.writeLine("CFLAGS_INTERNAL = " +targetname.ccOpts.prefix+" "+targetname.cc.opts);
323         libmakefile.writeLine("ASFLAGS_INTERNAL = " +targetname.asmOpts.prefix+" "+targetname.asm.opts);
324         libmakefile.writeLine("ARFLAGS_INTERNAL = " +targetname.ar.opts);
325         libmakefile.writeLine("LNKFLAGS_INTERNAL = " +targetname.lnk.opts);
326         libmakefile.writeLine("INTERNALDEFS = -MD -MF $@.dep");
327         libmakefile.writeLine("INTERNALLINKDEFS = -o $@ -m $@.map");  /* TBD */
328         libmakefile.writeLine("OBJDIR =  $(LIBDIR)/" + device.toString() + "/" + targetDir +"/obj"); 
329     
330     }
331     else
332     {
333   
334         if(stringname.match("ti.targets"))
335         {
337             var rtslibtemp = targetname.lnkOpts.suffix.toString().split("/");
338             var rtslib;
339             for(n=0;n<rtslibtemp.length;n++)
340             {
341                 if(rtslibtemp[n].match(".lib"))
342                 { 
343                     rtslib=rtslibtemp[n];
344                 }
345             }
347             libmakefile.writeLine("CC = $("+tooldir+")/bin/"+targetname.cc.cmd);
348             libmakefile.writeLine("AC = $("+tooldir+")/bin/"+targetname.asm.cmd);    
349             libmakefile.writeLine("ARIN = $("+tooldir+")/bin/"+targetname.ar.cmd);    
350             libmakefile.writeLine("LD = $("+tooldir+")/bin/"+targetname.lnk.cmd);   
351             libmakefile.writeLine("RTSLIB = -l $("+tooldir+")/lib/"+rtslib);        
352         }
353         else
354         {
355             print("Error: Non-TI targets are not currently supported ");
356             java.lang.System.exit(1);
358         }
359         
360         libmakefile.writeLine("INCS = -I. -I$(strip $(subst ;, -I,$(subst $(space),\\$(space),$(INCDIR)))) -I$("+tooldir+")/include");
361         libmakefile.writeLine("OBJEXT = o"+targetname.suffix); 
362         libmakefile.writeLine("AOBJEXT = s"+targetname.suffix);     
363         libmakefile.writeLine("CFLAGS_INTERNAL = " +targetname.ccOpts.prefix+" "+targetname.cc.opts);
364         libmakefile.writeLine("ASFLAGS_INTERNAL = " +targetname.asmOpts.prefix+" "+targetname.asm.opts);
365         libmakefile.writeLine("ARFLAGS_INTERNAL = " +targetname.ar.opts);
366         libmakefile.writeLine("LNKFLAGS_INTERNAL = " +targetname.lnk.opts);
367         /* libmakefile.writeLine("INTERNALDEFS = -D"+stringname.replace(/\./g,"_")+" -Dxdc_target_types__=ti/targets/std.h -DMAKEFILE_BUILD -eo.$(OBJEXT) -ea.$(AOBJEXT) -fr=$(@D) -fs=$(@D) -ppa -ppd=$@.dep");*/
368         libmakefile.writeLine("INTERNALDEFS = -D"+stringname.replace(/\./g,"_")+"  -DMAKEFILE_BUILD -eo.$(OBJEXT) -ea.$(AOBJEXT) -fr=$(@D) -fs=$(@D) -ppa -ppd=$@.dep");
369         libmakefile.writeLine("INTERNALLINKDEFS = -o $@ -m $@.map");
370         libmakefile.writeLine("OBJDIR =  $(LIBDIR)/" + device.toString() + "/" + targetDir +"/obj"); 
371     }     
372    
373  return libmakefile;
377 function makeAddObjects(srcString, makefilename, srcfiles, flags,fileExt, targetName, objDir)
379   var  sourcestring = (srcString + fileExt).toString().toUpperCase();
380   var  compileflagstring = sourcestring + "FLAGS";
381   var  objectliststring = sourcestring + "OBJS";
382   /* List all the source files */
383   makefilename.writeLine("\n#List the "+srcString+" Files");  
384   makefilename.writeLine(sourcestring + "= \\");
385   for(var i=0;i<srcfiles.length-1;i++)
386   {
387     makefilename.writeLine("    "+srcfiles[i]+"\\");
388   }
389     makefilename.writeLine("    "+srcfiles[i]+"\n");
390     
391  /* Flags for the source files */
392  makefilename.writeLine("# FLAGS for the "+srcString+" Files"); 
393  var compileflags="";
394  if(fileExt == "asm" && flags.aopts != undefined)
395  {
396    compileflags+=" "+flags.aopts;
397  }
398  else if((fileExt == "c" || fileExt == "sa")&& flags.copts != undefined)
399  {
400    compileflags+=" "+flags.copts;
401  } 
403  if(flags.incs != undefined)
404  {
405    compileflags+=" "+flags.incs;
406  }
409  makefilename.writeLine(compileflagstring+" = "+compileflags +" \n");     
410  makefilename.writeLine("# Make Rule for the "+srcString+" Files");  
411  
412  makefilename.writeLine(objectliststring +" = $(patsubst %."+fileExt+", "+objDir+"/%.$(OBJEXT), $(" + sourcestring + "))"); 
413  makefilename.writeLine("\n$("+objectliststring+"): "+objDir+"/%.$(OBJEXT): %."+fileExt);   
414  if(fileExt == "c")
415  { 
416    makefilename.writeLine("\t-@echo cl"+targetName.suffix +" $< ...");     
417  }
418  else
419  {
420    makefilename.writeLine("\t-@echo asm"+targetName.suffix +" $< ...");      
421  }
422  makefilename.writeLine("\tif [ ! -d $(@D) ]; then $(MKDIR) $(@D) ; fi;");           
423  
424  if(fileExt == "c")
425  {
426    if ((targetName.name == "A15F") || (targetName.name == "A9F") || (targetName.name == "A8F"))
427    {
428     makefilename.writeLine("\t$(RM) $@.dep");
429     makefilename.writeLine("\t$(CC) $(CFLAGS_INTERNAL) $("+compileflagstring+") $(INTERNALDEFS) $(INCS) $< -o $@");
430    /* 
431     TBD
432    */
433    }
434    else
435    {
436     makefilename.writeLine("\t$(RM) $@.dep");
437     makefilename.writeLine("\t$(CC) $(CFLAGS_INTERNAL) $("+compileflagstring+") $(INTERNALDEFS) $(INCS) -fc $< ");
438     makefilename.writeLine("\t-@$(CP) $@.dep $@.pp; \\");
439     makefilename.writeLine("         $(SED) -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\\\$$//' \\");
440     makefilename.writeLine("             -e '/^$$/ d' -e 's/$$/ :/' < $@.pp >> $@.dep; \\");
441     makefilename.writeLine("         $(RM) $@.pp ");
442    }
443  }
444  else if(fileExt == "asm")
445  {
446    makefilename.writeLine("\t$(AC) $(ASFLAGS_INTERNAL) $("+compileflagstring+") $(INTERNALDEFS) $(INCS) -fa $< ");
447  }
448  else if(fileExt == "sa")
449  {
450    makefilename.writeLine("\t$(AC) $(ASFLAGS_INTERNAL) $("+compileflagstring+") $(INTERNALDEFS) $(INCS) $< ");
451  }
452  
453    makefilename.writeLine("\n#Create Empty rule for dependency");
454    makefilename.writeLine("$("+objectliststring+"):"+makefilename.$private.fd);
455    makefilename.writeLine(makefilename.$private.fd+":");
456    makefilename.writeLine("\n#Include Depedency for "+srcString+" Files");
457    makefilename.writeLine("ifneq (clean,$(MAKECMDGOALS))");
458    makefilename.writeLine(" -include $("+objectliststring+":%.$(OBJEXT)=%.$(OBJEXT).dep)");
459    makefilename.writeLine("endif");
460  
463 /**************************************************************************
464  * FUNCTION NAME : buildLibrary
465  **************************************************************************
466  * DESCRIPTION   :
467  *  Utility function which will build a specific library
468  **************************************************************************/
469 var makefilelocal;
471 function buildLibrary (socName, isSoc, libOptions, libName, target, libFiles) 
473     var targetDir;
474     var objExtDir;
475     
477     if (target.name == "A15F")
478     {
479         targetDir = "armv7";
480     }
481     else if (target.name == "A9F")
482     {
483         targetDir = "armv7";
484     }
485     else if (target.name == "A8F")
487     {
488         targetDir = "armv7";
489     }
490     else if (target.name == "M4")
491     {
492         targetDir = "m4";
493     }
494     else
495     {
496         targetDir = "c66";
497     }
498     
499     /* Derive the operating system and soc names */
500     if (isSoc == "true") {
501         var libNameExp = libName+"."+socName;
502         targetDir = socName+"/"+targetDir;
503         objExtDir = "soc";
504     }
505     else  {
506         var libNameExp = libName;
507         objExtDir = "all";
508     }
511     var lldFullLibraryPath = "./lib/" + targetDir +"/" + libNameExp;
512     var lldFullBuildPath = "./build/" + targetDir +"/" + libNameExp;
513     var lldFullLibraryPathMake = "$(LIBDIR)/" + targetDir +"/" + libNameExp;
515     /* Create Main make file in the root of package folder */
516     makefilelocal = createMake(makefilelocal);
518     /* Write the rule to make library in main makefile */
519     lib = lldFullBuildPath+".a"+target.suffix;
520     libMake = lldFullLibraryPathMake+".a"+target.suffix;
521     var objectPath= "./package/"+lldFullBuildPath;
522     makefilelocal.writeLine("\n\n# Make rule to create "+libMake+" library");
523     makefilelocal.writeLine(".libraries: "+ libMake);
524     makefilelocal.writeLine(libMake+": FORCE\n\t$(MAKE) -f "+lib+".mk $@");                                 
526     /* Create Library make file in the lib folder */
527     var makefilelib= createLibMake(socName, lib+".mk",target,objectPath);  
529     /* Rule to clean library in main makefile */
530     makefilelocal.writeLine("# Rule to clean "+libMake+" library");                                              
531     makefilelocal.writeLine("clean ::\n\t$(RM) "+ libMake);                                          
532     librule="\n\n"+libMake+" :";
534     /* Add files to be compiled */
535     /* Separate out the C and assembly files */
536     var cfiles= new Array();
537     var afiles= new Array();
538     var safiles= new Array();
539     for each(var srcFile in libFiles)
540     {
541         var srcFile=String(srcFile);
542         var dot = srcFile.lastIndexOf(".");
543         var extension = srcFile.substr(dot,srcFile.length);      
544         if(extension == ".c")
545         {
546           cfiles.push(srcFile);
547         }
548         else if(extension == ".sa")
549         {
550           safiles.push(srcFile);
551         }
552         else if(extension == ".asm")
553         {
554            afiles.push(srcFile);
555         }
556         else
557         {
558            print("ERROR: Unsupported file extension");
559            java.lang.System.exit(1);
560         }
561      }
562     if(cfiles.length > 0)
563     {                                                
564       makeAddObjects("COMMONSRC",makefilelib,cfiles,libOptions,"c",target, "$(OBJDIR)");
565       librule += " $(COMMONSRCCOBJS)";                   
566     }
567     if(afiles.length > 0)
568     {                                                
569       makeAddObjects("COMMONSRC",makefilelib,afiles,libOptions,"asm",target, "$(OBJDIR)");
570       librule += " $(COMMONSRCASMOBJS)";                   
571     }
572     if(safiles.length > 0)
573     {                                                
574       makeAddObjects("COMMONSRC",makefilelib,safiles,libOptions,"sa",target, "$(OBJDIR)");
575       librule += " $(COMMONSRCSAOBJS)";                   
576     }
578     makefilelib.writeLine(librule);
579     makefilelib.writeLine("\t@echo archiving $? into $@ ...");
580     makefilelib.writeLine("\tif [ ! -d $(LIBDIR)/" + targetDir + " ]; then $(MKDIR) $(LIBDIR)/" + targetDir + " ; fi;"); 
581     makefilelib.writeLine("\t$(ARIN) $(ARFLAGS_INTERNAL) $@ $?");
582     makefilelib.close();   
584     /* Create the Epilogue; which executes after all the builds are completed. 
585      * This is used to generate the benchmark information for the built library. 
586      * Also add the benchmarking information file to the package. */
588     /* Put the temp file in object directory since javascript doesn't have a built in tmpname, 
589      * and don't want --jobs=# with # > 1 to result in collisions */
590     var libFullName = lldFullLibraryPath + ".a" + target.suffix;
591     var tempFile = libFullName + ".xml";
592     Pkg.makeEpilogue += ".libraries: " + libFullName +  "_size.txt\n";
593     Pkg.makeEpilogue += libFullName +  "_size.txt: " + libFullName + "\n";
594     if ( java.lang.String(target.name).contains('66') )
595     {    
596         Pkg.makeEpilogue += "\n\t $(C6X_GEN_INSTALL_PATH)/bin/ofd6x -x " + libFullName + " > " + tempFile;
597         Pkg.makeEpilogue += "\n\t $(SECTTI) " + tempFile + " > " + libFullName +  "_size.txt";
598         Pkg.makeEpilogue += "\n\t $(RM) " + tempFile + "\n\n";
599     }   
600     else if (target.name == "M4")
601     {
602         Pkg.makeEpilogue += "\n\t $(TOOLCHAIN_PATH_M4)/bin/armofd -x " + libFullName + " > " + tempFile;
603         Pkg.makeEpilogue += "\n\t $(SECTTI) " + tempFile + " > " + libFullName +  "_size.txt";
604         Pkg.makeEpilogue += "\n\t $(RM) " + tempFile + "\n\n";
605     }
606     else
607     {
608         Pkg.makeEpilogue += "\n\t $(TOOLCHAIN_PATH_A15)/bin/$(CROSS_TOOL_PRFX)size " + libFullName + " > " + libFullName + "_size.txt";
609     }                
610     Pkg.otherFiles[Pkg.otherFiles.length++] = lldFullLibraryPath + ".a" + target.suffix + "_size.txt";
611     Pkg.otherFiles[Pkg.otherFiles.length++] = lldFullBuildPath + ".a" + target.suffix + ".mk";
612     Pkg.otherFiles[Pkg.otherFiles.length++] = lldFullLibraryPath + ".a" + target.suffix;
614     /* We need to clean after ourselves; extend the 'clean' target to take care of this. */
615     Pkg.makeEpilogue += "\nclean::\n";
616     Pkg.makeEpilogue += "\t$(RM) " + lldFullBuildPath + ".a" + target.suffix + "_size.txt\n";    
617     Pkg.makeEpilogue += "\t$(RMDIR) " + "$(LIBDIR)/" + targetDir + "/ \n\n";
619     return lib;