1 /*
2 * Copyright (c) 2011-2018 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 * Generally there is no need to edit this file!
35 *
36 * This file controls which libraries are built, as well as compiler options
37 * to use.
38 *
39 * The contents of this file usually don't change, but having it in your
40 * ownership allows you to tweak your compiler options. If you do change
41 * this file, however, on the next upgrade of the product we recommend
42 * that you take "ipc.bld" file as supplied by the upgrade and then merge
43 * your changes with it.
44 */
46 /*
47 * ======== ipc-bios.bld ========
48 * This script is run prior to all build scripts. It sets host-system-
49 * independent values for targets and platforms, then it attempts to
50 * find the host-system-specific user.bld script that sets rootDirs.
51 *
52 * These settings may be a function of the following global variables:
53 *
54 * environment a hash table of environment strings
55 *
56 * arguments an array of string arguments to the script
57 * initialized as follows:
58 * arguments[0] - the file name of the script
59 * arguments[1] - the first argument specified in XDCARGS
60 * :
61 * arguments[n] - the n'th argument in XDCARGS
62 *
63 * Build an alias for xdc.om.xdc.bld.BuildEnvironment
64 */
66 var Build = xdc.useModule('xdc.bld.BuildEnvironment');
67 var Pkg = xdc.useModule('xdc.bld.PackageContents');
69 /* Common ccopts suffix used for all C6x targets */
70 var c6xOpts = " -mi10 -mo -pdr -pden -pds=238 -pds=880 -pds1110 -g --mem_model:const=data --mem_model:data=far ";
72 /*
73 * -mi10 => maximum cycles that interrupts may be disabled is 10
74 * -mo => place each function in subsection
75 * -pdr => show remarks
76 * -pden => show remark ids
77 * -pds=238 => ignore "controlling expression is constant"
78 * -pds=880 => ignore "unused parameter"
79 * --mem_model:const=data => Const objects are placed according to the
80 * --mem_model:data option
81 * --mem_model:data=far => Data accesses default to far
82 */
84 var ccOpts = {
85 "ti.targets.C64P" : c6xOpts,
86 "ti.targets.C64P_big_endian" : c6xOpts,
87 "ti.targets.C674" : c6xOpts,
89 "ti.targets.elf.C64P" : c6xOpts,
90 "ti.targets.elf.C64P_big_endian" : c6xOpts,
91 "ti.targets.elf.C64T" : c6xOpts,
92 "ti.targets.elf.C66" : c6xOpts,
93 "ti.targets.elf.C66_big_endian" : c6xOpts,
94 "ti.targets.elf.C674" : c6xOpts,
96 "ti.targets.arm.elf.Arm9" : " -ms -g ",
97 "ti.targets.arm.elf.A8F" : " -ms -g ",
98 "ti.targets.arm.elf.A8Fnv" : " -ms -g ",
99 "ti.targets.arm.elf.M3" : " --embed_inline_assembly -ms -pds=71",
100 "ti.targets.arm.elf.M4" : " -ms -g ",
101 "ti.targets.arm.elf.M4F" : " -ms -g ",
102 "ti.targets.arm.elf.R5F" : " -ms -g ",
104 "ti.targets.arp32.elf.ARP32" : " -g ",
105 "ti.targets.arp32.elf.ARP32_far" : " -g ",
107 "gnu.targets.arm.A8F" : " -g ",
108 "gnu.targets.arm.A15F" : " -g ",
109 "gnu.targets.arm.A53F" : " -g "
110 };
112 var lnkOpts = {
113 "ti.targets.elf.C66" : " --cinit_compression=off",
114 "ti.targets.arm.elf.M4" : " --retain=.resource_table" +
115 " --cinit_compression=off",
116 "ti.targets.arm.elf.R5F" : " --retain=.resource_table" +
117 " --cinit_compression=off"
118 };
120 var platform = "";
121 var smpEnabled = true;
122 var Bld_goal = "";
124 /* initialize local vars with those set in xdcpaths.mak (via XDCARGS) */
125 for (arg = 0; arg < arguments.length; arg++) {
126 /* split each arg into its '+' separated parts */
127 var configParts = arguments[arg].split(";");
128 // print("arg " + arg + " has " + configParts.length + " parts");
130 /* if "known args come in, filter them... else they're targets */
131 if (configParts[0].split("=")[0] == "PLATFORM") {
132 // print("FOUND PLATFORM ARG - " + configParts[0]);
133 platform = configParts[0].split("=")[1];
134 continue;
135 }
136 else if (configParts[0].split("=")[0] == "BIOS_SMPENABLED") {
137 // print("FOUND SMP_ENABLED ARG - " + configParts[0]);
138 smpEnabled = configParts[0].split("=")[1].match(/^1$/);
139 continue;
140 }
141 else if (configParts[0].split("=")[0] == "GOAL") {
142 Bld_goal = configParts[0].split("=")[1];
143 continue;
144 }
146 if (platform == "") {
147 platform = "NONE";
148 }
150 /*
151 * Get the compiler's installation directory.
152 * For "ti.targets.elf.C674=/vendors/c6x/7.2.0", we get "/vendors/c6x/7.2.0"
153 */
154 var targetName = configParts[0].split("=")[0];
155 var rootDir = configParts[0].split("=")[1];
157 /* only build for the specified compilers */
158 if (rootDir == "" || rootDir == undefined) {
159 continue;
160 }
162 // print("Building for platform:" + platform + " targetName:" + targetName
163 // + " rootDir: " + rootDir + " smpEnabled:" + smpEnabled + "...");
165 var target = xdc.useModule(targetName);
166 target.rootDir = rootDir;
167 if (ccOpts[targetName] != undefined) {
168 target.ccOpts.suffix += ccOpts[targetName];
169 }
170 if (lnkOpts[targetName] != undefined) {
171 target.lnkOpts.suffix += lnkOpts[targetName];
172 }
174 /* for all the other parts, assign target.<left> = <right> */
175 for (var i = 1; i < configParts.length; i++) {
176 var modCfgParam = configParts[i].split("=")[0];
177 var modCfgValue = configParts[i].split("=")[1];
178 var modCfgIndex = modCfgParam.split(".");
179 var element = target;
181 // print("Configuring target." + modCfgParam + " = " + modCfgValue);
183 for (j = 0; j < (modCfgIndex.length -1); j++) {
184 element = element[modCfgIndex[j]];
185 }
186 element[modCfgIndex[j]] = modCfgValue;
187 }
189 /* Add appropriate platforms to build for based on target name */
190 if (targetName.match(/elf\.C674/)) {
191 if (platform == 'OMAPL138') {
192 target.platforms.$add("ti.platforms.evmOMAPL138:DSP");
193 }
194 }
196 if (targetName.match(/elf\.C66$/)) {
197 switch (platform) {
198 case '66AK2G':
199 target.platforms.$add("ti.platforms.evmTCI66AK2G02:core0");
200 break;
202 case '66AK2E':
203 target.platforms.$add("ti.platforms.evmC66AK2E:core0");
204 break;
206 case 'TCI6630':
207 target.platforms.$add("ti.platforms.evmTCI6630K2L:core0");
208 break;
210 case 'TCI6636':
211 target.platforms.$add("ti.platforms.evmTCI6636K2H:core0");
212 break;
214 case 'TCI6638':
215 target.platforms.$add("ti.platforms.evmTCI6638K2K:core0");
216 break;
218 case 'C6678':
219 target.platforms.$add("ti.platforms.evm6678");
220 break;
222 case 'DRA7XX':
223 target.platforms.$add("ti.platforms.evmDRA7XX:dsp1");
224 target.platforms.$add("ti.platforms.evmDRA7XX:dsp2");
225 break;
227 case 'TDA3XX':
228 target.platforms.$add("ti.platforms.evmTDA3XX");
229 break;
231 case 'NONE':
232 /* okay, no platform specified */
233 break;
235 default:
236 print("Unknown C66x platform, skipping " + platform);
237 break;
238 }
239 }
241 if (targetName.match(/elf\.C64T/)) {
242 if (platform == 'OMAP54XX') {
243 target.platforms.$add("ti.platforms.sdp5430:DSP");
244 }
245 }
247 if (targetName.match(/elf\.M4$/)) {
248 switch (platform) {
249 case 'OMAP54XX':
250 target.platforms.$add("ti.platforms.sdp5430:IPU");
251 break;
253 case 'DRA7XX':
254 target.platforms.$add("ti.platforms.evmDRA7XX:ipu2");
255 target.platforms.$add("ti.platforms.evmDRA7XX:ipu1");
256 break;
258 case 'TDA3XX':
259 target.platforms.$add("ti.platforms.evmTDA3XX");
260 break;
262 case 'NONE':
263 /* okay, no platform specified */
264 break;
266 default:
267 print("Unknown M4 platform, skipping " + platform);
268 break;
269 }
270 }
272 if (targetName.match(/elf\.R5F$/)) {
273 switch (platform) {
274 case 'AM65XX':
275 target.platforms.$add("ti.platforms.cortexR:AM65X");
276 break;
278 default:
279 print("Unknown R5F platform, skipping " + platform);
280 break;
281 }
282 }
284 Build.targets.$add(target);
285 }
287 if (smpEnabled) {
288 /* Enable building SMP-BIOS enabled libraries for targets that support it */
289 if (Pkg.name.match(/^ti\.sdo\.(ipc|utils)/)) {
290 xdc.module("ti.targets.arm.elf.M3").profiles["smp"] =
291 xdc.module("ti.targets.arm.elf.M3").profiles["debug"];
292 xdc.module("ti.targets.arm.elf.M4").profiles["smp"] =
293 xdc.module("ti.targets.arm.elf.M4").profiles["debug"];
294 xdc.module("gnu.targets.arm.A15F").profiles["smp"] =
295 xdc.module("gnu.targets.arm.A15F").profiles["debug"];
296 xdc.module("gnu.targets.arm.A53F").profiles["smp"] =
297 xdc.module("gnu.targets.arm.A53F").profiles["debug"];
298 }
299 }
301 /* lib/ is a generated directory that 'xdc clean' should remove */
302 Pkg.generatedFiles.$add("lib/");
304 /*
305 * Some packages build for 'all profiles' - but that's too much to ship.
306 * Loop over all profiles in all Build.targets and remove everything
307 * except 'release' and 'debug'.
308 */
309 for (var t = 0; t < Build.targets.length; t++) {
310 for (prof in Build.targets[t].profiles) {
311 if ((prof != 'release') && (prof != 'debug') && (prof != 'smp')) {
312 delete Build.targets[t].profiles[prof];
313 }
314 }
315 }
317 /* -----------------------------------------------------------------------*/
318 /* make release files '.tar.gz' files (.tar is default) */
319 Pkg.attrs.compress = true;
321 /* catch inadvertant use of unsupported data types */
322 Pkg.attrs.defs = "-Dxdc__strict";