Files
carbon-lang/toolchain/driver/compile_subcommand.h
T
Jon Ross-PerkinsandGeoff Romer 1b956e68fe Extract subcommand options from the driver file. (#4300)
I'm separating the options out so that it's easier to review. They
include a lot of boilerplate text that I think won't change much, and
makes it harder to review changes.

To explain filename differences, whereas `CodegenOptions` is shared (by
link and compile), `LinkOptions` and `CompileOptions` are
subcommand-specific. I'm planning to separate out the subcommands, so
I'm putting those in respective subcommand files. I'm still going to try
to use the `.h` to declare the interface, `.cpp` for bigger
implementation details (for better or worse, including comments on
options).

I'm also moving out corresponding Driver members to help shrink deltas
when refactoring. That is, the bodies aren't changing here, but a
refactoring of commands will make some changes. By moving the code to
different files now, it should be easier to identify what's changing
later.

---------

Co-authored-by: Geoff Romer <gromer@google.com>
2024-09-13 16:17:51 +00:00

63 lines
1.6 KiB
C++

// Part of the Carbon Language project, under the Apache License v2.0 with LLVM
// Exceptions. See /LICENSE for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
#ifndef CARBON_TOOLCHAIN_DRIVER_COMPILE_SUBCOMMAND_H_
#define CARBON_TOOLCHAIN_DRIVER_COMPILE_SUBCOMMAND_H_
#include "common/command_line.h"
#include "common/ostream.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringRef.h"
#include "toolchain/driver/codegen_options.h"
namespace Carbon {
// Options for the compile subcommand.
//
// See the implementation of `Build` for documentation on members.
struct CompileOptions {
static const CommandLine::CommandInfo Info;
enum class Phase : int8_t {
Lex,
Parse,
Check,
Lower,
CodeGen,
};
friend auto operator<<(llvm::raw_ostream& out, Phase phase)
-> llvm::raw_ostream&;
auto Build(CommandLine::CommandBuilder& b, CodegenOptions& codegen_options)
-> void;
Phase phase;
llvm::StringRef output_filename;
llvm::SmallVector<llvm::StringRef> input_filenames;
bool asm_output = false;
bool force_obj_output = false;
bool dump_shared_values = false;
bool dump_tokens = false;
bool dump_parse_tree = false;
bool dump_raw_sem_ir = false;
bool dump_sem_ir = false;
bool dump_llvm_ir = false;
bool dump_asm = false;
bool dump_mem_usage = false;
bool stream_errors = false;
bool preorder_parse_tree = false;
bool builtin_sem_ir = false;
bool prelude_import = false;
bool include_debug_info = true;
llvm::StringRef exclude_dump_file_prefix;
};
} // namespace Carbon
#endif // CARBON_TOOLCHAIN_DRIVER_COMPILE_SUBCOMMAND_H_