Initial commit for motor control sdk Fixes: PINDSW-5635 Signed-off-by: Naresh A <nareshk@ti.com>
411 lines
16 KiB
JavaScript
411 lines
16 KiB
JavaScript
const common = require(`./common.js`);
|
|
const path = require(`path`);
|
|
const fs = require(`fs`);
|
|
const _ = require('lodash');
|
|
|
|
function genMakefileDeviceTop(component_file_list, example_file_list, device, isInternal) {
|
|
let component_make_list = [];
|
|
let example_make_list = [];
|
|
let example_make_projectspec_list = [];
|
|
let system_example_make_list = [];
|
|
let system_example_make_projectspec_list = [];
|
|
|
|
let genFolder = ".";
|
|
let relPath = ".";
|
|
if(isInternal == true) {
|
|
genFolder = "./test"
|
|
relPath = "..";
|
|
}
|
|
|
|
for(component of component_file_list) {
|
|
let component_make = [];
|
|
let buildTarget = [];
|
|
let buildTargetClean = [];
|
|
let buildTargetScrub = [];
|
|
|
|
property = require(`../${component}`).getComponentProperty(device);
|
|
|
|
let tag="";
|
|
if(property.tag)
|
|
{
|
|
tag = `.${property.tag}`;
|
|
}
|
|
|
|
component_make.name = property.name;
|
|
component_make.tag = tag;
|
|
component_make.relpath = common.path.relative(path.normalize(__dirname + `/../${genFolder}`), property.dirPath);
|
|
if(property.isSkipTopLevelBuild === true)
|
|
{
|
|
component_make.isSkipTopLevelBuild = true;
|
|
}
|
|
if(property.isPrebuilt === true)
|
|
{
|
|
component_make.isPrebuilt = true;
|
|
}
|
|
for(buildOption of property.buildOptionCombos) {
|
|
buildTarget +=` ${property.name}_${buildOption.cpu}.${buildOption.cgt}`;
|
|
buildTargetClean +=` ${property.name}_${buildOption.cpu}.${buildOption.cgt}_clean`;
|
|
buildTargetScrub +=` ${property.name}_${buildOption.cpu}.${buildOption.cgt}_scrub`;
|
|
}
|
|
component_make.buildTarget = buildTarget;
|
|
component_make.buildTargetClean = buildTargetClean;
|
|
component_make.buildTargetScrub = buildTargetScrub;
|
|
if(property.isInternal == isInternal) {
|
|
component_make_list.push(component_make);
|
|
}
|
|
}
|
|
|
|
for(example of example_file_list) {
|
|
|
|
property = require(`../${example}`).getComponentProperty(device);
|
|
|
|
for(buildOption of property.buildOptionCombos) {
|
|
|
|
let makefileOutPath = common.path.makeExampleOutPath(property.dirPath, buildOption);
|
|
|
|
let example_make = {};
|
|
let buildTarget = {};
|
|
let buildTargetClean = {};
|
|
let buildTargetScrub = {};
|
|
|
|
example_make.name = `${property.name}_${buildOption.board}_${buildOption.cpu}_${buildOption.os}_${buildOption.cgt}`;
|
|
example_make.relpath = common.path.relative(path.normalize(__dirname + `/../${genFolder}`), makefileOutPath);
|
|
|
|
if(property.isSkipTopLevelBuild === true)
|
|
{
|
|
example_make.isSkipTopLevelBuild = true;
|
|
}
|
|
|
|
if(property.isBootLoader === true)
|
|
{
|
|
example_make.isBootLoader = true;
|
|
}
|
|
|
|
buildTarget =` ${property.name}_${buildOption.board}_${buildOption.cpu}_${buildOption.os}_${buildOption.cgt}`;
|
|
buildTargetClean =` ${property.name}_${buildOption.board}_${buildOption.cpu}_${buildOption.os}_${buildOption.cgt}_clean`;
|
|
buildTargetScrub =` ${property.name}_${buildOption.board}_${buildOption.cpu}_${buildOption.os}_${buildOption.cgt}_scrub`;
|
|
|
|
example_make.buildTarget = buildTarget;
|
|
example_make.buildTargetClean = buildTargetClean;
|
|
example_make.buildTargetScrub = buildTargetScrub;
|
|
if(property.isInternal == isInternal) {
|
|
let isPartOfSystemProject = false;
|
|
if(buildOption.isPartOfSystemProject && buildOption.isPartOfSystemProject === true)
|
|
{
|
|
isPartOfSystemProject = true;
|
|
}
|
|
if(isPartOfSystemProject === false)
|
|
{
|
|
example_make_list.push(example_make);
|
|
if(property.skipProjectSpec) {
|
|
/* no need to output project spec make commands */
|
|
}
|
|
else {
|
|
example_make_projectspec_list.push(example_make);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
for(example of example_file_list) {
|
|
|
|
example = require(`../${example}`);
|
|
|
|
if( ! example.getSystemProjects)
|
|
continue;
|
|
|
|
let property = example.getComponentProperty(device);
|
|
let systemProjects = example.getSystemProjects(device);
|
|
|
|
for ( project of systemProjects)
|
|
{
|
|
let outPath = `${property.dirPath}/${project.board}/system_${project.tag}`
|
|
|
|
let system_example_make = {};
|
|
|
|
system_example_make.name = `${project.name}_${project.board}_system_${project.tag}`;
|
|
system_example_make.relpath = common.path.relative(path.normalize(__dirname + `/../${genFolder}`), outPath);
|
|
system_example_make.buildTarget = " " + system_example_make.name;
|
|
system_example_make.buildTargetClean = " " + system_example_make.name + "_clean";
|
|
system_example_make.buildTargetScrub = " " + system_example_make.name + "_scrub";
|
|
|
|
if(property.isSkipTopLevelBuild === true)
|
|
{
|
|
system_example_make.isSkipTopLevelBuild = true;
|
|
}
|
|
|
|
if(property.isInternal == isInternal) {
|
|
system_example_make_list.push(system_example_make);
|
|
|
|
if( project.skipProjectSpec && project.skipProjectSpec === true)
|
|
{
|
|
/* skip project spec */
|
|
}
|
|
else
|
|
{
|
|
system_example_make_projectspec_list.push(system_example_make);
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
}
|
|
|
|
let args = {
|
|
component_list: component_make_list,
|
|
example_list: example_make_list,
|
|
system_example_list: system_example_make_list,
|
|
device: device,
|
|
};
|
|
|
|
common.convertTemplateToFile(
|
|
`.project/templates/makefile_device_top.xdt`,
|
|
`${genFolder}/makefile.${device}`,
|
|
args);
|
|
|
|
args = {
|
|
example_list: example_make_projectspec_list,
|
|
system_example_list: system_example_make_projectspec_list,
|
|
device: device,
|
|
sdkPath: "MOTOR_CONTROL_SDK_PATH",
|
|
relPath: relPath
|
|
};
|
|
|
|
common.convertTemplateToFile(
|
|
`.project/templates/makefile_device_projectspec_top.xdt`,
|
|
`${genFolder}/makefile_projectspec.${device}`,
|
|
args);
|
|
}
|
|
|
|
function genMakefileLibrary(component_file_list, device) {
|
|
|
|
for(component of component_file_list) {
|
|
property = require(`../${component}`).getComponentProperty(device);
|
|
for(buildOption of property.buildOptionCombos) {
|
|
let commonCgtOptions = require(`./cgt/cgt_${buildOption.cgt}`).getCgtOptions(buildOption.cpu, device);
|
|
let common_build_property = require(`./device/project_${device}`).getProperty();
|
|
build_property = require(`../${component}`).getComponentBuildProperty(buildOption);
|
|
|
|
let project = [];
|
|
project = _.merge({}, project, property);
|
|
project.relpath = common.path.relative(path.normalize(__dirname + "/.."), property.dirPath);
|
|
project = _.merge({}, project, buildOption);
|
|
project = _.merge({}, project, build_property);
|
|
project = common.mergeCgtOptions(project, commonCgtOptions);
|
|
project = common.mergeCgtOptions(project, common_build_property);
|
|
|
|
let args = {
|
|
sdkPath: "MOTOR_CONTROL_SDK_PATH",
|
|
relPath: common.path.relative(project.dirPath, "."),
|
|
project: project,
|
|
cgtOptions: require(`./cgt/cgt_${project.cgt}`).getCgtOptions(buildOption.cpu, device),
|
|
};
|
|
|
|
let tag="";
|
|
if(property.tag)
|
|
{
|
|
tag = `.${property.tag}`;
|
|
}
|
|
common.convertTemplateToFile(
|
|
`.project/templates/makefile_${project.type}.xdt`,
|
|
`${project.dirPath}/makefile${tag}.${project.device}.${project.cpu}.${project.cgt}`,
|
|
args);
|
|
}
|
|
}
|
|
}
|
|
|
|
function cleanMakefileLibrary(component_file_list, device) {
|
|
|
|
for(component of component_file_list) {
|
|
property = require(`../${component}`).getComponentProperty(device);
|
|
for(buildOption of property.buildOptionCombos) {
|
|
build_property = require(`../${component}`).getComponentBuildProperty(buildOption);
|
|
|
|
let project = [];
|
|
project = _.merge({}, project, property);
|
|
project.relpath = common.path.relative(path.normalize(__dirname + "/.."), property.dirPath);
|
|
|
|
common.deleteFile(`${project.dirPath}/makefile.${buildOption.device}.${buildOption.cpu}.${buildOption.cgt}`);
|
|
}
|
|
}
|
|
}
|
|
|
|
function genMakefileExample(example_file_list, device) {
|
|
|
|
for(example of example_file_list) {
|
|
property = require(`../${example}`).getComponentProperty(device);
|
|
for(buildOption of property.buildOptionCombos) {
|
|
let commonCgtOptions = require(`./cgt/cgt_${buildOption.cgt}`).getCgtOptions(buildOption.cpu, device);
|
|
let common_build_property = require(`./device/project_${device}`).getProperty();
|
|
let project = [];
|
|
let makefileOutPath = common.path.makeExampleOutPath(property.dirPath, buildOption);
|
|
|
|
fs.mkdirSync(makefileOutPath, { recursive: true });
|
|
|
|
build_property = require(`../${example}`).getComponentBuildProperty(buildOption);
|
|
|
|
project = _.merge({}, project, property);
|
|
project.relpath = common.path.relative(path.normalize(__dirname + "/.."), project.dirPath);
|
|
project = _.merge({}, project, buildOption);
|
|
project = _.merge({}, project, build_property);
|
|
project = common.mergeCgtOptions(project, commonCgtOptions);
|
|
project = common.mergeCgtOptions(project, common_build_property);
|
|
project.dirPath = makefileOutPath;
|
|
|
|
let isInstrumentationMode = false;
|
|
if(common.isInstrumentationMode()) {
|
|
isInstrumentationMode = true;
|
|
}
|
|
let args = {
|
|
sdkPath: "MOTOR_CONTROL_SDK_PATH",
|
|
relPath: common.path.relative(project.dirPath, "."),
|
|
project: project,
|
|
cgtOptions: require(`./cgt/cgt_${project.cgt}`).getCgtOptions(buildOption.cpu, device),
|
|
syscfg: {
|
|
device: require(`./device/project_${device}.js`).getSysCfgDevice(buildOption.board),
|
|
cpu: require(`./device/project_${device}.js`).getSysCfgCpu(buildOption.cpu),
|
|
pkg: require(`./device/project_${device}.js`).getSysCfgPkg(buildOption.board),
|
|
part: require(`./device/project_${device}.js`).getSysCfgPart(buildOption.board),
|
|
},
|
|
linuxFwName: require(`./device/project_${device}`).getLinuxFwName(project.cpu),
|
|
isInstrumentationMode: isInstrumentationMode,
|
|
flashAddr: require(`./device/project_${device}.js`).getFlashAddr(),
|
|
};
|
|
|
|
if(project.makefile) {
|
|
common.convertTemplateToFile(
|
|
`.project/templates/makefile_${project.makefile}.xdt`,
|
|
`${project.dirPath}/makefile`,
|
|
args);
|
|
} else
|
|
common.convertTemplateToFile(
|
|
`.project/templates/makefile_${project.type}.xdt`,
|
|
`${project.dirPath}/makefile`,
|
|
args);
|
|
}
|
|
}
|
|
}
|
|
|
|
function cleanMakefileExample(example_file_list, device) {
|
|
|
|
for(example of example_file_list) {
|
|
property = require(`../${example}`).getComponentProperty(device);
|
|
for(buildOption of property.buildOptionCombos) {
|
|
let project = [];
|
|
let makefileOutPath = common.path.makeExampleOutPath(property.dirPath, buildOption);
|
|
fs.mkdirSync(makefileOutPath, { recursive: true });
|
|
project = _.merge({}, project, property);
|
|
project.relpath = common.path.relative(path.normalize(__dirname + "/.."), project.dirPath);
|
|
project.dirPath = makefileOutPath;
|
|
|
|
common.deleteFile(`${project.dirPath}/makefile`);
|
|
}
|
|
}
|
|
}
|
|
|
|
function genMakefileProjectSpec(example_file_list, device) {
|
|
|
|
for(example of example_file_list) {
|
|
property = require(`../${example}`).getComponentProperty(device);
|
|
|
|
if(property.skipProjectSpec)
|
|
continue;
|
|
|
|
for(buildOption of property.buildOptionCombos) {
|
|
let commonCgtOptions = require(`./cgt/cgt_${buildOption.cgt}`).getCgtOptions(buildOption.cpu, device);
|
|
let common_build_property = require(`./device/project_${device}`).getProperty();
|
|
let project = [];
|
|
let makefileOutPath = common.path.makeExampleOutPath(property.dirPath, buildOption);
|
|
|
|
fs.mkdirSync(makefileOutPath, { recursive: true });
|
|
|
|
build_property = require(`../${example}`).getComponentBuildProperty(buildOption);
|
|
|
|
project = _.merge({}, project, property);
|
|
project.relpath = common.path.relative(path.normalize(__dirname + "/.."), project.dirPath);
|
|
project = _.merge({}, project, buildOption);
|
|
project = common.mergeCgtOptions(project, common_build_property);
|
|
project = _.merge({}, project, build_property);
|
|
project.dirPath = makefileOutPath;
|
|
|
|
let args = {
|
|
sdkPath: "MOTOR_CONTROL_SDK_PATH",
|
|
relPath: common.path.relative(project.dirPath, "."),
|
|
project: project
|
|
};
|
|
|
|
common.convertTemplateToFile(
|
|
`.project/templates/makefile_projectspec.xdt`,
|
|
`${project.dirPath}/makefile_projectspec`,
|
|
args);
|
|
}
|
|
}
|
|
}
|
|
|
|
function cleanMakefileProjectSpec(example_file_list, device) {
|
|
|
|
for(example of example_file_list) {
|
|
property = require(`../${example}`).getComponentProperty(device);
|
|
|
|
if(property.skipProjectSpec)
|
|
continue;
|
|
|
|
for(buildOption of property.buildOptionCombos) {
|
|
let project = [];
|
|
let makefileOutPath = common.path.makeExampleOutPath(property.dirPath, buildOption);
|
|
fs.mkdirSync(makefileOutPath, { recursive: true });
|
|
project = _.merge({}, project, property);
|
|
project.relpath = common.path.relative(path.normalize(__dirname + "/.."), project.dirPath);
|
|
project.dirPath = makefileOutPath;
|
|
|
|
common.deleteFile(`${project.dirPath}/makefile_projectspec`);
|
|
}
|
|
}
|
|
}
|
|
|
|
function genMakeImport(device) {
|
|
let args = {
|
|
device: device,
|
|
utils: require(`./genProjectSpec.js`).utils,
|
|
common: common,
|
|
};
|
|
|
|
common.convertTemplateToFile(
|
|
`.project/templates/imports.mak.xdt`,
|
|
`imports.mak`,
|
|
args);
|
|
}
|
|
|
|
function genMakefilesDevice(device) {
|
|
let component_file_list = require(`./device/project_${device}`).getComponentList();
|
|
let example_file_list = require(`./device/project_${device}`).getExampleList();
|
|
|
|
genMakefileDeviceTop(component_file_list, example_file_list, device, false); /* External libs/examples */
|
|
genMakefileDeviceTop(component_file_list, example_file_list, device, false); /* Internal libs/examples */
|
|
genMakefileLibrary(component_file_list, device);
|
|
genMakefileExample(example_file_list, device);
|
|
genMakefileProjectSpec(example_file_list, device);
|
|
genMakeImport(device);
|
|
}
|
|
|
|
function cleanMakefilesDevice(device) {
|
|
let component_file_list = require(`./device/project_${device}`).getComponentList();
|
|
let example_file_list = require(`./device/project_${device}`).getExampleList();
|
|
|
|
/* Remove top level files */
|
|
common.deleteFile(`./makefile.${device}`);
|
|
common.deleteFile(`./makefile_projectspec.${device}`);
|
|
common.deleteFile(`./test/makefile.${device}`);
|
|
common.deleteFile(`./test/makefile_projectspec.${device}`);
|
|
|
|
cleanMakefileLibrary(component_file_list, device);
|
|
cleanMakefileExample(example_file_list, device);
|
|
cleanMakefileProjectSpec(example_file_list, device);
|
|
}
|
|
|
|
module.exports = {
|
|
genMakefilesDevice,
|
|
cleanMakefilesDevice,
|
|
}
|