@@ -5,8 +5,6 @@ import { TomlInlineObject, writeTomlFile } from "./tomlUtil.mjs";
55import Logger , { LoggerSource } from "../../logger.mjs" ;
66import { unknownErrorToString } from "../errorHelper.mjs" ;
77import { mkdir , writeFile } from "fs/promises" ;
8- import { promisify } from "util" ;
9- import { exec } from "child_process" ;
108import {
119 GetChipCommand ,
1210 GetOpenOCDRootCommand ,
@@ -17,8 +15,6 @@ import { extensionName } from "../../commands/command.mjs";
1715import { commands , window } from "vscode" ;
1816import LaunchTargetPathCommand from "../../commands/launchTargetPath.mjs" ;
1917
20- const execAsync = promisify ( exec ) ;
21-
2218async function generateVSCodeConfig ( projectRoot : string ) : Promise < boolean > {
2319 const vsc = join ( projectRoot , ".vscode" ) ;
2420
@@ -151,7 +147,6 @@ async function generateVSCodeConfig(projectRoot: string): Promise<boolean> {
151147 "${command:raspberry-pi-pico.launchTargetPathRelease}" ,
152148 "-t" ,
153149 "elf" ,
154- "-f" ,
155150 ] ,
156151 presentation : {
157152 reveal : "always" ,
@@ -184,34 +179,6 @@ async function generateVSCodeConfig(projectRoot: string): Promise<boolean> {
184179 }
185180}
186181
187- async function initGit ( projectRoot : string ) : Promise < boolean > {
188- try {
189- // TODO: timeouts
190- await execAsync ( "git init" , {
191- cwd : projectRoot ,
192- } ) ;
193- await execAsync (
194- "git submodule add https://github.com/rp-rs/rp-hal.git rp-hal" ,
195- {
196- cwd : projectRoot ,
197- }
198- ) ;
199- await execAsync ( "git submodule update --init --recursive" , {
200- cwd : projectRoot ,
201- } ) ;
202-
203- return true ;
204- } catch ( error ) {
205- Logger . error (
206- LoggerSource . projectRust ,
207- "Failed to initialize git" ,
208- unknownErrorToString ( error )
209- ) ;
210-
211- return false ;
212- }
213- }
214-
215182async function generateMainRs ( projectRoot : string ) : Promise < boolean > {
216183 const mainRs = `//! # GPIO 'Blinky' Example
217184//!
@@ -466,7 +433,6 @@ async function generateCargoToml(
466433 "thumbv6m-none-eabi" : {
467434 dependencies : {
468435 "rp2040-hal" : new TomlInlineObject ( {
469- path : "./rp-hal/rp2040-hal" ,
470436 version : "0.11" ,
471437 features : [ "rt" , "critical-section-impl" ] ,
472438 } ) ,
@@ -477,7 +443,6 @@ async function generateCargoToml(
477443 "riscv32imac-unknown-none-elf" : {
478444 dependencies : {
479445 "rp235x-hal" : new TomlInlineObject ( {
480- path : "./rp-hal/rp235x-hal" ,
481446 version : "0.3" ,
482447 features : [ "rt" , "critical-section-impl" ] ,
483448 } ) ,
@@ -487,7 +452,6 @@ async function generateCargoToml(
487452 '"thumbv8m.main-none-eabihf"' : {
488453 dependencies : {
489454 "rp235x-hal" : new TomlInlineObject ( {
490- path : "./rp-hal/rp235x-hal" ,
491455 version : "0.3" ,
492456 features : [ "rt" , "critical-section-impl" ] ,
493457 } ) ,
@@ -1321,58 +1285,101 @@ export async function generateRustProject(
13211285 try {
13221286 await mkdir ( projectFolder , { recursive : true } ) ;
13231287 } catch ( error ) {
1324- Logger . error (
1325- LoggerSource . projectRust ,
1326- "Failed to create project folder" ,
1327- unknownErrorToString ( error )
1328- ) ;
1288+ const msg = unknownErrorToString ( error ) ;
1289+ if (
1290+ msg . includes ( "EPERM" ) ||
1291+ msg . includes ( "EACCES" ) ||
1292+ msg . includes ( "access denied" )
1293+ ) {
1294+ Logger . error (
1295+ LoggerSource . projectRust ,
1296+ "Failed to create project folder" ,
1297+ "Permission denied. Please check your permissions."
1298+ ) ;
1299+
1300+ void window . showErrorMessage (
1301+ "Failed to create project folder. Permission denied - Please check your permissions."
1302+ ) ;
1303+ } else {
1304+ Logger . error (
1305+ LoggerSource . projectRust ,
1306+ "Failed to create project folder" ,
1307+ unknownErrorToString ( error )
1308+ ) ;
1309+
1310+ void window . showErrorMessage (
1311+ "Failed to create project folder. See the output panel for more details."
1312+ ) ;
1313+ }
13291314
13301315 return false ;
13311316 }
13321317
13331318 // TODO: do all in parallel
13341319 let result = await generateCargoToml ( projectFolder , projectName ) ;
13351320 if ( ! result ) {
1321+ Logger . debug (
1322+ LoggerSource . projectRust ,
1323+ "Failed to generate Cargo.toml file"
1324+ ) ;
1325+
13361326 return false ;
13371327 }
13381328
13391329 result = await generateMemoryLayouts ( projectFolder ) ;
13401330 if ( ! result ) {
1331+ Logger . debug ( LoggerSource . projectRust , "Failed to generate memory.x files" ) ;
1332+
13411333 return false ;
13421334 }
13431335
13441336 result = await generateBuildRs ( projectFolder ) ;
13451337 if ( ! result ) {
1338+ Logger . debug ( LoggerSource . projectRust , "Failed to generate build.rs file" ) ;
1339+
13461340 return false ;
13471341 }
13481342
13491343 result = await generateGitIgnore ( projectFolder ) ;
13501344 if ( ! result ) {
1345+ Logger . debug (
1346+ LoggerSource . projectRust ,
1347+ "Failed to generate .gitignore file"
1348+ ) ;
1349+
13511350 return false ;
13521351 }
13531352
13541353 result = await generateCargoConfig ( projectFolder ) ;
13551354 if ( ! result ) {
1355+ Logger . debug (
1356+ LoggerSource . projectRust ,
1357+ "Failed to generate .cargo/config.toml file"
1358+ ) ;
1359+
13561360 return false ;
13571361 }
13581362
13591363 result = await generateMainRs ( projectFolder ) ;
13601364 if ( ! result ) {
1365+ Logger . debug ( LoggerSource . projectRust , "Failed to generate main.rs file" ) ;
1366+
13611367 return false ;
13621368 }
13631369
13641370 result = await generateVSCodeConfig ( projectFolder ) ;
13651371 if ( ! result ) {
1366- return false ;
1367- }
1372+ Logger . debug (
1373+ LoggerSource . projectRust ,
1374+ "Failed to generate .vscode configuration files."
1375+ ) ;
13681376
1369- result = await initGit ( projectFolder ) ;
1370- if ( ! result ) {
13711377 return false ;
13721378 }
13731379
13741380 // add .pico-rs file
13751381 try {
1382+ // TODO: dynamic selection of RP2040 or RP2350 (risc-v or arm)
13761383 await writeFile ( join ( projectFolder , ".pico-rs" ) , "rp2350" ) ;
13771384 } catch ( error ) {
13781385 Logger . error (
0 commit comments