Build.xs: Cleanup item identified
[ipc/ipcdev.git] / ipc-bios.bld
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);
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     }
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     }
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";