1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
|
//===------ArgsToFrontendOptionsConverter.h-- --------------------*-C++ -*-===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2018 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See https://swift.org/LICENSE.txt for license information
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//
#ifndef SWIFT_FRONTEND_ARGSTOFRONTENDOPTIONSCONVERTER_H
#define SWIFT_FRONTEND_ARGSTOFRONTENDOPTIONSCONVERTER_H
#include "swift/AST/DiagnosticConsumer.h"
#include "swift/AST/DiagnosticEngine.h"
#include "swift/Frontend/FrontendOptions.h"
#include "swift/Option/Options.h"
#include "llvm/Option/ArgList.h"
#include <vector>
namespace swift {
class ArgsToFrontendOptionsConverter {
private:
DiagnosticEngine &Diags;
const llvm::opt::ArgList &Args;
FrontendOptions &Opts;
std::optional<std::vector<std::string>>
cachedOutputFilenamesFromCommandLineOrFilelist;
void handleDebugCrashGroupArguments();
void computeDebugTimeOptions();
bool computeFallbackModuleName();
bool computeModuleName();
bool computeModuleAliases();
bool computeMainAndSupplementaryOutputFilenames();
void computeDumpScopeMapLocations();
void computeHelpOptions();
void computeImplicitImportModuleNames(llvm::opt::OptSpecifier id,
bool isTestable);
void computeImportObjCHeaderOptions();
void computeLLVMArgs();
void computePlaygroundOptions();
void computePrintStatsOptions();
void computeTBDOptions();
bool setUpImmediateArgs();
bool checkUnusedSupplementaryOutputPaths() const;
bool checkForUnusedOutputPaths() const;
bool checkBuildFromInterfaceOnlyOptions() const;
public:
ArgsToFrontendOptionsConverter(DiagnosticEngine &Diags,
const llvm::opt::ArgList &Args,
FrontendOptions &Opts)
: Diags(Diags), Args(Args), Opts(Opts) {}
/// Populates the FrontendOptions the converter was initialized with.
///
/// \param buffers If present, buffers read in the processing of the frontend
/// options will be saved here. These should only be used for debugging
/// purposes.
bool convert(
SmallVectorImpl<std::unique_ptr<llvm::MemoryBuffer>> *buffers);
static FrontendOptions::ActionType
determineRequestedAction(const llvm::opt::ArgList &);
};
class ModuleAliasesConverter {
public:
/// Sets the \c ModuleAliasMap in the \c FrontendOptions with args passed via `-module-alias`.
///
/// \param args The arguments to `-module-alias`. If input has `-module-alias Foo=Bar
/// -module-alias Baz=Qux`, the args are ['Foo=Bar', 'Baz=Qux']. The name
/// Foo is the name that appears in source files, while it maps to Bar, the name
/// of the binary on disk, /path/to/Bar.swiftmodule(interface), under the hood.
/// \param options FrontendOptions containing the module alias map to set args to.
/// \param diags Used to print diagnostics in case validation of the args fails.
/// \return Whether the validation passed and successfully set the module alias map
static bool computeModuleAliases(std::vector<std::string> args,
FrontendOptions &options,
DiagnosticEngine &diags);
};
} // namespace swift
#endif /* SWIFT_FRONTEND_ARGSTOFRONTENDOPTIONSCONVERTER_H */
|