/****************************************************************************** * FILE PURPOSE: Build configuration Script for the SA LLD ****************************************************************************** * FILE NAME: config.bld * * DESCRIPTION: * This file contains the build configuration script for the SA LLD * and is responsible for configuration of the paths for the various * tools required to build the driver. * * Copyright (C) 2011-2017, Texas Instruments, Inc. *****************************************************************************/ /* Get the Tools Base directory from the Environment Variable. */ var c66ToolsBaseDir = java.lang.System.getenv("C6X_GEN_INSTALL_PATH"); var a15ToolsBaseDir = java.lang.System.getenv("TOOLCHAIN_PATH_A15"); /* Get the extended debug flags for C66x, * did not change the name for backwards compatibilty */ var extDbgFlags = java.lang.System.getenv("EXTDBGFLAGS"); /* Get the extended debug flags for A15 */ var extDbgFlags_a15 = java.lang.System.getenv("EXTDBGFLAGS_A15"); /* Get the base directory for the SA LLD Package */ var lldPath = new java.io.File(".//").getPath(); var lldInstallType; /* Read the part number from the environment variable. */ var lldPartNumber = java.lang.System.getenv("PARTNO"); /* print compiler options */ var pOpts = 1; /* should library be explicity be specified for package.bld * for XDC based builds that use this config.bld, * lib folder is packaged automatically, do not need to * provide the lib folder for explicit package.bld list */ var pkgLibExplicitly = 0; /* Include Path */ var salldIncPath = " -I" + lldPath + "/src" + " -I" + lldPath + " -I" + lldPath + "/test"; /* Configure the SA LLD Release Version Information */ /* 3 steps: remove SPACE and TAB, convert to string and split to make array */ var lldReleaseVersion = (""+Pkg.version.replace(/\s/g, "")).split(','); /* SA LLD Coverity Analysis: Check the environment variable to determine if Static * Analysis has to be done on the CPPI LLD Code base or not? */ var lldCoverityAnalysis = java.lang.System.getenv("LLDCOV"); /* C66 ELF compiler configuration for Little Endian Mode. */ var C66LE = xdc.useModule('ti.targets.elf.C66'); C66LE.rootDir = c66ToolsBaseDir; C66LE.ccOpts.prefix = "-mo -o3 -q -k -eo.o"; if(extDbgFlags) C66LE.ccOpts.prefix = C66LE.ccOpts.prefix + " " + extDbgFlags; /* ARMv7 A15 compiler configuration */ var A15LE = xdc.useModule('gnu.targets.arm.A15F'); A15LE.rootDir = a15ToolsBaseDir; A15LE.ccOpts.prefix = "-mno-unaligned-access -c -mtune=cortex-a15 -marm -DDRA7xx -gstrict-dwarf -Wall -D__ARMv7 -D_LITTLE_ENDIAN=1"; if(extDbgFlags_a15) A15LE.ccOpts.prefix = A15LE.ccOpts.prefix + " " + extDbgFlags_a15; /* Check if we need to run the STATIC Analysis or not? */ var coverityAnalysis = java.lang.System.getenv("STATIC_ANALYZE"); /* Setup the Coverity Filters to perform Static Analysis. */ if (coverityAnalysis == "ON") { var coverityInstallPath = java.lang.System.getenv("STATIC_ANALYZE_PATH"); var cfgBase = xdc.getPackageBase("tisb.coverity.filters") + "cfg"; var coverityFilter = [ { moduleName: "tisb.coverity.filters.Coverity", params: { cfgDir: cfgBase, // The Coverity configuration file directory rootDir: coverityInstallPath, outDir: xdc.csd() + "cov_out", analyzeLibs: true } }, ]; /* Run the coverity filters on the LE Build only. */ C66LE.profiles["release"].filters = coverityFilter; } /* Check if we need to create the Makefiles? */ var miniBuild = java.lang.System.getenv("MINI_PACKAGE"); if (miniBuild == "ON") { /* Add the filter for simple Makefile generation. */ var makeC66LEFilter = { moduleName: "build.filter.Make", params: { makefileName: "simpleC66LE.mak", } }; C66LE.profiles["release"].filters[C66LE.profiles["release"].filters.length++] = makeC66LEFilter; } for ( i=0; i < arguments.length; i++) { print ("ARG[" + i + "] = " + arguments[i]); } /* Create the SoC List */ var socs = { /* device independent libraries */ all : { /* Build this library */ build: "true", /* target lists, kept blank now, would be updated based on argument lists */ targets: [] }, k2h : { /* Build this library */ build: "false", /* target list */ targets: [ C66LE, A15LE ] }, k2k : { /* Build this library */ build: "false", /* target list */ targets: [ C66LE, A15LE ] }, k2e : { /* Build this library */ build: "false", /* target list */ targets: [ C66LE, A15LE ] }, k2l : { /* Build this library */ build: "false", /* target list */ targets: [ C66LE, A15LE ] }, k2g : { /* Build this library */ build: "false", /* target list */ targets: [ C66LE, A15LE ] }, c6678 : { /* Build this library */ build: "false", /* target list */ targets: [ C66LE] } }; /************************************************************************** * FUNCTION NAME : merge ************************************************************************** * DESCRIPTION : * The function is used to merge two arrarys **************************************************************************/ function merge() { var args = arguments; var hash = {}; var arr = []; for (var i = 0; i < args.length; i++) { for (var j = 0; j < args[i].length; j++) { if (hash[args[i][j]] !== true) { arr[arr.length] = args[i][j]; hash[args[i][j]] = true; } } } return arr; } /* Grab input from XDCARGS */ var buildArguments = []; /* Construct the build arguments */ for (var tmp=0; arguments[tmp] != undefined; tmp++) { /* If no arguments are provided, override for building all */ if ( ( arguments.length == 1) && (arguments[tmp].equals("./config.bld")) ) buildArguments[buildArguments.length++] = "all"; else buildArguments[buildArguments.length++] = arguments[tmp]; } /* Build targets on this build */ var build_targets = []; var soc_names = Object.keys(socs); for (var i=0; i < buildArguments.length; i++ ) { /* Build it for all targets */ if (buildArguments[i] == "all") { for (var j = 0; j < soc_names.length; j++) { build_targets = merge (build_targets.slice(0), socs[soc_names[j]].targets.slice(0)); /* Set build to "true" for that SoC */ socs[soc_names[j]].build = "true"; } } else { /* Skip the first argument, which is ./config.bld to get to next SoCs */ if (i == 0) continue; /* Set that build to true if it is found in supported build socs */ for (j = 0; j < soc_names.length; j++) { if (buildArguments[i] == soc_names[j]) { socs[buildArguments[i]].build = "true"; build_targets = merge (build_targets.slice(0), socs[buildArguments[i]].targets.slice(0)); break; } } } } /* Update the Build target generated list */ socs["all"].targets = build_targets; Build.targets = build_targets;