773eed8514acee259faa6d375dfa782e864d3040
[keystone-rtos/tcp3d-lld.git] / build / buildlib.xs
1 /******************************************************************************\r
2  * FILE PURPOSE: Build Library Utilities\r
3  ******************************************************************************\r
4  * FILE NAME: buildlib.xs\r
5  *\r
6  * DESCRIPTION: \r
7  *  This file contains common routines that are used by the various TCP3D driver \r
8  *  components.\r
9  *\r
10  * Copyright (C) 2011-2014, Texas Instruments, Inc.\r
11  *****************************************************************************/\r
12 \r
13 /**************************************************************************\r
14  * FUNCTION NAME : listAllFiles\r
15  **************************************************************************\r
16  * DESCRIPTION   :\r
17  *  Utility function which lists all files with a specific extension \r
18  *  present in a directory and any directory inside it.\r
19  **************************************************************************/\r
20 function listAllFiles(ext, dir, recurse)\r
21 {     \r
22     var srcFile = [];\r
23     var d;\r
24 \r
25     /* If recurse parameter is not specified we default to recursive search. */\r
26     if (recurse == null)\r
27         recurse = true;\r
28 \r
29     if (dir == undefined) \r
30         d = ".";\r
31     else \r
32         d = dir;\r
33 \r
34     /* Get access to the current directory. */\r
35     var file = new java.io.File(d);\r
36 \r
37     /* Check if the file exists and it is a directory. */\r
38     if (file.exists() && file.isDirectory()) \r
39     {\r
40         /* Get a list of all files in the specific directory. */\r
41         var fileList = file.listFiles();\r
42         for (var i = 0; i < fileList.length; i++) \r
43         {\r
44             /* Dont add the generated directory 'package' and any of its files \r
45              * to the list here. */\r
46             if (fileList[i].getName().matches("package") == false)\r
47             {\r
48                 /* Check if the detected file is a directory */\r
49                 if (fileList[i].isDirectory())\r
50                 {\r
51                     /* We will recurse into the subdirectory only if required to do so. */\r
52                     if (recurse == true)\r
53                     {\r
54                         /* Generate the directory Name in which we will recurse. */ \r
55                         var directoryName = d + "/" + fileList[i].getName();\r
56 \r
57                         /* Get a list of all files in this directory */\r
58                         var fileListing = listAllFiles (ext, directoryName, recurse);\r
59                         if (fileListing != null)\r
60                         {\r
61                             /* Return a list of all file names in the directory. */\r
62                             for (var j = 0 ; j < fileListing.length; j++) \r
63                                 srcFile[srcFile.length++] = fileListing[j];\r
64                         }\r
65                     }\r
66                 }\r
67                 else\r
68                 {\r
69                     /* This was a file. Check if the file name matches the extension */\r
70                     if (fileList[i].getName().endsWith(ext) == true)\r
71                         srcFile[srcFile.length++] = d + "/" + fileList[i].getName();\r
72                 }\r
73             }\r
74         }\r
75         return srcFile;\r
76     }\r
77     return null;\r
78 }\r
79 \r
80 function createMake(makefile)\r
81 {\r
82     /* Create the main make file */\r
83     var fileModule = xdc.module('xdc.services.io.File');\r
84     if(makefile==undefined)\r
85     {\r
86       try{\r
87           makefile = fileModule.open("makefile", "w");\r
88          } catch (ex)\r
89          {\r
90            print("makefile cannot be written to. Please check Writing Permissions.");\r
91            java.lang.System.exit(1);\r
92          }   \r
93     \r
94       Pkg.makePrologue += "\ninclude makefile\n"; \r
95          \r
96       Pkg.makeEpilogue += "\nclean::\n\t-$(RM)  makefile\n";\r
97       makefile.writeLine("#*******************************************************************************");\r
98       makefile.writeLine("#* FILE PURPOSE: Top level makefile for Creating Component Libraries");\r
99       makefile.writeLine("#*******************************************************************************");\r
100       makefile.writeLine("#* FILE NAME: makefile");\r
101       makefile.writeLine("#*");\r
102       makefile.writeLine("#* DESCRIPTION: Defines Compiler tools paths, libraries , Build Options ");\r
103       makefile.writeLine("#*");\r
104       makefile.writeLine("#*");\r
105       makefile.writeLine("#*******************************************************************************");\r
106       makefile.writeLine("#*");\r
107       makefile.writeLine("# (Mandatory) Specify where various tools are installed.");\r
108 \r
109       var file = xdc.module('xdc.services.io.File');\r
110     \r
111       var xdcTargetType = java.lang.System.getenv("XDCTARGET");\r
112       var toolsBaseDir = java.lang.System.getenv("XDCCGROOT");   \r
113       \r
114       makefile.writeLine("\n# Output for prebuilt generated libraries");\r
115       makefile.writeLine("export LIBDIR ?= ./lib");\r
116 \r
117       /* Create INCDIR from XDCPATH */\r
118     \r
119       /* copy the environment array from the current environment */\r
120       var env   = java.lang.System.getenv();\r
121       var getxdcpath=String(java.lang.System.getenv("XDCPATH"));\r
122       getxdcpath= getxdcpath.replace(/\\/g,"/");\r
123       var keys  = env.keySet().toArray();\r
124       var key;\r
125       var stat={};\r
126       var env_j=[];\r
127       var listxdcpath = new Array();\r
128       for (var i = 0; i < keys.length; i++) {\r
129            key = String(keys[i]);\r
130            if((key.match("INSTALL_PATH")) || (key.match("INSTALLDIR")))\r
131            {\r
132              var keyPath=String(env.get(key));\r
133              keyPath=keyPath.replace(/\\/g,"/");\r
134              var file = xdc.module('xdc.services.io.File');\r
135              keyPath=file.getDOSPath(keyPath);\r
136              if(getxdcpath.toString().match(keyPath))\r
137              {\r
138                  listxdcpath.push({keyname: key,keypath: keyPath});\r
139                  while(getxdcpath.toString().match(keyPath))\r
140                  {\r
141                    getxdcpath=getxdcpath.toString().replace(keyPath,"$("+key+")");\r
142                  }\r
143              }\r
144            }\r
145      }\r
146        var pkgroot="..";\r
147        for (var i = Pkg.name.split('.').length; i > 1; i--) {\r
148               pkgroot+="/..";\r
149           }\r
150         \r
151       makefile.writeLine("\n# ROOT Directory");        \r
152       makefile.writeLine("export ROOTDIR := "+pkgroot);\r
153     \r
154       makefile.writeLine("\n# INCLUDE Directory");\r
155       makefile.writeLine("export INCDIR := "+getxdcpath+";$(ROOTDIR)");       \r
156     \r
157       makefile.writeLine("\n# Common Macros used in make");  \r
158       makefile.writeLine("\nifndef RM");     \r
159       makefile.writeLine("export RM = rm -f");\r
160       makefile.writeLine("endif");        \r
161     \r
162       makefile.writeLine("\nifndef CP");     \r
163       makefile.writeLine("export CP = cp -p");    \r
164       makefile.writeLine("endif");    \r
165         \r
166       makefile.writeLine("\nexport MKDIR = mkdir -p");\r
167     \r
168       makefile.writeLine("\nifndef RMDIR");         \r
169       makefile.writeLine("export RMDIR = rm -rf");\r
170       makefile.writeLine("endif");        \r
171     \r
172       makefile.writeLine("\nifndef SED"); \r
173       makefile.writeLine("export SED = sed");    \r
174       makefile.writeLine("endif");    \r
175     \r
176       makefile.writeLine("\nifndef MAKE"); \r
177       makefile.writeLine("export MAKE = make");    \r
178       makefile.writeLine("endif");        \r
179 \r
180       makefile.writeLine("\n# PHONY Targets");                \r
181       makefile.writeLine(".PHONY: all clean cleanall ");    \r
182       \r
183       makefile.writeLine("\n# FORCE Targets");                \r
184       makefile.writeLine("FORCE: ");          \r
185       \r
186       makefile.writeLine("\n# all rule");                \r
187       makefile.writeLine("all: .executables");           \r
188       makefile.writeLine(".executables: .libraries");\r
189       makefile.writeLine(".libraries:");\r
190       \r
191       makefile.writeLine("\n# Clean Rule");          \r
192       makefile.writeLine("clean:: clean_package");                  \r
193       makefile.writeLine("# Clean Top Level Object Directory ");          \r
194       makefile.writeLine("clean_package:")\r
195       for each (var libdir in devices)\r
196       {         \r
197         makefile.writeLine("\t$(RMDIR) $(LIBDIR)/"+libdir.toString()+"/*/");  \r
198       }    \r
199       makefile.writeLine("\t$(RMDIR) package/cfg");            \r
200    }\r
201    else\r
202    {\r
203      try{\r
204           makefile = fileModule.open("makefile", "a");\r
205          } catch (ex)\r
206          {\r
207            print("makefile cannot be written to. Please check Writing Permissions.");\r
208            java.lang.System.exit(1);\r
209          }  \r
210     \r
211     }\r
212 \r
213  return makefile;\r
214 }\r
215 \r
216 function createLibMake(device, makelibname,targetname, objectPath)\r
217 {\r
218    var tooldir;\r
219    var stringname=String(targetname).replace("(xdc.bld.ITarget.Module)","");\r
220    if(stringname.match("ARM11"))\r
221    {\r
222      tooldir="TI_ARM11_GEN_INSTALL_PATH"; \r
223    }\r
224    else\r
225    {\r
226      tooldir="C6X_GEN_INSTALL_PATH";\r
227    }\r
228    switch(stringname)\r
229    {\r
230     case String(C66LE):\r
231       targetname=C66LE;\r
232       break;\r
233     case String(C66BE):\r
234       targetname=C66BE;\r
235       break;\r
236 \r
237    }\r
238     var fileModule = xdc.module('xdc.services.io.File');\r
239     try{\r
240      var dstFile = new java.io.File(makelibname);\r
241      dstFile.getParentFile().mkdirs();    \r
242      libmakefile = fileModule.open(makelibname, "w");\r
243      /* Add to Archive list */\r
244     } catch (ex)\r
245     {\r
246      print(makelibname+" cannot be written to. Please check Writing Permissions.");\r
247      java.lang.System.exit(1);\r
248     }   \r
249     libmakefile.writeLine("#*******************************************************************************");\r
250     libmakefile.writeLine("#* FILE PURPOSE: Lower level makefile for Creating Component Libraries");\r
251     libmakefile.writeLine("#*******************************************************************************");\r
252     libmakefile.writeLine("#* FILE NAME: "+makelibname);\r
253     libmakefile.writeLine("#*");\r
254     libmakefile.writeLine("#* DESCRIPTION: Defines Source Files, Compilers flags and build rules");\r
255     libmakefile.writeLine("#*");\r
256     libmakefile.writeLine("#*");\r
257     libmakefile.writeLine("#*******************************************************************************");\r
258     libmakefile.writeLine("#");\r
259     libmakefile.writeLine("");\r
260     libmakefile.writeLine("#");\r
261     libmakefile.writeLine("# Macro definitions referenced below");\r
262     libmakefile.writeLine("#");\r
263     libmakefile.writeLine("empty =");\r
264     libmakefile.writeLine("space =$(empty) $(empty)");\r
265           \r
266     if(stringname.match("ti.targets"))\r
267     {\r
268 \r
269        var rtslibtemp = targetname.lnkOpts.suffix.toString().split("/");\r
270        var rtslib;\r
271        for(n=0;n<rtslibtemp.length;n++)\r
272        {\r
273           if(rtslibtemp[n].match(".lib"))\r
274           { \r
275              rtslib=rtslibtemp[n];\r
276           }\r
277        }\r
278 \r
279       libmakefile.writeLine("CC = $("+tooldir+")/bin/"+targetname.cc.cmd +" "+targetname.ccOpts.prefix+" "+targetname.cc.opts);\r
280       libmakefile.writeLine("AC = $("+tooldir+")/bin/"+targetname.asm.cmd +" "+targetname.asmOpts.prefix+" "+targetname.asm.opts);    \r
281       libmakefile.writeLine("ARIN = $("+tooldir+")/bin/"+targetname.ar.cmd +" "+targetname.ar.opts);    \r
282       libmakefile.writeLine("LD = $("+tooldir+")/bin/"+targetname.lnk.cmd +" "+targetname.lnk.opts);   \r
283       libmakefile.writeLine("RTSLIB = -l $("+tooldir+")/lib/"+rtslib);        \r
284     }\r
285     else\r
286     {\r
287       print("Error: Non-TI targets are not currently supported ");\r
288       java.lang.System.exit(1);\r
289 \r
290     }\r
291         \r
292     libmakefile.writeLine("INCS = -I. -I$(strip $(subst ;, -I,$(subst $(space),\\$(space),$(INCDIR))))");\r
293     libmakefile.writeLine("OBJEXT = o"+targetname.suffix); \r
294     libmakefile.writeLine("AOBJEXT = s"+targetname.suffix);     \r
295     /* 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");*/\r
296     libmakefile.writeLine("INTERNALDEFS = -D"+stringname.replace(/\./g,"_")+"  -DMAKEFILE_BUILD -eo.$(OBJEXT) -ea.$(AOBJEXT) -fr=$(@D) -fs=$(@D) -ppa -ppd=$@.dep");\r
297     libmakefile.writeLine("INTERNALLINKDEFS = -o $@ -m $@.map");\r
298     libmakefile.writeLine("OBJDIR = $(LIBDIR)/" + device.toString() + "/obj");\r
299     libmakefile.writeLine("DEVOBJDIR = $(LIBDIR)/" + device.toString() + "/obj");\r
300    \r
301  return libmakefile;\r
302 \r
303 }\r
304 \r
305 function makeAddObjects(srcString, makefilename, srcfiles, flags,fileExt, targetName, objDir)\r
306 {\r
307   var  sourcestring = (srcString + fileExt).toString().toUpperCase();\r
308   var  compileflagstring = sourcestring + "FLAGS";\r
309   var  objectliststring = sourcestring + "OBJS";\r
310   /* List all the source files */\r
311   makefilename.writeLine("\n#List the "+srcString+" Files");  \r
312   makefilename.writeLine(sourcestring + "= \\");\r
313   for(var i=0;i<srcfiles.length-1;i++)\r
314   {\r
315     makefilename.writeLine("    "+srcfiles[i]+"\\");\r
316   }\r
317     makefilename.writeLine("    "+srcfiles[i]+"\n");\r
318     \r
319  /* Flags for the source files */\r
320  makefilename.writeLine("# FLAGS for the "+srcString+" Files"); \r
321  var compileflags="";\r
322  if(fileExt == "asm" && flags.aopts != undefined)\r
323  {\r
324    compileflags+=" "+flags.aopts;\r
325  }\r
326  else if((fileExt == "c" || fileExt == "sa")&& flags.copts != undefined)\r
327  {\r
328    compileflags+=" "+flags.copts;\r
329  } \r
330 \r
331  if(flags.incs != undefined)\r
332  {\r
333    compileflags+=" "+flags.incs;\r
334  }\r
335 \r
336 \r
337  makefilename.writeLine(compileflagstring+" = "+compileflags +" \n");     \r
338  makefilename.writeLine("# Make Rule for the "+srcString+" Files");  \r
339  \r
340  makefilename.writeLine(objectliststring +" = $(patsubst %."+fileExt+", "+objDir+"/%.$(OBJEXT), $(" + sourcestring + "))"); \r
341  makefilename.writeLine("\n$("+objectliststring+"): "+objDir+"/%.$(OBJEXT): %."+fileExt);   \r
342  if(fileExt == "c")\r
343  { \r
344    makefilename.writeLine("\t-@echo cl"+targetName.suffix +" $< ...");     \r
345  }\r
346  else\r
347  {\r
348    makefilename.writeLine("\t-@echo asm"+targetName.suffix +" $< ...");      \r
349  }\r
350  makefilename.writeLine("\tif [ ! -d $(@D) ]; then $(MKDIR) $(@D) ; fi;");           \r
351  \r
352  if(fileExt == "c")\r
353  {\r
354    makefilename.writeLine("\t$(RM) $@.dep");\r
355    makefilename.writeLine("\t$(CC) $("+compileflagstring+") $(INTERNALDEFS) $(INCS) -fc $< ");\r
356    makefilename.writeLine("\t-@$(CP) $@.dep $@.pp; \\");\r
357    makefilename.writeLine("         $(SED) -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\\\$$//' \\");\r
358    makefilename.writeLine("             -e '/^$$/ d' -e 's/$$/ :/' < $@.pp >> $@.dep; \\");\r
359    makefilename.writeLine("         $(RM) $@.pp ");\r
360  }\r
361  else if(fileExt == "asm")\r
362  {\r
363    makefilename.writeLine("\t$(AC) $("+compileflagstring+") $(INTERNALDEFS) $(INCS) -fa $< ");\r
364  }\r
365  else if(fileExt == "sa")\r
366  {\r
367    makefilename.writeLine("\t$(AC) $("+compileflagstring+") $(INTERNALDEFS) $(INCS) $< ");\r
368  }\r
369    makefilename.writeLine("\n#Create Empty rule for dependency");\r
370    makefilename.writeLine("$("+objectliststring+"):"+makefilename.$private.fd);\r
371    makefilename.writeLine(makefilename.$private.fd+":");\r
372    makefilename.writeLine("\n#Include Depedency for "+srcString+" Files");\r
373    makefilename.writeLine("ifneq (clean,$(MAKECMDGOALS))");\r
374    makefilename.writeLine(" -include $("+objectliststring+":%.$(OBJEXT)=%.$(OBJEXT).dep)");\r
375    makefilename.writeLine("endif");\r
376  \r
377 }\r
378 \r
379 /**************************************************************************\r
380  * FUNCTION NAME : buildLibrary\r
381  **************************************************************************\r
382  * DESCRIPTION   :\r
383  *  Utility function which will build a specific library\r
384  **************************************************************************/\r
385 var makefilelocal;\r
386 function buildLibrary (device, libOptions, libName, target, libFiles) \r
387 {\r
388     var lldFullLibraryPath = "./lib/" + device.toString() + "/" + libName;\r
389     var lldFullBuildPath = "./build/" + device.toString() + "/" + libName;\r
390     var lldFullLibraryPathMake = "$(LIBDIR)/" + device.toString() + "/" + libName;\r
391 \r
392     /* Create Main make file in the root of package folder */\r
393     makefilelocal = createMake(makefilelocal);\r
394 \r
395     /* Write the rule to make library in main makefile */\r
396     lib = lldFullBuildPath+".a"+target.suffix;\r
397     libMake = lldFullLibraryPathMake+".a"+target.suffix;\r
398     var objectPath= "./package/"+lldFullBuildPath;\r
399     makefilelocal.writeLine("\n\n# Make rule to create "+libMake+" library");\r
400     makefilelocal.writeLine(".libraries: "+ libMake);\r
401     makefilelocal.writeLine(libMake+": FORCE\n\t$(MAKE) -f "+lib+".mk $@");                                 \r
402 \r
403     /* Create Library make file in the lib folder */\r
404     var makefilelib= createLibMake(device, lib+".mk",target,objectPath);  \r
405 \r
406     /* Rule to clean library in main makefile */\r
407     makefilelocal.writeLine("# Rule to clean "+libMake+" library");                                              \r
408     makefilelocal.writeLine("clean ::\n\t$(RM) "+ libMake);                                          \r
409     librule="\n\n"+libMake+" :";\r
410 \r
411     /* Add files to be compiled */\r
412     /* Separate out the C and assembly files */\r
413     var cfiles= new Array();\r
414     var afiles= new Array();\r
415     var safiles= new Array();\r
416     for each(var srcFile in libFiles)\r
417     {\r
418         var srcFile=String(srcFile);\r
419         var dot = srcFile.lastIndexOf(".");\r
420         var extension = srcFile.substr(dot,srcFile.length);      \r
421         if(extension == ".c")\r
422         {\r
423           cfiles.push(srcFile);\r
424         }\r
425         else if(extension == ".sa")\r
426         {\r
427           safiles.push(srcFile);\r
428         }\r
429         else if(extension == ".asm")\r
430         {\r
431            afiles.push(srcFile);\r
432         }\r
433         else\r
434         {\r
435            print("ERROR: Unsupported file extension");\r
436            java.lang.System.exit(1);\r
437         }\r
438      }\r
439     if(cfiles.length > 0)\r
440     {                                                \r
441       makeAddObjects("COMMONSRC",makefilelib,cfiles,libOptions,"c",target, "$(OBJDIR)");\r
442       librule += " $(COMMONSRCCOBJS)";                   \r
443     }\r
444     if(afiles.length > 0)\r
445     {                                                \r
446       makeAddObjects("COMMONSRC",makefilelib,afiles,libOptions,"asm",target, "$(OBJDIR)");\r
447       librule += " $(COMMONSRCASMOBJS)";                   \r
448     }\r
449     if(safiles.length > 0)\r
450     {                                                \r
451       makeAddObjects("COMMONSRC",makefilelib,safiles,libOptions,"sa",target, "$(OBJDIR)");\r
452       librule += " $(COMMONSRCSAOBJS)";                   \r
453     }\r
454 \r
455     makefilelib.writeLine(librule);\r
456     makefilelib.writeLine("\t@echo archiving $? into $@ ...");\r
457     makefilelib.writeLine("\tif [ ! -d $(LIBDIR)/" + device.toString() + " ]; then $(MKDIR) $(LIBDIR)/" + device.toString() + " ; fi;"); \r
458     makefilelib.writeLine("\t$(ARIN) $@ $?");\r
459     makefilelib.close();   \r
460 \r
461     /* Create the Epilogue; which executes after all the builds are completed. \r
462      * This is used to generate the benchmark information for the built library. \r
463      * Also add the benchmarking information file to the package. */\r
464 \r
465     /* Put the temp file in object directory since javascript doesn't have a built in tmpname, \r
466      * and don't want --jobs=# with # > 1 to result in collisions */\r
467     var tempFile = "$(LIBDIR)/" + device.toString() + "/obj/tmp_" + target.suffix + ".xml";\r
468     Pkg.makeEpilogue += ".libraries: benchmarking_"  + device + "_" + target.suffix + "\n";\r
469     Pkg.makeEpilogue += "benchmarking_" + device + "_" + target.suffix + ":";\r
470     Pkg.makeEpilogue += "\n\t ofd6x -x " + lldFullLibraryPath + ".a" + target.suffix + " > " + tempFile;\r
471     Pkg.makeEpilogue += "\n\t sectti " + tempFile + " > " + lldFullLibraryPath + ".a" + target.suffix +  "_size.txt";\r
472     Pkg.makeEpilogue += "\n\t $(RM) " + tempFile + "\n\n";\r
473     Pkg.otherFiles[Pkg.otherFiles.length++] = lldFullLibraryPath + ".a" + target.suffix + "_size.txt";\r
474     Pkg.otherFiles[Pkg.otherFiles.length++] = lldFullBuildPath + ".a" + target.suffix + ".mk";\r
475     Pkg.otherFiles[Pkg.otherFiles.length++] = lldFullLibraryPath + ".a" + target.suffix;\r
476 \r
477     /* We need to clean after ourselves; extend the 'clean' target to take care of this. */\r
478     Pkg.makeEpilogue += "clean::\n";\r
479     Pkg.makeEpilogue += "\t$(RM) " + lldFullBuildPath + ".a" + target.suffix + "_size.txt\n";    \r
480     Pkg.makeEpilogue += "\t$(RMDIR) " + "$(LIBDIR)/" + device.toString() + " \n\n";\r
481 \r
482     return lib;\r
483 }\r
484 \r
485 /**************************************************************************\r
486  * FUNCTION NAME : createMiniPkg\r
487  **************************************************************************\r
488  * DESCRIPTION   :\r
489  *  The function is responsible for creating the mini tar package\r
490  *  The MINI package has the following files:- \r
491  *      - Driver Source Files. \r
492  *      - Header files (exported and internal driver files) \r
493  *      - Simple Makefiles. \r
494  **************************************************************************/\r
495 function createMiniPkg(pkgName)\r
496 {\r
497     /* Get the package Name. */\r
498     var packageRepository = xdc.getPackageRepository(Pkg.name);\r
499     var packageBase       = xdc.getPackageBase(Pkg.name);\r
500     var packageName       = packageBase.substring(packageRepository.length + 1);\r
501 \r
502     /* Convert the Package name by replacing back slashes with forward slashes. This is required because\r
503      * otherwise with long names the tar is unable to change directory. */\r
504     var newPkgName = new java.lang.String(packageRepository);\r
505     var newPkgRep  = newPkgName.replace('\\', '/');\r
506 \r
507     /* Step1: Create the MINI Package and add the simple Big and Little Endian Makefiles to the package */\r
508     Pkg.makeEpilogue += "release: mini_pkg\n";\r
509     Pkg.makeEpilogue += "mini_pkg:\n";\r
510     Pkg.makeEpilogue += "\t tar -C " + "\"" + newPkgRep + "\"" + " -cf packages/" + pkgName + "_mini.tar " + \r
511                         packageName + "simpleC66LE.mak " + packageName + "simpleC66BE.mak\n";\r
512 \r
513     /* Step2: Add the exported header files to the package */\r
514     var includeFiles = libUtility.listAllFiles (".h", ".", false);\r
515     for (var k = 0 ; k < includeFiles.length; k++)\r
516         Pkg.makeEpilogue += "\t tar -C " + "\"" + newPkgRep + "\"" + " -rf packages/" + pkgName + "_mini.tar " + \r
517                         packageName + includeFiles[k] + "\n";\r
518 \r
519     /* Step3: Add the internal header files to the package */\r
520     includeFiles = libUtility.listAllFiles (".h", "include", true);\r
521     for (var k = 0 ; k < includeFiles.length; k++)\r
522         Pkg.makeEpilogue += "\t tar -C " + "\"" + newPkgRep + "\"" + " -rf packages/" + pkgName + "_mini.tar " + \r
523                         packageName + includeFiles[k] + "\n";\r
524 \r
525     /* Step4: Add the PDSP firmware files to the package */\r
526     includeFiles = libUtility.listAllFiles (".h", "firmware", true);\r
527     for (var k = 0 ; k < includeFiles.length; k++)\r
528         Pkg.makeEpilogue += "\t tar -C " + "\"" + newPkgRep + "\"" + " -rf packages/" + pkgName + "_mini.tar " + \r
529                         packageName + includeFiles[k] + "\n";\r
530 \r
531     /* Step5: Add the device specific files to the package */\r
532     includeFiles = libUtility.listAllFiles (".c", "device", true);\r
533     for (var k = 0 ; k < includeFiles.length; k++)\r
534         Pkg.makeEpilogue += "\t tar -C " + "\"" + newPkgRep + "\"" + " -rf packages/" + pkgName + "_mini.tar " + \r
535                         packageName + includeFiles[k] + "\n";\r
536 \r
537     /* Step4: Add the driver source files to the package; the filter should have generated a source listing */\r
538     Pkg.makeEpilogue += "\t tar -C " + "\"" + newPkgRep + "\"" + " -T src.lst -rf packages/" + pkgName + "_mini.tar " + "\n";\r
539 \r
540     /* Ensure that we clean up the mini package */\r
541     Pkg.makeEpilogue += "clean::\n";\r
542     Pkg.makeEpilogue += "\t $(RM) packages/" + pkgName + "_mini.tar\n";\r
543 }\r
544 \r