1//===- FrontendOptions.cpp ------------------------------------------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#include "clang/Frontend/FrontendOptions.h"
10#include "clang/Basic/LangStandard.h"
11#include "llvm/ADT/StringSwitch.h"
12
13using namespace clang;
14
15InputKind FrontendOptions::getInputKindForExtension(StringRef Extension) {
16 return llvm::StringSwitch<InputKind>(Extension)
17 .Cases(CaseStrings: {"ast", "pcm"},
18 Value: InputKind(Language::Unknown, InputKind::Precompiled))
19 .Case(S: "c", Value: Language::C)
20 .Cases(CaseStrings: {"S", "s"}, Value: Language::Asm)
21 .Case(S: "i", Value: InputKind(Language::C).getPreprocessed())
22 .Case(S: "ii", Value: InputKind(Language::CXX).getPreprocessed())
23 .Case(S: "cui", Value: InputKind(Language::CUDA).getPreprocessed())
24 .Case(S: "m", Value: Language::ObjC)
25 .Case(S: "mi", Value: InputKind(Language::ObjC).getPreprocessed())
26 .Cases(CaseStrings: {"mm", "M"}, Value: Language::ObjCXX)
27 .Case(S: "mii", Value: InputKind(Language::ObjCXX).getPreprocessed())
28 .Cases(CaseStrings: {"C", "cc", "cp"}, Value: Language::CXX)
29 .Cases(CaseStrings: {"cpp", "CPP", "c++", "cxx", "hpp", "hxx"}, Value: Language::CXX)
30 .Case(S: "cppm", Value: Language::CXX)
31 .Cases(CaseStrings: {"iim", "iih"}, Value: InputKind(Language::CXX).getPreprocessed())
32 .Case(S: "cl", Value: Language::OpenCL)
33 .Case(S: "clcpp", Value: Language::OpenCLCXX)
34 .Cases(CaseStrings: {"cu", "cuh"}, Value: Language::CUDA)
35 .Case(S: "hip", Value: Language::HIP)
36 .Cases(CaseStrings: {"ll", "bc"}, Value: Language::LLVM_IR)
37 .Case(S: "hlsl", Value: Language::HLSL)
38 .Case(S: "cir", Value: Language::CIR)
39 .Default(Value: Language::Unknown);
40}
41