CompileFlags:
  Add:
    # C++17 标准
    - "-std=c++17"

    # 使用 GCC 的 libstdc++
    - "-stdlib=libstdc++"

    # 定义 NPU 架构宏(用于条件编译,选择 2201 作为默认)
    - "-D__NPU_ARCH__=2201"

    # 注入GCC标准库路径(自行替换对应版本与路径)
    - "-isystem"
    - "/usr/include/c++/9"
    - "-isystem"
    - "/usr/include/x86_64-linux-gnu/c++/9"
    - "-isystem"
    - "/usr/lib/gcc/x86_64-linux-gnu/9/include"

    # 注入AscendC头文件路径(自行替换cann包路径)
    - "-isystem"
    - "/usr/local/Ascend/cann-9.0.0/x86_64-linux/asc/include"
    - "-isystem"
    - "/usr/local/Ascend/cann-9.0.0/x86_64-linux/asc/include/adv_api/matmul"
    - "-isystem"
    - "/usr/local/Ascend/cann-9.0.0/x86_64-linux/asc/include/aicpu_api"
    - "-isystem"
    - "/usr/local/Ascend/cann-9.0.0/x86_64-linux/asc/include/basic_api"
    - "-isystem"
    - "/usr/local/Ascend/cann-9.0.0/x86_64-linux/asc/include/c_api"
    - "-isystem"
    - "/usr/local/Ascend/cann-9.0.0/x86_64-linux/asc/include/interface"
    - "-isystem"
    - "/usr/local/Ascend/cann-9.0.0/x86_64-linux/asc/include/simt_api"
    - "-isystem"
    - "/usr/local/Ascend/cann-9.0.0/x86_64-linux/asc/include/tiling"
    - "-isystem"
    - "/usr/local/Ascend/cann-9.0.0/x86_64-linux/asc/include/utils"

    - "-isystem"
    - "/usr/local/Ascend/cann-9.0.0/x86_64-linux/asc/impl"
    - "-isystem"
    - "/usr/local/Ascend/cann-9.0.0/x86_64-linux/asc/impl/adv_api"
    - "-isystem"
    - "/usr/local/Ascend/cann-9.0.0/x86_64-linux/asc/impl/basic_api"
    - "-isystem"
    - "/usr/local/Ascend/cann-9.0.0/x86_64-linux/asc/impl/c_api"
    - "-isystem"
    - "/usr/local/Ascend/cann-9.0.0/x86_64-linux/asc/impl/simt_api"
    - "-isystem"
    - "/usr/local/Ascend/cann-9.0.0/x86_64-linux/asc/impl/utils"

    - "-isystem"
    - "/usr/local/Ascend/cann-9.0.0/x86_64-linux/include"

    # 启用 CPU 调试模式,会自动加载 kernel_macros.h 中的定义
    - "-DASCENDC_CPU_DEBUG=1"

    # 定义 Ascend C 特殊关键字(防止 clangd 报错)
    # 这些关键字在真实的 Ascend C 编译器中是内建的
    # 函数属性 - 使用 GNU 属性语法
    - "-D__aicore__=__attribute__((annotate(\"aicore\")))"
    - "-D__host_aicore__=__attribute__((annotate(\"host_aicore\")))"
    - "-D__global__=__attribute__((annotate(\"global\")))"
    - "-D__host__=__attribute__((annotate(\"host\")))"
    - "-D__device__=__attribute__((annotate(\"device\")))"

    # 内存空间限定符 - 定义为空(类型限定符不能使用属性语法)
    - "-D__gm__="
    - "-D__simt_vf__="
    - "-D__vector__="
    - "-D__cube__="
    - "-D__launch_bounds__(x)="
    - "-D__ubuf__="
    - "-D__BLOCK_LOCAL__="
    - "-D__WORKGROUP_LOCAL__="
    - "-D__VEC_SCOPE__="
    - "-D__cbuf__="
    - "-D__ubuf__="
    - "-D__cc__="
    - "-D__ca__="
    - "-D__cb__="
    - "-D__fbuf__="
    - "-D__sync_noalias__="
    - "-D__sync_alias__="
    - "-D__check_sync_alias__="
    - "-D__sync_out__="
    - "-D__sync_in__="
    - "-D__inout_pipe__(...)="
    - "-D__in_pipe__(...)="
    - "-D__out_pipe__(...)="
    - "-D__ssbuf__="
    - "-D__simt_callee__="
    - "-D__simt_vf__="
    - "-D__simd_callee__="
    - "-D__simd_vf__="
    - "-D__no_simd_vf_fusion__="
    - "-D__disable_kernel_type_autoinfer__="
    - "-DGM_ADDR=uint8_t*"

    # Ascend C 高级宏(通常在 kernel_macros.h 中定义)
    - "-DASCENDC_HOST=__attribute__((annotate(\"host\")))"
    - "-DASCENDC_AICORE=__attribute__((annotate(\"aicore\")))"
    - "-DASCENDC_HOST_AICORE=__attribute__((annotate(\"host_aicore\")))"

    # 抑制未知属性和其他不相关的警告
    - "-Wno-unknown-attributes"
    - "-Wno-ignored-attributes"
    - "-Wno-gnu-zero-variadic-macro-arguments"
    - "-Wno-nested-anon-types"

Diagnostics:
  # 抑制一些可能不相关的警告
  UnusedIncludes: None
  MissingIncludes: None
  Suppress:
    - "unused-includes"
    - "pp_file_not_found"
    - "unknown-warning-option"
    - "macro-redefined"
    - "drv_no_cuda_installation"  # 不需要 CUDA
    - "redefinition"  # 避免 operator new 等重定义错误
---
If:
  PathMatch: ".*\\.asc$"
CompileFlags:
  Add:
    - "-x"
    - "c++"

Diagnostics:
  Suppress:
    - "attributes_not_allowed"
    - "decomp_decl_template"
    - "ignored_attributes"
    - "unknown_type_name"
    - "undeclared_var_use"
    - "invalid_token_after_toplevel_declarator"
    - "missing_type_specifier"
    - "typename_nested_not_found"