diff options
Diffstat (limited to 'src')
13 files changed, 492 insertions, 158 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java index e940d57823..17e33e8de8 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLibraryHelper.java @@ -263,7 +263,7 @@ public final class CcLibraryHelper { private final List<Artifact> objectFiles = new ArrayList<>(); private final List<Artifact> picObjectFiles = new ArrayList<>(); private final List<Artifact> nonCodeLinkerInputs = new ArrayList<>(); - private final List<String> copts = new ArrayList<>(); + private ImmutableList<String> copts = ImmutableList.of(); private final List<String> linkopts = new ArrayList<>(); @Nullable private Pattern nocopts; private final Set<String> defines = new LinkedHashSet<>(); @@ -371,15 +371,14 @@ public final class CcLibraryHelper { /** Sets fields that overlap for cc_library and cc_binary rules. */ public CcLibraryHelper fromCommon(CcCommon common) { - this - .addCopts(common.getCopts()) - .addDefines(common.getDefines()) - .addDeps(ruleContext.getPrerequisites("deps", Mode.TARGET)) - .addLooseIncludeDirs(common.getLooseIncludeDirs()) - .addNonCodeLinkerInputs(common.getLinkerScripts()) - .addSystemIncludeDirs(common.getSystemIncludeDirs()) - .setNoCopts(common.getNoCopts()) - .setHeadersCheckingMode(semantics.determineHeadersCheckingMode(ruleContext)); + setCopts(common.getCopts()); + addDefines(common.getDefines()); + addDeps(ruleContext.getPrerequisites("deps", Mode.TARGET)); + addLooseIncludeDirs(common.getLooseIncludeDirs()); + addNonCodeLinkerInputs(common.getLinkerScripts()); + addSystemIncludeDirs(common.getSystemIncludeDirs()); + setNoCopts(common.getNoCopts()); + setHeadersCheckingMode(semantics.determineHeadersCheckingMode(ruleContext)); return this; } @@ -635,11 +634,8 @@ public final class CcLibraryHelper { return this; } - /** - * Adds the copts to the compile command line. - */ - public CcLibraryHelper addCopts(Iterable<String> copts) { - Iterables.addAll(this.copts, copts); + public CcLibraryHelper setCopts(ImmutableList<String> copts) { + this.copts = Preconditions.checkNotNull(copts); return this; } @@ -1152,9 +1148,14 @@ public final class CcLibraryHelper { * Creates the C/C++ compilation action creator. */ private CppModel initializeCppModel() { - return new CppModel(ruleContext, semantics, ccToolchain, fdoSupport, configuration) + return new CppModel( + ruleContext, + semantics, + ccToolchain, + fdoSupport, + configuration, + copts) .addCompilationUnitSources(compilationUnitSources) - .addCopts(copts) .setLinkTargetType(linkType) .setNeverLink(neverlink) .addLinkActionInputs(linkActionInputs) diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java index 2cb61198bf..b06e89d71c 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java @@ -30,6 +30,7 @@ import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; import com.google.common.collect.Sets; import com.google.common.collect.Sets.SetView; +import com.google.common.collect.Streams; import com.google.devtools.build.lib.analysis.config.InvalidConfigurationException; import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; @@ -825,6 +826,20 @@ public class CcToolchainFeatures implements Serializable { public static final Variables EMPTY = new Variables.Builder().build(); /** + * Retrieves a {@link StringSequence} variable named {@code variableName} from {@code variables} + * and converts it into a list of plain strings. + * + * <p>Throws {@link ExpansionException} when the variable is not a {@link StringSequence}. + */ + public static final ImmutableList<String> toStringList( + CcToolchainFeatures.Variables variables, String variableName) { + return Streams + .stream(variables.getSequenceVariable(variableName)) + .map(variable -> variable.getStringValue(variableName)) + .collect(ImmutableList.toImmutableList()); + } + + /** * Variables can be either String values or an arbitrarily deeply nested recursive sequences, * which we represent as a tree of {@code VariableValue} nodes. The nodes are {@code Sequence} * objects, while the leafs are {@code StringSequence} objects. We do not allow {@code @@ -1144,7 +1159,7 @@ public class CcToolchainFeatures implements Serializable { * objects significantly reduces memory overhead. */ @Immutable - private static final class StringSequence implements VariableValue { + static final class StringSequence implements VariableValue { private final Iterable<String> values; diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CompileCommandLine.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CompileCommandLine.java index 1d250c2dc3..3e1eaf69c4 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CompileCommandLine.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CompileCommandLine.java @@ -36,7 +36,6 @@ public final class CompileCommandLine { private final Artifact sourceFile; private final Artifact outputFile; private final Label sourceLabel; - private final List<String> copts; private final Predicate<String> coptsFilter; private final Collection<String> features; private final FeatureConfiguration featureConfiguration; @@ -50,7 +49,6 @@ public final class CompileCommandLine { Artifact sourceFile, Artifact outputFile, Label sourceLabel, - ImmutableList<String> copts, Predicate<String> coptsFilter, Collection<String> features, FeatureConfiguration featureConfiguration, @@ -62,7 +60,6 @@ public final class CompileCommandLine { this.sourceFile = Preconditions.checkNotNull(sourceFile); this.outputFile = Preconditions.checkNotNull(outputFile); this.sourceLabel = Preconditions.checkNotNull(sourceLabel); - this.copts = Preconditions.checkNotNull(copts); this.coptsFilter = coptsFilter; this.features = Preconditions.checkNotNull(features); this.featureConfiguration = Preconditions.checkNotNull(featureConfiguration); @@ -152,8 +149,6 @@ public final class CompileCommandLine { } addFilteredOptions(options, featureConfiguration.getCommandLine(actionName, updatedVariables)); - addFilteredOptions(options, copts); - // Unfiltered compiler options contain system include paths. These must be added after // the user provided options, otherwise users adding include paths will not pick up their // own include paths first. @@ -204,19 +199,29 @@ public final class CompileCommandLine { return dotdFile; } - public List<String> getCopts() { - return copts; - } - public Variables getVariables() { return variables; } + /** + * Returns all user provided copts flags. + * + * TODO(b/64108724): Get rid of this method when we don't need to parse copts to collect include + * directories anymore (meaning there is a way of specifying include directories using an + * explicit attribute, not using platform-dependent garbage bag that copts is). + */ + public ImmutableList<String> getCopts() { + if (variables.isAvailable(CppModel.COPTS_VARIABLE_VALUE)) { + return Variables.toStringList(variables, CppModel.COPTS_VARIABLE_VALUE); + } else { + return ImmutableList.of(); + } + } + public static Builder builder( Artifact sourceFile, Artifact outputFile, Label sourceLabel, - ImmutableList<String> copts, Predicate<String> coptsFilter, ImmutableList<String> features, String actionName, @@ -227,7 +232,6 @@ public final class CompileCommandLine { sourceFile, outputFile, sourceLabel, - copts, coptsFilter, features, actionName, @@ -241,7 +245,6 @@ public final class CompileCommandLine { private final Artifact sourceFile; private final Artifact outputFile; private final Label sourceLabel; - private final ImmutableList<String> copts; private final Predicate<String> coptsFilter; private final Collection<String> features; private FeatureConfiguration featureConfiguration; @@ -256,7 +259,6 @@ public final class CompileCommandLine { Preconditions.checkNotNull(sourceFile), Preconditions.checkNotNull(outputFile), Preconditions.checkNotNull(sourceLabel), - Preconditions.checkNotNull(copts), Preconditions.checkNotNull(coptsFilter), Preconditions.checkNotNull(features), Preconditions.checkNotNull(featureConfiguration), @@ -271,7 +273,6 @@ public final class CompileCommandLine { Artifact sourceFile, Artifact outputFile, Label sourceLabel, - ImmutableList<String> copts, Predicate<String> coptsFilter, Collection<String> features, String actionName, @@ -281,7 +282,6 @@ public final class CompileCommandLine { this.sourceFile = sourceFile; this.outputFile = outputFile; this.sourceLabel = sourceLabel; - this.copts = copts; this.coptsFilter = coptsFilter; this.features = features; this.actionName = actionName; diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppActionConfigs.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppActionConfigs.java index d904494a35..2020b4b2ae 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppActionConfigs.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppActionConfigs.java @@ -64,6 +64,7 @@ public class CppActionConfigs { " tool {", " tool_path: '" + gccToolPath + "'", " }", + " implies: 'copts'", "}", "action_config {", " config_name: 'preprocess-assemble'", @@ -71,6 +72,7 @@ public class CppActionConfigs { " tool {", " tool_path: '" + gccToolPath + "'", " }", + " implies: 'copts'", "}", "action_config {", " config_name: 'c-compile'", @@ -78,6 +80,7 @@ public class CppActionConfigs { " tool {", " tool_path: '" + gccToolPath + "'", " }", + " implies: 'copts'", "}", "action_config {", " config_name: 'c++-compile'", @@ -85,6 +88,7 @@ public class CppActionConfigs { " tool {", " tool_path: '" + gccToolPath + "'", " }", + " implies: 'copts'", "}", "action_config {", " config_name: 'c++-header-parsing'", @@ -92,6 +96,7 @@ public class CppActionConfigs { " tool {", " tool_path: '" + gccToolPath + "'", " }", + " implies: 'copts'", "}", "action_config {", " config_name: 'c++-header-preprocessing'", @@ -99,6 +104,7 @@ public class CppActionConfigs { " tool {", " tool_path: '" + gccToolPath + "'", " }", + " implies: 'copts'", "}", "action_config {", " config_name: 'c++-module-compile'", @@ -106,6 +112,7 @@ public class CppActionConfigs { " tool {", " tool_path: '" + gccToolPath + "'", " }", + " implies: 'copts'", "}", "action_config {", " config_name: 'c++-module-codegen'", @@ -113,69 +120,70 @@ public class CppActionConfigs { " tool {", " tool_path: '" + gccToolPath + "'", " }", + " implies: 'copts'", + "}", + // Gcc options: + // -MD turns on .d file output as a side-effect (doesn't imply -E) + // -MM[D] enables user includes only, not system includes + // -MF <name> specifies the dotd file name + // Issues: + // -M[M] alone subverts actual .o output (implies -E) + // -M[M]D alone breaks some of the .d naming assumptions + // This combination gets user and system includes with specified name: + // -MD -MF <name> + "feature {", + " name: 'dependency_file'", + " flag_set {", + " action: 'assemble'", + " action: 'preprocess-assemble'", + " action: 'c-compile'", + " action: 'c++-compile'", + " action: 'c++-module-compile'", + " action: 'objc-compile'", + " action: 'objc++-compile'", + " action: 'c++-header-preprocessing'", + " action: 'c++-header-parsing'", + " action: 'clif-match'", + " expand_if_all_available: 'dependency_file'", + " flag_group {", + " flag: '-MD'", + " flag: '-MF'", + " flag: '%{dependency_file}'", + " }", + " }", + "}", + // GCC and Clang give randomized names to symbols which are defined in + // an anonymous namespace but have external linkage. To make + // computation of these deterministic, we want to override the + // default seed for the random number generator. It's safe to use + // any value which differs for all translation units; we use the + // path to the object file. + "feature {", + " name: 'random_seed'", + " flag_set {", + " action: 'c++-compile'", + " action: 'c++-module-codegen'", + " action: 'c++-module-compile'", + " flag_group {", + " flag: '-frandom-seed=%{output_file}'", + " }", + " }", + "}", + "feature {", + " name: 'pic'", + " flag_set {", + " action: 'assemble'", + " action: 'preprocess-assemble'", + " action: 'c-compile'", + " action: 'c++-compile'", + " action: 'c++-module-codegen'", + " action: 'c++-module-compile'", + " expand_if_all_available: 'pic'", + " flag_group {", + " flag: '-fPIC'", + " }", + " }", "}", - // Gcc options: - // -MD turns on .d file output as a side-effect (doesn't imply -E) - // -MM[D] enables user includes only, not system includes - // -MF <name> specifies the dotd file name - // Issues: - // -M[M] alone subverts actual .o output (implies -E) - // -M[M]D alone breaks some of the .d naming assumptions - // This combination gets user and system includes with specified name: - // -MD -MF <name> - "feature {", - " name: 'dependency_file'", - " flag_set {", - " action: 'assemble'", - " action: 'preprocess-assemble'", - " action: 'c-compile'", - " action: 'c++-compile'", - " action: 'c++-module-compile'", - " action: 'objc-compile'", - " action: 'objc++-compile'", - " action: 'c++-header-preprocessing'", - " action: 'c++-header-parsing'", - " action: 'clif-match'", - " expand_if_all_available: 'dependency_file'", - " flag_group {", - " flag: '-MD'", - " flag: '-MF'", - " flag: '%{dependency_file}'", - " }", - " }", - "}", - // GCC and Clang give randomized names to symbols which are defined in - // an anonymous namespace but have external linkage. To make - // computation of these deterministic, we want to override the - // default seed for the random number generator. It's safe to use - // any value which differs for all translation units; we use the - // path to the object file. - "feature {", - " name: 'random_seed'", - " flag_set {", - " action: 'c++-compile'", - " action: 'c++-module-codegen'", - " action: 'c++-module-compile'", - " flag_group {", - " flag: '-frandom-seed=%{output_file}'", - " }", - " }", - "}", - "feature {", - " name: 'pic'", - " flag_set {", - " action: 'assemble'", - " action: 'preprocess-assemble'", - " action: 'c-compile'", - " action: 'c++-compile'", - " action: 'c++-module-codegen'", - " action: 'c++-module-compile'", - " expand_if_all_available: 'pic'", - " flag_group {", - " flag: '-fPIC'", - " }", - " }", - "}", ifTrue( !features.contains(CppRuleClasses.PER_OBJECT_DEBUG_INFO), "feature {", @@ -192,22 +200,22 @@ public class CppActionConfigs { " }", " }", "}"), - "feature {", - " name: 'preprocessor_defines'", - " flag_set {", - " action: 'preprocess-assemble'", - " action: 'c-compile'", - " action: 'c++-compile'", - " action: 'c++-header-parsing'", - " action: 'c++-header-preprocessing'", - " action: 'c++-module-compile'", - " action: 'clif-match'", - " flag_group {", - " iterate_over: 'preprocessor_defines'", - " flag: '-D%{preprocessor_defines}'", - " }", - " }", - "}", + "feature {", + " name: 'preprocessor_defines'", + " flag_set {", + " action: 'preprocess-assemble'", + " action: 'c-compile'", + " action: 'c++-compile'", + " action: 'c++-header-parsing'", + " action: 'c++-header-preprocessing'", + " action: 'c++-module-compile'", + " action: 'clif-match'", + " flag_group {", + " iterate_over: 'preprocessor_defines'", + " flag: '-D%{preprocessor_defines}'", + " }", + " }", + "}", ifTrue( !features.contains(CppRuleClasses.INCLUDE_PATHS), "feature {", @@ -516,10 +524,7 @@ public class CppActionConfigs { " action: 'c++-link-pic-static-library'", " action: 'c++-link-alwayslink-pic-static-library'", " flag_group {", - ifLinux( - platform, - " flag: 'rcsD'", - " flag: '%{output_execpath}'"), + ifLinux(platform, " flag: 'rcsD'", " flag: '%{output_execpath}'"), ifMac( platform, " flag: '-static'", @@ -819,7 +824,26 @@ public class CppActionConfigs { " requires {", " feature: 'coverage'", " }", - "}"))); + "}"), + "feature {", + " name: 'copts'", + " flag_set {", + " expand_if_all_available: 'copts'", + " action: 'assemble'", + " action: 'preprocess-assemble'", + " action: 'c-compile'", + " action: 'c++-compile'", + " action: 'c++-header-parsing'", + " action: 'c++-header-preprocessing'", + " action: 'c++-module-compile'", + " action: 'c++-module-codegen'", + " action: 'lto-backend'", + " flag_group {", + " iterate_over: 'copts'", + " flag: '%{copts}'", + " }", + " }", + "}")); } private static String ifLinux(CppPlatform platform, String... lines) { diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java index 3559fffde8..b4cc77960c 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java @@ -267,7 +267,6 @@ public class CppCompileAction extends AbstractAction * @param cppConfiguration TODO(bazel-team): Add parameter description. * @param context the compilation context * @param actionContext TODO(bazel-team): Add parameter description. - * @param copts options for the compiler * @param coptsFilter regular expression to remove options from {@code copts} * @param specialInputsHandler TODO(bazel-team): Add parameter description. * @param lipoScannables List of artifacts to include-scan when this action is a lipo action @@ -305,7 +304,6 @@ public class CppCompileAction extends AbstractAction CppConfiguration cppConfiguration, CppCompilationContext context, Class<? extends CppCompileActionContext> actionContext, - ImmutableList<String> copts, Predicate<String> coptsFilter, SpecialInputsHandler specialInputsHandler, Iterable<IncludeScannable> lipoScannables, @@ -349,7 +347,6 @@ public class CppCompileAction extends AbstractAction sourceFile, outputFile, sourceLabel, - copts, coptsFilter, features, actionName, diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionBuilder.java index 505758b016..f2af6109b6 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionBuilder.java @@ -69,7 +69,6 @@ public class CppCompileActionBuilder { private DotdFile dotdFile; private Artifact gcnoFile; private CppCompilationContext context = CppCompilationContext.EMPTY; - private final List<String> copts = new ArrayList<>(); private final List<String> pluginOpts = new ArrayList<>(); private final List<Pattern> nocopts = new ArrayList<>(); private ImmutableList<PathFragment> extraSystemIncludePrefixes = ImmutableList.of(); @@ -176,7 +175,6 @@ public class CppCompileActionBuilder { this.dotdFile = other.dotdFile; this.gcnoFile = other.gcnoFile; this.context = other.context; - this.copts.addAll(other.copts); this.pluginOpts.addAll(other.pluginOpts); this.nocopts.addAll(other.nocopts); this.extraSystemIncludePrefixes = ImmutableList.copyOf(other.extraSystemIncludePrefixes); @@ -405,7 +403,6 @@ public class CppCompileActionBuilder { cppConfiguration, context, actionContext, - ImmutableList.copyOf(copts), getNocoptPredicate(nocopts), getLipoScannables(realMandatoryInputs), cppSemantics, @@ -437,7 +434,6 @@ public class CppCompileActionBuilder { cppConfiguration, context, actionContext, - ImmutableList.copyOf(copts), getNocoptPredicate(nocopts), specialInputsHandler, getLipoScannables(realMandatoryInputs), @@ -678,16 +674,6 @@ public class CppCompileActionBuilder { return this; } - public CppCompileActionBuilder addCopt(String copt) { - copts.add(copt); - return this; - } - - public CppCompileActionBuilder addCopts(Iterable<? extends String> copts) { - Iterables.addAll(this.copts, copts); - return this; - } - public CppCompileActionBuilder addNocopts(Pattern nocopts) { this.nocopts.add(nocopts); return this; diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModel.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModel.java index 99222ecc6f..2d3a3a1254 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModel.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModel.java @@ -134,6 +134,9 @@ public final class CppModel { /** Name of the build variable for the LTO indexing bitcode file. */ public static final String LTO_INDEXING_BITCODE_FILE_VARIABLE_NAME = "lto_indexing_bitcode_file"; + /** Build variable for all user provided copt flags. */ + public static final String COPTS_VARIABLE_VALUE = "copts"; + private final CppSemantics semantics; private final RuleContext ruleContext; private final BuildConfiguration configuration; @@ -143,7 +146,7 @@ public final class CppModel { private CppCompilationContext context; private final Set<CppSource> sourceFiles = new LinkedHashSet<>(); private final List<Artifact> mandatoryInputs = new ArrayList<>(); - private final List<String> copts = new ArrayList<>(); + private final ImmutableList<String> copts; @Nullable private Pattern nocopts; private boolean fake; private boolean maySaveTemps; @@ -164,19 +167,28 @@ public final class CppModel { private final FdoSupportProvider fdoSupport; private String linkedArtifactNameSuffix = ""; - public CppModel(RuleContext ruleContext, CppSemantics semantics, - CcToolchainProvider ccToolchain, FdoSupportProvider fdoSupport) { - this(ruleContext, semantics, ccToolchain, fdoSupport, ruleContext.getConfiguration()); + public CppModel( + RuleContext ruleContext, + CppSemantics semantics, + CcToolchainProvider ccToolchain, + FdoSupportProvider fdoSupport, + ImmutableList<String> copts) { + this(ruleContext, semantics, ccToolchain, fdoSupport, ruleContext.getConfiguration(), copts); } - public CppModel(RuleContext ruleContext, CppSemantics semantics, - CcToolchainProvider ccToolchain, FdoSupportProvider fdoSupport, - BuildConfiguration configuration) { + public CppModel( + RuleContext ruleContext, + CppSemantics semantics, + CcToolchainProvider ccToolchain, + FdoSupportProvider fdoSupport, + BuildConfiguration configuration, + ImmutableList<String> copts) { this.ruleContext = Preconditions.checkNotNull(ruleContext); this.semantics = semantics; this.ccToolchain = Preconditions.checkNotNull(ccToolchain); this.fdoSupport = Preconditions.checkNotNull(fdoSupport); this.configuration = configuration; + this.copts = copts; cppConfiguration = ruleContext.getFragment(CppConfiguration.class); } @@ -255,14 +267,6 @@ public final class CppModel { } /** - * Adds the given copts. - */ - public CppModel addCopts(Collection<String> copts) { - this.copts.addAll(copts); - return this; - } - - /** * Sets the nocopts pattern. This is used to filter out flags from the system defined set of * flags. By default no filter is applied. */ @@ -462,6 +466,7 @@ public final class CppModel { buildVariables.addStringVariable(SOURCE_FILE_VARIABLE_NAME, sourceFile.getExecPathString()); buildVariables.addStringVariable(OUTPUT_FILE_VARIABLE_NAME, outputFile.getExecPathString()); + buildVariables.addStringSequenceVariable(COPTS_VARIABLE_VALUE, copts); if (builder.getTempOutputFile() != null) { realOutputFilePath = builder.getTempOutputFile().getPathString(); @@ -1342,7 +1347,7 @@ public final class CppModel { CppCompileActionBuilder builder = new CppCompileActionBuilder(ruleContext, label, ccToolchain, configuration); builder.setSourceFile(source); - builder.setContext(context).addCopts(copts); + builder.setContext(context); builder.addEnvironment(ccToolchain.getEnvironment()); return builder; } diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/FakeCppCompileAction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/FakeCppCompileAction.java index a8c0160791..a73ea273ec 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/FakeCppCompileAction.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/FakeCppCompileAction.java @@ -74,7 +74,6 @@ public class FakeCppCompileAction extends CppCompileAction { CppConfiguration cppConfiguration, CppCompilationContext context, Class<? extends CppCompileActionContext> actionContext, - ImmutableList<String> copts, Predicate<String> nocopts, Iterable<IncludeScannable> lipoScannables, CppSemantics cppSemantics, @@ -111,7 +110,6 @@ public class FakeCppCompileAction extends CppCompileAction { // time, so they can't depend on the contents of the ".d" file.) CppCompilationContext.disallowUndeclaredHeaders(context), actionContext, - copts, nocopts, VOID_SPECIAL_INPUTS_HANDLER, lipoScannables, diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolCompilationSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolCompilationSupport.java index 6541177500..c609fa8139 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolCompilationSupport.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/CrosstoolCompilationSupport.java @@ -448,10 +448,16 @@ public class CrosstoolCompilationSupport extends CompilationSupport { // For example, objc_proto_library can depend on a proto_library rule that does not // generate C++ protos. .setCheckDepsGenerateCpp(false) - .addCopts(getCompileRuleCopts()) + .setCopts( + ImmutableList.<String>builder() + .addAll(getCompileRuleCopts()) + .addAll( + ruleContext + .getFragment(ObjcConfiguration.class) + .getCoptsForCompilationMode()) + .build()) .addIncludeDirs(priorityHeaders) .addIncludeDirs(objcProvider.get(INCLUDE)) - .addCopts(ruleContext.getFragment(ObjcConfiguration.class).getCoptsForCompilationMode()) .addSystemIncludeDirs(objcProvider.get(INCLUDE_SYSTEM)) .setCppModuleMap(intermediateArtifacts.moduleMap()) .setLinkedArtifactNameSuffix(intermediateArtifacts.archiveFileNameSuffix()) diff --git a/src/test/java/com/google/devtools/build/lib/packages/util/MOCK_OSX_CROSSTOOL b/src/test/java/com/google/devtools/build/lib/packages/util/MOCK_OSX_CROSSTOOL index b624413c80..42065a3d70 100644 --- a/src/test/java/com/google/devtools/build/lib/packages/util/MOCK_OSX_CROSSTOOL +++ b/src/test/java/com/google/devtools/build/lib/packages/util/MOCK_OSX_CROSSTOOL @@ -1111,6 +1111,26 @@ toolchain { provides: "profile" } feature { + name: "copts" + flag_set { + action: "assemble" + action: "preprocess-assemble" + action: "c-compile" + action: "c++-compile" + action: "c++-header-parsing" + action: "c++-header-preprocessing" + action: "c++-module-compile" + action: "c++-module-codegen" + action: "objc-compile" + action: "objc++-compile" + flag_group { + flag: "%{copts}" + iterate_over: "copts" + } + expand_if_all_available: "copts" + } + } + feature { name: "apply_implicit_frameworks" flag_set { action: "objc-executable" @@ -1186,6 +1206,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" } action_config { config_name: "c++-compile" @@ -1205,6 +1226,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" } action_config { config_name: "c++-module-compile" @@ -1219,6 +1241,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" } action_config { config_name: "c++-header-parsing" @@ -1233,6 +1256,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" } action_config { config_name: "c++-header-preprocessing" @@ -1247,6 +1271,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" } action_config { config_name: "objc-compile" @@ -1270,6 +1295,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" } action_config { config_name: "objc++-compile" @@ -1294,6 +1320,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" } action_config { config_name: "assemble" @@ -1306,6 +1333,7 @@ toolchain { implies: "no_objc_arc" implies: "include_system_dirs" implies: "apple_env" + implies: "copts" } action_config { config_name: "preprocess-assemble" @@ -1320,6 +1348,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" } action_config { config_name: "objc-archive" @@ -2659,6 +2688,26 @@ toolchain { provides: "profile" } feature { + name: "copts" + flag_set { + action: "assemble" + action: "preprocess-assemble" + action: "c-compile" + action: "c++-compile" + action: "c++-header-parsing" + action: "c++-header-preprocessing" + action: "c++-module-compile" + action: "c++-module-codegen" + action: "objc-compile" + action: "objc++-compile" + flag_group { + flag: "%{copts}" + iterate_over: "copts" + } + expand_if_all_available: "copts" + } + } + feature { name: "apply_implicit_frameworks" flag_set { action: "objc-executable" @@ -2734,6 +2783,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" } action_config { config_name: "c++-compile" @@ -2753,6 +2803,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" } action_config { config_name: "c++-module-compile" @@ -2767,6 +2818,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" } action_config { config_name: "c++-header-parsing" @@ -2781,6 +2833,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" } action_config { config_name: "c++-header-preprocessing" @@ -2795,6 +2848,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" } action_config { config_name: "objc-compile" @@ -2818,6 +2872,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" } action_config { config_name: "objc++-compile" @@ -2842,6 +2897,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" } action_config { config_name: "assemble" @@ -2854,6 +2910,7 @@ toolchain { implies: "no_objc_arc" implies: "include_system_dirs" implies: "apple_env" + implies: "copts" } action_config { config_name: "preprocess-assemble" @@ -2868,6 +2925,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" } action_config { config_name: "objc-archive" @@ -4211,6 +4269,26 @@ toolchain { provides: "profile" } feature { + name: "copts" + flag_set { + action: "assemble" + action: "preprocess-assemble" + action: "c-compile" + action: "c++-compile" + action: "c++-header-parsing" + action: "c++-header-preprocessing" + action: "c++-module-compile" + action: "c++-module-codegen" + action: "objc-compile" + action: "objc++-compile" + flag_group { + flag: "%{copts}" + iterate_over: "copts" + } + expand_if_all_available: "copts" + } + } + feature { name: "apply_implicit_frameworks" flag_set { action: "objc-executable" @@ -4290,6 +4368,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" } action_config { config_name: "c++-compile" @@ -4309,6 +4388,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" } action_config { config_name: "c++-module-compile" @@ -4323,6 +4403,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" } action_config { config_name: "c++-header-parsing" @@ -4337,6 +4418,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" } action_config { config_name: "c++-header-preprocessing" @@ -4351,6 +4433,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" } action_config { config_name: "objc-compile" @@ -4374,6 +4457,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" implies: "apply_simulator_compiler_flags" } action_config { @@ -4399,6 +4483,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" implies: "apply_simulator_compiler_flags" } action_config { @@ -4412,6 +4497,7 @@ toolchain { implies: "no_objc_arc" implies: "include_system_dirs" implies: "apple_env" + implies: "copts" } action_config { config_name: "preprocess-assemble" @@ -4426,6 +4512,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" } action_config { config_name: "objc-archive" @@ -5771,6 +5858,26 @@ toolchain { provides: "profile" } feature { + name: "copts" + flag_set { + action: "assemble" + action: "preprocess-assemble" + action: "c-compile" + action: "c++-compile" + action: "c++-header-parsing" + action: "c++-header-preprocessing" + action: "c++-module-compile" + action: "c++-module-codegen" + action: "objc-compile" + action: "objc++-compile" + flag_group { + flag: "%{copts}" + iterate_over: "copts" + } + expand_if_all_available: "copts" + } + } + feature { name: "apply_implicit_frameworks" flag_set { action: "objc-executable" @@ -5850,6 +5957,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" } action_config { config_name: "c++-compile" @@ -5869,6 +5977,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" } action_config { config_name: "c++-module-compile" @@ -5883,6 +5992,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" } action_config { config_name: "c++-header-parsing" @@ -5897,6 +6007,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" } action_config { config_name: "c++-header-preprocessing" @@ -5911,6 +6022,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" } action_config { config_name: "objc-compile" @@ -5934,6 +6046,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" implies: "apply_simulator_compiler_flags" } action_config { @@ -5959,6 +6072,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" implies: "apply_simulator_compiler_flags" } action_config { @@ -5972,6 +6086,7 @@ toolchain { implies: "no_objc_arc" implies: "include_system_dirs" implies: "apple_env" + implies: "copts" } action_config { config_name: "preprocess-assemble" @@ -5986,6 +6101,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" } action_config { config_name: "objc-archive" @@ -7330,6 +7446,26 @@ toolchain { provides: "profile" } feature { + name: "copts" + flag_set { + action: "assemble" + action: "preprocess-assemble" + action: "c-compile" + action: "c++-compile" + action: "c++-header-parsing" + action: "c++-header-preprocessing" + action: "c++-module-compile" + action: "c++-module-codegen" + action: "objc-compile" + action: "objc++-compile" + flag_group { + flag: "%{copts}" + iterate_over: "copts" + } + expand_if_all_available: "copts" + } + } + feature { name: "cpp_linker_flags" flag_set { action: "c++-link-executable" @@ -7438,6 +7574,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" implies: "unfiltered_cxx_flags" } action_config { @@ -7458,6 +7595,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" implies: "unfiltered_cxx_flags" } action_config { @@ -7473,6 +7611,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" implies: "unfiltered_cxx_flags" } action_config { @@ -7488,6 +7627,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" implies: "unfiltered_cxx_flags" } action_config { @@ -7503,6 +7643,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" implies: "unfiltered_cxx_flags" } action_config { @@ -7527,6 +7668,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" implies: "apply_simulator_compiler_flags" } action_config { @@ -7552,6 +7694,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" implies: "apply_simulator_compiler_flags" } action_config { @@ -7565,6 +7708,7 @@ toolchain { implies: "no_objc_arc" implies: "include_system_dirs" implies: "apple_env" + implies: "copts" implies: "unfiltered_cxx_flags" } action_config { @@ -7580,6 +7724,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" implies: "unfiltered_cxx_flags" } action_config { @@ -8924,6 +9069,26 @@ toolchain { provides: "profile" } feature { + name: "copts" + flag_set { + action: "assemble" + action: "preprocess-assemble" + action: "c-compile" + action: "c++-compile" + action: "c++-header-parsing" + action: "c++-header-preprocessing" + action: "c++-module-compile" + action: "c++-module-codegen" + action: "objc-compile" + action: "objc++-compile" + flag_group { + flag: "%{copts}" + iterate_over: "copts" + } + expand_if_all_available: "copts" + } + } + feature { name: "apply_implicit_frameworks" flag_set { action: "objc-executable" @@ -9003,6 +9168,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" } action_config { config_name: "c++-compile" @@ -9022,6 +9188,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" } action_config { config_name: "c++-module-compile" @@ -9036,6 +9203,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" } action_config { config_name: "c++-header-parsing" @@ -9050,6 +9218,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" } action_config { config_name: "c++-header-preprocessing" @@ -9064,6 +9233,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" } action_config { config_name: "objc-compile" @@ -9087,6 +9257,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" implies: "apply_simulator_compiler_flags" } action_config { @@ -9112,6 +9283,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" implies: "apply_simulator_compiler_flags" } action_config { @@ -9125,6 +9297,7 @@ toolchain { implies: "no_objc_arc" implies: "include_system_dirs" implies: "apple_env" + implies: "copts" } action_config { config_name: "preprocess-assemble" @@ -9139,6 +9312,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" } action_config { config_name: "objc-archive" @@ -10482,6 +10656,26 @@ toolchain { provides: "profile" } feature { + name: "copts" + flag_set { + action: "assemble" + action: "preprocess-assemble" + action: "c-compile" + action: "c++-compile" + action: "c++-header-parsing" + action: "c++-header-preprocessing" + action: "c++-module-compile" + action: "c++-module-codegen" + action: "objc-compile" + action: "objc++-compile" + flag_group { + flag: "%{copts}" + iterate_over: "copts" + } + expand_if_all_available: "copts" + } + } + feature { name: "apply_implicit_frameworks" flag_set { action: "objc-executable" @@ -10586,6 +10780,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" } action_config { config_name: "c++-compile" @@ -10605,6 +10800,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" } action_config { config_name: "c++-module-compile" @@ -10619,6 +10815,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" } action_config { config_name: "c++-header-parsing" @@ -10633,6 +10830,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" } action_config { config_name: "c++-header-preprocessing" @@ -10647,6 +10845,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" } action_config { config_name: "objc-compile" @@ -10670,6 +10869,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" } action_config { config_name: "objc++-compile" @@ -10694,6 +10894,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" } action_config { config_name: "assemble" @@ -10706,6 +10907,7 @@ toolchain { implies: "no_objc_arc" implies: "include_system_dirs" implies: "apple_env" + implies: "copts" } action_config { config_name: "preprocess-assemble" @@ -10720,6 +10922,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" } action_config { config_name: "objc-archive" @@ -12065,6 +12268,26 @@ toolchain { provides: "profile" } feature { + name: "copts" + flag_set { + action: "assemble" + action: "preprocess-assemble" + action: "c-compile" + action: "c++-compile" + action: "c++-header-parsing" + action: "c++-header-preprocessing" + action: "c++-module-compile" + action: "c++-module-codegen" + action: "objc-compile" + action: "objc++-compile" + flag_group { + flag: "%{copts}" + iterate_over: "copts" + } + expand_if_all_available: "copts" + } + } + feature { name: "apply_implicit_frameworks" flag_set { action: "objc-executable" @@ -12169,6 +12392,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" } action_config { config_name: "c++-compile" @@ -12188,6 +12412,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" } action_config { config_name: "c++-module-compile" @@ -12202,6 +12427,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" } action_config { config_name: "c++-header-parsing" @@ -12216,6 +12442,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" } action_config { config_name: "c++-header-preprocessing" @@ -12230,6 +12457,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" } action_config { config_name: "objc-compile" @@ -12253,6 +12481,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" } action_config { config_name: "objc++-compile" @@ -12277,6 +12506,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" } action_config { config_name: "assemble" @@ -12289,6 +12519,7 @@ toolchain { implies: "no_objc_arc" implies: "include_system_dirs" implies: "apple_env" + implies: "copts" } action_config { config_name: "preprocess-assemble" @@ -12303,6 +12534,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" } action_config { config_name: "objc-archive" @@ -13647,6 +13879,26 @@ toolchain { provides: "profile" } feature { + name: "copts" + flag_set { + action: "assemble" + action: "preprocess-assemble" + action: "c-compile" + action: "c++-compile" + action: "c++-header-parsing" + action: "c++-header-preprocessing" + action: "c++-module-compile" + action: "c++-module-codegen" + action: "objc-compile" + action: "objc++-compile" + flag_group { + flag: "%{copts}" + iterate_over: "copts" + } + expand_if_all_available: "copts" + } + } + feature { name: "cpp_linker_flags" flag_set { action: "c++-link-executable" @@ -13780,6 +14032,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" implies: "unfiltered_cxx_flags" } action_config { @@ -13800,6 +14053,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" implies: "unfiltered_cxx_flags" } action_config { @@ -13815,6 +14069,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" implies: "unfiltered_cxx_flags" } action_config { @@ -13830,6 +14085,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" implies: "unfiltered_cxx_flags" } action_config { @@ -13845,6 +14101,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" implies: "unfiltered_cxx_flags" } action_config { @@ -13869,6 +14126,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" } action_config { config_name: "objc++-compile" @@ -13893,6 +14151,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" } action_config { config_name: "assemble" @@ -13905,6 +14164,7 @@ toolchain { implies: "no_objc_arc" implies: "include_system_dirs" implies: "apple_env" + implies: "copts" implies: "unfiltered_cxx_flags" } action_config { @@ -13920,6 +14180,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" implies: "unfiltered_cxx_flags" } action_config { @@ -15264,6 +15525,26 @@ toolchain { provides: "profile" } feature { + name: "copts" + flag_set { + action: "assemble" + action: "preprocess-assemble" + action: "c-compile" + action: "c++-compile" + action: "c++-header-parsing" + action: "c++-header-preprocessing" + action: "c++-module-compile" + action: "c++-module-codegen" + action: "objc-compile" + action: "objc++-compile" + flag_group { + flag: "%{copts}" + iterate_over: "copts" + } + expand_if_all_available: "copts" + } + } + feature { name: "apply_implicit_frameworks" flag_set { action: "objc-executable" @@ -15368,6 +15649,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" } action_config { config_name: "c++-compile" @@ -15387,6 +15669,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" } action_config { config_name: "c++-module-compile" @@ -15401,6 +15684,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" } action_config { config_name: "c++-header-parsing" @@ -15415,6 +15699,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" } action_config { config_name: "c++-header-preprocessing" @@ -15429,6 +15714,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" } action_config { config_name: "objc-compile" @@ -15452,6 +15738,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" } action_config { config_name: "objc++-compile" @@ -15476,6 +15763,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" } action_config { config_name: "assemble" @@ -15488,6 +15776,7 @@ toolchain { implies: "no_objc_arc" implies: "include_system_dirs" implies: "apple_env" + implies: "copts" } action_config { config_name: "preprocess-assemble" @@ -15502,6 +15791,7 @@ toolchain { implies: "objc_arc" implies: "no_objc_arc" implies: "apple_env" + implies: "copts" } action_config { config_name: "objc-archive" diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcCommonTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcCommonTest.java index 8695ac517a..f9f2664b7e 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcCommonTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcCommonTest.java @@ -43,7 +43,6 @@ import com.google.devtools.build.lib.cmdline.PackageIdentifier; import com.google.devtools.build.lib.cmdline.RepositoryName; import com.google.devtools.build.lib.packages.RuleClass; import com.google.devtools.build.lib.rules.ToolchainType; -import com.google.devtools.build.lib.testutil.MoreAsserts; import com.google.devtools.build.lib.util.FileType; import com.google.devtools.build.lib.util.OsUtils; import com.google.devtools.build.lib.vfs.FileSystemUtils; @@ -149,7 +148,7 @@ public class CcCommonTest extends BuildViewTestCase { "cc_library(name = 'c_lib',", " srcs = ['foo.cc'],", " copts = [ '-Wmy-warning', '-frun-faster' ])"); - MoreAsserts.assertContainsSublist(getCopts("//copts:c_lib"), "-Wmy-warning", "-frun-faster"); + assertThat(getCopts("//copts:c_lib")).containsAllOf("-Wmy-warning", "-frun-faster"); } @Test @@ -160,7 +159,7 @@ public class CcCommonTest extends BuildViewTestCase { " srcs = ['foo.cc'],", " copts = ['-Wmy-warning -frun-faster'])"); List<String> copts = getCopts("//copts:c_lib"); - MoreAsserts.assertContainsSublist(copts, "-Wmy-warning", "-frun-faster"); + assertThat(copts).containsAllOf("-Wmy-warning", "-frun-faster"); assertContainsEvent("each item in the list should contain only one option"); } @@ -173,7 +172,7 @@ public class CcCommonTest extends BuildViewTestCase { " srcs = ['foo.cc'],", " copts = ['-Wmy-warning -frun-faster'])"); List<String> copts = getCopts("//copts:c_lib"); - MoreAsserts.assertContainsSublist(copts, "-Wmy-warning -frun-faster"); + assertThat(copts).contains("-Wmy-warning -frun-faster"); } /** diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CompileBuildVariablesTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CompileBuildVariablesTest.java index 1324c6c802..67b9f8a0e2 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CompileBuildVariablesTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CompileBuildVariablesTest.java @@ -17,6 +17,7 @@ package com.google.devtools.build.lib.rules.cpp; import static com.google.common.truth.Truth.assertThat; import com.google.common.base.Predicate; +import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.analysis.util.BuildViewTestCase; @@ -62,4 +63,17 @@ public class CompileBuildVariablesTest extends BuildViewTestCase { assertThat(variables.getStringVariable(CppModel.OUTPUT_FILE_VARIABLE_NAME)) .contains("x/bin"); } + + @Test + public void testPresenceOfCoptsVariable() throws Exception { + scratch.file( + "x/BUILD", "cc_binary(name = 'bin', srcs = ['bin.cc'], copts = ['-foo', '-bar'])"); + scratch.file("x/bin.cc"); + + Variables variables = getCompileBuildVariables("//x:bin", "bin"); + + ImmutableList<String> copts = + Variables.toStringList(variables, CppModel.COPTS_VARIABLE_VALUE); + assertThat(copts).containsExactly("-foo", "-bar").inOrder(); + } } diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CompileCommandLineTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CompileCommandLineTest.java index 141aacf54f..97abeeb722 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CompileCommandLineTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CompileCommandLineTest.java @@ -104,7 +104,6 @@ public class CompileCommandLineTest extends BuildViewTestCase { scratchArtifact("a/FakeInput"), scratchArtifact("a/FakeOutput"), makeLabel("//a:FakeInput"), - ImmutableList.<String>of(), new Predicate<String>() { @Override public boolean apply(String s) { |