xref: /freebsd-src/contrib/llvm-project/clang/lib/Testing/CommandLineArgs.cpp (revision 81ad626541db97eb356e2c1d4a20eb2a26a766ab)
15ffd83dbSDimitry Andric //===--- CommandLineArgs.cpp ----------------------------------------------===//
25ffd83dbSDimitry Andric //
35ffd83dbSDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
45ffd83dbSDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
55ffd83dbSDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
65ffd83dbSDimitry Andric //
75ffd83dbSDimitry Andric //===----------------------------------------------------------------------===//
85ffd83dbSDimitry Andric 
95ffd83dbSDimitry Andric #include "clang/Testing/CommandLineArgs.h"
105ffd83dbSDimitry Andric #include "llvm/Support/ErrorHandling.h"
115ffd83dbSDimitry Andric 
125ffd83dbSDimitry Andric namespace clang {
135ffd83dbSDimitry Andric 
145ffd83dbSDimitry Andric std::vector<std::string> getCommandLineArgsForTesting(TestLanguage Lang) {
155ffd83dbSDimitry Andric   std::vector<std::string> Args;
165ffd83dbSDimitry Andric   // Test with basic arguments.
175ffd83dbSDimitry Andric   switch (Lang) {
185ffd83dbSDimitry Andric   case Lang_C89:
195ffd83dbSDimitry Andric     Args = {"-x", "c", "-std=c89"};
205ffd83dbSDimitry Andric     break;
215ffd83dbSDimitry Andric   case Lang_C99:
225ffd83dbSDimitry Andric     Args = {"-x", "c", "-std=c99"};
235ffd83dbSDimitry Andric     break;
245ffd83dbSDimitry Andric   case Lang_CXX03:
255ffd83dbSDimitry Andric     Args = {"-std=c++03", "-frtti"};
265ffd83dbSDimitry Andric     break;
275ffd83dbSDimitry Andric   case Lang_CXX11:
285ffd83dbSDimitry Andric     Args = {"-std=c++11", "-frtti"};
295ffd83dbSDimitry Andric     break;
305ffd83dbSDimitry Andric   case Lang_CXX14:
315ffd83dbSDimitry Andric     Args = {"-std=c++14", "-frtti"};
325ffd83dbSDimitry Andric     break;
335ffd83dbSDimitry Andric   case Lang_CXX17:
345ffd83dbSDimitry Andric     Args = {"-std=c++17", "-frtti"};
355ffd83dbSDimitry Andric     break;
365ffd83dbSDimitry Andric   case Lang_CXX20:
375ffd83dbSDimitry Andric     Args = {"-std=c++20", "-frtti"};
385ffd83dbSDimitry Andric     break;
39*81ad6265SDimitry Andric   case Lang_OBJC:
40*81ad6265SDimitry Andric     Args = {"-x", "objective-c", "-frtti", "-fobjc-nonfragile-abi"};
41*81ad6265SDimitry Andric     break;
425ffd83dbSDimitry Andric   case Lang_OBJCXX:
435ffd83dbSDimitry Andric     Args = {"-x", "objective-c++", "-frtti"};
445ffd83dbSDimitry Andric     break;
455ffd83dbSDimitry Andric   case Lang_OpenCL:
465ffd83dbSDimitry Andric     llvm_unreachable("Not implemented yet!");
475ffd83dbSDimitry Andric   }
485ffd83dbSDimitry Andric   return Args;
495ffd83dbSDimitry Andric }
505ffd83dbSDimitry Andric 
51*81ad6265SDimitry Andric std::vector<std::string> getCC1ArgsForTesting(TestLanguage Lang) {
52*81ad6265SDimitry Andric   std::vector<std::string> Args;
53*81ad6265SDimitry Andric   switch (Lang) {
54*81ad6265SDimitry Andric   case Lang_C89:
55*81ad6265SDimitry Andric     Args = {"-xc", "-std=c89"};
56*81ad6265SDimitry Andric     break;
57*81ad6265SDimitry Andric   case Lang_C99:
58*81ad6265SDimitry Andric     Args = {"-xc", "-std=c99"};
59*81ad6265SDimitry Andric     break;
60*81ad6265SDimitry Andric   case Lang_CXX03:
61*81ad6265SDimitry Andric     Args = {"-std=c++03"};
62*81ad6265SDimitry Andric     break;
63*81ad6265SDimitry Andric   case Lang_CXX11:
64*81ad6265SDimitry Andric     Args = {"-std=c++11"};
65*81ad6265SDimitry Andric     break;
66*81ad6265SDimitry Andric   case Lang_CXX14:
67*81ad6265SDimitry Andric     Args = {"-std=c++14"};
68*81ad6265SDimitry Andric     break;
69*81ad6265SDimitry Andric   case Lang_CXX17:
70*81ad6265SDimitry Andric     Args = {"-std=c++17"};
71*81ad6265SDimitry Andric     break;
72*81ad6265SDimitry Andric   case Lang_CXX20:
73*81ad6265SDimitry Andric     Args = {"-std=c++20"};
74*81ad6265SDimitry Andric     break;
75*81ad6265SDimitry Andric   case Lang_OBJC:
76*81ad6265SDimitry Andric     Args = {"-xobjective-c"};
77*81ad6265SDimitry Andric     break;
78*81ad6265SDimitry Andric   case Lang_OBJCXX:
79*81ad6265SDimitry Andric     Args = {"-xobjective-c++"};
80*81ad6265SDimitry Andric     break;
81*81ad6265SDimitry Andric   case Lang_OpenCL:
82*81ad6265SDimitry Andric     llvm_unreachable("Not implemented yet!");
83*81ad6265SDimitry Andric   }
84*81ad6265SDimitry Andric   return Args;
85*81ad6265SDimitry Andric }
86*81ad6265SDimitry Andric 
875ffd83dbSDimitry Andric StringRef getFilenameForTesting(TestLanguage Lang) {
885ffd83dbSDimitry Andric   switch (Lang) {
895ffd83dbSDimitry Andric   case Lang_C89:
905ffd83dbSDimitry Andric   case Lang_C99:
915ffd83dbSDimitry Andric     return "input.c";
925ffd83dbSDimitry Andric 
935ffd83dbSDimitry Andric   case Lang_CXX03:
945ffd83dbSDimitry Andric   case Lang_CXX11:
955ffd83dbSDimitry Andric   case Lang_CXX14:
965ffd83dbSDimitry Andric   case Lang_CXX17:
975ffd83dbSDimitry Andric   case Lang_CXX20:
985ffd83dbSDimitry Andric     return "input.cc";
995ffd83dbSDimitry Andric 
1005ffd83dbSDimitry Andric   case Lang_OpenCL:
1015ffd83dbSDimitry Andric     return "input.cl";
1025ffd83dbSDimitry Andric 
103*81ad6265SDimitry Andric   case Lang_OBJC:
104*81ad6265SDimitry Andric     return "input.m";
105*81ad6265SDimitry Andric 
1065ffd83dbSDimitry Andric   case Lang_OBJCXX:
1075ffd83dbSDimitry Andric     return "input.mm";
1085ffd83dbSDimitry Andric   }
1095ffd83dbSDimitry Andric   llvm_unreachable("Unhandled TestLanguage enum");
1105ffd83dbSDimitry Andric }
1115ffd83dbSDimitry Andric 
1125ffd83dbSDimitry Andric } // end namespace clang
113