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