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" 10*06c3fb27SDimitry Andric #include "llvm/MC/TargetRegistry.h" 115ffd83dbSDimitry Andric #include "llvm/Support/ErrorHandling.h" 125ffd83dbSDimitry Andric 135ffd83dbSDimitry Andric namespace clang { 145ffd83dbSDimitry Andric 155ffd83dbSDimitry Andric std::vector<std::string> getCommandLineArgsForTesting(TestLanguage Lang) { 165ffd83dbSDimitry Andric std::vector<std::string> Args; 175ffd83dbSDimitry Andric // Test with basic arguments. 185ffd83dbSDimitry Andric switch (Lang) { 195ffd83dbSDimitry Andric case Lang_C89: 205ffd83dbSDimitry Andric Args = {"-x", "c", "-std=c89"}; 215ffd83dbSDimitry Andric break; 225ffd83dbSDimitry Andric case Lang_C99: 235ffd83dbSDimitry Andric Args = {"-x", "c", "-std=c99"}; 245ffd83dbSDimitry Andric break; 255ffd83dbSDimitry Andric case Lang_CXX03: 265ffd83dbSDimitry Andric Args = {"-std=c++03", "-frtti"}; 275ffd83dbSDimitry Andric break; 285ffd83dbSDimitry Andric case Lang_CXX11: 295ffd83dbSDimitry Andric Args = {"-std=c++11", "-frtti"}; 305ffd83dbSDimitry Andric break; 315ffd83dbSDimitry Andric case Lang_CXX14: 325ffd83dbSDimitry Andric Args = {"-std=c++14", "-frtti"}; 335ffd83dbSDimitry Andric break; 345ffd83dbSDimitry Andric case Lang_CXX17: 355ffd83dbSDimitry Andric Args = {"-std=c++17", "-frtti"}; 365ffd83dbSDimitry Andric break; 375ffd83dbSDimitry Andric case Lang_CXX20: 385ffd83dbSDimitry Andric Args = {"-std=c++20", "-frtti"}; 395ffd83dbSDimitry Andric break; 4081ad6265SDimitry Andric case Lang_OBJC: 4181ad6265SDimitry Andric Args = {"-x", "objective-c", "-frtti", "-fobjc-nonfragile-abi"}; 4281ad6265SDimitry Andric break; 435ffd83dbSDimitry Andric case Lang_OBJCXX: 445ffd83dbSDimitry Andric Args = {"-x", "objective-c++", "-frtti"}; 455ffd83dbSDimitry Andric break; 465ffd83dbSDimitry Andric case Lang_OpenCL: 475ffd83dbSDimitry Andric llvm_unreachable("Not implemented yet!"); 485ffd83dbSDimitry Andric } 495ffd83dbSDimitry Andric return Args; 505ffd83dbSDimitry Andric } 515ffd83dbSDimitry Andric 5281ad6265SDimitry Andric std::vector<std::string> getCC1ArgsForTesting(TestLanguage Lang) { 5381ad6265SDimitry Andric std::vector<std::string> Args; 5481ad6265SDimitry Andric switch (Lang) { 5581ad6265SDimitry Andric case Lang_C89: 5681ad6265SDimitry Andric Args = {"-xc", "-std=c89"}; 5781ad6265SDimitry Andric break; 5881ad6265SDimitry Andric case Lang_C99: 5981ad6265SDimitry Andric Args = {"-xc", "-std=c99"}; 6081ad6265SDimitry Andric break; 6181ad6265SDimitry Andric case Lang_CXX03: 6281ad6265SDimitry Andric Args = {"-std=c++03"}; 6381ad6265SDimitry Andric break; 6481ad6265SDimitry Andric case Lang_CXX11: 6581ad6265SDimitry Andric Args = {"-std=c++11"}; 6681ad6265SDimitry Andric break; 6781ad6265SDimitry Andric case Lang_CXX14: 6881ad6265SDimitry Andric Args = {"-std=c++14"}; 6981ad6265SDimitry Andric break; 7081ad6265SDimitry Andric case Lang_CXX17: 7181ad6265SDimitry Andric Args = {"-std=c++17"}; 7281ad6265SDimitry Andric break; 7381ad6265SDimitry Andric case Lang_CXX20: 7481ad6265SDimitry Andric Args = {"-std=c++20"}; 7581ad6265SDimitry Andric break; 7681ad6265SDimitry Andric case Lang_OBJC: 7781ad6265SDimitry Andric Args = {"-xobjective-c"}; 7881ad6265SDimitry Andric break; 7981ad6265SDimitry Andric case Lang_OBJCXX: 8081ad6265SDimitry Andric Args = {"-xobjective-c++"}; 8181ad6265SDimitry Andric break; 8281ad6265SDimitry Andric case Lang_OpenCL: 8381ad6265SDimitry Andric llvm_unreachable("Not implemented yet!"); 8481ad6265SDimitry Andric } 8581ad6265SDimitry Andric return Args; 8681ad6265SDimitry Andric } 8781ad6265SDimitry Andric 885ffd83dbSDimitry Andric StringRef getFilenameForTesting(TestLanguage Lang) { 895ffd83dbSDimitry Andric switch (Lang) { 905ffd83dbSDimitry Andric case Lang_C89: 915ffd83dbSDimitry Andric case Lang_C99: 925ffd83dbSDimitry Andric return "input.c"; 935ffd83dbSDimitry Andric 945ffd83dbSDimitry Andric case Lang_CXX03: 955ffd83dbSDimitry Andric case Lang_CXX11: 965ffd83dbSDimitry Andric case Lang_CXX14: 975ffd83dbSDimitry Andric case Lang_CXX17: 985ffd83dbSDimitry Andric case Lang_CXX20: 995ffd83dbSDimitry Andric return "input.cc"; 1005ffd83dbSDimitry Andric 1015ffd83dbSDimitry Andric case Lang_OpenCL: 1025ffd83dbSDimitry Andric return "input.cl"; 1035ffd83dbSDimitry Andric 10481ad6265SDimitry Andric case Lang_OBJC: 10581ad6265SDimitry Andric return "input.m"; 10681ad6265SDimitry Andric 1075ffd83dbSDimitry Andric case Lang_OBJCXX: 1085ffd83dbSDimitry Andric return "input.mm"; 1095ffd83dbSDimitry Andric } 1105ffd83dbSDimitry Andric llvm_unreachable("Unhandled TestLanguage enum"); 1115ffd83dbSDimitry Andric } 1125ffd83dbSDimitry Andric 113*06c3fb27SDimitry Andric std::string getAnyTargetForTesting() { 114*06c3fb27SDimitry Andric for (const auto &Target : llvm::TargetRegistry::targets()) { 115*06c3fb27SDimitry Andric std::string Error; 116*06c3fb27SDimitry Andric StringRef TargetName(Target.getName()); 117*06c3fb27SDimitry Andric if (TargetName == "x86-64") 118*06c3fb27SDimitry Andric TargetName = "x86_64"; 119*06c3fb27SDimitry Andric if (llvm::TargetRegistry::lookupTarget(std::string(TargetName), Error) == 120*06c3fb27SDimitry Andric &Target) { 121*06c3fb27SDimitry Andric return std::string(TargetName); 122*06c3fb27SDimitry Andric } 123*06c3fb27SDimitry Andric } 124*06c3fb27SDimitry Andric return ""; 125*06c3fb27SDimitry Andric } 126*06c3fb27SDimitry Andric 1275ffd83dbSDimitry Andric } // end namespace clang 128