| // Copyright 2014 The Bazel Authors. All rights reserved. |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| package com.google.devtools.build.lib.rules.cpp; |
| |
| import com.google.common.collect.ImmutableList; |
| import com.google.devtools.build.lib.actions.AbstractAction; |
| import com.google.devtools.build.lib.actions.ActionExecutionContext; |
| import com.google.devtools.build.lib.actions.ActionOwner; |
| import com.google.devtools.build.lib.actions.ActionResult; |
| import com.google.devtools.build.lib.actions.Artifact; |
| import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; |
| import com.google.devtools.build.lib.vfs.FileSystem; |
| import com.google.devtools.build.lib.vfs.Path; |
| |
| /** |
| * Stub action to be used as the generating action for FDO files that are extracted from the |
| * FDO zip. |
| * |
| * <p>This is needed because the extraction is currently not a bona fide action, therefore, Blaze |
| * would complain that these files have no generating action if we did not set it to an instance of |
| * this class. |
| * |
| * <p>These actions are all owned by the {@code cc_toolchain} rule. It's possible that they are |
| * shared actions since the FDO path is the same regardless of the configuration of the rule that |
| * created it, but in practice this shouldn't happen very often, because we usually have only one |
| * FDO optimized configuration. |
| */ |
| @Immutable |
| public final class FdoStubAction extends AbstractAction { |
| public FdoStubAction(ActionOwner owner, Artifact output) { |
| // TODO(bazel-team): Make extracting the zip file a honest-to-God action so that we can do away |
| // with this ugliness. |
| super(owner, ImmutableList.<Artifact>of(), ImmutableList.of(output)); |
| } |
| |
| @Override |
| public ActionResult execute(ActionExecutionContext actionExecutionContext) { |
| return ActionResult.EMPTY; |
| } |
| |
| @Override |
| public String getMnemonic() { |
| return "FdoStubAction"; |
| } |
| |
| @Override |
| protected String computeKey() { |
| return "fdoStubAction"; |
| } |
| |
| @Override |
| public void prepare(FileSystem fileSystem, Path execRoot) { |
| // The superclass would delete the output files here. We can't let that happen, since this |
| // action does not in fact create those files; it is only a placeholder and the actual files |
| // are created *before* the execution phase in FdoSupport.extractFdoZip() |
| } |
| } |