blob: 6e9ea823b1f62bda816aa11747476feb2a5ffb85 (
plain)
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
// Copyright (C) 2020-2021 Joel Rosdahl and other contributors
//
// See doc/AUTHORS.adoc for a complete list of contributors.
//
// This program is free software; you can redistribute it and/or modify it
// under the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 3 of the License, or (at your option)
// any later version.
//
// This program is distributed in the hope that it will be useful, but WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
// more details.
//
// You should have received a copy of the GNU General Public License along with
// this program; if not, write to the Free Software Foundation, Inc., 51
// Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
#pragma once
#include "Args.hpp"
#include <string>
#include <vector>
// This class holds meta-information derived from the compiler arguments.
struct ArgsInfo
{
// The source file.
std::string input_file;
// In normal compiler operation an output file is created if there is no
// compiler error. However certain flags like -fsyntax-only change this
// behavior.
bool expect_output_obj = true;
// The output file being compiled to.
std::string output_obj;
// The path to the dependency file (implicit or specified with -MF).
std::string output_dep;
// The path to the stack usage (implicit when using -fstack-usage).
std::string output_su;
// Diagnostic generation information (Clang). Contains pathname if not empty.
std::string output_dia;
// Split dwarf information (GCC 4.8 and up). Contains pathname if not empty.
std::string output_dwo;
// Language to use for the compilation target (see language.c).
std::string actual_language;
// Is the compiler being asked to output debug info?
bool generating_debuginfo = false;
// Is the compiler being asked to output dependencies?
bool generating_dependencies = false;
// Seen -MD or -MMD?
bool seen_MD_MMD = false;
// Is the dependency makefile target name specified with -MT or -MQ?
bool dependency_target_specified = false;
// Is the compiler being asked to output coverage?
bool generating_coverage = false;
// Is the compiler being asked to output stack usage?
bool generating_stackusage = false;
// Us the compiler being asked to generate diagnostics
// (--serialize-diagnostics)?
bool generating_diagnostics = false;
// Whether to strip color codes from diagnostic messages on output.
bool strip_diagnostics_colors = false;
// Have we seen -gsplit-dwarf?
bool seen_split_dwarf = false;
// Are we compiling a .i or .ii file directly?
bool direct_i_file = false;
// Whether the output is a precompiled header.
bool output_is_precompiled_header = false;
// Is the compiler being asked to output coverage data (.gcda) at runtime?
bool profile_arcs = false;
// Name of the custom profile directory or file.
std::string profile_path;
// Profile generation / usage information.
bool profile_use = false;
bool profile_generate = false;
// Whether we are using a precompiled header (either via -include, #include or
// Clang's -include-pch or -include-pth).
bool using_precompiled_header = false;
// Whether Clang is instructed not to include timestamps in the precompiled
// header it generates.
bool fno_pch_timestamp = false;
// Files referenced by -fsanitize-blacklist options.
std::vector<std::string> sanitize_blacklists;
// Architectures from -arch options.
std::vector<std::string> arch_args;
// Relocating debuginfo in the format old=new.
std::vector<std::string> debug_prefix_maps;
// Argument list to add to compiler invocation in depend mode.
Args depend_extra_args;
};
|