@@ -2732,7 +2732,7 @@ class ProjectDataProvider implements vscode.TreeDataProvider<ProjTreeItem>, vsco
2732
2732
2733
2733
const compilerOpt = < ArmBaseCompileData > nEideTarget . compileConfig ;
2734
2734
compilerOpt . cpuType = guessArmCpuType ( eTarget ) || 'Cortex-M3' ;
2735
- compilerOpt . floatingPointHardware = / - M [ 4 - 9 ] \d + / . test ( compilerOpt . cpuType ) ? 'single' : 'none' ;
2735
+ compilerOpt . floatingPointHardware = ArmCpuUtils . hasFpu ( compilerOpt . cpuType ) ? 'single' : 'none' ;
2736
2736
compilerOpt . useCustomScatterFile = true ;
2737
2737
compilerOpt . scatterFilePath = '' ;
2738
2738
@@ -3862,50 +3862,68 @@ export class ProjectExplorer implements CustomConfigurationProvider {
3862
3862
3863
3863
private async registerClangdProvider ( prj : AbstractProject ) {
3864
3864
3865
- if ( this . cppToolsApi ) {
3866
- // 如果 cpptools 激活了,则禁用 clangd,防止两个冲突
3867
- return ;
3868
- }
3865
+ if ( this . cppToolsApi )
3866
+ return ; // 如果 cpptools 激活了,则禁用 clangd,防止两个冲突
3869
3867
3870
3868
prj . on ( 'cppConfigChanged' , ( ) => {
3871
- // todo
3872
- } ) ;
3873
3869
3874
- // ----------------------
3875
- // setup clangd config
3876
- // ----------------------
3877
- try {
3878
- let cfg : any = { } ;
3879
- const fclangd = File . fromArray ( [ prj . getProjectRoot ( ) . path , '.clangd' ] ) ;
3880
- if ( fclangd . IsFile ( ) ) {
3881
- cfg = yaml . parse ( fclangd . Read ( ) ) ;
3870
+ const envs = prj . getProjectVariables ( ) ;
3871
+ if ( envs [ 'EIDE_CLANGD_PROVIDER_ENABLE' ] == '0' ) {
3872
+ GlobalEvent . log_info ( `ignore update .clangd, because EIDE_CLANGD_PROVIDER_ENABLE=0 is set` ) ;
3873
+ return ;
3882
3874
}
3883
- if ( ! cfg [ 'CompileFlags' ] ) cfg [ 'CompileFlags' ] = { } ;
3884
- if ( ! cfg [ 'CompileFlags' ] [ 'Add' ] ) cfg [ 'CompileFlags' ] [ 'Add' ] = [ ]
3885
- //
3886
- cfg [ 'CompileFlags' ] [ 'CompilationDatabase' ] = './' + File . ToUnixPath ( prj . getOutputDir ( ) ) ;
3887
- const toolchain = prj . getToolchain ( ) ;
3888
- const gccLikePath = toolchain . getGccFamilyCompilerPathForCpptools ( ) ;
3889
- if ( gccLikePath ) { // 仅兼容gcc的编译器
3890
- cfg [ 'CompileFlags' ] [ 'Compiler' ] = gccLikePath ;
3891
- let args : string [ ] = cfg [ 'CompileFlags' ] [ 'Add' ] ;
3892
- if ( / G C C / . test ( toolchain . name ) ) {
3893
- let li = getGccSystemSearchList ( File . ToLocalPath ( gccLikePath ) ) ;
3894
- if ( li ) {
3895
- li . forEach ( p => {
3896
- args . push ( `-I${ File . normalize ( p ) } ` ) ;
3897
- } ) ;
3898
- }
3899
- } else {
3900
- args . push ( `-I${ toolchain . getToolchainDir ( ) . path } /include` ) ;
3901
- args . push ( `-I${ toolchain . getToolchainDir ( ) . path } /include/libcxx` ) ;
3875
+
3876
+ // ----------------------
3877
+ // setup clangd config
3878
+ // ----------------------
3879
+ try {
3880
+ let cfg : any = { } ;
3881
+ const fclangd = File . fromArray ( [ prj . getProjectRoot ( ) . path , '.clangd' ] ) ;
3882
+ if ( fclangd . IsFile ( ) ) {
3883
+ cfg = yaml . parse ( fclangd . Read ( ) ) ;
3902
3884
}
3903
- cfg [ 'CompileFlags' ] [ 'Add' ] = ArrayDelRepetition ( args ) ;
3885
+ if ( ! cfg [ 'CompileFlags' ] ) cfg [ 'CompileFlags' ] = { } ;
3886
+ if ( ! cfg [ 'CompileFlags' ] [ 'Add' ] ) cfg [ 'CompileFlags' ] [ 'Add' ] = [ ]
3887
+ //
3888
+ cfg [ 'CompileFlags' ] [ 'CompilationDatabase' ] = './' + File . ToUnixPath ( prj . getOutputDir ( ) ) ;
3889
+ const toolchain = prj . getToolchain ( ) ;
3890
+ const gccLikePath = toolchain . getGccFamilyCompilerPathForCpptools ( 'c++' ) ;
3891
+ if ( gccLikePath ) { // 仅兼容gcc的编译器
3892
+ cfg [ 'CompileFlags' ] [ 'Compiler' ] = gccLikePath ;
3893
+ let clangdCompileFlags = < string [ ] > ( cfg [ 'CompileFlags' ] [ 'Add' ] ) ;
3894
+ let compilerArgs = prj . getCpptoolsConfig ( ) . cppCompilerArgs ;
3895
+ if ( / G C C / . test ( toolchain . name ) ) {
3896
+ const tRoot = toolchain . getToolchainDir ( ) . path ;
3897
+ clangdCompileFlags = clangdCompileFlags . filter ( p => ! File . isSubPathOf ( tRoot , p . substr ( 2 ) ) ) ;
3898
+ let li = getGccSystemSearchList ( File . ToLocalPath ( gccLikePath ) , [ '-xc++' ] . concat ( compilerArgs || [ ] ) ) ;
3899
+ if ( li ) {
3900
+ li . forEach ( p => {
3901
+ clangdCompileFlags . push ( `-I${ File . normalize ( p ) } ` ) ;
3902
+ } ) ;
3903
+ }
3904
+ } else {
3905
+ clangdCompileFlags . push ( `-I${ toolchain . getToolchainDir ( ) . path } /include` ) ;
3906
+ clangdCompileFlags . push ( `-I${ toolchain . getToolchainDir ( ) . path } /include/libcxx` ) ;
3907
+ }
3908
+ // // add flags
3909
+ // if (compilerArgs)
3910
+ // compilerArgs.forEach(arg => clangdCompileFlags.push(arg));
3911
+ // // add user includes
3912
+ // prj.getCpptoolsConfig().includePath
3913
+ // .forEach(path => clangdCompileFlags.push(`-I${path}`));
3914
+ // // add user defines
3915
+ // prj.getCpptoolsConfig().defines
3916
+ // .forEach(d => clangdCompileFlags.push(`-D${d}`));
3917
+ // del repeat
3918
+ cfg [ 'CompileFlags' ] [ 'Add' ] = ArrayDelRepetition ( clangdCompileFlags ) ;
3919
+ }
3920
+ fclangd . Write ( yaml . stringify ( cfg ) ) ;
3921
+ } catch ( error ) {
3922
+ GlobalEvent . log_error ( error ) ;
3904
3923
}
3905
- fclangd . Write ( yaml . stringify ( cfg ) ) ;
3906
- } catch ( error ) {
3907
- GlobalEvent . log_error ( error ) ;
3908
- }
3924
+ } ) ;
3925
+
3926
+ prj . forceUpdateCpptoolsConfig ( ) ;
3909
3927
}
3910
3928
3911
3929
// -----------------------------------------
0 commit comments