Skip to content

Commit

Permalink
C++: Compile action uses parameter file
Browse files Browse the repository at this point in the history
This is turned on with the CROSSTOOL feature "compiler_param_file".

RELNOTES:none
PiperOrigin-RevId: 238641706
  • Loading branch information
oquenchil authored and copybara-github committed Mar 15, 2019
1 parent d23e577 commit df3d8cb
Show file tree
Hide file tree
Showing 10 changed files with 134 additions and 62 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
import com.google.devtools.build.lib.util.Pair;
import com.google.devtools.build.lib.vfs.PathFragment;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
Expand Down Expand Up @@ -79,14 +80,20 @@ public String getToolPath() {
* @param overwrittenVariables: Variables that will overwrite original build variables. When null,
* unmodified original variables are used.
*/
protected List<String> getArguments(@Nullable CcToolchainVariables overwrittenVariables) {
protected List<String> getArguments(
@Nullable PathFragment parameterFilePath,
@Nullable CcToolchainVariables overwrittenVariables) {
List<String> commandLine = new ArrayList<>();

// first: The command name.
commandLine.add(getToolPath());

// second: The compiler options.
commandLine.addAll(getCompilerOptions(overwrittenVariables));
if (parameterFilePath != null) {
commandLine.add("@" + parameterFilePath.getSafePathString());
} else {
commandLine.addAll(getCompilerOptions(overwrittenVariables));
}
return commandLine;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,11 @@
import com.google.devtools.build.lib.actions.ArtifactResolver;
import com.google.devtools.build.lib.actions.CommandAction;
import com.google.devtools.build.lib.actions.CommandLineExpansionException;
import com.google.devtools.build.lib.actions.CommandLines.ParamFileActionInput;
import com.google.devtools.build.lib.actions.ExecException;
import com.google.devtools.build.lib.actions.ExecutionInfoSpecifier;
import com.google.devtools.build.lib.actions.ExecutionRequirements;
import com.google.devtools.build.lib.actions.ParameterFile.ParameterFileType;
import com.google.devtools.build.lib.actions.ResourceSet;
import com.google.devtools.build.lib.actions.SpawnResult;
import com.google.devtools.build.lib.actions.extra.CppCompileInfo;
Expand Down Expand Up @@ -73,6 +75,7 @@
import com.google.devtools.build.skyframe.SkyValue;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
Expand Down Expand Up @@ -174,6 +177,9 @@ public class CppCompileAction extends AbstractAction

private CcToolchainVariables overwrittenVariables = null;

private ParamFileActionInput paramFileActionInput;
private PathFragment paramFilePath;

/**
* Creates a new action to compile C/C++ source files.
*
Expand Down Expand Up @@ -275,6 +281,13 @@ public class CppCompileAction extends AbstractAction
this.topLevelModules = null;
this.overwrittenVariables = null;
this.grepIncludes = grepIncludes;
if (featureConfiguration.isEnabled(CppRuleClasses.COMPIILER_PARAM_FILE)) {
paramFilePath =
outputFile
.getExecPath()
.getParentDirectory()
.getChild(outputFile.getFilename() + ".params");
}
}

/**
Expand Down Expand Up @@ -684,7 +697,11 @@ public ImmutableMap<String, String> getEnvironment(Map<String, String> clientEnv

@Override
public List<String> getArguments() {
return compileCommandLine.getArguments(overwrittenVariables);
return compileCommandLine.getArguments(paramFilePath, overwrittenVariables);
}

public ParamFileActionInput getParamFileActionInput() {
return paramFileActionInput;
}

@Override
Expand Down Expand Up @@ -1106,6 +1123,15 @@ private byte[] computeCommandLineKey(List<String> compilerOptions) {
public ActionResult execute(ActionExecutionContext actionExecutionContext)
throws ActionExecutionException, InterruptedException {
setModuleFileFlags();
if (featureConfiguration.isEnabled(CppRuleClasses.COMPIILER_PARAM_FILE)) {
paramFileActionInput =
new ParamFileActionInput(
paramFilePath,
compileCommandLine.getCompilerOptions(overwrittenVariables),
ParameterFileType.SHELL_QUOTED,
StandardCharsets.ISO_8859_1);
}

CppCompileActionContext.Reply reply;

if (!shouldScanDotdFiles()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -395,6 +395,8 @@ public static Label ccToolchainTypeAttribute(RuleDefinitionEnvironment env) {
*/
public static final String DO_NOT_SPLIT_LINKING_CMDLINE = "do_not_split_linking_cmdline";

public static final String COMPIILER_PARAM_FILE = "compiler_param_file";

/** Ancestor for all rules that do include scanning. */
public static final class CcIncludeScanningRule implements RuleDefinition {
@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,11 +58,14 @@ public CppCompileActionResult execWithReply(
throws ExecException, InterruptedException {
// Intentionally not adding {@link CppCompileAction#inputsForInvalidation}, those are not needed
// for execution.
ImmutableList<ActionInput> inputs =
ImmutableList.Builder<ActionInput> inputsBuilder =
new ImmutableList.Builder<ActionInput>()
.addAll(action.getMandatoryInputs())
.addAll(action.getAdditionalInputs())
.build();
.addAll(action.getAdditionalInputs());
if (action.getParamFileActionInput() != null) {
inputsBuilder.add(action.getParamFileActionInput());
}
ImmutableList<ActionInput> inputs = inputsBuilder.build();
action.clearAdditionalInputs();

ImmutableMap<String, String> executionInfo = action.getExecutionInfo();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ _FEATURE_NAMES = struct(
link_env = "link_env",
dynamic_linking_mode = "dynamic_linking_mode",
static_linking_mode = "static_linking_mode",
compiler_param_file = "compiler_param_file",
)

_no_legacy_features_feature = feature(name = _FEATURE_NAMES.no_legacy_features)
Expand Down Expand Up @@ -587,6 +588,11 @@ _targets_windows_feature = feature(
implies = ["copy_dynamic_libraries_to_binary"],
)

_compiler_param_file_feature = feature(
name = _FEATURE_NAMES.compiler_param_file,
enabled = True,
)

_static_link_cpp_runtimes_feature = feature(
name = _FEATURE_NAMES.static_link_cpp_runtimes,
enabled = True,
Expand Down Expand Up @@ -682,6 +688,7 @@ _feature_name_to_feature = {
_FEATURE_NAMES.supports_start_end_lib: _supports_start_end_lib_feature,
_FEATURE_NAMES.supports_pic: _supports_pic_feature,
_FEATURE_NAMES.targets_windows: _targets_windows_feature,
_FEATURE_NAMES.compiler_param_file: _compiler_param_file_feature,
_FEATURE_NAMES.module_maps: _module_maps_feature,
_FEATURE_NAMES.static_link_cpp_runtimes: _static_link_cpp_runtimes_feature,
_FEATURE_NAMES.simple_compile_feature: _simple_compile_feature,
Expand Down
Loading

0 comments on commit df3d8cb

Please sign in to comment.