rm: keystone 2: add A15 library build for Keystone II devices.
[keystone-rtos/rm-lld.git] / config.bld
1 /******************************************************************************\r
2  * FILE PURPOSE: Build configuration Script for the RM\r
3  ******************************************************************************\r
4  * FILE NAME: config.bld\r
5  *\r
6  * DESCRIPTION: \r
7  *  This file contains the build configuration script for RM \r
8  *  and is responsible for configuration of the paths for the various tools\r
9  *  required to build RM.\r
10  *\r
11  * Copyright (C) 2012-2015, Texas Instruments, Inc.\r
12  *****************************************************************************/\r
13 \r
14 /* Get the Tools Base directory from the Environment Variable. */\r
15 var c66ToolsBaseDir = java.lang.System.getenv("C6X_GEN_INSTALL_PATH");\r
16 var m4ToolsBaseDir = java.lang.System.getenv("TOOLCHAIN_PATH_M4");\r
17 var a15ToolsBaseDir = java.lang.System.getenv("TOOLCHAIN_PATH_A15");\r
18 var a9ToolsBaseDir = java.lang.System.getenv("TOOLCHAIN_PATH_A9");\r
19 var a8ToolsBaseDir = java.lang.System.getenv("TOOLCHAIN_PATH_A8");\r
20 \r
21 /* Get the extended debug flags for C66x, \r
22  * did not change the name for backwards compatibilty */\r
23 var extDbgFlags = java.lang.System.getenv("EXTDBGFLAGS");\r
24 \r
25 /* Get the extended debug flags for A15 */\r
26 var extDbgFlags_a15 = java.lang.System.getenv("EXTDBGFLAGS_A15");\r
27 \r
28 /* Get the extended debug flags for A8 */\r
29 var extDbgFlags_a8 = java.lang.System.getenv("EXTDBGFLAGS_A8");\r
30 \r
31 /* Get the extended debug flags for A9 */\r
32 var extDbgFlags_a9 = java.lang.System.getenv("EXTDBGFLAGS_A9");\r
33 \r
34 /* Get the extended debug flags for M4 */\r
35 var extDbgFlags_m4 = java.lang.System.getenv("EXTDBGFLAGS_M4");\r
36 \r
37 /* Get the base directory for the RM Package */\r
38 var lldPath = new java.io.File(".//").getPath();\r
39 \r
40 var lldInstallType;\r
41 \r
42 /* Read the part number from the environment variable. */\r
43 var lldPartNumber = java.lang.System.getenv("PARTNO");\r
44 \r
45 /* Include Path */\r
46 var lldIncludePath = " -I" + lldPath + "/src" + " -I" + lldPath  + " -I" + lldPath + "/test" + " -I" + lldPath + "/util/libfdt";\r
47 \r
48 /* Configure the RM Release Version Information */\r
49 /* 3 steps: remove SPACE and TAB, convert to string and split to make array */\r
50 var lldReleaseVersion = (""+Pkg.version.replace(/\s/g, "")).split(',');\r
51 \r
52 /* RM Coverity Analysis: Check the environment variable to determine if Static\r
53  * Analysis has to be done on the RM Code base or not? */\r
54 var lldCoverityAnalysis = java.lang.System.getenv("LLDCOV");\r
55 \r
56 /* C66 ELF compiler configuration for Little Endian Mode. */\r
57 var C66LE          = xdc.useModule('ti.targets.elf.C66');\r
58 C66LE.rootDir       = c66ToolsBaseDir;\r
59 C66LE.ccOpts.prefix  = "-mo -o3 --gcc -q -k -eo.o";\r
60 if(extDbgFlags)     \r
61     C66LE.ccOpts.prefix = C66LE.ccOpts.prefix + " " + extDbgFlags; \r
62 \r
63 /* C66 ELF compiler configuration for Big Endian Mode. */\r
64 var C66BE          = xdc.useModule('ti.targets.elf.C66_big_endian');\r
65 C66BE.rootDir       = c66ToolsBaseDir;\r
66 C66BE.ccOpts.prefix  = "-mo -o3 --gcc -q -k -eo.o -DBIGENDIAN";\r
67 if(extDbgFlags)     \r
68     C66BE.ccOpts.prefix = C66BE.ccOpts.prefix + " " + extDbgFlags;\r
69 \r
70 /* ARMv7 A15 compiler configuration */\r
71 var A15LE            = xdc.useModule('gnu.targets.arm.A15F');\r
72 A15LE.rootDir        = a15ToolsBaseDir;\r
73 A15LE.ccOpts.prefix  = "-mno-unaligned-access -c -mtune=cortex-a15 -marm -DDRA7xx -gstrict-dwarf -Wall -D__ARMv7 -D_LITTLE_ENDIAN=1";\r
74 if(extDbgFlags_a15)     \r
75     A15LE.ccOpts.prefix = A15LE.ccOpts.prefix + " " + extDbgFlags_a15; \r
76 \r
77 /* ARMv7 A9 compiler configuration */\r
78 var A9LE            = xdc.useModule('gnu.targets.arm.A9F');\r
79 A9LE.rootDir        = a9ToolsBaseDir;\r
80 A9LE.ccOpts.prefix  = "-mno-unaligned-access -c -mtune=cortex-a9 -marm -DDRA7xx -gstrict-dwarf -Wall -D__ARMv7 -D_LITTLE_ENDIAN=1";\r
81 if(extDbgFlags_a9)     \r
82     A9LE.ccOpts.prefix = A9LE.ccOpts.prefix + " " + extDbgFlags_a9; \r
83 \r
84 /* ARMv7 A8 compiler configuration */\r
85 var A8LE            = xdc.useModule('gnu.targets.arm.A8F');\r
86 A8LE.rootDir        = a8ToolsBaseDir;\r
87 A8LE.ccOpts.prefix  = "-mno-unaligned-access -c -mtune=cortex-a8 -marm -DDRA7xx -gstrict-dwarf -Wall -D__ARMv7 -D_LITTLE_ENDIAN=1";\r
88 if(extDbgFlags_a8)     \r
89     A8LE.ccOpts.prefix = A8LE.ccOpts.prefix + " " + extDbgFlags_a8; \r
90 \r
91 /* M4 ELF compiler configuration for Little Endian Mode. */\r
92 var M4LE            = xdc.useModule('ti.targets.arm.elf.M4');\r
93 M4LE.rootDir        = m4ToolsBaseDir;\r
94 M4LE.ccOpts.prefix  = "-o4 -qq -pdsw255 -DMAKEFILE_BUILD";\r
95 if(extDbgFlags_m4)\r
96     M4LE.ccOpts.prefix = M4LE.ccOpts.prefix + " " + extDbgFlags_m4; \r
97 \r
98 /* Check if we need to run the STATIC Analysis or not? */\r
99 var coverityAnalysis = java.lang.System.getenv("STATIC_ANALYZE");\r
100 \r
101 /* Setup the Coverity Filters to perform Static Analysis. */\r
102 if (coverityAnalysis == "ON") {\r
103     var coverityInstallPath = java.lang.System.getenv("STATIC_ANALYZE_PATH");\r
104     var cfgBase = xdc.getPackageBase("tisb.coverity.filters") + "cfg";\r
105 \r
106     var coverityFilter = [\r
107     {\r
108         moduleName: "tisb.coverity.filters.Coverity",\r
109         params: {\r
110             cfgDir:  cfgBase,  // The Coverity configuration file directory\r
111             rootDir: coverityInstallPath,\r
112             outDir: xdc.csd() + "cov_out",\r
113             analyzeLibs: true\r
114         }\r
115     },\r
116     ];\r
117 \r
118     /* Run the coverity filters on the LE Build only. */\r
119     C66LE.profiles["release"].filters = coverityFilter;\r
120 }\r
121 \r
122 /* Check if we need to create the Makefiles? */\r
123 var miniBuild = java.lang.System.getenv("MINI_PACKAGE");\r
124 \r
125 if (miniBuild == "ON")\r
126 {\r
127     /* Add the filter for simple Makefile generation. */\r
128 \r
129     var makeC66LEFilter = {\r
130         moduleName: "build.filter.Make",\r
131         params: {\r
132           makefileName: "simpleC66LE.mak",\r
133         }\r
134     };\r
135 \r
136     C66LE.profiles["release"].filters[C66LE.profiles["release"].filters.length++] = makeC66LEFilter;\r
137 \r
138     var makeC66BEFilter = {\r
139         moduleName: "build.filter.Make",\r
140         params: {\r
141           makefileName: "simpleC66BE.mak",\r
142         }\r
143     }; \r
144 \r
145     C66BE.profiles["release"].filters[C66BE.profiles["release"].filters.length++] = makeC66BEFilter;\r
146 \r
147 }\r
148 \r
149 /* Create the SoC List  */\r
150 var socs = { \r
151     /* device independent libraries */\r
152     all :\r
153     {\r
154         /* Build this library */\r
155         build: "true",\r
156         /* SoC lib enabled */\r
157         socDevLib: "false",\r
158         /* dma lib enabled */\r
159         dmaDevLib: "false",     \r
160        /* Library options */\r
161         copts: "",\r
162         /* target lists, kept blank now, would be updated based on argument lists */\r
163         targets: []\r
164     },\r
165    k2h :\r
166     {\r
167         /* this variable would be reinitialized to true, if XDCARGS contains k2h */\r
168         build: "false", \r
169         /* SoC lib enabled */\r
170         socDevLib: "false",\r
171         /* dma lib enabled */\r
172         dmaDevLib: "false",     \r
173        /* Library options */\r
174        copts: " -DSOC_K2H",\r
175        /* target list */\r
176        targets: [ C66LE, C66BE, A15LE]\r
177     },\r
178    k2k :\r
179     {\r
180         /* this variable would be reinitialized to true, if XDCARGS contains k2k */\r
181         build: "false", \r
182         /* SoC lib enabled */\r
183         socDevLib: "false",\r
184         /* dma lib enabled */\r
185         dmaDevLib: "false",     \r
186        /* Library options */\r
187        copts: " -DSOC_K2K",\r
188        /* target list */\r
189        targets: [ C66LE, C66BE, A15LE]\r
190     },\r
191    k2e :\r
192     {\r
193         /* this variable would be reinitialized to true, if XDCARGS contains k2e */\r
194         build: "false", \r
195         /* SoC lib enabled */\r
196         socDevLib: "false",\r
197         /* dma lib enabled */\r
198         dmaDevLib: "false",     \r
199       /* Library options */\r
200        copts: " -DSOC_K2E",\r
201        /* target list */\r
202        targets: [ C66LE, C66BE, A15LE]\r
203     },\r
204    k2l :\r
205     {\r
206         /* this variable would be reinitialized to true, if XDCARGS contains k2l */\r
207         build: "false", \r
208          /* SoC lib enabled */\r
209         socDevLib: "false",\r
210         /* dma lib enabled */\r
211         dmaDevLib: "false",     \r
212       /* Library options */\r
213        copts: " -DSOC_K2L",\r
214        /* target list */\r
215        targets: [ C66LE, C66BE, A15LE]\r
216     }\r
217 };\r
218 \r
219 /**************************************************************************\r
220  * FUNCTION NAME : merge\r
221  **************************************************************************\r
222  * DESCRIPTION   :\r
223  *  The function is used to merge two arrarys\r
224  **************************************************************************/\r
225 function merge() {\r
226     var args = arguments;\r
227     var hash = {};\r
228     var arr = [];\r
229     for (var i = 0; i < args.length; i++) {\r
230        for (var j = 0; j < args[i].length; j++) {\r
231          if (hash[args[i][j]] !== true) {\r
232            arr[arr.length] = args[i][j];\r
233            hash[args[i][j]] = true;\r
234          }\r
235        }\r
236      }\r
237     return arr;\r
238 }\r
239 \r
240 /* Grab input from XDCARGS */\r
241 var buildArguments  = [];\r
242 \r
243 /* Construct the build arguments */\r
244 for (var tmp=0; arguments[tmp] != undefined; tmp++)\r
245 {\r
246 \r
247     /* If no arguments are provided, override for building all */\r
248     if ( ( arguments.length == 1) && (arguments[tmp].equals("./config.bld")) )\r
249         buildArguments[buildArguments.length++] = "all";\r
250     else\r
251         buildArguments[buildArguments.length++] = arguments[tmp];\r
252 }\r
253 \r
254 /* Build targets on this build */\r
255 var build_targets = [];\r
256 var soc_names = Object.keys(socs);\r
257 \r
258 for (var i=0; i < buildArguments.length; i++ ) {\r
259     /* Build it for all targets */\r
260     if (buildArguments[i] == "all") {\r
261         for (var j = 0; j < soc_names.length; j++)  {\r
262             build_targets = merge (build_targets.slice(0), socs[soc_names[j]].targets.slice(0));\r
263             /* Set build to "true" for that SoC */\r
264             socs[soc_names[j]].build = "true";\r
265         }\r
266     }\r
267     else {\r
268         /* Skip the first argument, which is ./config.bld to get to next SoCs */\r
269         if (i == 0) continue;          \r
270         /* Set that build to true if it is found in supported build socs */\r
271         for (j = 0; j < soc_names.length; j++) {\r
272             if (buildArguments[i] == soc_names[j]) {\r
273                 socs[buildArguments[i]].build = "true";\r
274                 build_targets = merge (build_targets.slice(0), socs[buildArguments[i]].targets.slice(0));\r
275                 break;\r
276             }\r
277         }\r
278     }   \r
279 }\r
280 \r
281 /* Update the Build target generated list */\r
282 socs["all"].targets = build_targets; \r
283 Build.targets   = build_targets;\r
284 \r