author | Aravind Batni <aravindbr@ti.com> | |
Tue, 2 Feb 2016 22:42:05 +0000 (17:42 -0500) | ||
committer | Aravind Batni <aravindbr@ti.com> | |
Tue, 2 Feb 2016 22:42:05 +0000 (17:42 -0500) |
diff --combined build/buildlib.xs
index f9aadb7029242370052982081621557b0c825848,e9732bceecab36483c442b02d9404ffdbb69e2d5..f9aadb7029242370052982081621557b0c825848
mode 100644,100644..100755
mode 100644,100644..100755
--- 1/build/buildlib.xs
--- 2/build/buildlib.xs
+++ b/build/buildlib.xs
-/******************************************************************************\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-2015, 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 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;
+}
+
+
+
diff --combined config.bld
index 05f7e2b5d833d9aa61bbc105eb272fc60b6ee517,dc67655c93a2252d6fdd42f8b3f03e2bfe96ac6b..fbce179df86cd2c46b546a242f655cbbe950a71e
mode 100644,100644..100755
mode 100644,100644..100755
--- 1/config.bld
--- 2/config.bld
+++ b/config.bld
* and is responsible for configuration of the paths for the various tools\r
* required to build RM.\r
*\r
- * Copyright (C) 2012-2013, Texas Instruments, Inc.\r
+ * Copyright (C) 2012-2015, Texas Instruments, Inc.\r
*****************************************************************************/\r
\r
/* Get the Tools Base directory from the Environment Variable. */\r
-var toolsBaseDir = java.lang.System.getenv("C6X_GEN_INSTALL_PATH");\r
+var c66ToolsBaseDir = java.lang.System.getenv("C6X_GEN_INSTALL_PATH");\r
+var m4ToolsBaseDir = java.lang.System.getenv("TOOLCHAIN_PATH_M4");\r
+var a15ToolsBaseDir = java.lang.System.getenv("TOOLCHAIN_PATH_A15");\r
+var a9ToolsBaseDir = java.lang.System.getenv("TOOLCHAIN_PATH_A9");\r
+var a8ToolsBaseDir = java.lang.System.getenv("TOOLCHAIN_PATH_A8");\r
+\r
+/* Get the extended debug flags for C66x, \r
+ * did not change the name for backwards compatibilty */\r
+var extDbgFlags = java.lang.System.getenv("EXTDBGFLAGS");\r
+\r
+/* Get the extended debug flags for A15 */\r
+var extDbgFlags_a15 = java.lang.System.getenv("EXTDBGFLAGS_A15");\r
+\r
+/* Get the extended debug flags for A8 */\r
+var extDbgFlags_a8 = java.lang.System.getenv("EXTDBGFLAGS_A8");\r
+\r
+/* Get the extended debug flags for A9 */\r
+var extDbgFlags_a9 = java.lang.System.getenv("EXTDBGFLAGS_A9");\r
+\r
+/* Get the extended debug flags for M4 */\r
+var extDbgFlags_m4 = java.lang.System.getenv("EXTDBGFLAGS_M4");\r
\r
/* Get the base directory for the RM Package */\r
var lldPath = new java.io.File(".//").getPath();\r
var lldPartNumber = java.lang.System.getenv("PARTNO");\r
\r
/* Include Path */\r
-var lldIncludePath = " -i" + lldPath + "/src" + " -i" + lldPath + " -i" + lldPath + "/test" + " -i" + lldPath + "/util/libfdt";\r
+var lldIncludePath = " -I" + lldPath + "/src" + " -I" + lldPath + " -I" + lldPath + "/test" + " -I" + lldPath + "/util/libfdt";\r
\r
/* Configure the RM Release Version Information */\r
/* 3 steps: remove SPACE and TAB, convert to string and split to make array */\r
\r
/* C66 ELF compiler configuration for Little Endian Mode. */\r
var C66LE = xdc.useModule('ti.targets.elf.C66');\r
-C66LE.rootDir = toolsBaseDir;\r
+C66LE.rootDir = c66ToolsBaseDir;\r
C66LE.ccOpts.prefix = "-mo -o3 --gcc -q -k -eo.o";\r
+if(extDbgFlags) \r
+ C66LE.ccOpts.prefix = C66LE.ccOpts.prefix + " " + extDbgFlags; \r
\r
/* C66 ELF compiler configuration for Big Endian Mode. */\r
var C66BE = xdc.useModule('ti.targets.elf.C66_big_endian');\r
-C66BE.rootDir = toolsBaseDir;\r
+C66BE.rootDir = c66ToolsBaseDir;\r
C66BE.ccOpts.prefix = "-mo -o3 --gcc -q -k -eo.o -DBIGENDIAN";\r
+if(extDbgFlags) \r
+ C66BE.ccOpts.prefix = C66BE.ccOpts.prefix + " " + extDbgFlags;\r
+\r
+/* ARMv7 A15 compiler configuration */\r
+var A15LE = xdc.useModule('gnu.targets.arm.A15F');\r
+A15LE.rootDir = a15ToolsBaseDir;\r
+A15LE.ccOpts.prefix = "-mno-unaligned-access -c -mtune=cortex-a15 -marm -DDRA7xx -gstrict-dwarf -Wall -D__ARMv7 -D_LITTLE_ENDIAN=1";\r
+if(extDbgFlags_a15) \r
+ A15LE.ccOpts.prefix = A15LE.ccOpts.prefix + " " + extDbgFlags_a15; \r
+\r
+/* ARMv7 A9 compiler configuration */\r
+var A9LE = xdc.useModule('gnu.targets.arm.A9F');\r
+A9LE.rootDir = a9ToolsBaseDir;\r
+A9LE.ccOpts.prefix = "-mno-unaligned-access -c -mtune=cortex-a9 -marm -DDRA7xx -gstrict-dwarf -Wall -D__ARMv7 -D_LITTLE_ENDIAN=1";\r
+if(extDbgFlags_a9) \r
+ A9LE.ccOpts.prefix = A9LE.ccOpts.prefix + " " + extDbgFlags_a9; \r
+\r
+/* ARMv7 A8 compiler configuration */\r
+var A8LE = xdc.useModule('gnu.targets.arm.A8F');\r
+A8LE.rootDir = a8ToolsBaseDir;\r
+A8LE.ccOpts.prefix = "-mno-unaligned-access -c -mtune=cortex-a8 -marm -DDRA7xx -gstrict-dwarf -Wall -D__ARMv7 -D_LITTLE_ENDIAN=1";\r
+if(extDbgFlags_a8) \r
+ A8LE.ccOpts.prefix = A8LE.ccOpts.prefix + " " + extDbgFlags_a8; \r
+\r
+/* M4 ELF compiler configuration for Little Endian Mode. */\r
+var M4LE = xdc.useModule('ti.targets.arm.elf.M4');\r
+M4LE.rootDir = m4ToolsBaseDir;\r
+M4LE.ccOpts.prefix = "-o4 -qq -pdsw255 -DMAKEFILE_BUILD";\r
+if(extDbgFlags_m4)\r
+ M4LE.ccOpts.prefix = M4LE.ccOpts.prefix + " " + extDbgFlags_m4; \r
\r
/* Check if we need to run the STATIC Analysis or not? */\r
var coverityAnalysis = java.lang.System.getenv("STATIC_ANALYZE");\r
\r
}\r
\r
-/* List all the build targets here. */\r
-Build.targets = [ C66LE, C66BE ];\r
+/* Create the SoC List */\r
+var socs = { \r
+ /* device independent libraries */\r
+ all :\r
+ {\r
+ /* Build this library */\r
+ build: "true",\r
+ /* SoC lib enabled */\r
+ socDevLib: "false",\r
+ /* dma lib enabled */\r
+ dmaDevLib: "false", \r
+ /* Library options */\r
+ copts: "",\r
+ /* target lists, kept blank now, would be updated based on argument lists */\r
+ targets: []\r
+ },\r
++ k2g :\r
++ {\r
++ /* this variable would be reinitialized to true, if XDCARGS contains k2g */\r
++ build: "false", \r
++ /* SoC lib enabled */\r
++ socDevLib: "false",\r
++ /* dma lib enabled */\r
++ dmaDevLib: "false", \r
++ /* Library options */\r
++ copts: " -DSOC_K2G",\r
++ /* target list */\r
++ targets: [ C66LE, C66BE, A15LE]\r
++ },\r
+ k2h :\r
+ {\r
+ /* this variable would be reinitialized to true, if XDCARGS contains k2h */\r
+ build: "false", \r
+ /* SoC lib enabled */\r
+ socDevLib: "false",\r
+ /* dma lib enabled */\r
+ dmaDevLib: "false", \r
+ /* Library options */\r
+ copts: " -DSOC_K2H",\r
+ /* target list */\r
+ targets: [ C66LE, C66BE, A15LE]\r
+ },\r
+ k2k :\r
+ {\r
+ /* this variable would be reinitialized to true, if XDCARGS contains k2k */\r
+ build: "false", \r
+ /* SoC lib enabled */\r
+ socDevLib: "false",\r
+ /* dma lib enabled */\r
+ dmaDevLib: "false", \r
+ /* Library options */\r
+ copts: " -DSOC_K2K",\r
+ /* target list */\r
+ targets: [ C66LE, C66BE, A15LE]\r
+ },\r
+ k2e :\r
+ {\r
+ /* this variable would be reinitialized to true, if XDCARGS contains k2e */\r
+ build: "false", \r
+ /* SoC lib enabled */\r
+ socDevLib: "false",\r
+ /* dma lib enabled */\r
+ dmaDevLib: "false", \r
+ /* Library options */\r
+ copts: " -DSOC_K2E",\r
+ /* target list */\r
+ targets: [ C66LE, C66BE, A15LE]\r
+ },\r
+ k2l :\r
+ {\r
+ /* this variable would be reinitialized to true, if XDCARGS contains k2l */\r
+ build: "false", \r
+ /* SoC lib enabled */\r
+ socDevLib: "false",\r
+ /* dma lib enabled */\r
+ dmaDevLib: "false", \r
+ /* Library options */\r
+ copts: " -DSOC_K2L",\r
+ /* target list */\r
+ targets: [ C66LE, C66BE, A15LE]\r
+ },\r
+\r
+ c6678 :\r
+ {\r
+ /* this variable would be reinitialized to true, if XDCARGS contains k2k */\r
+ build: "false", \r
+ /* SoC lib enabled */\r
+ socDevLib: "false",\r
+ /* dma lib enabled */\r
+ dmaDevLib: "false", \r
+ /* Library options */\r
+ copts: " -DSOC_C6678",\r
+ /* target list */\r
+ targets: [ C66LE, C66BE]\r
+ },\r
+\r
+ c6657 :\r
+ {\r
+ /* this variable would be reinitialized to true, if XDCARGS contains k2k */\r
+ build: "false", \r
+ /* SoC lib enabled */\r
+ socDevLib: "false",\r
+ /* dma lib enabled */\r
+ dmaDevLib: "false", \r
+ /* Library options */\r
+ copts: " -DSOC_C6657",\r
+ /* target list */\r
+ targets: [ C66LE, C66BE]\r
+ }\r
+};\r
+\r
+/**************************************************************************\r
+ * FUNCTION NAME : merge\r
+ **************************************************************************\r
+ * DESCRIPTION :\r
+ * The function is used to merge two arrarys\r
+ **************************************************************************/\r
+function merge() {\r
+ var args = arguments;\r
+ var hash = {};\r
+ var arr = [];\r
+ for (var i = 0; i < args.length; i++) {\r
+ for (var j = 0; j < args[i].length; j++) {\r
+ if (hash[args[i][j]] !== true) {\r
+ arr[arr.length] = args[i][j];\r
+ hash[args[i][j]] = true;\r
+ }\r
+ }\r
+ }\r
+ return arr;\r
+}\r
+\r
+/* Grab input from XDCARGS */\r
+var buildArguments = [];\r
+\r
+/* Construct the build arguments */\r
+for (var tmp=0; arguments[tmp] != undefined; tmp++)\r
+{\r
+\r
+ /* If no arguments are provided, override for building all */\r
+ if ( ( arguments.length == 1) && (arguments[tmp].equals("./config.bld")) )\r
+ buildArguments[buildArguments.length++] = "all";\r
+ else\r
+ buildArguments[buildArguments.length++] = arguments[tmp];\r
+}\r
+\r
+/* Build targets on this build */\r
+var build_targets = [];\r
+var soc_names = Object.keys(socs);\r
+\r
+for (var i=0; i < buildArguments.length; i++ ) {\r
+ /* Build it for all targets */\r
+ if (buildArguments[i] == "all") {\r
+ for (var j = 0; j < soc_names.length; j++) {\r
+ build_targets = merge (build_targets.slice(0), socs[soc_names[j]].targets.slice(0));\r
+ /* Set build to "true" for that SoC */\r
+ socs[soc_names[j]].build = "true";\r
+ }\r
+ }\r
+ else {\r
+ /* Skip the first argument, which is ./config.bld to get to next SoCs */\r
+ if (i == 0) continue; \r
+ /* Set that build to true if it is found in supported build socs */\r
+ for (j = 0; j < soc_names.length; j++) {\r
+ if (buildArguments[i] == soc_names[j]) {\r
+ socs[buildArguments[i]].build = "true";\r
+ build_targets = merge (build_targets.slice(0), socs[buildArguments[i]].targets.slice(0));\r
+ break;\r
+ }\r
+ }\r
+ } \r
+}\r
+\r
+/* Update the Build target generated list */\r
+socs["all"].targets = build_targets; \r
+Build.targets = build_targets;\r
+\r
diff --combined package.xdc
index c54ff8a91be8a4229abb61b81d8a9d10134676fd,44846598036b0d5c5749beb1c59fb62233a3526c..c54ff8a91be8a4229abb61b81d8a9d10134676fd
mode 100644,100644..100755
mode 100644,100644..100755
--- 1/package.xdc
--- 2/package.xdc
+++ b/package.xdc
* Copyright (C) 2012-2015, Texas Instruments, Inc.\r
*****************************************************************************/\r
\r
-package ti.drv.rm[2, 2, 0, 0] {\r
+package ti.drv.rm[2, 2, 0, 00] {\r
module Settings;\r
}\r
diff --combined test/k2e/c66/bios/rmK2EC66DspMtBiosTestProject.txt
index 6da3a578499a196ddaa289ac8d9ec960a2e369f6,dfbf6387b562252c0b9cc18829a282e245392276..6da3a578499a196ddaa289ac8d9ec960a2e369f6
mode 100644,100644..100755
mode 100644,100644..100755
-ccs.linkFile "PDK_INSTALL_PATH/ti/drv/rm/test/dts_files/server-policy.c"
-ccs.linkFile "PDK_INSTALL_PATH/ti/drv/rm/test/k2e/c66/bios/rm_osal.c"
-ccs.linkFile "PDK_INSTALL_PATH/ti/drv/rm/test/k2e/c66/bios/rm_test_sc.cfg"
--ccs.setCompilerOptions "-mv6600 -g -DDEVICE_K2E --diag_warning=225 -I${PDK_INSTALL_PATH}/ti/drv/rm"
+-ccs.setCompilerOptions "-mv6600 -g -DSOC_K2E --diag_warning=225 -I${PDK_INSTALL_PATH}/ti/drv/rm"
-rtsc.enableRtsc
diff --combined test/k2g/c66/bios/rmK2GC66A15LinuxDspClientTestProject.txt
index 0000000000000000000000000000000000000000,a4642c91b5f766b065741299fd4885c22fc8a5c6..a4642c91b5f766b065741299fd4885c22fc8a5c6
mode 000000,100644..100644
mode 000000,100644..100644
--- /dev/null
+ -ccs.linkFile "PDK_INSTALL_PATH/ti/drv/rm/test/src/dsp_client.c"
+ -ccs.linkFile "PDK_INSTALL_PATH/ti/drv/rm/test/dts_files/static-policy.c"
+ -ccs.linkFile "PDK_INSTALL_PATH/ti/drv/rm/test/k2g/c66/bios/rm_osal.c"
+ -ccs.linkFile "PDK_INSTALL_PATH/ti/drv/rm/test/k2g/c66/bios/dsp_client.cfg"
+ -ccs.setCompilerOptions "-mv6600 -g -DDEVICE_K2G --diag_warning=225 -I${PDK_INSTALL_PATH}/ti/drv/rm"
+ -rtsc.enableRtsc
+
diff --combined test/k2h/c66/bios/rmK2HC66DspMtBiosTestProject.txt
index a1e4305892d4bcdcff8ab508d2d7b1c70be40eb7,40001221cda0da7fd2de312c8413346c4f6720eb..a1e4305892d4bcdcff8ab508d2d7b1c70be40eb7
mode 100644,100644..100755
mode 100644,100644..100755
-ccs.linkFile "PDK_INSTALL_PATH/ti/drv/rm/test/dts_files/server-policy.c"
-ccs.linkFile "PDK_INSTALL_PATH/ti/drv/rm/test/k2h/c66/bios/rm_osal.c"
-ccs.linkFile "PDK_INSTALL_PATH/ti/drv/rm/test/k2h/c66/bios/rm_test_sc.cfg"
--ccs.setCompilerOptions "-mv6600 -g -DDEVICE_K2H --diag_warning=225 -I${PDK_INSTALL_PATH}/ti/drv/rm"
+-ccs.setCompilerOptions "-mv6600 -g -DSOC_K2H --diag_warning=225 -I${PDK_INSTALL_PATH}/ti/drv/rm"
-rtsc.enableRtsc
diff --combined test/k2k/c66/bios/rmK2KC66DspMtBiosTestProject.txt
index 3dd1dc7436bdb7dd735bf8c011b968659bf7c606,be2bf9f1eaa71acb9d8f18bd8c6246ebaaeb776b..3dd1dc7436bdb7dd735bf8c011b968659bf7c606
mode 100644,100644..100755
mode 100644,100644..100755
-ccs.linkFile "PDK_INSTALL_PATH/ti/drv/rm/test/dts_files/server-policy.c"
-ccs.linkFile "PDK_INSTALL_PATH/ti/drv/rm/test/k2k/c66/bios/rm_osal.c"
-ccs.linkFile "PDK_INSTALL_PATH/ti/drv/rm/test/k2k/c66/bios/rm_test_sc.cfg"
--ccs.setCompilerOptions "-mv6600 -g -DDEVICE_K2K --diag_warning=225 -I${PDK_INSTALL_PATH}/ti/drv/rm"
+-ccs.setCompilerOptions "-mv6600 -g -DSOC_K2K --diag_warning=225 -I${PDK_INSTALL_PATH}/ti/drv/rm"
-rtsc.enableRtsc
diff --combined test/k2k/c66/bios/rm_test_sc.cfg
index ead91682db8dfe5d921da5fc8544cddc45ca24d0,cb0e94de5db4d88aee6243e149fa43257efb8007..ead91682db8dfe5d921da5fc8544cddc45ca24d0
mode 100644,100644..100755
mode 100644,100644..100755
/*
* Get the list of names that the build device supports.
* I.e. ["CORE0", "CORE1", "CORE2" ... ]
- */;
+ */
var nameList = ["CORE0"];
/*
diff --combined test/k2l/c66/bios/rmK2LC66DspMtBiosTestProject.txt
index bb51317e468b0ddd2b50526b08a8e6c4ecf964f7,6c13611af320309d600e43366b3f24d7f3734466..bb51317e468b0ddd2b50526b08a8e6c4ecf964f7
mode 100644,100644..100755
mode 100644,100644..100755
-ccs.linkFile "PDK_INSTALL_PATH/ti/drv/rm/test/dts_files/server-policy.c"
-ccs.linkFile "PDK_INSTALL_PATH/ti/drv/rm/test/k2l/c66/bios/rm_osal.c"
-ccs.linkFile "PDK_INSTALL_PATH/ti/drv/rm/test/k2l/c66/bios/rm_test_sc.cfg"
--ccs.setCompilerOptions "-mv6600 -g -DDEVICE_K2L --diag_warning=225 -I${PDK_INSTALL_PATH}/ti/drv/rm"
+-ccs.setCompilerOptions "-mv6600 -g -DSOC_K2L --diag_warning=225 -I${PDK_INSTALL_PATH}/ti/drv/rm"
-rtsc.enableRtsc