Skip to content

Commit b7ca230

Browse files
committed
import keil User Tasks
1 parent 6260d69 commit b7ca230

File tree

2 files changed

+66
-2
lines changed

2 files changed

+66
-2
lines changed

src/EIDEProjectExplorer.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3045,6 +3045,11 @@ class ProjectDataProvider implements vscode.TreeDataProvider<ProjTreeItem>, vsco
30453045
return baseOpts;
30463046
}
30473047

3048+
const replaceUserTaskTmpVar = (t: any) => {
3049+
const reKeilPrjDir = baseInfo.rootFolder.ToRelativeLocalPath(keilPrjFile.dir) || keilPrjFile.dir;
3050+
t.command = t.command.replace('$<cd:mdk-proj-dir>', `cd .\\${reKeilPrjDir}`);
3051+
}
3052+
30483053
// init all targets
30493054
for (const keilTarget of targets) {
30503055

@@ -3072,7 +3077,8 @@ class ProjectDataProvider implements vscode.TreeDataProvider<ProjTreeItem>, vsco
30723077
defIncList.push(baseInfo.rootFolder.ToRelativePath(absPath) || absPath);
30733078
}
30743079
// import builder options
3075-
const opts = mergeBuilderOpts(toolchain.getDefaultConfig(), keilCompileConf.optionsGroup[keilCompileConf.toolchain]);
3080+
const opts: ICompileOptions = mergeBuilderOpts(toolchain.getDefaultConfig(), keilCompileConf.optionsGroup[keilCompileConf.toolchain]);
3081+
// write to file
30763082
const cfgFile = File.fromArray([baseInfo.rootFolder.path, AbstractProject.EIDE_DIR, `${keilTarget.name.toLowerCase()}.${toolchain.configName}`]);
30773083
cfgFile.Write(JSON.stringify(opts, undefined, 4));
30783084
}
@@ -3097,7 +3103,11 @@ class ProjectDataProvider implements vscode.TreeDataProvider<ProjTreeItem>, vsco
30973103

30983104
// import builder options
30993105
const toolchain = ToolchainManager.getInstance().getToolchain('ARM', keilCompileConf.toolchain);
3100-
const opts = mergeBuilderOpts(toolchain.getDefaultConfig(), keilCompileConf.optionsGroup[keilCompileConf.toolchain]);
3106+
const opts: ICompileOptions = mergeBuilderOpts(toolchain.getDefaultConfig(), keilCompileConf.optionsGroup[keilCompileConf.toolchain]);
3107+
opts.beforeBuildTasks?.forEach((t) => replaceUserTaskTmpVar(t));
3108+
opts.afterBuildTasks?.forEach((t) => replaceUserTaskTmpVar(t));
3109+
3110+
// write to file
31013111
const cfgFile = File.fromArray([baseInfo.rootFolder.path, AbstractProject.EIDE_DIR, `${keilTarget.name.toLowerCase()}.${toolchain.configName}`]);
31023112
cfgFile.Write(JSON.stringify(opts, undefined, 4));
31033113
}

src/KeilXmlParser.ts

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -699,6 +699,60 @@ class ARMParser extends KeilParser<KeilARMOption> {
699699
}
700700
}
701701

702+
// parse builder tasks
703+
{
704+
const commonOption = targetOptionObj.TargetCommonOption;
705+
const eideOption = option.optionsGroup[option.toolchain];
706+
707+
if (eideOption.beforeBuildTasks == undefined)
708+
eideOption.beforeBuildTasks = [];
709+
if (eideOption.afterBuildTasks == undefined)
710+
eideOption.afterBuildTasks = [];
711+
712+
// (%|#|@|\!|\$)
713+
const replaceMdkEnv = (cmd: string) => cmd
714+
.replace(/\$(H|L)\b/g, '${OutDir}\\')
715+
.replace(/@(H|L)\b/g, '${ProjectName}')
716+
.replace(/#H\b/g, '${ExecutableName}.hex')
717+
.replace(/%H\b/g, '${ProjectName}.hex')
718+
.replace(/\!H\b/g, '.\\${OutDirBase}\\${ProjectName}.hex')
719+
.replace(/#L\b/g, '${ExecutableName}.axf')
720+
.replace(/%L\b/g, '${ProjectName}.axf')
721+
.replace(/\!L\b/g, '.\\${OutDirBase}\\${ProjectName}.axf');
722+
723+
// BeforeMake
724+
const beforeMake = commonOption.BeforeMake;
725+
if (beforeMake) {
726+
for (let idx = 1; idx < 3; idx++) {
727+
let cmd = beforeMake[`UserProg${idx}Name`];
728+
if (cmd) {
729+
eideOption.beforeBuildTasks.push({
730+
"name": cmd,
731+
"command": `$<cd:mdk-proj-dir> && ${replaceMdkEnv(cmd)}`,
732+
"disable": beforeMake[`RunUserProg${idx}`] != '1',
733+
"abortAfterFailed": true,
734+
"stopBuildAfterFailed": true
735+
});
736+
}
737+
}
738+
}
739+
// AfterMake
740+
const afterMake = commonOption.AfterMake;
741+
if (afterMake) {
742+
for (let idx = 1; idx < 3; idx++) {
743+
let cmd = afterMake[`UserProg${idx}Name`];
744+
if (cmd) {
745+
eideOption.afterBuildTasks.push({
746+
"name": cmd,
747+
"command": `$<cd:mdk-proj-dir> && ${replaceMdkEnv(cmd)}`,
748+
"disable": afterMake[`RunUserProg${idx}`] != '1',
749+
"abortAfterFailed": true
750+
});
751+
}
752+
}
753+
}
754+
}
755+
702756
// parse misc options
703757
{
704758
const ccMiscOpts = armAdsObj.Cads.VariousControls.MiscControls;

0 commit comments

Comments
 (0)