in src/cpptools.ts [237:306]
export function getIntelliSenseMode(cptVersion: cpt.Version, compiler_path: string, target_arch: Architecture) {
if (cptVersion >= cpt.Version.v5 && target_arch === undefined) {
// IntelliSenseMode is optional for CppTools v5+ and is determined by CppTools.
return undefined;
}
const can_use_arm = (cptVersion >= cpt.Version.v4);
const compiler_name = path.basename(compiler_path || "").toLocaleLowerCase();
if (compiler_name === 'cl.exe') {
const clArch = path.basename(path.dirname(compiler_path)).toLocaleLowerCase();
switch (clArch) {
case 'arm64':
return can_use_arm ? 'msvc-arm64' : 'msvc-x64';
case 'arm':
return can_use_arm ? 'msvc-arm' : 'msvc-x86';
case 'x86':
return 'msvc-x86';
case 'x64':
default:
return 'msvc-x64';
}
} else if (compiler_name.indexOf('armclang') >= 0) {
switch (target_arch) {
case 'arm64':
return can_use_arm ? 'clang-arm64' : 'clang-x64';
case 'arm':
default:
return can_use_arm ? 'clang-arm' : 'clang-x86';
}
} else if (compiler_name.indexOf('clang') >= 0) {
switch (target_arch) {
case 'arm64':
return can_use_arm ? 'clang-arm64' : 'clang-x64';
case 'arm':
return can_use_arm ? 'clang-arm' : 'clang-x86';
case 'x86':
return 'clang-x86';
case 'x64':
default:
return 'clang-x64';
}
} else if (compiler_name.indexOf('aarch64') >= 0) {
// Compiler with 'aarch64' in its name may also have 'arm', so check for
// aarch64 compilers before checking for ARM specific compilers.
return can_use_arm ? 'gcc-arm64' : 'gcc-x64';
} else if (compiler_name.indexOf('arm') >= 0) {
return can_use_arm ? 'gcc-arm' : 'gcc-x86';
} else if (compiler_name.indexOf('gcc') >= 0 || compiler_name.indexOf('g++') >= 0) {
switch (target_arch) {
case 'x86':
return 'gcc-x86';
case 'x64':
return 'gcc-x64';
case 'arm64':
return can_use_arm ? 'gcc-arm64' : 'gcc-x64';
case 'arm':
return can_use_arm ? 'gcc-arm' : 'gcc-x86';
default:
return 'gcc-x64';
}
} else {
// unknown compiler; pick platform defaults.
if (process.platform === 'win32') {
return 'msvc-x64';
} else if (process.platform === 'darwin') {
return 'clang-x64';
} else {
return 'gcc-x64';
}
}
}