已合并
enable clangd #717
jianwei10创建于 3月4日
enable clangd #717
已合并
从已删除 :master合入到cann/asc-devkitmaster
共 2 个文件变更+199-0
| @@ -0,0 +1,144 @@ | |||
| 1 | +CompileFlags: | ||
| 2 | + Add: | ||
| 3 | + # C++17 标准 | ||
| 4 | + - "-std=c++17" | ||
| 5 | + | ||
| 6 | + # 使用 GCC 的 libstdc++ | ||
| 7 | + - "-stdlib=libstdc++" | ||
| 8 | + | ||
| 9 | + # 定义 NPU 架构宏(用于条件编译,选择 2201 作为默认) | ||
| 10 | + - "-D__NPU_ARCH__=2201" | ||
| 11 | + | ||
| 12 | + # 注入GCC标准库路径(自行替换对应版本与路径) | ||
| 13 | + - "-isystem" | ||
| 14 | + - "/usr/include/c++/9" | ||
| 15 | + - "-isystem" | ||
| 16 | + - "/usr/include/x86_64-linux-gnu/c++/9" | ||
| 17 | + - "-isystem" | ||
| 18 | + - "/usr/lib/gcc/x86_64-linux-gnu/9/include" | ||
| 19 | + | ||
| 20 | + # 注入AscendC头文件路径(自行替换cann包路径) | ||
| 21 | + - "-isystem" | ||
| 22 | + - "/usr/local/Ascend/cann-9.0.0/x86_64-linux/asc/include" | ||
| 23 | + - "-isystem" | ||
| 24 | + - "/usr/local/Ascend/cann-9.0.0/x86_64-linux/asc/include/adv_api/matmul" | ||
| 25 | + - "-isystem" | ||
| 26 | + - "/usr/local/Ascend/cann-9.0.0/x86_64-linux/asc/include/aicpu_api" | ||
| 27 | + - "-isystem" | ||
| 28 | + - "/usr/local/Ascend/cann-9.0.0/x86_64-linux/asc/include/basic_api" | ||
| 29 | + - "-isystem" | ||
| 30 | + - "/usr/local/Ascend/cann-9.0.0/x86_64-linux/asc/include/c_api" | ||
| 31 | + - "-isystem" | ||
| 32 | + - "/usr/local/Ascend/cann-9.0.0/x86_64-linux/asc/include/interface" | ||
| 33 | + - "-isystem" | ||
| 34 | + - "/usr/local/Ascend/cann-9.0.0/x86_64-linux/asc/include/micro_api" | ||
| 35 | + - "-isystem" | ||
| 36 | + - "/usr/local/Ascend/cann-9.0.0/x86_64-linux/asc/include/simt_api" | ||
| 37 | + - "-isystem" | ||
| 38 | + - "/usr/local/Ascend/cann-9.0.0/x86_64-linux/asc/include/tiling" | ||
| 39 | + - "-isystem" | ||
| 40 | + - "/usr/local/Ascend/cann-9.0.0/x86_64-linux/asc/include/utils" | ||
| 41 | + | ||
| 42 | + - "-isystem" | ||
| 43 | + - "/usr/local/Ascend/cann-9.0.0/x86_64-linux/asc/impl" | ||
| 44 | + - "-isystem" | ||
| 45 | + - "/usr/local/Ascend/cann-9.0.0/x86_64-linux/asc/impl/adv_api" | ||
| 46 | + - "-isystem" | ||
| 47 | + - "/usr/local/Ascend/cann-9.0.0/x86_64-linux/asc/impl/basic_api" | ||
| 48 | + - "-isystem" | ||
| 49 | + - "/usr/local/Ascend/cann-9.0.0/x86_64-linux/asc/impl/c_api" | ||
| 50 | + - "-isystem" | ||
| 51 | + - "/usr/local/Ascend/cann-9.0.0/x86_64-linux/asc/impl/micro_api" | ||
| 52 | + - "-isystem" | ||
| 53 | + - "/usr/local/Ascend/cann-9.0.0/x86_64-linux/asc/impl/simt_api" | ||
| 54 | + - "-isystem" | ||
| 55 | + - "/usr/local/Ascend/cann-9.0.0/x86_64-linux/asc/impl/utils" | ||
| 56 | + | ||
| 57 | + - "-isystem" | ||
| 58 | + - "/usr/local/Ascend/cann-9.0.0/x86_64-linux/include" | ||
| 59 | + | ||
| 60 | + # 启用 CPU 调试模式,会自动加载 kernel_macros.h 中的定义 | ||
| 61 | + - "-DASCENDC_CPU_DEBUG=1" | ||
| 62 | + | ||
| 63 | + # 定义 Ascend C 特殊关键字(防止 clangd 报错) | ||
| 64 | + # 这些关键字在真实的 Ascend C 编译器中是内建的 | ||
| 65 | + # 函数属性 - 使用 GNU 属性语法 | ||
| 66 | + - "-D__aicore__=__attribute__((annotate(\"aicore\")))" | ||
| 67 | + - "-D__host_aicore__=__attribute__((annotate(\"host_aicore\")))" | ||
| 68 | + - "-D__global__=__attribute__((annotate(\"global\")))" | ||
| 69 | + - "-D__host__=__attribute__((annotate(\"host\")))" | ||
| 70 | + - "-D__device__=__attribute__((annotate(\"device\")))" | ||
| 71 | + | ||
| 72 | + # 内存空间限定符 - 定义为空(类型限定符不能使用属性语法) | ||
| 73 | + - "-D__gm__=" | ||
| 74 | + - "-D__simt_vf__=" | ||
| 75 | + - "-D__vector__=" | ||
| 76 | + - "-D__cube__=" | ||
| 77 | + - "-D__launch_bounds__(x)=" | ||
| 78 | + - "-D__ubuf__=" | ||
| 79 | + - "-D__BLOCK_LOCAL__=" | ||
| 80 | + - "-D__WORKGROUP_LOCAL__=" | ||
| 81 | + - "-D__VEC_SCOPE__=" | ||
| 82 | + - "-D__cbuf__=" | ||
| 83 | + - "-D__ubuf__=" | ||
| 84 | + - "-D__cc__=" | ||
| 85 | + - "-D__ca__=" | ||
| 86 | + - "-D__cb__=" | ||
| 87 | + - "-D__fbuf__=" | ||
| 88 | + - "-D__sync_noalias__=" | ||
| 89 | + - "-D__sync_alias__=" | ||
| 90 | + - "-D__check_sync_alias__=" | ||
| 91 | + - "-D__sync_out__=" | ||
| 92 | + - "-D__sync_in__=" | ||
| 93 | + - "-D__inout_pipe__(...)=" | ||
| 94 | + - "-D__in_pipe__(...)=" | ||
| 95 | + - "-D__out_pipe__(...)=" | ||
| 96 | + - "-D__ssbuf__=" | ||
| 97 | + - "-D__simt_callee__=" | ||
| 98 | + - "-D__simt_vf__=" | ||
| 99 | + - "-D__simd_callee__=" | ||
| 100 | + - "-D__simd_vf__=" | ||
| 101 | + - "-D__no_simd_vf_fusion__=" | ||
| 102 | + - "-D__disable_kernel_type_autoinfer__=" | ||
| 103 | + - "-DGM_ADDR=uint8_t*" | ||
| 104 | + | ||
| 105 | + # Ascend C 高级宏(通常在 kernel_macros.h 中定义) | ||
| 106 | + - "-DASCENDC_HOST=__attribute__((annotate(\"host\")))" | ||
| 107 | + - "-DASCENDC_AICORE=__attribute__((annotate(\"aicore\")))" | ||
| 108 | + - "-DASCENDC_HOST_AICORE=__attribute__((annotate(\"host_aicore\")))" | ||
| 109 | + | ||
| 110 | + # 抑制未知属性和其他不相关的警告 | ||
| 111 | + - "-Wno-unknown-attributes" | ||
| 112 | + - "-Wno-ignored-attributes" | ||
| 113 | + - "-Wno-gnu-zero-variadic-macro-arguments" | ||
| 114 | + - "-Wno-nested-anon-types" | ||
| 115 | + | ||
| 116 | +Diagnostics: | ||
| 117 | + # 抑制一些可能不相关的警告 | ||
| 118 | + UnusedIncludes: None | ||
| 119 | + MissingIncludes: None | ||
| 120 | + Suppress: | ||
| 121 | + - "unused-includes" | ||
| 122 | + - "pp_file_not_found" | ||
| 123 | + - "unknown-warning-option" | ||
| 124 | + - "macro-redefined" | ||
| 125 | + - "drv_no_cuda_installation" # 不需要 CUDA | ||
| 126 | + - "redefinition" # 避免 operator new 等重定义错误 | ||
| 127 | +--- | ||
| 128 | +If: | ||
| 129 | + PathMatch: ".*\\.asc$" | ||
| 130 | +CompileFlags: | ||
| 131 | + Add: | ||
| 132 | + - "-x" | ||
| 133 | + - "c++" | ||
| 134 | + | ||
| 135 | +Diagnostics: | ||
| 136 | + Suppress: | ||
| 137 | + - "attributes_not_allowed" | ||
| 138 | + - "decomp_decl_template" | ||
| 139 | + - "ignored_attributes" | ||
| 140 | + - "unknown_type_name" | ||
| 141 | + - "undeclared_var_use" | ||
| 142 | + - "invalid_token_after_toplevel_declarator" | ||
| 143 | + - "missing_type_specifier" | ||
| 144 | + - "typename_nested_not_found" | ||
| @@ -63,6 +63,61 @@ Ascend C是[CANN](https://hiascend.com/software/cann) (Compute Architecture fo | |||
| 63 | - [编译构建](docs/quick_start.md):介绍搭建环境、编译执行、本地验证等操作。 | 63 | - [编译构建](docs/quick_start.md):介绍搭建环境、编译执行、本地验证等操作。 |
| 64 | - [样例执行](examples/README.md):提供算子开发样例,介绍端到端执行样例的方式。 | 64 | - [样例执行](examples/README.md):提供算子开发样例,介绍端到端执行样例的方式。 |
| 65 | 65 | ||
| 66 | +## 🧰clangd/IDE 支持 | ||
| 67 | + | ||
| 68 | +- 安装 clangd(推荐 15+,以Ubuntu操作系统为例)以及VSCode插件clangd | ||
| 69 | + | ||
| 70 | + ```bash | ||
| 71 | + sudo apt install -y clangd-15 | ||
| 72 | + ``` | ||
| 73 | + | ||
| 74 | +- 配置本地VSCode的`settings.json`(示例) | ||
| 75 | + | ||
| 76 | + ```json | ||
| 77 | + { | ||
| 78 | + "clangd.path": "/usr/bin/clangd-15", | ||
| 79 | + "clangd.arguments": [ | ||
| 80 | + "--background-index=0", | ||
| 81 | + "--clang-tidy=0" | ||
| 82 | + ], | ||
| 83 | + "files.associations": { | ||
| 84 | + "*.asc": "cpp" | ||
| 85 | + } | ||
| 86 | + } | ||
| 87 | + ``` | ||
| 88 | + | ||
| 89 | +- 在项目根目录下配置 `.clangd`(示例)完整 `.clangd`文件在本目录下给出. | ||
| 90 | + | ||
| 91 | + ```yaml | ||
| 92 | + CompileFlags: | ||
| 93 | + Add: | ||
| 94 | + - "-std=c++17" | ||
| 95 | + - "-DASCENDC_CPU_DEBUG=1" | ||
| 96 | + - "-D__NPU_ARCH__=2201" | ||
| 97 | + ... | ||
| 98 | + | ||
| 99 | + --- | ||
| 100 | + If: | ||
| 101 | + PathMatch: ".*\\.asc$" | ||
| 102 | + CompileFlags: | ||
| 103 | + Add: | ||
| 104 | + - "-x" | ||
| 105 | + - "c++" | ||
| 106 | + Diagnostics: | ||
| 107 | + Suppress: | ||
| 108 | + - "attributes_not_allowed" | ||
| 109 | + - "decomp_decl_template" | ||
| 110 | + - "ignored_attributes" | ||
| 111 | + - "unknown_type_name" | ||
| 112 | + - "undeclared_var_use" | ||
| 113 | + - "invalid_token_after_toplevel_declarator" | ||
| 114 | + - "missing_type_specifier" | ||
| 115 | + - "typename_nested_not_found" | ||
| 116 | + ``` | ||
| 117 | + | ||
| 118 | +- 重启clangd(VSCode: Command Palette -> "Clangd: Restart language server") | ||
| 119 | + | ||
| 120 | +- 💡 关于 ASC 语言语法高亮、代码跳转的支持,如有任何建议或改进意见,欢迎社区开发者积极反馈! | ||
| 66 | 121 | ||
| 67 | ## 📖相关文档 | 122 | ## 📖相关文档 |
| 68 | 123 | ||
🟢 低严重度:示例架构不一致
README 示例中的 NPU 架构是
2201,与主配置文件.clangd.txt中的3101不一致,可能造成混淆。建议:统一架构值,确保文档和实际配置一致。