Skip to content

Commit 84c3856

Browse files
committed
use 'dotnet xxx.dll' instead of 'xxx.exe' on arm64 platform
1 parent 3306258 commit 84c3856

File tree

5 files changed

+27
-9
lines changed

5 files changed

+27
-9
lines changed

src/CodeBuilder.ts

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ import { ArrayDelRepetition } from "../lib/node-utility/Utility";
4949
import { DependenceManager } from "./DependenceManager";
5050
import { WorkspaceManager } from "./WorkspaceManager";
5151
import { ToolchainName } from "./ToolchainManager";
52-
import { md5, sha256, copyObject } from "./utility";
52+
import { md5, sha256, copyObject, generateDotnetProgramCmd } from "./utility";
5353
import { exeSuffix, osType } from "./Platform";
5454
import { FileWatcher } from "../lib/node-utility/FileWatcher";
5555
import { STVPFlasherOptions } from './HexUploader';
@@ -322,10 +322,8 @@ export abstract class CodeBuilder {
322322
outDir.CreateDir(true);
323323

324324
// generate command line
325-
const commandLine = CmdLineHandler.getCommandLine(
326-
ResManager.instance().getUnifyBuilderExe().noSuffixName,
327-
this.getCommands()
328-
);
325+
const commandLine = generateDotnetProgramCmd(
326+
ResManager.instance().getUnifyBuilderExe(), this.getCommands());
329327

330328
// if only generate params, exit
331329
if (options?.onlyGenParams) return;

src/EIDEProject.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2510,6 +2510,9 @@ $(OUT_DIR):
25102510
this.registerBuiltinVar('SYS_PathSep', () => platform.osType() != 'win32' ? ':' : ';');
25112511
this.registerBuiltinVar('SYS_PathSeparator', () => platform.osType() != 'win32' ? ':' : ';');
25122512
this.registerBuiltinVar('SYS_EOL', () => os.EOL);
2513+
2514+
// eide vars
2515+
this.registerBuiltinVar('UnifyBuilderDir', () => ResManager.instance().getUnifyBuilderExe().dir);
25132516
}
25142517

25152518
private RegisterEvent(): void {

src/EIDEProjectExplorer.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,8 @@ import {
103103
compareVersion,
104104
getGccSystemSearchList,
105105
openocd_getConfigList,
106-
pyocd_getTargetList
106+
pyocd_getTargetList,
107+
generateDotnetProgramCmd
107108
} from './utility';
108109
import { concatSystemEnvPath, DeleteDir, exeSuffix, kill, osType, DeleteAllChildren } from './Platform';
109110
import { KeilARMOption, KeilC51Option, KeilParser, KeilRteDependence } from './KeilXmlParser';
@@ -4463,8 +4464,8 @@ export class ProjectExplorer implements CustomConfigurationProvider {
44634464
paramsFile.Write(JSON.stringify(cmdList));
44644465

44654466
/* launch */
4466-
const exeName = ResManager.GetInstance().getUnifyBuilderExe().noSuffixName;
4467-
const commandLine = CmdLineHandler.getCommandLine(exeName, ['-r', paramsFile.path]);
4467+
const commandLine = generateDotnetProgramCmd(
4468+
ResManager.instance().getUnifyBuilderExe(), ['-r', paramsFile.path]);
44684469
runShellCommand('build workspace', commandLine);
44694470
}
44704471

src/ResManager.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ export class ResManager extends events.EventEmitter {
163163

164164
enumSerialPort(): string[] {
165165
try {
166-
const cmd = this.getSerialPortExe().noSuffixName;
166+
const cmd = utility.generateDotnetProgramCmd(this.getSerialPortExe());
167167
const data = ChildProcess.execSync(cmd, { env: process.env });
168168
const portList: string[] = JSON.parse(EncodingConverter.trimUtf8BomHeader(data));
169169
if (!Array.isArray(portList)) { throw Error("get current port list error !"); }

src/utility.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,22 @@ import { SettingManager } from './SettingManager';
4545
import { ToolchainName } from './ToolchainManager';
4646
import { Time } from '../lib/node-utility/Time';
4747

48+
export function generateDotnetProgramCmd(programFile: File, args?: string[]): string {
49+
// 在 x64 平台上,.NET编译生成的 包装程序 <my_program>.exe 无法在 arm64 平台运行
50+
// 因此需要直接使用 dotnet 命令去直接执行程序的本体.
51+
// 命令 "<my_program>.exe" 的等价替换是 "dotnet <my_program_dir>/<my_program>.dll"
52+
if (platform.getArchId() == 'arm64') {
53+
let dllpath = [programFile.dir, `${programFile.noSuffixName}.dll`].join('/');
54+
let commandLine = `dotnet ${CmdLineHandler.quoteString(File.ToLocalPath(dllpath), '"')}`;
55+
args?.forEach(p => {
56+
commandLine += ' ' + CmdLineHandler.quoteString(p, '"');
57+
});
58+
return commandLine;
59+
} else {
60+
return CmdLineHandler.getCommandLine(programFile.noSuffixName, args || []);
61+
}
62+
}
63+
4864
export function timeStamp(): string {
4965
const time = Time.GetInstance().GetTimeInfo();
5066
return `${time.year}/${time.month.toString().padStart(2, '0')}/${time.date.toString().padStart(2, '0')}`

0 commit comments

Comments
 (0)