1 /*
2 * Copyright (c) 2013-2014 Texas Instruments Incorporated - http://www.ti.com
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 *
12 * * Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 *
16 * * Neither the name of Texas Instruments Incorporated nor the names of
17 * its contributors may be used to endorse or promote products derived
18 * from this software without specific prior written permission.
19 *
20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
22 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
27 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
28 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
29 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
30 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 */
33 /*
34 * ======== Build.xs ========
35 */
37 var BIOS = null;
38 var Build = null;
39 var Ipc = null;
41 var custom28xOpts = " -q -mo ";
42 var custom6xOpts = " -q -mi10 -mo -pdr -pden -pds=238 -pds=880 -pds1110 ";
43 var customARP32xOpts = " -q --gen_func_subsections ";
44 var customArmOpts = " -q -ms --opt_for_speed=2 ";
45 var customGnuArmM3Opts = " ";
46 var customGnuArmM4Opts = " ";
47 var customGnuArmM4FOpts = " ";
48 var customGnuArmA9Opts = " ";
49 var customGnuArmA8Opts = " ";
50 var customGnuArmA15Opts = " ";
52 var ccOptsList = {
53 "ti.targets.C28_large" : custom28xOpts,
54 "ti.targets.C28_float" : custom28xOpts,
55 "ti.targets.C64P" : custom6xOpts,
56 "ti.targets.elf.C64P" : custom6xOpts,
57 "ti.targets.C64P_big_endian" : custom6xOpts,
58 "ti.targets.elf.C64P_big_endian" : custom6xOpts,
59 "ti.targets.C674" : custom6xOpts,
60 "ti.targets.elf.C674" : custom6xOpts,
61 "ti.targets.elf.C67P" : custom6xOpts,
62 "ti.targets.elf.C64T" : custom6xOpts,
63 "ti.targets.elf.C66" : custom6xOpts,
64 "ti.targets.elf.C66_big_endian" : custom6xOpts,
65 "ti.targets.arp32.elf.ARP32" : customARP32xOpts,
66 "ti.targets.arp32.elf.ARP32_far" : customARP32xOpts,
67 "ti.targets.arm.elf.Arm9" : customArmOpts,
68 "ti.targets.arm.elf.A8F" : customArmOpts,
69 "ti.targets.arm.elf.A8Fnv" : customArmOpts,
70 "ti.targets.arm.elf.M3" : customArmOpts,
71 "ti.targets.arm.elf.M4" : customArmOpts,
72 "ti.targets.arm.elf.M4F" : customArmOpts,
73 "gnu.targets.arm.M3" : customGnuArmM3Opts,
74 "gnu.targets.arm.M4" : customGnuArmM4Opts,
75 "gnu.targets.arm.M4F" : customGnuArmM4FOpts,
76 "gnu.targets.arm.A8F" : customGnuArmA8Opts,
77 "gnu.targets.arm.A9F" : customGnuArmA9Opts,
78 "gnu.targets.arm.A15F" : customGnuArmA15Opts,
79 };
81 /*
82 * ======== module$meta$init ========
83 */
84 function module$meta$init()
85 {
86 /* Only process during "cfg" phase */
87 if (xdc.om.$name != "cfg") {
88 return;
89 }
91 Build = this;
93 /*
94 * Set default verbose level for custom build flow
95 * User can override this in their cfg file.
96 */
97 var SourceDir = xdc.module("xdc.cfg.SourceDir");
98 SourceDir.verbose = 2;
100 /* register onSet hooks */
101 var GetSet = xdc.module("xdc.services.getset.GetSet");
102 GetSet.onSet(this, "libType", _setLibType);
104 /* Construct default customCCOpts value.
105 * User can override this in their cfg file.
106 */
107 Build.customCCOpts = Build.getDefaultCustomCCOpts();
108 }
110 /*
111 * ======== module$use ========
112 */
113 function module$use()
114 {
115 BIOS = xdc.module("ti.sysbios.BIOS");
116 var profile;
118 /* inform ti.sdo.utils.Build *not* to contribute libraries */
119 // xdc.module("ti.sdo.utils.Build").doBuild = false;
121 /* if Build.libType is undefined, use BIOS.libType */
122 if (Build.libType == undefined) {
123 switch (BIOS.libType) {
124 case BIOS.LibType_Instrumented:
125 Build.libType = Build.LibType_Instrumented;
126 break;
127 case BIOS.LibType_NonInstrumented:
128 Build.libType = Build.LibType_NonInstrumented;
129 break;
130 case BIOS.LibType_Custom:
131 Build.libType = Build.LibType_Custom;
132 break;
133 case BIOS.LibType_Debug:
134 Build.libType = Build.LibType_Debug;
135 break;
136 }
137 }
139 /* Get the profile associated with the ti.sdo.ipc package. The
140 * profile may be specified per package with a line like this
141 * in your .cfg script:
142 *
143 * xdc.loadPackage('ti.sdo.ipc').profile = "release";
144 */
145 if (this.$package.profile != undefined) {
146 profile = this.$package.profile;
147 }
148 else {
149 profile = Program.build.profile;
150 }
152 /* gracefully handle non-supported whole_program profiles */
153 if (profile.match(/whole_program/) &&
154 (Build.libType != Build.LibType_Debug)) {
156 /* allow build to proceed */
157 Build.libType = Build.LibType_Debug;
158 /* but warning the user */
159 Build.$logWarning(
160 "The '" + profile + "' build profile will not be supported " +
161 "in future releases of IPC. Use 'release' or 'debug' profiles " +
162 "together with the 'Build.libType' configuration parameter to " +
163 "specify your preferred library. See the compatibility section " +
164 "of your IPC release notes for more information.",
165 "Profile Deprecation Warning", Build);
166 }
168 /* inform getLibs() about location of library */
169 switch (Build.libType) {
170 case Build.LibType_Instrumented:
171 this.$private.libraryName = "/ipc.a" + Program.build.target.suffix;
172 this.$private.outputDir = this.$package.packageBase + "lib/" +
173 (BIOS.smpEnabled ? "smpipc/instrumented/":"ipc/instrumented/");
174 break;
176 case Build.LibType_NonInstrumented:
177 this.$private.libraryName = "/ipc.a" + Program.build.target.suffix;
178 this.$private.outputDir = this.$package.packageBase + "lib/" +
179 (BIOS.smpEnabled ? "smpipc/nonInstrumented/" :
180 "ipc/nonInstrumented/");
181 break;
183 case Build.LibType_Debug:
184 case Build.LibType_Custom:
185 this.$private.libraryName = "/ipc.a" + Program.build.target.suffix;
186 var SourceDir = xdc.useModule("xdc.cfg.SourceDir");
187 /* if building a pre-built library */
188 if (BIOS.buildingAppLib == false) {
189 var appName = Program.name.substring(0,
190 Program.name.lastIndexOf('.'));
191 this.$private.libDir = this.$package.packageBase + Build.libDir;
192 if (!java.io.File(this.$private.libDir).exists()) {
193 java.io.File(this.$private.libDir).mkdir();
194 }
195 }
196 /*
197 * If building an application in CCS or package.bld world
198 * and libDir has been specified
199 */
200 if ((BIOS.buildingAppLib == true) && (Build.libDir !== null)) {
201 SourceDir.outputDir = Build.libDir;
202 var src = SourceDir.create("ipc");
203 src.libraryName = this.$private.libraryName.substring(1);
204 this.$private.outputDir = src.getGenSourceDir();
205 }
206 else {
207 var curPath = java.io.File(".").getCanonicalPath();
208 /* If package.bld world AND building an application OR
209 * pre-built lib... */
210 if (java.io.File(curPath).getName() != "configPkg") {
211 var appName = Program.name.substring(0,
212 Program.name.lastIndexOf('.'));
213 appName = appName + "_p" + Program.build.target.suffix +
214 ".src";
215 SourceDir.outputDir = "package/cfg/" + appName;
216 SourceDir.toBuildDir = ".";
217 var src = SourceDir.create("ipc");
218 src.libraryName = this.$private.libraryName.substring(1);
219 this.$private.outputDir = src.getGenSourceDir();
220 }
221 /* Here ONLY if building an application in CCS world */
222 else {
223 /* request output source directory for generated files */
224 var appName = Program.name.substring(0,
225 Program.name.lastIndexOf('.'));
226 appName = appName + "_" + Program.name.substr(
227 Program.name.lastIndexOf('.')+1);
228 SourceDir.toBuildDir = "..";
229 var src = SourceDir.create("ipc/");
230 src.libraryName = this.$private.libraryName.substring(1);
232 /* save this directory in our private state (to be
233 * read during generation, see Gen.xdt)
234 */
235 this.$private.outputDir = src.getGenSourceDir();
236 }
237 }
238 break;
239 }
240 }
242 /*
243 * ======== module$validate ========
244 * Some redundant tests are here to catch changes since
245 * module$static$init() and instance$static$init().
246 */
247 function module$validate()
248 {
249 var Defaults = xdc.module('xdc.runtime.Defaults');
250 var Diags = xdc.module("xdc.runtime.Diags");
251 var libType = getEnumString(Build.libType);
253 switch (Build.libType) {
254 case Build.LibType_Instrumented:
255 if (Build.assertsEnabled == false) {
256 Build.$logWarning(
257 "Build.assertsEnabled must be set to true when " +
258 "Build.libType == Build." + libType + ". " + "Set " +
259 "Build.libType = Build.LibType_Custom to build a " +
260 "custom library or update your configuration.",
261 Build, "assertsEnabled");
262 }
263 if (Build.logsEnabled == false) {
264 Build.$logWarning(
265 "Build.logsEnabled must be set to true when " +
266 "Build.libType == Build." + libType + ". " + "Set " +
267 "Build.libType = Build.LibType_Custom to build a " +
268 "custom library or update your configuration.",
269 Build, "logsEnabled");
270 }
271 break;
273 case Build.LibType_NonInstrumented:
274 if ((Build.assertsEnabled == true) &&
275 Build.$written("assertsEnabled")){
276 Build.$logWarning(
277 "Build.assertsEnabled must be set to false when " +
278 "Build.libType == Build." + libType + ". " + "Set " +
279 "Build.libType = Build.LibType_Custom to build a " +
280 "custom library or update your configuration.",
281 Build, "assertsEnabled");
282 }
283 if ((Build.logsEnabled == true) && Build.$written("logsEnabled")) {
284 Build.$logWarning(
285 "Build.logsEnabled must be set to false when " +
286 "Build.libType == Build." + libType + ". " + "Set " +
287 "Build.libType = Build.LibType_Custom to build a " +
288 "custom library or update your configuration.",
289 Build, "logsEnabled");
290 }
291 break;
293 case Build.LibType_Custom:
294 if ((Build.assertsEnabled == true)
295 && (Defaults.common$.diags_ASSERT == Diags.ALWAYS_OFF)
296 && (Defaults.common$.diags_INTERNAL == Diags.ALWAYS_OFF)) {
297 Build.$logWarning(
298 "Build.assertsEnabled should be set to 'false' when " +
299 "Defaults.common$.diags_ASSERT == Diags.ALWAYS_OFF.",
300 Build, "assertsEnabled");
301 }
302 break;
303 }
304 }
306 /*
307 * ======== getCCOpts ========
308 */
309 function getCCOpts(target)
310 {
311 return(Build.customCCOpts);
312 }
314 /*
315 * ======== getEnumString ========
316 * Return the enum value as a string.
317 *
318 * Example usage:
319 * If obj contains an enumeration type property "Enum enumProp"
320 *
321 * view.enumString = getEnumString(obj.enumProp);
322 */
323 function getEnumString(enumProperty)
324 {
325 /* Split the string into tokens in order to get rid of the
326 * huge package path that precedes the enum string name.
327 * Return the last two tokens concatenated with "_".
328 */
329 var enumStrArray = String(enumProperty).split(".");
330 var len = enumStrArray.length;
331 return (enumStrArray[len - 1]);
332 }
334 /*
335 * Add pre-built Instrumented and Non-Intrumented release libs
336 */
337 var ipcSources = "ipc/GateMP.c " +
338 "ipc/ListMP.c " +
339 "ipc/SharedRegion.c " +
340 "ipc/MessageQ.c " +
341 "ipc/Notify.c ";
343 var gatesSources = "ipc/gates/GatePeterson.c " +
344 "ipc/gates/GatePetersonN.c " +
345 "ipc/gates/GateMPSupportNull.c ";
347 var heapsSources = "ipc/heaps/HeapBufMP.c " +
348 "ipc/heaps/HeapMemMP.c " +
349 "ipc/heaps/HeapMultiBufMP.c ";
351 var notifyDriverSources =
352 "ipc/notifyDrivers/NotifyDriverCirc.c " +
353 "ipc/notifyDrivers/NotifySetupNull.c " +
354 "ipc/notifyDrivers/NotifyDriverShm.c ";
356 var nsremoteSources =
357 "ipc/nsremote/NameServerRemoteNotify.c " +
358 "ipc/nsremote/NameServerMessageQ.c ";
360 var transportsSources =
361 "ipc/transports/TransportShm.c " +
362 "ipc/transports/TransportShmCircSetup.c " +
363 "ipc/transports/TransportShmNotifySetup.c " +
364 "ipc/transports/TransportShmCirc.c " +
365 "ipc/transports/TransportShmNotify.c " +
366 "ipc/transports/TransportShmSetup.c " +
367 "ipc/transports/TransportNullSetup.c " ;
369 var utilsSources = "utils/MultiProc.c " +
370 "utils/List.c " +
371 "utils/NameServerRemoteNull.c " +
372 "utils/NameServer.c ";
374 var commonSources = ipcSources +
375 gatesSources +
376 heapsSources +
377 notifyDriverSources +
378 nsremoteSources +
379 transportsSources;
380 // utilsSources;
382 var C64PSources = "ipc/gates/GateAAMonitor.c " +
383 "ipc/gates/GateHWSpinlock.c " +
384 "ipc/gates/GateHWSem.c " +
385 "ipc/family/dm6446/NotifySetup.c " +
386 "ipc/family/dm6446/NotifyCircSetup.c " +
387 "ipc/family/dm6446/InterruptDsp.c " +
388 "ipc/family/omap3530/NotifySetup.c " +
389 "ipc/family/omap3530/NotifyCircSetup.c " +
390 "ipc/family/omap3530/InterruptDsp.c ";
392 var C66Sources = "ipc/gates/GateHWSem.c " +
393 "ipc/gates/GateHWSpinlock.c " +
394 "ipc/family/tci663x/Interrupt.c " +
395 "ipc/family/tci663x/MultiProcSetup.c " +
396 "ipc/family/tci663x/NotifyCircSetup.c " +
397 "ipc/family/tci663x/NotifySetup.c " +
398 "ipc/family/vayu/InterruptDsp.c " +
399 "ipc/family/vayu/NotifyDriverMbx.c " +
400 "ipc/family/vayu/NotifySetup.c ";
402 var C674Sources = "ipc/gates/GateHWSpinlock.c " +
403 "ipc/family/da830/NotifySetup.c " +
404 "ipc/family/da830/NotifyCircSetup.c " +
405 "ipc/family/da830/InterruptDsp.c " +
406 "ipc/family/arctic/NotifySetup.c " +
407 "ipc/family/arctic/NotifyCircSetup.c " +
408 "ipc/family/arctic/InterruptDsp.c " +
409 "ipc/family/ti81xx/NotifySetup.c " +
410 "ipc/family/ti81xx/NotifyCircSetup.c " +
411 "ipc/family/ti81xx/InterruptDsp.c " +
412 "ipc/family/ti81xx/NotifyMbxSetup.c " +
413 "ipc/family/ti81xx/NotifyDriverMbx.c " +
414 "ipc/family/c6a8149/NotifySetup.c " +
415 "ipc/family/c6a8149/NotifyCircSetup.c " +
416 "ipc/family/c6a8149/InterruptDsp.c " +
417 "ipc/family/c6a8149/NotifyMbxSetup.c " +
418 "ipc/family/c6a8149/NotifyDriverMbx.c ";
420 var C647xSources = "ipc/family/c647x/Interrupt.c " +
421 "ipc/family/c647x/NotifyCircSetup.c " +
422 "ipc/family/c647x/MultiProcSetup.c " +
423 "ipc/family/c647x/NotifySetup.c ";
425 var C64TSources = "ipc/gates/GateHWSpinlock.c " +
426 "ipc/family/omap4430/NotifyCircSetup.c " +
427 "ipc/family/omap4430/NotifySetup.c " +
428 "ipc/family/omap4430/InterruptDsp.c ";
430 var C28Sources = "ipc/family/f28m35x/NotifyDriverCirc.c " +
431 "ipc/family/f28m35x/IpcMgr.c " +
432 "ipc/family/f28m35x/TransportCirc.c " +
433 "ipc/family/f28m35x/NameServerBlock.c ";
435 var M3Sources = "ipc/gates/GateHWSpinlock.c " +
436 "ipc/family/omap4430/NotifySetup.c " +
437 "ipc/family/omap4430/NotifyCircSetup.c " +
438 "ipc/family/omap4430/InterruptDucati.c " +
439 "ipc/family/ti81xx/NotifySetup.c " +
440 "ipc/family/ti81xx/NotifyCircSetup.c " +
441 "ipc/family/ti81xx/InterruptDucati.c " +
442 "ipc/family/ti81xx/NotifyMbxSetup.c " +
443 "ipc/family/ti81xx/NotifyDriverMbx.c " +
444 "ipc/family/c6a8149/NotifySetup.c " +
445 "ipc/family/c6a8149/NotifyCircSetup.c " +
446 "ipc/family/c6a8149/InterruptDucati.c " +
447 "ipc/family/c6a8149/NotifyMbxSetup.c " +
448 "ipc/family/c6a8149/NotifyDriverMbx.c " +
449 "ipc/family/f28m35x/IpcMgr.c " +
450 "ipc/family/f28m35x/NotifyDriverCirc.c " +
451 "ipc/family/f28m35x/TransportCirc.c " +
452 "ipc/family/f28m35x/NameServerBlock.c " +
453 "ipc/family/vayu/InterruptIpu.c " +
454 "ipc/family/vayu/NotifyDriverMbx.c " +
455 "ipc/family/vayu/NotifySetup.c ";
457 var M4Sources = "ipc/gates/GateHWSpinlock.c " +
458 "ipc/family/vayu/InterruptIpu.c " +
459 "ipc/family/vayu/NotifyDriverMbx.c " +
460 "ipc/family/vayu/NotifySetup.c ";
462 var Arm9Sources = "ipc/family/dm6446/NotifySetup.c " +
463 "ipc/family/dm6446/NotifyCircSetup.c " +
464 "ipc/family/dm6446/InterruptArm.c " +
465 "ipc/family/da830/NotifySetup.c " +
466 "ipc/family/da830/NotifyCircSetup.c " +
467 "ipc/family/da830/InterruptArm.c ";
469 var A8FSources = "ipc/gates/GateHWSpinlock.c " +
470 "ipc/family/ti81xx/NotifySetup.c " +
471 "ipc/family/ti81xx/NotifyCircSetup.c " +
472 "ipc/family/ti81xx/InterruptHost.c " +
473 "ipc/family/ti81xx/NotifyMbxSetup.c " +
474 "ipc/family/ti81xx/NotifyDriverMbx.c " +
475 "ipc/family/c6a8149/NotifySetup.c " +
476 "ipc/family/c6a8149/NotifyCircSetup.c " +
477 "ipc/family/c6a8149/InterruptHost.c " +
478 "ipc/family/c6a8149/NotifyMbxSetup.c " +
479 "ipc/family/c6a8149/NotifyDriverMbx.c " +
480 "ipc/family/omap3530/NotifySetup.c " +
481 "ipc/family/omap3530/NotifyCircSetup.c " +
482 "ipc/family/omap3530/InterruptHost.c ";
484 var A8gSources = "ipc/gates/GateHWSpinlock.c " +
485 "ipc/family/ti81xx/NotifySetup.c " +
486 "ipc/family/ti81xx/NotifyCircSetup.c " +
487 "ipc/family/ti81xx/InterruptHost.c " +
488 "ipc/family/ti81xx/NotifyMbxSetup.c " +
489 "ipc/family/ti81xx/NotifyDriverMbx.c " +
490 "ipc/family/c6a8149/NotifySetup.c " +
491 "ipc/family/c6a8149/NotifyCircSetup.c " +
492 "ipc/family/c6a8149/InterruptHost.c " +
493 "ipc/family/c6a8149/NotifyMbxSetup.c " +
494 "ipc/family/c6a8149/NotifyDriverMbx.c " +
495 "ipc/family/omap3530/NotifySetup.c " +
496 "ipc/family/omap3530/NotifyCircSetup.c " +
497 "ipc/family/omap3530/InterruptHost.c ";
499 var A15gSources = "ipc/family/vayu/InterruptHost.c " +
500 "ipc/family/vayu/NotifyDriverMbx.c " +
501 "ipc/family/vayu/NotifySetup.c " +
502 "ipc/gates/GateHWSpinlock.c ";
504 var ARP32Sources = "ipc/gates/GateHWSpinlock.c " +
505 "ipc/family/arctic/NotifySetup.c " +
506 "ipc/family/arctic/NotifyCircSetup.c " +
507 "ipc/family/arctic/InterruptArp32.c " +
508 "ipc/family/c6a8149/NotifySetup.c " +
509 "ipc/family/c6a8149/NotifyCircSetup.c " +
510 "ipc/family/c6a8149/InterruptEve.c " +
511 "ipc/family/vayu/InterruptArp32.c " +
512 "ipc/family/vayu/NotifyDriverMbx.c " +
513 "ipc/family/vayu/NotifySetup.c ";
515 var cList = {
516 "ti.targets.C28_large" : commonSources + C28Sources,
517 "ti.targets.C28_float" : commonSources + C28Sources,
519 "ti.targets.C64P" : commonSources + C647xSources +
520 C64PSources,
521 "ti.targets.C64P_big_endian" : commonSources + C647xSources +
522 C64PSources,
523 "ti.targets.C674" : commonSources + C674Sources,
525 "ti.targets.elf.C64P" : commonSources + C647xSources +
526 C64PSources,
527 "ti.targets.elf.C64P_big_endian" : commonSources + C647xSources +
528 C64PSources,
529 "ti.targets.elf.C674" : commonSources + C674Sources,
530 "ti.targets.elf.C64T" : commonSources + C64TSources,
531 "ti.targets.elf.C66" : commonSources + C647xSources +
532 C66Sources,
533 "ti.targets.elf.C66_big_endian" : commonSources + C647xSources +
534 C66Sources,
536 "ti.targets.arp32.elf.ARP32" : commonSources + ARP32Sources,
537 "ti.targets.arp32.elf.ARP32_far" : commonSources + ARP32Sources,
539 "ti.targets.arm.elf.Arm9" : commonSources + Arm9Sources,
540 "ti.targets.arm.elf.A8F" : commonSources + A8FSources,
541 "ti.targets.arm.elf.A8Fnv" : commonSources + A8FSources,
542 "ti.targets.arm.elf.M3" : commonSources + M3Sources,
543 "ti.targets.arm.elf.M4" : commonSources + M4Sources,
544 "ti.targets.arm.elf.M4F" : commonSources + M4Sources,
546 "gnu.targets.arm.A15F" : commonSources + A15gSources,
547 "gnu.targets.arm.A8F" : commonSources + A8gSources,
548 "gnu.targets.arm.M3" : commonSources + M3Sources,
549 "gnu.targets.arm.M4" : commonSources + M4Sources,
550 "gnu.targets.arm.M4F" : commonSources + M4Sources,
551 };
553 var cFiles = { };
555 var ipcPackages = [
556 "ti.sdo.ipc",
557 "ti.sdo.ipc.family.omap4430",
558 "ti.sdo.ipc.family.omap3530",
559 "ti.sdo.ipc.family.da830",
560 "ti.sdo.ipc.family.dm6446",
561 "ti.sdo.ipc.family.ti81xx",
562 "ti.sdo.ipc.family.arctic",
563 "ti.sdo.ipc.family.f28m35x",
564 "ti.sdo.ipc.family.c647x",
565 "ti.sdo.ipc.family.c6a8149",
566 "ti.sdo.ipc.family.tci663x",
567 "ti.sdo.ipc.family.vayu",
568 "ti.sdo.ipc.gates",
569 "ti.sdo.ipc.heaps",
570 "ti.sdo.ipc.notifyDrivers",
571 "ti.sdo.ipc.nsremote",
572 "ti.sdo.ipc.transports",
573 "ti.sdo.utils",
574 ];
576 var asmListNone = [
577 ];
579 var asmList64P = [
580 "ipc/gates/GateAAMonitor_asm.s64P",
581 ];
583 var asmList = {
584 "ti.targets.C28_large" : asmListNone,
585 "ti.targets.C28_float" : asmListNone,
587 "ti.targets.C64P" : asmList64P,
588 "ti.targets.C64P_big_endian" : asmList64P,
589 "ti.targets.C674" : asmList64P,
591 "ti.targets.elf.C64P" : asmList64P,
592 "ti.targets.elf.C64P_big_endian" : asmList64P,
593 "ti.targets.elf.C674" : asmList64P,
595 "ti.targets.elf.C64T" : asmListNone,
596 "ti.targets.elf.C66" : asmListNone,
597 "ti.targets.elf.C66_big_endian" : asmListNone,
599 "ti.targets.arp32.elf.ARP32" : asmListNone,
600 "ti.targets.arp32.elf.ARP32_far" : asmListNone,
602 "ti.targets.arm.elf.Arm9" : asmListNone,
603 "ti.targets.arm.elf.A8F" : asmListNone,
604 "ti.targets.arm.elf.A8Fnv" : asmListNone,
605 "ti.targets.arm.elf.M3" : asmListNone,
606 "ti.targets.arm.elf.M4" : asmListNone,
607 "ti.targets.arm.elf.M4F" : asmListNone,
609 "gnu.targets.arm.M3" : asmListNone,
610 "gnu.targets.arm.M4" : asmListNone,
611 "gnu.targets.arm.M4F" : asmListNone,
612 "gnu.targets.arm.A8F" : asmListNone,
613 "gnu.targets.arm.A9F" : asmListNone,
614 "gnu.targets.arm.A15F" : asmListNone,
615 };
617 function getDefaultCustomCCOpts()
618 {
620 /* start with target.cc.opts */
621 var customCCOpts = Program.build.target.cc.opts;
623 /* add target unique custom ccOpts */
624 if (!(ccOptsList[Program.build.target.$name] === undefined)) {
625 customCCOpts += ccOptsList[Program.build.target.$name];
626 }
628 /* gnu targets need to pick up ccOpts.prefix and suffix */
629 if (Program.build.target.$name.match(/gnu/)) {
630 customCCOpts += " -O3 ";
631 customCCOpts += " " + Program.build.target.ccOpts.prefix + " ";
632 customCCOpts += " " + Program.build.target.ccOpts.suffix + " ";
633 }
634 else if (Program.build.target.$name.match(/iar/)) {
635 throw new Error("IAR not supported by IPC");
636 }
637 else {
638 /* ti targets do program level compile */
639 customCCOpts += " --program_level_compile -o3 -g " +
640 "--optimize_with_debug ";
641 }
643 /* undo optimizations if this is a debug build */
644 if (Build.libType == Build.LibType_Debug) {
645 if (Program.build.target.$name.match(/gnu/)) {
646 customCCOpts = customCCOpts.replace("-O3","");
647 /* add in stack frames for stack back trace */
648 customCCOpts += " -mapcs ";
649 }
650 else {
651 customCCOpts = customCCOpts.replace(" -o3","");
652 customCCOpts = customCCOpts.replace(" --optimize_with_debug","");
653 if (Program.build.target.$name.match(/arm/)) {
654 customCCOpts = customCCOpts.replace(" --opt_for_speed=2","");
655 }
656 }
657 }
659 return (customCCOpts);
660 }
662 /*
663 * ======== getDefs ========
664 */
665 function getDefs()
666 {
667 var Defaults = xdc.module('xdc.runtime.Defaults');
668 var Diags = xdc.module("xdc.runtime.Diags");
669 var BIOS = xdc.module("ti.sysbios.BIOS");
670 var MessageQ = xdc.module("ti.sdo.ipc.MessageQ");
672 var defs = "";
674 if ((Build.assertsEnabled == false) ||
675 ((Defaults.common$.diags_ASSERT == Diags.ALWAYS_OFF)
676 && (Defaults.common$.diags_INTERNAL == Diags.ALWAYS_OFF))) {
677 defs += " -Dxdc_runtime_Assert_DISABLE_ALL";
678 }
680 if (Build.logsEnabled == false) {
681 defs += " -Dxdc_runtime_Log_DISABLE_ALL";
682 }
684 defs += " -Dti_sdo_ipc_MessageQ_traceFlag__D=" +
685 (MessageQ.traceFlag ? "TRUE" : "FALSE");
687 var InterruptDucati =
688 xdc.module("ti.sdo.ipc.family.ti81xx.InterruptDucati");
690 /* If we truely know which platform we're building against,
691 * add these application specific -D's
692 */
693 if (BIOS.buildingAppLib == true) {
694 defs += " -Dti_sdo_ipc_family_ti81xx_InterruptDucati_videoProcId__D="
695 + InterruptDucati.videoProcId;
696 defs += " -Dti_sdo_ipc_family_ti81xx_InterruptDucati_hostProcId__D="
697 + InterruptDucati.hostProcId;
698 defs += " -Dti_sdo_ipc_family_ti81xx_InterruptDucati_vpssProcId__D="
699 + InterruptDucati.vpssProcId;
700 defs += " -Dti_sdo_ipc_family_ti81xx_InterruptDucati_dspProcId__D="
701 + InterruptDucati.dspProcId;
702 defs +=
703 " -Dti_sdo_ipc_family_ti81xx_InterruptDucati_ducatiCtrlBaseAddr__D="
704 + InterruptDucati.ducatiCtrlBaseAddr;
705 defs +=
706 " -Dti_sdo_ipc_family_ti81xx_InterruptDucati_mailboxBaseAddr__D="
707 + InterruptDucati.mailboxBaseAddr;
708 }
710 return (defs);
711 }
713 /*
714 * ======== getCFiles ========
715 */
716 function getCFiles(target)
717 {
718 var localSources = "ipc/Ipc.c ";
720 /*
721 * logic to trim the C files down to just what the application needs
722 * 3/2/11 disabled for now ...
723 */
724 if (BIOS.buildingAppLib == true) {
725 for each (var mod in Program.targetModules()) {
726 var mn = mod.$name;
727 var pn = mn.substring(0, mn.lastIndexOf("."));
729 /* sanity check package path */
730 var packageMatch = false;
732 for (var i = 0; i < ipcPackages.length; i++) {
733 if (pn == ipcPackages[i]) {
734 packageMatch = true;
735 break;
736 }
737 }
739 if (packageMatch && !mn.match(/Proxy/) &&
740 (mn != "ti.sdo.ipc.Ipc")) {
741 if (cFiles[mn] === undefined) {
742 var prefix = mn.substr(mn.indexOf("sdo")+4);
743 var mod = mn.substr(mn.lastIndexOf(".")+1);
744 prefix = prefix.substring(0, prefix.lastIndexOf('.')+1);
745 prefix = prefix.replace(/\./g, "/");
746 localSources += prefix + mod + ".c ";
747 }
748 else {
749 for (i in cFiles[mn].cSources) {
750 var prefix = mn.substr(mn.indexOf("sdo")+8);
751 prefix = prefix.substring(0, prefix.lastIndexOf('.')+1);
752 prefix = prefix.replace(/\./g, "/");
753 localSources += prefix + cFiles[mn].cSources[i] + " ";
754 }
755 }
756 }
757 }
758 }
759 else {
760 localSources += cList[target];
761 }
763 /* remove trailing " " */
764 localSources = localSources.substring(0, localSources.length-1);
766 return (localSources);
767 }
769 /*
770 * ======== getAsmFiles ========
771 */
772 function getAsmFiles(target)
773 {
774 return (asmList[target]);
775 }
777 /*
778 * ======== getLibs ========
779 * This function called by all IPC packages except ti.sdo.ipc package.
780 */
781 function getLibs(pkg)
782 {
783 var libPath = "";
784 var name = "";
785 var suffix;
787 switch (Build.libType) {
788 case Build.LibType_Custom:
789 case Build.LibType_Instrumented:
790 case Build.LibType_NonInstrumented:
791 case Build.LibType_Debug:
792 return null;
794 case Build.LibType_PkgLib:
795 throw new Error("internal error: Build.getLibs() called with " +
796 "incorret context (libType == PkgLib)");
797 break;
799 default:
800 throw new Error("Build.libType not supported: " + Build.libType);
801 break;
802 }
803 }
805 /*
806 * ======== getProfiles ========
807 * Determines which profiles to build for.
808 *
809 * Any argument in XDCARGS which does not contain platform= is treated
810 * as a profile. This way multiple build profiles can be specified by
811 * separating them with a space.
812 */
813 function getProfiles(xdcArgs)
814 {
815 /*
816 * cmdlProf[1] gets matched to "whole_program,debug" if
817 * ["abc", "profile=whole_program,debug"] is passed in as xdcArgs
818 */
819 var cmdlProf = (" " + xdcArgs.join(" ") + " ").match(/ profile=([^ ]+) /);
821 if (cmdlProf == null) {
822 /* No profile=XYZ found */
823 return [];
824 }
826 /* Split "whole_program,debug" into ["whole_program", "debug"] */
827 var profiles = cmdlProf[1].split(',');
829 return profiles;
830 }
832 /*
833 * ======== buildLibs ========
834 * This function generates the makefile goals for the libraries
835 * produced by a package.
836 */
837 function buildLibs(objList, relList, filter, xdcArgs)
838 {
839 var Build = xdc.useModule('xdc.bld.BuildEnvironment');
841 for (var i = 0; i < Build.targets.length; i++) {
842 var targ = Build.targets[i];
844 /* skip target if not supported */
845 if (!supportsTarget(targ, filter)) {
846 continue;
847 }
849 var profiles = getProfiles(xdcArgs);
851 /* If no profiles were assigned, use only the default one. */
852 if (profiles.length == 0) {
853 profiles[0] = "debug";
854 }
856 for (var j = 0; j < profiles.length; j++) {
857 var ccopts = "";
858 var asmopts = "";
860 if (profiles[j] == "smp") {
861 var libPath = "lib/smpipc/debug/";
862 ccopts += " -Dti_sysbios_BIOS_smpEnabled__D=TRUE";
863 asmopts += " -Dti_sysbios_BIOS_smpEnabled__D=TRUE";
864 }
865 else {
866 var libPath = "lib/ipc/debug/";
867 /* build all package libs using Hwi macros */
868 ccopts += " -Dti_sysbios_Build_useHwiMacros";
869 ccopts += " -Dti_sysbios_BIOS_smpEnabled__D=FALSE";
870 asmopts += " -Dti_sysbios_BIOS_smpEnabled__D=FALSE";
871 }
873 /* confirm that this target supports this profile */
874 if (targ.profiles[profiles[j]] !== undefined) {
875 var profile = profiles[j];
876 var lib = Pkg.addLibrary(libPath + Pkg.name,
877 targ, {
878 profile: profile,
879 copts: ccopts,
880 aopts: asmopts,
881 releases: relList
882 });
883 lib.addObjects(objList);
884 }
885 }
886 }
887 }
889 /*
890 * ======== supportsTarget ========
891 * Returns true if target is in the filter object. If filter
892 * is null or empty, that's taken to mean all targets are supported.
893 */
894 function supportsTarget(target, filter)
895 {
896 var list, field;
898 if (filter == null) {
899 return true;
900 }
902 /*
903 * For backwards compatibility, we support filter as an array of
904 * target names. The preferred approach is to specify filter as
905 * an object with 'field' and 'list' elements.
906 *
907 * Old form:
908 * var trgFilter = [ "Arm9", "Arm9t", "Arm9t_big_endian" ]
909 *
910 * New (preferred) form:
911 *
912 * var trgFilter = {
913 * field: "isa",
914 * list: [ "v5T", "v7R" ]
915 * };
916 *
917 */
918 if (filter instanceof Array) {
919 list = filter;
920 field = "name";
921 }
922 else {
923 list = filter.list;
924 field = filter.field;
925 }
927 if (list == null || field == null) {
928 throw("invalid filter parameter, must specify list and field!");
929 }
931 if (field == "noIsa") {
932 if (String(','+list.toString()+',').match(','+target["isa"]+',')) {
933 return (false);
934 }
935 return (true);
936 }
938 /*
939 * add ',' at front and and tail of list and field strings to allow
940 * use of simple match API. For example, the string is updated to:
941 * ',v5T,v7R,' to allow match of ',v5t,'.
942 */
943 if (String(','+list.toString()+',').match(','+target[field]+',')) {
944 return (true);
945 }
947 return (false);
948 }
950 /*
951 * ======== _setLibType ========
952 * The "real-time" setter setLibType function
953 * This function is called whenever libType changes.
954 */
955 function _setLibType(field, val)
956 {
957 var Build = this;
959 if (val == Build.LibType_Instrumented) {
960 Build.assertsEnabled = true;
961 Build.logsEnabled = true;
962 }
963 else if (val == Build.LibType_NonInstrumented) {
964 Build.assertsEnabled = false;
965 Build.logsEnabled = false;
966 }
967 else if (val == Build.LibType_Custom) {
968 Build.assertsEnabled = true;
969 Build.logsEnabled = true;
970 }
971 else if (val == Build.LibType_Debug) {
972 Build.assertsEnabled = true;
973 Build.logsEnabled = true;
974 }
975 else if (val == Build.LibType_PkgLib) {
976 Build.assertsEnabled = true;
977 Build.logsEnabled = true;
978 }
979 else {
980 print(Build.$name + ": unknown libType setting: " + val);
981 }
983 /* re-construct default Build.customCCOpts */
984 Build.customCCOpts = Build.getDefaultCustomCCOpts();
985 }