13#ifndef FORTRAN_FRONTEND_COMPILERINVOCATION_H
14#define FORTRAN_FRONTEND_COMPILERINVOCATION_H
16#include "flang/Common/LangOptions.h"
17#include "flang/Frontend/CodeGenOptions.h"
18#include "flang/Frontend/FrontendOptions.h"
22#include "flang/Parser/parsing.h"
23#include "flang/Semantics/semantics.h"
24#include "mlir/Support/Timing.h"
25#include "clang/Basic/Diagnostic.h"
26#include "clang/Basic/DiagnosticOptions.h"
27#include "llvm/Option/ArgList.h"
34namespace Fortran::frontend {
40bool parseDiagnosticArgs(clang::DiagnosticOptions &opts,
41 llvm::opt::ArgList &args);
54 clang::DiagnosticOptions &getDiagnosticOpts() {
57 const clang::DiagnosticOptions &getDiagnosticOpts()
const {
62 const PreprocessorOptions &getPreprocessorOpts()
const {
93 std::string allCompilerInvocOpts;
98 std::string moduleDir =
".";
100 std::string moduleFileSuffix =
".mod";
102 bool debugModuleDir =
false;
103 bool hermeticModuleFileOutput =
false;
105 bool warnAsErr =
false;
114 bool useAnalyzedObjectsForUnparse =
true;
120 bool enableConformanceChecks =
false;
121 bool enableUsageChecks =
false;
122 bool disableWarnings =
false;
131 o <<
"(bad expression)";
134 [](llvm::raw_ostream &o,
139 o <<
"(bad assignment)";
143 x.AsFortran(o <<
"CALL ");
155 const FrontendOptions &getFrontendOpts()
const {
return frontendOpts; }
161 const TargetOptions &getTargetOpts()
const {
return targetOpts; }
164 const CodeGenOptions &getCodeGenOpts()
const {
return codeGenOpts; }
175 std::unique_ptr<Fortran::semantics::SemanticsContext>
177 const llvm::TargetMachine &);
179 std::string &getModuleDir() {
return moduleDir; }
180 const std::string &getModuleDir()
const {
return moduleDir; }
182 std::string &getModuleFileSuffix() {
return moduleFileSuffix; }
183 const std::string &getModuleFileSuffix()
const {
return moduleFileSuffix; }
185 bool &getDebugModuleDir() {
return debugModuleDir; }
186 const bool &getDebugModuleDir()
const {
return debugModuleDir; }
188 bool &getHermeticModuleFileOutput() {
return hermeticModuleFileOutput; }
189 const bool &getHermeticModuleFileOutput()
const {
190 return hermeticModuleFileOutput;
193 bool &getWarnAsErr() {
return warnAsErr; }
194 const bool &getWarnAsErr()
const {
return warnAsErr; }
196 bool &getUseAnalyzedObjectsForUnparse() {
197 return useAnalyzedObjectsForUnparse;
199 const bool &getUseAnalyzedObjectsForUnparse()
const {
200 return useAnalyzedObjectsForUnparse;
203 bool &getEnableConformanceChecks() {
return enableConformanceChecks; }
204 const bool &getEnableConformanceChecks()
const {
205 return enableConformanceChecks;
208 const char *getArgv0() {
return argv0; }
210 bool &getEnableUsageChecks() {
return enableUsageChecks; }
211 const bool &getEnableUsageChecks()
const {
return enableUsageChecks; }
213 bool &getDisableWarnings() {
return disableWarnings; }
214 const bool &getDisableWarnings()
const {
return disableWarnings; }
230 bool getEnableTimers()
const {
return enableTimers; }
238 clang::DiagnosticsEngine &diags,
239 const char *argv0 =
nullptr);
242 void setEnableConformanceChecks() { enableConformanceChecks =
true; }
245 void setEnableUsageChecks() { enableUsageChecks =
true; }
248 void setDisableWarnings() { disableWarnings =
true; }
253 void setModuleDir(std::string &dir) { moduleDir = dir; }
255 void setModuleFileSuffix(
const char *suffix) {
256 moduleFileSuffix = std::string(suffix);
259 void setDebugModuleDir(
bool flag) { debugModuleDir = flag; }
260 void setHermeticModuleFileOutput(
bool flag) {
261 hermeticModuleFileOutput = flag;
264 void setWarnAsErr(
bool flag) { warnAsErr = flag; }
266 void setUseAnalyzedObjectsForUnparse(
bool flag) {
267 useAnalyzedObjectsForUnparse = flag;
Definition: default-kinds.h:26
Definition: LangOptions.h:58
Definition: CodeGenOptions.h:49
Definition: CompilerInvocation.h:43
std::shared_ptr< Fortran::frontend::PreprocessorOptions > preprocessorOpts
Options for the preprocessor.
Definition: CompilerInvocation.h:48
llvm::IntrusiveRefCntPtr< clang::DiagnosticOptions > diagnosticOpts
Options controlling the diagnostic engine.
Definition: CompilerInvocation.h:46
Definition: CompilerInvocation.h:67
void setDefaultFortranOpts()
Set the Fortran options to predefined defaults.
Definition: CompilerInvocation.cpp:1483
void setFortranOpts()
Definition: CompilerInvocation.cpp:1543
void setLoweringOptions()
Definition: CompilerInvocation.cpp:1630
static bool createFromArgs(CompilerInvocation &res, llvm::ArrayRef< const char * > commandLineArgs, clang::DiagnosticsEngine &diags, const char *argv0=nullptr)
Definition: CompilerInvocation.cpp:1315
void collectMacroDefinitions()
Definition: CompilerInvocation.cpp:1452
std::unique_ptr< Fortran::semantics::SemanticsContext > getSemanticsCtx(Fortran::parser::AllCookedSources &allCookedSources, const llvm::TargetMachine &)
Creates and configures semantics context based on the compilation flags.
Definition: CompilerInvocation.cpp:1605
void setDefaultPredefinitions()
Set the default predefinitions.
Definition: CompilerInvocation.cpp:1500
void setArgv0(const char *dir)
Useful setters.
Definition: CompilerInvocation.h:251
void setSemanticsOpts(Fortran::parser::AllCookedSources &)
Set the Semantic Options.
Options for controlling the target.
Definition: TargetOptions.h:27
Definition: LoweringOptions.h:34
Definition: provenance.h:281
Definition: expression.h:906
Definition: expression.h:896
FrontendOptions - Options for controlling the behavior of the frontend.
Definition: FrontendOptions.h:236