]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - keystone-rtos/rm-lld.git/blobdiff - build/buildlib.xs
PRSDK-2194 Added RULES_MAKE macro
[keystone-rtos/rm-lld.git] / build / buildlib.xs
old mode 100644 (file)
new mode 100755 (executable)
index e9732bc..afe46c1
-/******************************************************************************\r
- * FILE PURPOSE: Build Library Utilities\r
- ******************************************************************************\r
- * FILE NAME: buildlib.xs\r
- *\r
- * DESCRIPTION: \r
- *  This file contains common routines that are used by the various RM \r
- *  components.\r
- *\r
- * Copyright (C) 2011-2015, Texas Instruments, Inc.\r
- *****************************************************************************/\r
-\r
-/**************************************************************************\r
- * FUNCTION NAME : listAllFiles\r
- **************************************************************************\r
- * DESCRIPTION   :\r
- *  Utility function which lists all files with a specific extension \r
- *  present in a directory and any directory inside it.\r
- **************************************************************************/\r
-function listAllFiles(ext, dir, recurse)\r
-{     \r
-    var srcFile = [];\r
-    var d;\r
-\r
-    /* If recurse parameter is not specified we default to recursive search. */\r
-    if (recurse == null)\r
-        recurse = true;\r
-\r
-    if (dir == undefined) \r
-          d = ".";\r
-    else \r
-      d = dir;\r
-\r
-    /* Get access to the current directory. */\r
-    var file = new java.io.File(d);\r
-\r
-    /* Check if the file exists and it is a directory. */\r
-    if (file.exists() && file.isDirectory()) \r
-    {\r
-        /* Get a list of all files in the specific directory. */\r
-        var fileList = file.listFiles();\r
-        for (var i = 0; i < fileList.length; i++) \r
-        {\r
-            /* Dont add the generated directory 'package' and any of its files \r
-             * to the list here. */\r
-            if (fileList[i].getName().matches("package") == false)\r
-            {\r
-                /* Check if the detected file is a directory */\r
-                if (fileList[i].isDirectory())\r
-                {\r
-                    /* We will recurse into the subdirectory only if required to do so. */\r
-                    if (recurse == true)\r
-                    {\r
-                        /* Generate the directory Name in which we will recurse. */ \r
-                        var directoryName = d + "/" + fileList[i].getName();\r
-\r
-                        /* Get a list of all files in this directory */\r
-                        var fileListing = listAllFiles (ext, directoryName, recurse);\r
-                        if (fileListing != null)\r
-                        {\r
-                            /* Return a list of all file names in the directory. */\r
-                            for (var j = 0 ; j < fileListing.length; j++) \r
-                                srcFile[srcFile.length++] = fileListing[j];\r
-                        }\r
-                    }\r
-                }\r
-                else\r
-                {\r
-                    /* This was a file. Check if the file name matches the extension */\r
-                    if (fileList[i].getName().endsWith(ext) == true)\r
-                        srcFile[srcFile.length++] = d + "/" + fileList[i].getName();\r
-                }\r
-            }\r
-        }\r
-\r
-        return srcFile;\r
-    }\r
-    return null;\r
-}\r
-\r
-\r
-function createMake(makefile)\r
-{\r
-    /* Create the main make file */\r
-    var fileModule = xdc.module('xdc.services.io.File');\r
-    if(makefile==undefined)\r
-    {\r
-      try{\r
-          makefile = fileModule.open("makefile", "w");\r
-         } catch (ex)\r
-         {\r
-           print("makefile cannot be written to. Please check Writing Permissions.");\r
-           java.lang.System.exit(1);\r
-         }   \r
-    \r
-      Pkg.makePrologue += "\ninclude makefile\n"; \r
-         \r
-      Pkg.makeEpilogue += "\nclean::\n\t-$(RM)  makefile\n";\r
-      makefile.writeLine("#*******************************************************************************");\r
-      makefile.writeLine("#* FILE PURPOSE: Top level makefile for Creating Component Libraries");\r
-      makefile.writeLine("#*******************************************************************************");\r
-      makefile.writeLine("#* FILE NAME: makefile");\r
-      makefile.writeLine("#*");\r
-      makefile.writeLine("#* DESCRIPTION: Defines Compiler tools paths, libraries , Build Options ");\r
-      makefile.writeLine("#*");\r
-      makefile.writeLine("#*");\r
-      makefile.writeLine("#*******************************************************************************");\r
-      makefile.writeLine("#*");\r
-      makefile.writeLine("# (Mandatory) Specify where various tools are installed.");\r
-\r
-      var file = xdc.module('xdc.services.io.File');\r
-    \r
-      \r
-      makefile.writeLine("\n# Output for prebuilt generated libraries");\r
-      makefile.writeLine("export LIBDIR ?= ./lib");\r
-      /* use sectti.exe from path */\r
-      makefile.writeLine("export SECTTI ?= sectti");\r
-\r
-      /* Create INCDIR from XDCPATH */\r
-    \r
-      /* copy the environment array from the current environment */\r
-      var env   = java.lang.System.getenv();\r
-      var getxdcpath=String(java.lang.System.getenv("XDCPATH"));\r
-      getxdcpath= getxdcpath.replace(/\\/g,"/");\r
-      var keys  = env.keySet().toArray();\r
-      var key;\r
-      var stat={};\r
-      var env_j=[];\r
-      var listxdcpath = new Array();\r
-      for (var i = 0; i < keys.length; i++) {\r
-           key = String(keys[i]);\r
-           if((key.match("INSTALL_PATH")) || (key.match("INSTALLDIR")))\r
-           {\r
-             var keyPath=String(env.get(key));\r
-             keyPath=keyPath.replace(/\\/g,"/");\r
-             var file = xdc.module('xdc.services.io.File');\r
-             keyPath=file.getDOSPath(keyPath);\r
-             if(getxdcpath.toString().match(keyPath))\r
-             {\r
-                 listxdcpath.push({keyname: key,keypath: keyPath});\r
-                 while(getxdcpath.toString().match(keyPath))\r
-                 {\r
-                   getxdcpath=getxdcpath.toString().replace(keyPath,"$("+key+")");\r
-                 }\r
-             }\r
-           }\r
-    \r
-     }\r
-       var pkgroot="..";\r
-       for (var i = Pkg.name.split('.').length; i > 1; i--) {\r
-              pkgroot+="/..";\r
-          }\r
-        \r
-      makefile.writeLine("\n# ROOT Directory");        \r
-      makefile.writeLine("export ROOTDIR := "+pkgroot);\r
-    \r
-      makefile.writeLine("\n# INCLUDE Directory");\r
-      makefile.writeLine("export INCDIR := "+getxdcpath+";$(ROOTDIR)");       \r
-    \r
-      makefile.writeLine("\n# Common Macros used in make");  \r
-      makefile.writeLine("\nifndef RM");     \r
-      makefile.writeLine("export RM = rm -f");\r
-      makefile.writeLine("endif");        \r
-    \r
-      makefile.writeLine("\nifndef CP");     \r
-      makefile.writeLine("export CP = cp -p");    \r
-      makefile.writeLine("endif");    \r
-        \r
-      makefile.writeLine("\nexport MKDIR = mkdir -p");\r
-    \r
-      makefile.writeLine("\nifndef RMDIR");         \r
-      makefile.writeLine("export RMDIR = rm -rf");\r
-      makefile.writeLine("endif");        \r
-    \r
-      makefile.writeLine("\nifndef SED"); \r
-      makefile.writeLine("export SED = sed");    \r
-      makefile.writeLine("endif");    \r
-    \r
-      makefile.writeLine("\nifndef MAKE"); \r
-      makefile.writeLine("export MAKE = make");    \r
-      makefile.writeLine("endif");        \r
-\r
-      makefile.writeLine("\n# PHONY Targets");                \r
-      makefile.writeLine(".PHONY: all clean cleanall ");    \r
-      \r
-      makefile.writeLine("\n# FORCE Targets");                \r
-      makefile.writeLine("FORCE: ");          \r
-      \r
-      makefile.writeLine("\n# all rule");                \r
-      makefile.writeLine("all: .executables");           \r
-      makefile.writeLine(".executables: .libraries");\r
-      makefile.writeLine(".libraries:");\r
-      \r
-      makefile.writeLine("\n# Clean Rule");          \r
-      makefile.writeLine("clean:: clean_package");                  \r
-      makefile.writeLine("# Clean Top Level Object Directory ");          \r
-      makefile.writeLine("clean_package :\n\t$(RMDIR) $(LIBDIR)/*/");      \r
-      makefile.writeLine("\t$(RMDIR) package/cfg");            \r
-   }\r
-   else\r
-   {\r
-     try{\r
-          makefile = fileModule.open("makefile", "a");\r
-         } catch (ex)\r
-         {\r
-           print("makefile cannot be written to. Please check Writing Permissions.");\r
-           java.lang.System.exit(1);\r
-         }  \r
-    \r
-    }\r
-\r
- return makefile;\r
-}\r
-\r
-function createLibMake(makelibname,targetname, objectPath)\r
-{\r
-   var tooldir;\r
-   var stringname=String(targetname).replace("(xdc.bld.ITarget.Module)","");\r
-   if(stringname.match("ARM11"))\r
-   {\r
-     tooldir="TI_ARM11_GEN_INSTALL_PATH"; \r
-   }\r
-   else\r
-   {\r
-     tooldir="C6X_GEN_INSTALL_PATH";\r
-   }\r
-   switch(stringname)\r
-   {\r
-    case String(C66LE):\r
-      targetname=C66LE;\r
-      break;\r
-    case String(C66BE):\r
-      targetname=C66BE;\r
-      break;\r
-\r
-   }\r
-    var fileModule = xdc.module('xdc.services.io.File');\r
-    try{\r
-     var dstFile = new java.io.File(makelibname);\r
-     dstFile.getParentFile().mkdirs();    \r
-     libmakefile = fileModule.open(makelibname, "w");\r
-     /* Add to Archive list */\r
-    } catch (ex)\r
-    {\r
-     print(makelibname+" cannot be written to. Please check Writing Permissions.");\r
-     java.lang.System.exit(1);\r
-    }   \r
-    libmakefile.writeLine("#*******************************************************************************");\r
-    libmakefile.writeLine("#* FILE PURPOSE: Lower level makefile for Creating Component Libraries");\r
-    libmakefile.writeLine("#*******************************************************************************");\r
-    libmakefile.writeLine("#* FILE NAME: "+makelibname);\r
-    libmakefile.writeLine("#*");\r
-    libmakefile.writeLine("#* DESCRIPTION: Defines Source Files, Compilers flags and build rules");\r
-    libmakefile.writeLine("#*");\r
-    libmakefile.writeLine("#*");\r
-    libmakefile.writeLine("#*******************************************************************************");\r
-    libmakefile.writeLine("#");\r
-    libmakefile.writeLine("");\r
-    libmakefile.writeLine("#");\r
-    libmakefile.writeLine("# Macro definitions referenced below");\r
-    libmakefile.writeLine("#");\r
-    libmakefile.writeLine("empty =");\r
-    libmakefile.writeLine("space =$(empty) $(empty)");\r
-         \r
-    if(stringname.match("ti.targets"))\r
-    {\r
-\r
-       var rtslibtemp = targetname.lnkOpts.suffix.toString().split("/");\r
-       var rtslib;\r
-       for(n=0;n<rtslibtemp.length;n++)\r
-       {\r
-          if(rtslibtemp[n].match(".lib"))\r
-          { \r
-             rtslib=rtslibtemp[n];\r
-          }\r
-       }\r
-\r
-      libmakefile.writeLine("CC = $("+tooldir+")/bin/"+targetname.cc.cmd +" "+targetname.ccOpts.prefix+" "+targetname.cc.opts);\r
-      libmakefile.writeLine("AC = $("+tooldir+")/bin/"+targetname.asm.cmd +" "+targetname.asmOpts.prefix+" "+targetname.asm.opts);    \r
-      libmakefile.writeLine("ARIN = $("+tooldir+")/bin/"+targetname.ar.cmd +" "+targetname.ar.opts);    \r
-      libmakefile.writeLine("LD = $("+tooldir+")/bin/"+targetname.lnk.cmd +" "+targetname.lnk.opts);   \r
-      libmakefile.writeLine("RTSLIB = -l $("+tooldir+")/lib/"+rtslib);        \r
-    }\r
-    else\r
-    {\r
-      print("Error: Non-TI targets are not currently supported ");\r
-      java.lang.System.exit(1);\r
-\r
-    }\r
-       \r
-        libmakefile.writeLine("INCS = -I. -I$(strip $(subst ;, -I,$(subst $(space),\\$(space),$(INCDIR)))) -I$("+tooldir+")/include");\r
-    libmakefile.writeLine("OBJEXT = o"+targetname.suffix); \r
-    libmakefile.writeLine("AOBJEXT = s"+targetname.suffix);     \r
-    /* 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
-    libmakefile.writeLine("INTERNALDEFS = -D"+stringname.replace(/\./g,"_")+"  -DMAKEFILE_BUILD -eo.$(OBJEXT) -ea.$(AOBJEXT) -fr=$(@D) -fs=$(@D) -ppa -ppd=$@.dep");\r
-    libmakefile.writeLine("INTERNALLINKDEFS = -o $@ -m $@.map");\r
-    libmakefile.writeLine("OBJDIR =  $(LIBDIR)/obj"); \r
-   \r
- return libmakefile;\r
-\r
-}\r
-\r
-function makeAddObjects(srcString, makefilename, srcfiles, flags,fileExt, targetName)\r
-{\r
-  var  sourcestring = (srcString + fileExt).toString().toUpperCase();\r
-  var  compileflagstring = sourcestring + "FLAGS";\r
-  var  objectliststring = sourcestring + "OBJS";\r
-  /* List all the source files */\r
-  makefilename.writeLine("\n#List the "+srcString+" Files");  \r
-  makefilename.writeLine(sourcestring + "= \\");\r
-  for(var i=0;i<srcfiles.length-1;i++)\r
-  {\r
-    makefilename.writeLine("    "+srcfiles[i]+"\\");\r
-  }\r
-    makefilename.writeLine("    "+srcfiles[i]+"\n");\r
-    \r
- /* Flags for the source files */\r
- makefilename.writeLine("# FLAGS for the "+srcString+" Files"); \r
- var compileflags="";\r
- if(fileExt == "asm" && flags.aopts != undefined)\r
- {\r
-   compileflags+=" "+flags.aopts;\r
- }\r
- else if((fileExt == "c" || fileExt == "sa")&& flags.copts != undefined)\r
- {\r
-   compileflags+=" "+flags.copts;\r
- } \r
-\r
- if(flags.incs != undefined)\r
- {\r
-   compileflags+=" "+flags.incs;\r
- }\r
-\r
-\r
- makefilename.writeLine(compileflagstring+" = "+compileflags +" \n");     \r
- makefilename.writeLine("# Make Rule for the "+srcString+" Files");  \r
\r
- makefilename.writeLine(objectliststring +" = $(patsubst %."+fileExt+", $(OBJDIR)/%.$(OBJEXT), $(" + sourcestring + "))"); \r
- makefilename.writeLine("\n$("+objectliststring+"): $(OBJDIR)/%.$(OBJEXT): %."+fileExt);   \r
- if(fileExt == "c")\r
- { \r
-   makefilename.writeLine("\t-@echo cl"+targetName.suffix +" $< ...");     \r
- }\r
- else\r
- {\r
-   makefilename.writeLine("\t-@echo asm"+targetName.suffix +" $< ...");      \r
- }\r
- makefilename.writeLine("\tif [ ! -d $(@D) ]; then $(MKDIR) $(@D) ; fi;");           \r
\r
- if(fileExt == "c")\r
- {\r
-   makefilename.writeLine("\t$(RM) $@.dep");\r
-   makefilename.writeLine("\t$(CC) $("+compileflagstring+") $(INTERNALDEFS) $(INCS) -fc $< ");\r
-   makefilename.writeLine("\t-@$(CP) $@.dep $@.pp; \\");\r
-   makefilename.writeLine("         $(SED) -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\\\$$//' \\");\r
-   makefilename.writeLine("             -e '/^$$/ d' -e 's/$$/ :/' < $@.pp >> $@.dep; \\");\r
-   makefilename.writeLine("         $(RM) $@.pp ");\r
- }\r
- else if(fileExt == "asm")\r
- {\r
-   makefilename.writeLine("\t$(AC) $("+compileflagstring+") $(INTERNALDEFS) $(INCS) -fa $< ");\r
- }\r
- else if(fileExt == "sa")\r
- {\r
-   makefilename.writeLine("\t$(AC) $("+compileflagstring+") $(INTERNALDEFS) $(INCS) $< ");\r
- }\r
-   makefilename.writeLine("\n#Create Empty rule for dependency");\r
-   makefilename.writeLine("$("+objectliststring+"):"+makefilename.$private.fd);\r
-   makefilename.writeLine(makefilename.$private.fd+":");\r
-   makefilename.writeLine("\n#Include Depedency for "+srcString+" Files");\r
-   makefilename.writeLine("ifneq (clean,$(MAKECMDGOALS))");\r
-   makefilename.writeLine(" -include $("+objectliststring+":%.$(OBJEXT)=%.$(OBJEXT).dep)");\r
-   makefilename.writeLine("endif");\r
\r
-}\r
-\r
-/**************************************************************************\r
- * FUNCTION NAME : buildLibrary\r
- **************************************************************************\r
- * DESCRIPTION   :\r
- *  Utility function which will build a specific library\r
- **************************************************************************/\r
-var makefilelocal;\r
-function buildLibrary (libOptions, libName, target, libFiles) \r
-{\r
-    var lldFullLibraryPath = "./lib/c66/" + libName;\r
-    var lldFullBuildPath = "./build/c66/" + libName;\r
-    var lldFullLibraryPathMake = "$(LIBDIR)/" + "c66/" + libName;\r
-\r
-    /* Create Main make file in the root of package folder */\r
-    makefilelocal = createMake(makefilelocal);\r
-\r
-    /* Write the rule to make library in main makefile */\r
-    lib = lldFullBuildPath+".a"+target.suffix;\r
-    libMake = lldFullLibraryPathMake+".a"+target.suffix;\r
-    var objectPath= "./package/"+lldFullBuildPath;\r
-    makefilelocal.writeLine("\n\n# Make rule to create "+libMake+" library");\r
-    makefilelocal.writeLine(".libraries: "+ libMake);\r
-    makefilelocal.writeLine(libMake+": FORCE\n\t$(MAKE) -f "+lib+".mk $@");                                 \r
-\r
-    /* Create Library make file in the lib folder */\r
-    var makefilelib= createLibMake(lib+".mk",target,objectPath);  \r
-\r
-    /* Rule to clean library in main makefile */\r
-    makefilelocal.writeLine("# Rule to clean "+libMake+" library");                                              \r
-    makefilelocal.writeLine("clean ::\n\t$(RM) "+ libMake);                                          \r
-    librule="\n\n"+libMake+" :";\r
-\r
-    /* Add files to be compiled */\r
-    /* Separate out the C and assembly files */\r
-    var cfiles= new Array();\r
-    var afiles= new Array();\r
-    var safiles= new Array();\r
-    for each(var srcFile in libFiles)\r
-    {\r
-        var srcFile=String(srcFile);\r
-        var dot = srcFile.lastIndexOf(".");\r
-        var extension = srcFile.substr(dot,srcFile.length);      \r
-        if(extension == ".c")\r
-        {\r
-          cfiles.push(srcFile);\r
-        }\r
-        else if(extension == ".sa")\r
-        {\r
-          safiles.push(srcFile);\r
-        }\r
-        else if(extension == ".asm")\r
-        {\r
-           afiles.push(srcFile);\r
-        }\r
-        else\r
-        {\r
-           print("ERROR: Unsupported file extension");\r
-           java.lang.System.exit(1);\r
-        }\r
-     }\r
-    if(cfiles.length > 0)\r
-    {                                                \r
-      makeAddObjects("COMMONSRC",makefilelib,cfiles,libOptions,"c",target);\r
-      librule += " $(COMMONSRCCOBJS)";                   \r
-    }\r
-    if(afiles.length > 0)\r
-    {                                                \r
-      makeAddObjects("COMMONSRC",makefilelib,afiles,libOptions,"asm",target);\r
-      librule += " $(COMMONSRCASMOBJS)";                   \r
-    }\r
-    if(safiles.length > 0)\r
-    {                                                \r
-      makeAddObjects("COMMONSRC",makefilelib,safiles,libOptions,"sa",target);\r
-      librule += " $(COMMONSRCSAOBJS)";                   \r
-    }\r
-\r
-    makefilelib.writeLine(librule);\r
-    makefilelib.writeLine("\t@echo archiving $? into $@ ...");\r
-    makefilelib.writeLine("\tif [ ! -d $(LIBDIR)/c66 ]; then $(MKDIR) $(LIBDIR)/c66 ; fi;"); \r
-               makefilelib.writeLine("\t$(ARIN) $@ $?");\r
-               makefilelib.close();   \r
-\r
-    /* Create the Epilogue; which executes after all the builds are completed. \r
-     * This is used to generate the benchmark information for the built library. \r
-     * Also add the benchmarking information file to the package. */\r
-\r
-    /* Put the temp file in object directory since javascript doesn't have a built in tmpname, \r
-     * and don't want --jobs=# with # > 1 to result in collisions */\r
-    var libFullName = lldFullLibraryPath + ".a" + target.suffix;\r
-    var tempFile = libFullName + ".xml";\r
-    Pkg.makeEpilogue += ".libraries: " + libFullName +  "_size.txt\n";\r
-    Pkg.makeEpilogue += libFullName +  "_size.txt: " + libFullName + "\n";\r
-    if ( java.lang.String(target.name).contains('66') )\r
-    {    \r
-        Pkg.makeEpilogue += "\n\t $(C6X_GEN_INSTALL_PATH)/bin/ofd6x -x " + libFullName + " > " + tempFile;\r
-        Pkg.makeEpilogue += "\n\t $(SECTTI) " + tempFile + " > " + libFullName +  "_size.txt";\r
-        Pkg.makeEpilogue += "\n\t $(RM) " + tempFile + "\n\n";\r
-    }   \r
-    else if (target.name == "M4")\r
-    {\r
-        Pkg.makeEpilogue += "\n\t $(TOOLCHAIN_PATH_M4)/bin/armofd -x " + libFullName + " > " + tempFile;\r
-        Pkg.makeEpilogue += "\n\t $(SECTTI) " + tempFile + " > " + libFullName +  "_size.txt";\r
-        Pkg.makeEpilogue += "\n\t $(RM) " + tempFile + "\n\n";\r
-    }\r
-    else\r
-    {\r
-        Pkg.makeEpilogue += "\n\t $(TOOLCHAIN_PATH_A15)/bin/$(CROSS_TOOL_PRFX)size " + libFullName + " > " + libFullName + "_size.txt";\r
-    }                \r
-    Pkg.otherFiles[Pkg.otherFiles.length++] = lldFullLibraryPath + ".a" + target.suffix + "_size.txt";\r
-    Pkg.otherFiles[Pkg.otherFiles.length++] = lldFullBuildPath + ".a" + target.suffix + ".mk";\r
-    Pkg.otherFiles[Pkg.otherFiles.length++] = lldFullLibraryPath + ".a" + target.suffix;\r
-\r
-    /* We need to clean after ourselves; extend the 'clean' target to take care of this. */\r
-    Pkg.makeEpilogue += "clean::\n";\r
-    Pkg.makeEpilogue += "\t$(RM) " + lldFullBuildPath + ".a" + target.suffix + "_size.txt\n";    \r
-    Pkg.makeEpilogue += "\t$(RMDIR) " + "$(LIBDIR)/" + "c66/ \n\n";\r
-\r
-    return lib;\r
-}\r
-\r
-/**************************************************************************\r
- * FUNCTION NAME : createMiniPkg\r
- **************************************************************************\r
- * DESCRIPTION   :\r
- *  The function is responsible for creating the mini tar package\r
- *  The MINI package has the following files:- \r
- *      - Driver Source Files. \r
- *      - Header files (exported and internal driver files) \r
- *      - Simple Makefiles. \r
- **************************************************************************/\r
-function createMiniPkg(pkgName)\r
-{\r
-    /* Get the package Name. */\r
-    var packageRepository = xdc.getPackageRepository(Pkg.name);\r
-    var packageBase       = xdc.getPackageBase(Pkg.name);\r
-    var packageName       = packageBase.substring(packageRepository.length + 1);\r
-\r
-    /* Convert the Package name by replacing back slashes with forward slashes. This is required because\r
-     * otherwise with long names the tar is unable to change directory. */\r
-    var newPkgName = new java.lang.String(packageRepository);\r
-    var newPkgRep  = newPkgName.replace('\\', '/');\r
-\r
-    /* Step1: Create the MINI Package and add the simple Big and Little Endian Makefiles to the package */\r
-    Pkg.makeEpilogue += "release: mini_pkg\n";\r
-    Pkg.makeEpilogue += "mini_pkg:\n";\r
-    Pkg.makeEpilogue += "\t tar -C " + "\"" + newPkgRep + "\"" + " -cf packages/" + pkgName + "_mini.tar " + \r
-                        packageName + "simpleC66LE.mak " + packageName + "simpleC66BE.mak\n";\r
-                        \r
-\r
-    /* Step2: Add the exported header files to the package */\r
-    var includeFiles = libUtility.listAllFiles (".h", ".", false);\r
-    for (var k = 0 ; k < includeFiles.length; k++)\r
-        Pkg.makeEpilogue += "\t tar -C " + "\"" + newPkgRep + "\"" + " -rf packages/" + pkgName + "_mini.tar " + \r
-                        packageName + includeFiles[k] + "\n";\r
-\r
-    /* Step3: Add the internal header files to the package */\r
-    includeFiles = libUtility.listAllFiles (".h", "include", true);\r
-    for (var k = 0 ; k < includeFiles.length; k++)\r
-        Pkg.makeEpilogue += "\t tar -C " + "\"" + newPkgRep + "\"" + " -rf packages/" + pkgName + "_mini.tar " + \r
-                        packageName + includeFiles[k] + "\n";\r
-\r
-    /* Step4: Add the PDSP firmware files to the package */\r
-    includeFiles = libUtility.listAllFiles (".h", "firmware", true);\r
-    for (var k = 0 ; k < includeFiles.length; k++)\r
-        Pkg.makeEpilogue += "\t tar -C " + "\"" + newPkgRep + "\"" + " -rf packages/" + pkgName + "_mini.tar " + \r
-                        packageName + includeFiles[k] + "\n";\r
-\r
-    /* Step5: Add the device specific files to the package */\r
-    includeFiles = libUtility.listAllFiles (".c", "device", true);\r
-    for (var k = 0 ; k < includeFiles.length; k++)\r
-        Pkg.makeEpilogue += "\t tar -C " + "\"" + newPkgRep + "\"" + " -rf packages/" + pkgName + "_mini.tar " + \r
-                        packageName + includeFiles[k] + "\n";\r
-\r
-    /* Step4: Add the driver source files to the package; the filter should have generated a source listing */\r
-    Pkg.makeEpilogue += "\t tar -C " + "\"" + newPkgRep + "\"" + " -T src.lst -rf packages/" + pkgName + "_mini.tar " + "\n";\r
-\r
-    /* Ensure that we clean up the mini package */\r
-    Pkg.makeEpilogue += "clean::\n";\r
-    Pkg.makeEpilogue += "\t $(RM) packages/" + pkgName + "_mini.tar\n";\r
-}\r
-\r
-\r
+/******************************************************************************
+ * FILE PURPOSE: Build Library Utilities
+ ******************************************************************************
+ * FILE NAME: buildlib.xs
+ *
+ * DESCRIPTION: 
+ *  This file contains common routines that are used by the various RM 
+ *  components.
+ *
+ * Copyright (C) 2012-2018, Texas Instruments, Inc.
+ *****************************************************************************/
+
+/**************************************************************************
+ * FUNCTION NAME : listAllFiles
+ **************************************************************************
+ * DESCRIPTION   :
+ *  Utility function which lists all files with a specific extension 
+ *  present in a directory and any directory inside it.
+ **************************************************************************/
+function listAllFiles(ext, dir, recurse)
+{     
+    var srcFile = [];
+    var d;
+
+    /* If recurse parameter is not specified we default to recursive search. */
+    if (recurse == null)
+        recurse = true;
+
+    if (dir == undefined) 
+          d = ".";
+    else 
+      d = dir;
+
+    /* Get access to the current directory. */
+    var file = new java.io.File(d);
+
+    /* Check if the file exists and it is a directory. */
+    if (file.exists() && file.isDirectory()) 
+    {
+        /* Get a list of all files in the specific directory. */
+        var fileList = file.listFiles();
+        for (var i = 0; i < fileList.length; i++) 
+        {
+            /* Dont add the generated directory 'package' and any of its files 
+             * to the list here. */
+            if (fileList[i].getName().matches("package") == false)
+            {
+                /* Check if the detected file is a directory */
+                if (fileList[i].isDirectory())
+                {
+                    /* We will recurse into the subdirectory only if required to do so. */
+                    if (recurse == true)
+                    {
+                        /* Generate the directory Name in which we will recurse. */ 
+                        var directoryName = d + "/" + fileList[i].getName();
+
+                        /* Get a list of all files in this directory */
+                        var fileListing = listAllFiles (ext, directoryName, recurse);
+                        if (fileListing != null)
+                        {
+                            /* Return a list of all file names in the directory. */
+                            for (var j = 0 ; j < fileListing.length; j++) 
+                                srcFile[srcFile.length++] = fileListing[j];
+                        }
+                    }
+                }
+                else
+                {
+                    /* This was a file. Check if the file name matches the extension */
+                    if (fileList[i].getName().endsWith(ext) == true)
+                        srcFile[srcFile.length++] = d + "/" + fileList[i].getName();
+                }
+            }
+        }
+
+        return srcFile;
+    }
+    return null;
+}
+
+
+function createMake(makefile)
+{
+    /* Create the main make file */
+    var fileModule = xdc.module('xdc.services.io.File');
+    if(makefile==undefined)
+    {
+      try{
+          makefile = fileModule.open("makefile", "w");
+         } catch (ex)
+         {
+           print("makefile cannot be written to. Please check Writing Permissions.");
+           java.lang.System.exit(1);
+         }   
+    
+      Pkg.makePrologue += "\ninclude makefile\n"; 
+         
+      Pkg.makeEpilogue += "\nclean::\n\t-$(RM)  makefile\n";
+      makefile.writeLine("#*******************************************************************************");
+      makefile.writeLine("#* FILE PURPOSE: Top level makefile for Creating Component Libraries");
+      makefile.writeLine("#*******************************************************************************");
+      makefile.writeLine("#* FILE NAME: makefile");
+      makefile.writeLine("#*");
+      makefile.writeLine("#* DESCRIPTION: Defines Compiler tools paths, libraries , Build Options ");
+      makefile.writeLine("#*");
+      makefile.writeLine("#*");
+      makefile.writeLine("#*******************************************************************************");
+      makefile.writeLine("#*");
+      makefile.writeLine("# (Mandatory) Specify where various tools are installed.");
+
+      var file = xdc.module('xdc.services.io.File');
+    
+      
+      makefile.writeLine("\n# Output for prebuilt generated libraries");
+      makefile.writeLine("export LIBDIR ?= ./lib");
+      /* use sectti.exe from path */
+      makefile.writeLine("export SECTTI ?= sectti");
+
+      /* Create INCDIR from XDCPATH */
+    
+      /* copy the environment array from the current environment */
+      var env   = java.lang.System.getenv();
+      var getxdcpath=String(java.lang.System.getenv("XDCPATH"));
+      getxdcpath= getxdcpath.replace(/\\/g,"/");
+      var keys  = env.keySet().toArray();
+      var key;
+      var stat={};
+      var env_j=[];
+      var listxdcpath = new Array();
+      for (var i = 0; i < keys.length; i++) {
+           key = String(keys[i]);
+           if((key.match("INSTALL_PATH")) || (key.match("INSTALLDIR")))
+           {
+             var keyPath=String(env.get(key));
+             keyPath=keyPath.replace(/\\/g,"/");
+             var file = xdc.module('xdc.services.io.File');
+             keyPath=file.getDOSPath(keyPath);
+             if(getxdcpath.toString().match(keyPath))
+             {
+                 listxdcpath.push({keyname: key,keypath: keyPath});
+                 while(getxdcpath.toString().match(keyPath))
+                 {
+                   getxdcpath=getxdcpath.toString().replace(keyPath,"$("+key+")");
+                 }
+             }
+           }
+    
+     }
+       var pkgroot="..";
+       for (var i = Pkg.name.split('.').length; i > 1; i--) {
+              pkgroot+="/..";
+          }
+        
+      makefile.writeLine("\n# ROOT Directory");        
+      makefile.writeLine("export ROOTDIR := "+pkgroot);
+    
+      makefile.writeLine("\n# Include Rules.make");
+      makefile.writeLine("ifndef PDK_INSTALL_DIR_RECIPE");
+      makefile.writeLine("ifeq ($(RULES_MAKE),)");
+      makefile.writeLine("include $(PDK_INSTALL_PATH)/ti/build/Rules.make");
+      makefile.writeLine("else");
+      makefile.writeLine("include $(RULES_MAKE)");
+      makefile.writeLine("endif");
+      makefile.writeLine("endif");
+
+      makefile.writeLine("\n# INCLUDE Directory");
+      makefile.writeLine("export INCDIR := "+getxdcpath+";$(ROOTDIR)");       
+    
+      makefile.writeLine("\n# Common Macros used in make");  
+      makefile.writeLine("\nifndef RM");     
+      makefile.writeLine("export RM = rm -f");
+      makefile.writeLine("endif");        
+    
+      makefile.writeLine("\nifndef CP");     
+      makefile.writeLine("export CP = cp -p");    
+      makefile.writeLine("endif");    
+        
+      makefile.writeLine("\nexport MKDIR = mkdir -p");
+    
+      makefile.writeLine("\nifndef RMDIR");         
+      makefile.writeLine("export RMDIR = rm -rf");
+      makefile.writeLine("endif");        
+    
+      makefile.writeLine("\nifndef SED"); 
+      makefile.writeLine("export SED = sed");    
+      makefile.writeLine("endif");    
+    
+      makefile.writeLine("\nifndef MAKE"); 
+      makefile.writeLine("export MAKE = make");    
+      makefile.writeLine("endif");        
+
+      makefile.writeLine("\n# PHONY Targets");                
+      makefile.writeLine(".PHONY: all clean cleanall ");    
+      
+      makefile.writeLine("\n# FORCE Targets");                
+      makefile.writeLine("FORCE: ");          
+      
+      makefile.writeLine("\n# all rule");                
+      makefile.writeLine("all: .executables");           
+      makefile.writeLine(".executables: .libraries");
+      makefile.writeLine(".libraries:");
+      
+      makefile.writeLine("\n# Clean Rule");          
+      makefile.writeLine("clean:: clean_package");                  
+      makefile.writeLine("# Clean Top Level Object Directory ");          
+      makefile.writeLine("clean_package :\n\t$(RMDIR) $(LIBDIR)/*/");  
+      makefile.writeLine("\t$(RMDIR) package/cfg");            
+   }
+   else
+   {
+     try{
+          makefile = fileModule.open("makefile", "a");
+         } catch (ex)
+         {
+           print("makefile cannot be written to. Please check Writing Permissions.");
+           java.lang.System.exit(1);
+         }  
+    
+    }
+
+ return makefile;
+}
+
+function createLibMake(device, makelibname,targetname, objectPath)
+{
+   var tooldir;
+   var cmdprefix;
+   var targetDir;
+   var stringname=String(targetname).replace("(xdc.bld.ITarget.Module)","");
+   
+   switch(stringname)
+   {
+    case String(C66LE):
+      tooldir="C6X_GEN_INSTALL_PATH";
+      cmdprefix="";
+      targetDir="c66";
+      targetname=C66LE;
+      break;
+    case String(C66BE):
+      tooldir="C6X_GEN_INSTALL_PATH";
+      cmdprefix="";
+      targetDir="c66";
+      targetname=C66BE;
+      break;
+    case String(A15LE):
+      tooldir="TOOLCHAIN_PATH_A15"; 
+      cmdprefix="CROSS_TOOL_PRFX";
+      targetDir="armv7";
+      targetname=A15LE;
+      break;
+    case String(A9LE):
+      tooldir="TOOLCHAIN_PATH_A9";
+      cmdprefix="CROSS_TOOL_PRFX";
+      targetDir="armv7";
+      targetname=A9LE;
+      break;
+    case String(A8LE):
+      tooldir="TOOLCHAIN_PATH_A8";
+      cmdprefix="CROSS_TOOL_PRFX";
+      targetDir="armv7";
+      targetname=A8LE;
+      break;
+    case String(M4LE):
+      tooldir="TOOLCHAIN_PATH_M4";
+      cmdprefix="";
+      targetDir="m4";
+      targetname=M4LE;
+      break;
+   }
+
+    var fileModule = xdc.module('xdc.services.io.File');
+    try{
+     var dstFile = new java.io.File(makelibname);
+     dstFile.getParentFile().mkdirs();    
+     libmakefile = fileModule.open(makelibname, "w");
+     /* Add to Archive list */
+    } catch (ex)
+    {
+     print(makelibname+" cannot be written to. Please check Writing Permissions.");
+     java.lang.System.exit(1);
+    }   
+    libmakefile.writeLine("#*******************************************************************************");
+    libmakefile.writeLine("#* FILE PURPOSE: Lower level makefile for Creating Component Libraries");
+    libmakefile.writeLine("#*******************************************************************************");
+    libmakefile.writeLine("#* FILE NAME: "+makelibname);
+    libmakefile.writeLine("#*");
+    libmakefile.writeLine("#* DESCRIPTION: Defines Source Files, Compilers flags and build rules");
+    libmakefile.writeLine("#*");
+    libmakefile.writeLine("#*");
+    libmakefile.writeLine("#*******************************************************************************");
+    libmakefile.writeLine("#");
+    libmakefile.writeLine("");
+    libmakefile.writeLine("#");
+    libmakefile.writeLine("# Macro definitions referenced below");
+    libmakefile.writeLine("#");
+    libmakefile.writeLine("empty =");
+    libmakefile.writeLine("space =$(empty) $(empty)");
+         
+    if ((targetname.name == "A15F") || (targetname.name == "A9F") || (targetname.name == "A8F"))
+    {
+    
+        if(stringname.match("gnu.targets"))
+        {
+            libmakefile.writeLine("CC = $("+tooldir+")/bin/$("+cmdprefix+")gcc");
+            libmakefile.writeLine("AC = $("+tooldir+")/bin/$("+cmdprefix+")as");    
+            libmakefile.writeLine("ARIN = $("+tooldir+")/bin/$("+cmdprefix+")ar");    
+            libmakefile.writeLine("LD = $("+tooldir+")/bin/$("+cmdprefix+")gcc");   
+        }
+        else
+        {
+            print("Error: Non-GNU targets are not currently supported ");
+            java.lang.System.exit(1);
+
+        }
+       
+        libmakefile.writeLine("INCS = -I. -I$(strip $(subst ;, -I,$(subst $(space),\\$(space),$(INCDIR)))) -I$("+tooldir+")/include");
+        libmakefile.writeLine("OBJEXT = o"+targetname.suffix); 
+        libmakefile.writeLine("AOBJEXT = s"+targetname.suffix);     
+        libmakefile.writeLine("CFLAGS_INTERNAL = " +targetname.ccOpts.prefix+" "+targetname.cc.opts);
+        libmakefile.writeLine("ASFLAGS_INTERNAL = " +targetname.asmOpts.prefix+" "+targetname.asm.opts);
+        libmakefile.writeLine("ARFLAGS_INTERNAL = " +targetname.ar.opts);
+        libmakefile.writeLine("LNKFLAGS_INTERNAL = " +targetname.lnk.opts);
+        libmakefile.writeLine("INTERNALDEFS = -MD -MF $@.dep");
+        libmakefile.writeLine("INTERNALLINKDEFS = -o $@ -m $@.map");  /* TBD */
+        libmakefile.writeLine("OBJDIR =  $(LIBDIR)/" + device.toString() + "/" + targetDir +"/obj"); 
+    
+    }
+    else
+    {
+  
+        if(stringname.match("ti.targets"))
+        {
+
+            var rtslibtemp = targetname.lnkOpts.suffix.toString().split("/");
+            var rtslib;
+            for(n=0;n<rtslibtemp.length;n++)
+            {
+                if(rtslibtemp[n].match(".lib"))
+                { 
+                    rtslib=rtslibtemp[n];
+                }
+            }
+
+            libmakefile.writeLine("CC = $("+tooldir+")/bin/"+targetname.cc.cmd);
+            libmakefile.writeLine("AC = $("+tooldir+")/bin/"+targetname.asm.cmd);    
+            libmakefile.writeLine("ARIN = $("+tooldir+")/bin/"+targetname.ar.cmd);    
+            libmakefile.writeLine("LD = $("+tooldir+")/bin/"+targetname.lnk.cmd);   
+            libmakefile.writeLine("RTSLIB = -l $("+tooldir+")/lib/"+rtslib);        
+        }
+        else
+        {
+            print("Error: Non-TI targets are not currently supported ");
+            java.lang.System.exit(1);
+
+        }
+       
+        libmakefile.writeLine("INCS = -I. -I$(strip $(subst ;, -I,$(subst $(space),\\$(space),$(INCDIR)))) -I$("+tooldir+")/include");
+        libmakefile.writeLine("OBJEXT = o"+targetname.suffix); 
+        libmakefile.writeLine("AOBJEXT = s"+targetname.suffix);     
+        libmakefile.writeLine("CFLAGS_INTERNAL = " +targetname.ccOpts.prefix+" "+targetname.cc.opts);
+        libmakefile.writeLine("ASFLAGS_INTERNAL = " +targetname.asmOpts.prefix+" "+targetname.asm.opts);
+        libmakefile.writeLine("ARFLAGS_INTERNAL = " +targetname.ar.opts);
+        libmakefile.writeLine("LNKFLAGS_INTERNAL = " +targetname.lnk.opts);
+        /* 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");*/
+        libmakefile.writeLine("INTERNALDEFS = -D"+stringname.replace(/\./g,"_")+"  -DMAKEFILE_BUILD -eo.$(OBJEXT) -ea.$(AOBJEXT) -fr=$(@D) -fs=$(@D) -ppa -ppd=$@.dep");
+        libmakefile.writeLine("INTERNALLINKDEFS = -o $@ -m $@.map");
+        libmakefile.writeLine("OBJDIR =  $(LIBDIR)/" + device.toString() + "/" + targetDir +"/obj"); 
+    }     
+   
+ return libmakefile;
+
+}
+
+function makeAddObjects(srcString, makefilename, srcfiles, flags,fileExt, targetName, objDir)
+{
+  var  sourcestring = (srcString + fileExt).toString().toUpperCase();
+  var  compileflagstring = sourcestring + "FLAGS";
+  var  objectliststring = sourcestring + "OBJS";
+  /* List all the source files */
+  makefilename.writeLine("\n#List the "+srcString+" Files");  
+  makefilename.writeLine(sourcestring + "= \\");
+  for(var i=0;i<srcfiles.length-1;i++)
+  {
+    makefilename.writeLine("    "+srcfiles[i]+"\\");
+  }
+    makefilename.writeLine("    "+srcfiles[i]+"\n");
+    
+ /* Flags for the source files */
+ makefilename.writeLine("# FLAGS for the "+srcString+" Files"); 
+ var compileflags="";
+ if(fileExt == "asm" && flags.aopts != undefined)
+ {
+   compileflags+=" "+flags.aopts;
+ }
+ else if((fileExt == "c" || fileExt == "sa")&& flags.copts != undefined)
+ {
+   compileflags+=" "+flags.copts;
+ } 
+
+ if(flags.incs != undefined)
+ {
+   compileflags+=" "+flags.incs;
+ }
+
+
+ makefilename.writeLine(compileflagstring+" = "+compileflags +" \n");     
+ makefilename.writeLine("# Make Rule for the "+srcString+" Files");  
+ makefilename.writeLine(objectliststring +" = $(patsubst %."+fileExt+", "+objDir+"/%.$(OBJEXT), $(" + sourcestring + "))"); 
+ makefilename.writeLine("\n$("+objectliststring+"): "+objDir+"/%.$(OBJEXT): %."+fileExt);   
+ if(fileExt == "c")
+ { 
+   makefilename.writeLine("\t-@echo cl"+targetName.suffix +" $< ...");     
+ }
+ else
+ {
+   makefilename.writeLine("\t-@echo asm"+targetName.suffix +" $< ...");      
+ }
+ makefilename.writeLine("\tif [ ! -d $(@D) ]; then $(MKDIR) $(@D) ; fi;");           
+ if(fileExt == "c")
+ {
+   if ((targetName.name == "A15F") || (targetName.name == "A9F") || (targetName.name == "A8F"))
+   {
+    makefilename.writeLine("\t$(RM) $@.dep");
+    makefilename.writeLine("\t$(CC) $(CFLAGS_INTERNAL) $("+compileflagstring+") $(INTERNALDEFS) $(INCS) $< -o $@");
+   /* 
+    TBD
+   */
+   }
+   else
+   {
+    makefilename.writeLine("\t$(RM) $@.dep");
+    makefilename.writeLine("\t$(CC) $(CFLAGS_INTERNAL) $("+compileflagstring+") $(INTERNALDEFS) $(INCS) -fc $< ");
+    makefilename.writeLine("\t-@$(CP) $@.dep $@.pp; \\");
+    makefilename.writeLine("         $(SED) -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\\\$$//' \\");
+    makefilename.writeLine("             -e '/^$$/ d' -e 's/$$/ :/' < $@.pp >> $@.dep; \\");
+    makefilename.writeLine("         $(RM) $@.pp ");
+   }
+ }
+ else if(fileExt == "asm")
+ {
+   makefilename.writeLine("\t$(AC) $(ASFLAGS_INTERNAL) $("+compileflagstring+") $(INTERNALDEFS) $(INCS) -fa $< ");
+ }
+ else if(fileExt == "sa")
+ {
+   makefilename.writeLine("\t$(AC) $(ASFLAGS_INTERNAL) $("+compileflagstring+") $(INTERNALDEFS) $(INCS) $< ");
+ }
+   makefilename.writeLine("\n#Create Empty rule for dependency");
+   makefilename.writeLine("$("+objectliststring+"):"+makefilename.$private.fd);
+   makefilename.writeLine(makefilename.$private.fd+":");
+   makefilename.writeLine("\n#Include Depedency for "+srcString+" Files");
+   makefilename.writeLine("ifneq (clean,$(MAKECMDGOALS))");
+   makefilename.writeLine(" -include $("+objectliststring+":%.$(OBJEXT)=%.$(OBJEXT).dep)");
+   makefilename.writeLine("endif");
+}
+
+/**************************************************************************
+ * FUNCTION NAME : buildLibrary
+ **************************************************************************
+ * DESCRIPTION   :
+ *  Utility function which will build a specific library
+ **************************************************************************/
+var makefilelocal;
+
+function buildLibrary (socName, isSoc, libOptions, libName, target, libFiles) 
+{
+    var targetDir;
+    var objExtDir;
+    
+
+    if (target.name == "A15F")
+    {
+        targetDir = "armv7";
+    }
+    else if (target.name == "A9F")
+    {
+        targetDir = "armv7";
+    }
+    else if (target.name == "A8F")
+
+    {
+        targetDir = "armv7";
+    }
+    else if (target.name == "M4")
+    {
+        targetDir = "m4";
+    }
+    else
+    {
+        targetDir = "c66";
+    }
+    
+    /* Derive the operating system and soc names */
+    if (isSoc == "true") {
+        var libNameExp = libName+"."+socName;
+        targetDir = socName+"/"+targetDir;
+        objExtDir = "soc";
+    }
+    else  {
+        var libNameExp = libName;
+        objExtDir = "all";
+    }
+
+
+    var lldFullLibraryPath = "./lib/" + targetDir +"/" + libNameExp;
+    var lldFullBuildPath = "./build/" + targetDir +"/" + libNameExp;
+    var lldFullLibraryPathMake = "$(LIBDIR)/" + targetDir +"/" + libNameExp;
+
+    /* Create Main make file in the root of package folder */
+    makefilelocal = createMake(makefilelocal);
+
+    /* Write the rule to make library in main makefile */
+    lib = lldFullBuildPath+".a"+target.suffix;
+    libMake = lldFullLibraryPathMake+".a"+target.suffix;
+    var objectPath= "./package/"+lldFullBuildPath;
+    makefilelocal.writeLine("\n\n# Make rule to create "+libMake+" library");
+    makefilelocal.writeLine(".libraries: "+ libMake);
+    makefilelocal.writeLine(libMake+": FORCE\n\t$(MAKE) -f "+lib+".mk $@");                                 
+
+    /* Create Library make file in the lib folder */
+    var makefilelib= createLibMake(socName, lib+".mk",target,objectPath);  
+
+    /* Rule to clean library in main makefile */
+    makefilelocal.writeLine("# Rule to clean "+libMake+" library");                                              
+    makefilelocal.writeLine("clean ::\n\t$(RM) "+ libMake);                                          
+    librule="\n\n"+libMake+" :";
+
+    /* Add files to be compiled */
+    /* Separate out the C and assembly files */
+    var cfiles= new Array();
+    var afiles= new Array();
+    var safiles= new Array();
+    for each(var srcFile in libFiles)
+    {
+        var srcFile=String(srcFile);
+        var dot = srcFile.lastIndexOf(".");
+        var extension = srcFile.substr(dot,srcFile.length);      
+        if(extension == ".c")
+        {
+          cfiles.push(srcFile);
+        }
+        else if(extension == ".sa")
+        {
+          safiles.push(srcFile);
+        }
+        else if(extension == ".asm")
+        {
+           afiles.push(srcFile);
+        }
+        else
+        {
+           print("ERROR: Unsupported file extension");
+           java.lang.System.exit(1);
+        }
+     }
+    if(cfiles.length > 0)
+    {                                                
+      makeAddObjects("COMMONSRC",makefilelib,cfiles,libOptions,"c",target, "$(OBJDIR)");
+      librule += " $(COMMONSRCCOBJS)";                   
+    }
+    if(afiles.length > 0)
+    {                                                
+      makeAddObjects("COMMONSRC",makefilelib,afiles,libOptions,"asm",target, "$(OBJDIR)");
+      librule += " $(COMMONSRCASMOBJS)";                   
+    }
+    if(safiles.length > 0)
+    {                                                
+      makeAddObjects("COMMONSRC",makefilelib,safiles,libOptions,"sa",target, "$(OBJDIR)");
+      librule += " $(COMMONSRCSAOBJS)";                   
+    }
+
+    makefilelib.writeLine(librule);
+    makefilelib.writeLine("\t@echo archiving $? into $@ ...");
+    makefilelib.writeLine("\tif [ ! -d $(LIBDIR)/" + targetDir + " ]; then $(MKDIR) $(LIBDIR)/" + targetDir + " ; fi;"); 
+    makefilelib.writeLine("\t$(ARIN) $(ARFLAGS_INTERNAL) $@ $?");
+    makefilelib.close();   
+
+    /* Create the Epilogue; which executes after all the builds are completed. 
+     * This is used to generate the benchmark information for the built library. 
+     * Also add the benchmarking information file to the package. */
+
+    /* Put the temp file in object directory since javascript doesn't have a built in tmpname, 
+     * and don't want --jobs=# with # > 1 to result in collisions */
+    var libFullName = lldFullLibraryPath + ".a" + target.suffix;
+    var tempFile = libFullName + ".xml";
+    Pkg.makeEpilogue += ".libraries: " + libFullName +  "_size.txt\n";
+    Pkg.makeEpilogue += libFullName +  "_size.txt: " + libFullName + "\n";
+    if ( java.lang.String(target.name).contains('66') )
+    {    
+        Pkg.makeEpilogue += "\n\t $(C6X_GEN_INSTALL_PATH)/bin/ofd6x -x " + libFullName + " > " + tempFile;
+        Pkg.makeEpilogue += "\n\t $(SECTTI) " + tempFile + " > " + libFullName +  "_size.txt";
+        Pkg.makeEpilogue += "\n\t $(RM) " + tempFile + "\n\n";
+    }   
+    else if (target.name == "M4")
+    {
+        Pkg.makeEpilogue += "\n\t $(TOOLCHAIN_PATH_M4)/bin/armofd -x " + libFullName + " > " + tempFile;
+        Pkg.makeEpilogue += "\n\t $(SECTTI) " + tempFile + " > " + libFullName +  "_size.txt";
+        Pkg.makeEpilogue += "\n\t $(RM) " + tempFile + "\n\n";
+    }
+    else
+    {
+        Pkg.makeEpilogue += "\n\t $(TOOLCHAIN_PATH_A15)/bin/$(CROSS_TOOL_PRFX)size " + libFullName + " > " + libFullName + "_size.txt";
+    }                
+    Pkg.otherFiles[Pkg.otherFiles.length++] = lldFullLibraryPath + ".a" + target.suffix + "_size.txt";
+    Pkg.otherFiles[Pkg.otherFiles.length++] = lldFullBuildPath + ".a" + target.suffix + ".mk";
+    Pkg.otherFiles[Pkg.otherFiles.length++] = lldFullLibraryPath + ".a" + target.suffix;
+
+    /* We need to clean after ourselves; extend the 'clean' target to take care of this. */
+    Pkg.makeEpilogue += "\nclean::\n";
+    Pkg.makeEpilogue += "\t$(RM) " + lldFullBuildPath + ".a" + target.suffix + "_size.txt\n";    
+    Pkg.makeEpilogue += "\t$(RMDIR) " + "$(LIBDIR)/" + targetDir + "/ \n\n";
+
+    return lib;
+}
+
+
+