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