@@ -48,6 +48,7 @@ public final class CppCompileActionTemplate extends ActionKeyCacher
48
48
private final SpecialArtifact sourceTreeArtifact ;
49
49
private final SpecialArtifact outputTreeArtifact ;
50
50
private final SpecialArtifact dotdTreeArtifact ;
51
+ private final SpecialArtifact diagnosticsTreeArtifact ;
51
52
private final CcToolchainProvider toolchain ;
52
53
private final Iterable <ArtifactCategory > categories ;
53
54
private final ActionOwner actionOwner ;
@@ -60,6 +61,7 @@ public final class CppCompileActionTemplate extends ActionKeyCacher
60
61
* @param sourceTreeArtifact the TreeArtifact that contains source files to compile.
61
62
* @param outputTreeArtifact the TreeArtifact that contains compilation outputs.
62
63
* @param dotdTreeArtifact the TreeArtifact that contains dotd files.
64
+ * @param diagnosticsTreeArtifact the TreeArtifact that contains serialized diagnostics files.
63
65
* @param cppCompileActionBuilder An almost completely configured {@link CppCompileActionBuilder}
64
66
* without the input and output files set. It is used as a template to instantiate expanded
65
67
* {CppCompileAction}s.
@@ -72,6 +74,7 @@ public final class CppCompileActionTemplate extends ActionKeyCacher
72
74
SpecialArtifact sourceTreeArtifact ,
73
75
SpecialArtifact outputTreeArtifact ,
74
76
SpecialArtifact dotdTreeArtifact ,
77
+ SpecialArtifact diagnosticsTreeArtifact ,
75
78
CppCompileActionBuilder cppCompileActionBuilder ,
76
79
CcToolchainProvider toolchain ,
77
80
Iterable <ArtifactCategory > categories ,
@@ -80,6 +83,7 @@ public final class CppCompileActionTemplate extends ActionKeyCacher
80
83
this .sourceTreeArtifact = sourceTreeArtifact ;
81
84
this .outputTreeArtifact = outputTreeArtifact ;
82
85
this .dotdTreeArtifact = dotdTreeArtifact ;
86
+ this .diagnosticsTreeArtifact = diagnosticsTreeArtifact ;
83
87
this .toolchain = toolchain ;
84
88
this .categories = categories ;
85
89
this .actionOwner = checkNotNull (actionOwner , outputTreeArtifact );
@@ -137,9 +141,19 @@ public ImmutableList<CppCompileAction> generateActionsForInputArtifacts(
137
141
TreeFileArtifact .createTemplateExpansionOutput (
138
142
dotdTreeArtifact , outputName + ".d" , artifactOwner );
139
143
}
144
+ TreeFileArtifact diagnosticsFileArtifact = null ;
145
+ if (diagnosticsTreeArtifact != null ) {
146
+ diagnosticsFileArtifact =
147
+ TreeFileArtifact .createTemplateExpansionOutput (
148
+ diagnosticsTreeArtifact , outputName + ".dia" , artifactOwner );
149
+ }
140
150
expandedActions .add (
141
151
createAction (
142
- inputTreeFileArtifact , outputTreeFileArtifact , dotdFileArtifact , privateHeaders ));
152
+ inputTreeFileArtifact ,
153
+ outputTreeFileArtifact ,
154
+ dotdFileArtifact ,
155
+ diagnosticsFileArtifact ,
156
+ privateHeaders ));
143
157
} catch (EvalException e ) {
144
158
throw new ActionTemplateExpansionException (e );
145
159
}
@@ -160,6 +174,7 @@ protected void computeKey(
160
174
cppCompileActionBuilder .getCoptsFilter (),
161
175
CppActionNames .CPP_COMPILE ,
162
176
dotdTreeArtifact ,
177
+ diagnosticsTreeArtifact ,
163
178
cppCompileActionBuilder .getFeatureConfiguration (),
164
179
cppCompileActionBuilder .getVariables ());
165
180
CppCompileAction .computeKey (
@@ -190,12 +205,13 @@ private CppCompileAction createAction(
190
205
Artifact sourceTreeFileArtifact ,
191
206
Artifact outputTreeFileArtifact ,
192
207
@ Nullable Artifact dotdFileArtifact ,
208
+ @ Nullable Artifact diagnosticsFileArtifact ,
193
209
NestedSet <Artifact > privateHeaders )
194
210
throws ActionTemplateExpansionException {
195
211
CppCompileActionBuilder builder = new CppCompileActionBuilder (cppCompileActionBuilder );
196
212
builder .setAdditionalPrunableHeaders (privateHeaders );
197
213
builder .setSourceFile (sourceTreeFileArtifact );
198
- builder .setOutputs (outputTreeFileArtifact , dotdFileArtifact );
214
+ builder .setOutputs (outputTreeFileArtifact , dotdFileArtifact , diagnosticsFileArtifact );
199
215
200
216
CcToolchainVariables .Builder buildVariables =
201
217
CcToolchainVariables .builder (cppCompileActionBuilder .getVariables ());
@@ -210,6 +226,11 @@ private CppCompileAction createAction(
210
226
CompileBuildVariables .DEPENDENCY_FILE .getVariableName (),
211
227
dotdFileArtifact .getExecPathString ());
212
228
}
229
+ if (diagnosticsFileArtifact != null ) {
230
+ buildVariables .overrideStringVariable (
231
+ CompileBuildVariables .SERIALIZED_DIAGNOSTICS_FILE .getVariableName (),
232
+ diagnosticsFileArtifact .getExecPathString ());
233
+ }
213
234
214
235
builder .setVariables (buildVariables .build ());
215
236
0 commit comments