From e116bae8213ca31ae590a60748c1b6d505a4f819 Mon Sep 17 00:00:00 2001 From: Googler Date: Wed, 6 Dec 2023 03:25:38 -0800 Subject: [PATCH] Make incompatible_enable_cc_toolchain_resolution a no-op Make crosstool_top flag a no-op and remove the code used to retrieve toolchain from crosstool_top. Remove the tests related to crosstop or incompatible_enable_cc_toolchain_resolution. Those tests can't work anymore, becuase the functionality is removed. There are some further cleanups, like removing _cc_toolchain attribute from the rules. RELNOTES[INC]: incompatible_enable_cc_toolchain_resolution is a no-op, enabled by default (https://github.com/bazelbuild/bazel/issues/7260) PiperOrigin-RevId: 588363296 Change-Id: I8af466628ce9c8d9175533255faef36968570aa4 --- .../build/lib/rules/cpp/CcModule.java | 7 - .../lib/rules/cpp/CcToolchainProvider.java | 3 - .../build/lib/rules/cpp/CcToolchainSuite.java | 55 +---- .../build/lib/rules/cpp/CppConfiguration.java | 21 -- .../build/lib/rules/cpp/CppHelper.java | 57 +---- .../build/lib/rules/cpp/CppOptions.java | 37 +-- .../build/lib/rules/cpp/FdoHelper.java | 20 +- .../lib/starlarkbuildapi/cpp/CcModuleApi.java | 10 - .../builtins_bzl/common/cc/cc_common.bzl | 4 +- .../builtins_bzl/common/cc/cc_helper.bzl | 35 ++- .../builtins_bzl/common/cc/cc_toolchain.bzl | 7 +- .../StarlarkAttrTransitionProviderTest.java | 40 ---- .../config/BuildConfigurationValueTest.java | 18 -- .../google/devtools/build/lib/rules/cpp/BUILD | 10 - .../lib/rules/cpp/CcToolchainSuiteTest.java | 37 --- .../lib/rules/cpp/StarlarkCcCommonTest.java | 39 ---- .../lib/view/java/JavaConfigurationTest.java | 19 -- src/test/py/bazel/bazel_windows_cpp_test.py | 163 +++++++------ src/test/py/bazel/bazel_windows_test.py | 30 ++- src/test/py/bazel/test_base.py | 6 + .../android/android_ndk_integration_test.sh | 163 +------------ .../shell/bazel/bazel_windows_example_test.sh | 40 +++- src/test/shell/integration/cpp_test.sh | 220 ------------------ src/test/shell/testenv.sh.tmpl | 45 ++++ 24 files changed, 257 insertions(+), 829 deletions(-) delete mode 100644 src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainSuiteTest.java diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java index d5c3571e9bae3d..1a5c5fd581727b 100755 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java @@ -1923,13 +1923,6 @@ private static T nullIfNone(Object object, Class type) { return object != Starlark.NONE ? type.cast(object) : null; } - @Override - public boolean isCcToolchainResolutionEnabled( - StarlarkRuleContext starlarkRuleContext, StarlarkThread thread) throws EvalException { - isCalledFromStarlarkCcCommon(thread); - return CppHelper.useToolchainResolution(starlarkRuleContext.getRuleContext()); - } - @Override public Tuple createLinkingContextFromCompilationOutputs( StarlarkActionFactory starlarkActionFactoryApi, diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java index 7ae46128c4c5da..54fb3cd841f15e 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainProvider.java @@ -750,9 +750,6 @@ private CcToolchainVariables getBuildVariables( AppleConfiguration appleConfiguration, String cpu) throws EvalException, InterruptedException { - if (!cppConfiguration.enableCcToolchainResolution()) { - return buildVariables; - } // With platforms, cc toolchain is analyzed in the exec configuration, so we can only reuse the // same build variables instance if the inputs to the construction match. PathFragment sysroot = getSysrootPathFragment(cppConfiguration); diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainSuite.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainSuite.java index 99979b81d4cf72..06dd33751cc297 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainSuite.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainSuite.java @@ -17,7 +17,6 @@ import com.google.common.base.Preconditions; import com.google.common.base.Strings; -import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.devtools.build.lib.actions.MutableActionGraph.ActionConflictException; import com.google.devtools.build.lib.analysis.ConfiguredTarget; @@ -34,8 +33,6 @@ import java.util.HashMap; import java.util.Map; import javax.annotation.Nullable; -import net.starlark.java.eval.Starlark; -import net.starlark.java.eval.StarlarkFunction; import net.starlark.java.syntax.Location; /** @@ -77,48 +74,16 @@ public ConfiguredTarget create(RuleContext ruleContext) Label selectedCcToolchain = toolchains.get(key); CcToolchainProvider ccToolchainProvider; - if (CppHelper.useToolchainResolution(ruleContext)) { - // This is a platforms build (and the user requested to build this suite explicitly). - // Cc_toolchains provide CcToolchainInfo already. Let's select the CcToolchainProvider from - // toolchains and provide it here as well. - ccToolchainProvider = - selectCcToolchain( - CcToolchainProvider.PROVIDER, - ruleContext, - transformedCpu, - compiler, - selectedCcToolchain); - } else { - // This is not a platforms build, and cc_toolchain_suite is the one responsible for creating - // and providing CcToolchainInfo. - CcToolchainAttributesProvider selectedAttributes = - selectCcToolchain( - CcToolchainAttributesProvider.PROVIDER, - ruleContext, - transformedCpu, - compiler, - selectedCcToolchain); - StarlarkFunction getCcToolchainProvider = - (StarlarkFunction) ruleContext.getStarlarkDefinedBuiltin("get_cc_toolchain_provider"); - ruleContext.initStarlarkRuleContext(); - Object starlarkCcToolchainProvider = - ruleContext.callStarlarkOrThrowRuleError( - getCcToolchainProvider, - ImmutableList.of( - /* ctx */ ruleContext.getStarlarkRuleContext(), - /* attributes */ selectedAttributes, - /* has_apple_fragment */ true), - ImmutableMap.of()); - ccToolchainProvider = - starlarkCcToolchainProvider != Starlark.NONE - ? (CcToolchainProvider) starlarkCcToolchainProvider - : null; - - if (ccToolchainProvider == null) { - // Skyframe restart - return null; - } - } + // This is a platforms build (and the user requested to build this suite explicitly). + // Cc_toolchains provide CcToolchainInfo already. Let's select the CcToolchainProvider from + // toolchains and provide it here as well. + ccToolchainProvider = + selectCcToolchain( + CcToolchainProvider.PROVIDER, + ruleContext, + transformedCpu, + compiler, + selectedCcToolchain); CcCommon.reportInvalidOptions(ruleContext, cppConfiguration, ccToolchainProvider); diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java index 605bf57e994957..33139e326322b8 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java @@ -292,14 +292,7 @@ public CppConfiguration(BuildOptions options) throws InvalidConfigurationExcepti defaultInToolRepository = true) @Nullable public Label getRuleProvidingCcToolchainProvider() { - if (cppOptions.enableCcToolchainResolution) { - // In case C++ toolchain resolution is enabled, crosstool_top flags are not used. - // Returning null prevents additional work on the flags values and makes it possible to - // remove `--crosstool_top` flags. return null; - } else { - return cppOptions.crosstoolTop; - } } @Nullable @@ -753,20 +746,6 @@ public boolean collectCodeCoverage() { return collectCodeCoverage; } - @StarlarkMethod( - name = "enable_cc_toolchain_resolution", - documented = false, - useStarlarkThread = true) - public boolean enableCcToolchainResolutionForStarlark(StarlarkThread thread) - throws EvalException { - CcModule.checkPrivateStarlarkificationAllowlist(thread); - return enableCcToolchainResolution(); - } - - public boolean enableCcToolchainResolution() { - return cppOptions.enableCcToolchainResolution; - } - public boolean saveFeatureState() { return cppOptions.saveFeatureState; } diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java index a3a5b58e79f2e8..d1e1dbab10b74a 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java @@ -14,10 +14,8 @@ package com.google.devtools.build.lib.rules.cpp; -import static com.google.devtools.build.lib.packages.BuildType.LABEL; import static com.google.devtools.build.lib.packages.BuildType.LABEL_LIST; -import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableCollection; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; @@ -131,45 +129,9 @@ public static ImmutableList getLinkopts(RuleContext ruleContext) return ImmutableList.of(); } - @Nullable - private static CcToolchainProvider getToolchainUsingDefaultCcToolchainAttribute( - RuleContext ruleContext) throws RuleErrorException { - if (ruleContext.attributes().has(CcToolchainRule.CC_TOOLCHAIN_DEFAULT_ATTRIBUTE_NAME)) { - return getToolchainUsingAttribute( - ruleContext, CcToolchainRule.CC_TOOLCHAIN_DEFAULT_ATTRIBUTE_NAME); - } else if (ruleContext - .attributes() - .has(CcToolchainRule.CC_TOOLCHAIN_DEFAULT_ATTRIBUTE_NAME_FOR_STARLARK)) { - return getToolchainUsingAttribute( - ruleContext, CcToolchainRule.CC_TOOLCHAIN_DEFAULT_ATTRIBUTE_NAME_FOR_STARLARK); - } - return null; - } - - private static CcToolchainProvider getToolchainUsingAttribute( - RuleContext ruleContext, String toolchainAttribute) throws RuleErrorException { - if (!ruleContext.isAttrDefined(toolchainAttribute, LABEL)) { - throw ruleContext.throwWithRuleError( - String.format( - "INTERNAL BLAZE ERROR: Tried to locate a cc_toolchain via the attribute %s, but it" - + " is not defined", - toolchainAttribute)); - } - TransitiveInfoCollection dep = ruleContext.getPrerequisite(toolchainAttribute); - return getToolchainFromLegacyToolchain(ruleContext, dep); - } - - /** Returns C++ toolchain, using toolchain resolution or via default cc toolchain attribute */ + /** Returns C++ toolchain, using toolchain resolution */ public static CcToolchainProvider getToolchain(RuleContext ruleContext) throws RuleErrorException { - if (useToolchainResolution(ruleContext)) { - return getToolchainFromPlatformConstraints(ruleContext); - } - return getToolchainUsingDefaultCcToolchainAttribute(ruleContext); - } - - private static CcToolchainProvider getToolchainFromPlatformConstraints(RuleContext ruleContext) - throws RuleErrorException { ToolchainInfo toolchainInfo = ruleContext.getToolchainInfo(Label.parseCanonicalUnchecked("//tools/cpp:toolchain_type")); if (toolchainInfo == null) { @@ -191,15 +153,6 @@ private static CcToolchainProvider getToolchainFromPlatformConstraints(RuleConte } } - private static CcToolchainProvider getToolchainFromLegacyToolchain( - RuleContext ruleContext, TransitiveInfoCollection dep) throws RuleErrorException { - // TODO(bazel-team): Consider checking this generally at the attribute level. - if ((dep == null) || (dep.get(CcToolchainProvider.PROVIDER) == null)) { - throw ruleContext.throwWithRuleError("The selected C++ toolchain is not a cc_toolchain rule"); - } - return dep.get(CcToolchainProvider.PROVIDER); - } - /** Returns the directory where object files are created. */ public static PathFragment getObjDirectory(Label ruleLabel, boolean siblingRepositoryLayout) { return getObjDirectory(ruleLabel, false, siblingRepositoryLayout); @@ -584,12 +537,4 @@ public static boolean useInterfaceSharedLibraries( return toolchain.supportsInterfaceSharedLibraries(featureConfiguration) && cppConfiguration.getUseInterfaceSharedLibraries(); } - - static boolean useToolchainResolution(RuleContext ruleContext) { - CppOptions cppOptions = - Preconditions.checkNotNull( - ruleContext.getConfiguration().getOptions().get(CppOptions.class)); - - return cppOptions.enableCcToolchainResolution; - } } diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java index 9fdaad049e047b..6fe3ae3568862e 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java @@ -108,13 +108,11 @@ public String getTypeDescription() { name = "crosstool_top", defaultValue = "@bazel_tools//tools/cpp:toolchain", converter = LabelConverter.class, - documentationCategory = OptionDocumentationCategory.TOOLCHAIN, + documentationCategory = OptionDocumentationCategory.UNDOCUMENTED, effectTags = { - OptionEffectTag.LOADING_AND_ANALYSIS, - OptionEffectTag.CHANGES_INPUTS, - OptionEffectTag.AFFECTS_OUTPUTS + OptionEffectTag.NO_OP, }, - help = "The label of the crosstool package to be used for compiling C++ code.") + help = "No-op flag. Will be removed in a future release.") public Label crosstoolTop; @Option( @@ -130,9 +128,7 @@ public String getTypeDescription() { defaultValue = "null", documentationCategory = OptionDocumentationCategory.TOOLCHAIN, effectTags = {OptionEffectTag.LOADING_AND_ANALYSIS, OptionEffectTag.EXECUTION}, - help = - "The C++ compiler to use for host compilation. It is ignored if --host_crosstool_top " - + "is not set.") + help = "No-op flag. Will be removed in a future release.") public String hostCppCompiler; // This is different from --platform_suffix in that that one is designed to facilitate the @@ -596,16 +592,9 @@ public Label getMemProfProfileLabel() { name = "host_crosstool_top", defaultValue = "null", converter = LabelConverter.class, - documentationCategory = OptionDocumentationCategory.TOOLCHAIN, - effectTags = { - OptionEffectTag.LOADING_AND_ANALYSIS, - OptionEffectTag.CHANGES_INPUTS, - OptionEffectTag.AFFECTS_OUTPUTS - }, - help = - "By default, the --crosstool_top and --compiler options are also used " - + "for the exec configuration. If this flag is provided, Bazel uses the default libc " - + "and compiler for the given crosstool_top.") + documentationCategory = OptionDocumentationCategory.UNDOCUMENTED, + effectTags = {OptionEffectTag.NO_OP}, + help = "No-op flag. Will be removed in a future release.") public Label hostCrosstoolTop; @Option( @@ -864,8 +853,8 @@ public Label getMemProfProfileLabel() { documentationCategory = OptionDocumentationCategory.UNDOCUMENTED, effectTags = {OptionEffectTag.LOADING_AND_ANALYSIS}, metadataTags = {OptionMetadataTag.INCOMPATIBLE_CHANGE}, - help = "If true, cc rules use toolchain resolution to find the cc_toolchain.") - public boolean enableCcToolchainResolution; + help = "No-op flag. Will be removed in a future release.") + public boolean enableCcToolchainResolutionNoOp; @Option( name = "experimental_save_feature_state", @@ -1090,14 +1079,6 @@ public FragmentOptions getNormalized() { newOptions.targetLibcTopLabel = libcTopLabel; changed = true; } - if (hostCrosstoolTop == null) { - // Default to the initial target crosstoolTop. - newOptions.hostCrosstoolTop = crosstoolTop; - // Reset this, also, to maintain the invariant that host_compiler is ignored if - // host_crosstool_top is unset. - newOptions.hostCppCompiler = cppCompiler; - changed = true; - } if (changed) { return newOptions; } diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoHelper.java index 4967ccf6237ab6..dfd80496b4596b 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoHelper.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoHelper.java @@ -355,13 +355,9 @@ private static Artifact convertLLVMRawProfileToIndexed( // Get the zipper binary for unzipping the profile. Artifact zipperBinaryArtifact = attributes.getZipper(); if (zipperBinaryArtifact == null) { - if (CppHelper.useToolchainResolution(ruleContext)) { - ruleContext.ruleError( - "Zipped profiles are not supported with platforms/toolchains before " - + "toolchain-transitions are implemented."); - } else { - ruleContext.ruleError("Cannot find zipper binary to unzip the profile"); - } + ruleContext.ruleError( + "Zipped profiles are not supported with platforms/toolchains before " + + "toolchain-transitions are implemented."); return null; } @@ -490,13 +486,9 @@ private static Artifact getMemProfProfileArtifact( // Get the zipper binary for unzipping the profile. Artifact zipperBinaryArtifact = attributes.getZipper(); if (zipperBinaryArtifact == null) { - if (CppHelper.useToolchainResolution(ruleContext)) { - ruleContext.ruleError( - "Zipped profiles are not supported with platforms/toolchains before " - + "toolchain-transitions are implemented."); - } else { - ruleContext.ruleError("Cannot find zipper binary to unzip the profile"); - } + ruleContext.ruleError( + "Zipped profiles are not supported with platforms/toolchains before " + + "toolchain-transitions are implemented."); return null; } diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcModuleApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcModuleApi.java index 06cc8fe049d5ff..b3b2b509b57cb2 100755 --- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcModuleApi.java +++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcModuleApi.java @@ -1420,16 +1420,6 @@ CppModuleMapT createCppModuleMap( String legacyCcFlagsMakeVariable(CcToolchainProviderT ccToolchain, StarlarkThread thread) throws EvalException; - @StarlarkMethod( - name = "is_cc_toolchain_resolution_enabled_do_not_use", - documented = false, - parameters = { - @Param(name = "ctx", positional = false, named = true, doc = "The rule context."), - }, - doc = "Returns true if the --incompatible_enable_cc_toolchain_resolution flag is enabled.", - useStarlarkThread = true) - boolean isCcToolchainResolutionEnabled(StarlarkRuleContextT ruleContext, StarlarkThread thread) - throws EvalException; @StarlarkMethod( name = "create_cc_toolchain_config_info", diff --git a/src/main/starlark/builtins_bzl/common/cc/cc_common.bzl b/src/main/starlark/builtins_bzl/common/cc/cc_common.bzl index 43ce9a8aa3c9bb..504a0d87746f16 100644 --- a/src/main/starlark/builtins_bzl/common/cc/cc_common.bzl +++ b/src/main/starlark/builtins_bzl/common/cc/cc_common.bzl @@ -524,7 +524,9 @@ def _legacy_cc_flags_make_variable_do_not_use(*, cc_toolchain): return cc_common_internal.legacy_cc_flags_make_variable_do_not_use(cc_toolchain = cc_toolchain) def _is_cc_toolchain_resolution_enabled_do_not_use(*, ctx): - return cc_common_internal.is_cc_toolchain_resolution_enabled_do_not_use(ctx = ctx) + # Supports public is_cc_toolchain_resolution_enabled_do_not_use + # TODO(b/218795674): remove once uses are cleaned up + return True def _create_cc_toolchain_config_info( *, diff --git a/src/main/starlark/builtins_bzl/common/cc/cc_helper.bzl b/src/main/starlark/builtins_bzl/common/cc/cc_helper.bzl index 05e34b481797c2..68f21fd073f528 100644 --- a/src/main/starlark/builtins_bzl/common/cc/cc_helper.bzl +++ b/src/main/starlark/builtins_bzl/common/cc/cc_helper.bzl @@ -206,28 +206,19 @@ def _find_cpp_toolchain(ctx, *, mandatory = True): optional, mandatory is False and no toolchain has been found. """ - # Check the incompatible flag for toolchain resolution. - if hasattr(cc_common, "is_cc_toolchain_resolution_enabled_do_not_use") and cc_common.is_cc_toolchain_resolution_enabled_do_not_use(ctx = ctx): - if not _CPP_TOOLCHAIN_TYPE in ctx.toolchains: - fail("In order to use find_cpp_toolchain, you must include the '//tools/cpp:toolchain_type' in the toolchains argument to your rule.") - toolchain_info = ctx.toolchains[_CPP_TOOLCHAIN_TYPE] - if toolchain_info == None: - if not mandatory: - return None - - # No cpp toolchain was found, so report an error. - fail("Unable to find a CC toolchain using toolchain resolution. Target: %s, Platform: %s, Exec platform: %s" % - (ctx.label, ctx.fragments.platform.platform, ctx.fragments.platform.host_platform)) - if hasattr(toolchain_info, "cc_provider_in_toolchain") and hasattr(toolchain_info, "cc"): - return toolchain_info.cc - return toolchain_info - - # Otherwise, fall back to the legacy attribute. - if hasattr(ctx.attr, "_cc_toolchain"): - return ctx.attr._cc_toolchain[cc_common.CcToolchainInfo] - - # We didn't find anything. - fail("In order to use find_cpp_toolchain, you must define the '_cc_toolchain' attribute on your rule or aspect.") + if not _CPP_TOOLCHAIN_TYPE in ctx.toolchains: + fail("In order to use find_cpp_toolchain, you must include the '//tools/cpp:toolchain_type' in the toolchains argument to your rule.") + toolchain_info = ctx.toolchains[_CPP_TOOLCHAIN_TYPE] + if toolchain_info == None: + if not mandatory: + return None + + # No cpp toolchain was found, so report an error. + fail("Unable to find a CC toolchain using toolchain resolution. Target: %s, Platform: %s, Exec platform: %s" % + (ctx.label, ctx.fragments.platform.platform, ctx.fragments.platform.host_platform)) + if hasattr(toolchain_info, "cc_provider_in_toolchain") and hasattr(toolchain_info, "cc"): + return toolchain_info.cc + return toolchain_info def _use_cpp_toolchain(mandatory = False): """ diff --git a/src/main/starlark/builtins_bzl/common/cc/cc_toolchain.bzl b/src/main/starlark/builtins_bzl/common/cc/cc_toolchain.bzl index 5c448228ab1c2e..efa78ab29b7f60 100644 --- a/src/main/starlark/builtins_bzl/common/cc/cc_toolchain.bzl +++ b/src/main/starlark/builtins_bzl/common/cc/cc_toolchain.bzl @@ -46,12 +46,7 @@ def _cc_toolchain_impl(ctx): providers = [attributes_provider] if attributes_provider.licenses_provider() != None: providers.append(attributes_provider.licenses_provider()) - if not ctx.fragments.cpp.enable_cc_toolchain_resolution(): - # This is not a platforms-backed build, let's provide CcToolchainAttributesProvider - # and have cc_toolchain_suite select one of its toolchains and create CcToolchainProvider - # from its attributes. We also need to provide a do-nothing ToolchainInfo. - providers.append(ToolchainInfo(cc = "dummy cc toolchain")) - return providers + cc_toolchain = get_cc_toolchain_provider(ctx, attributes_provider, ctx.attr._is_apple) if cc_toolchain == None: fail("This should never happen") diff --git a/src/test/java/com/google/devtools/build/lib/analysis/StarlarkAttrTransitionProviderTest.java b/src/test/java/com/google/devtools/build/lib/analysis/StarlarkAttrTransitionProviderTest.java index 73ed8ebf60749f..81879bfd222097 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/StarlarkAttrTransitionProviderTest.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/StarlarkAttrTransitionProviderTest.java @@ -37,7 +37,6 @@ import com.google.devtools.build.lib.packages.StarlarkProvider; import com.google.devtools.build.lib.packages.StructImpl; import com.google.devtools.build.lib.packages.util.BazelMockAndroidSupport; -import com.google.devtools.build.lib.rules.cpp.CppConfiguration; import com.google.devtools.build.lib.rules.cpp.CppOptions; import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData; import com.google.devtools.build.lib.testutil.TestConstants; @@ -846,45 +845,6 @@ public void testBannedNativeOptionOutput() throws Exception { + "Cannot transition on --experimental_* or --incompatible_* options"); } - @Test - public void testAllowIncompatibleEnableCcToolchainResolution() throws Exception { - scratch.file( - "test/starlark/my_rule.bzl", - "load('//myinfo:myinfo.bzl', 'MyInfo')", - "def transition_func(settings, attr):", - " return {'//command_line_option:incompatible_enable_cc_toolchain_resolution': True}", - "my_transition = transition(implementation = transition_func,", - " inputs = ['//command_line_option:incompatible_enable_cc_toolchain_resolution'], ", - " outputs = ['//command_line_option:incompatible_enable_cc_toolchain_resolution'])", - "def impl(ctx): ", - " return MyInfo(dep = ctx.attr.dep)", - "my_rule = rule(", - " implementation = impl,", - " attrs = {", - " 'dep': attr.label(cfg = my_transition),", - " })"); - - scratch.file( - "test/starlark/BUILD", - "load('//test/starlark:my_rule.bzl', 'my_rule')", - "my_rule(name = 'test', dep = ':main1')", - "genrule(name = 'main1', outs = ['out.txt'], cmd = 'echo true > $@')"); - // Actually using cc_binary instead of genrule would require also mocking up - // platforms-based toolchain resolution as well and this is tested elsewhere. - - ConfiguredTarget target = getConfiguredTarget("//test/starlark:test"); - @SuppressWarnings("unchecked") - List dep = - (List) getMyInfoFromTarget(target).getValue("dep"); - assertThat(dep).hasSize(1); - - assertThat( - getConfiguration(Iterables.getOnlyElement(dep)) - .getFragment(CppConfiguration.class) - .enableCcToolchainResolution()) - .isTrue(); - } - @Test public void testInvalidOutputKey() throws Exception { scratch.file( diff --git a/src/test/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationValueTest.java b/src/test/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationValueTest.java index 6bb2a2ad094c4b..999d3de3aa4fac 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationValueTest.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationValueTest.java @@ -23,7 +23,6 @@ import com.google.devtools.build.lib.analysis.util.ConfigurationTestCase; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.cmdline.RepositoryName; -import com.google.devtools.build.lib.rules.cpp.CppConfiguration; import com.google.devtools.build.lib.rules.objc.J2ObjcConfiguration; import com.google.devtools.build.lib.skyframe.serialization.testutils.SerializationTester; import com.google.devtools.build.lib.vfs.FileSystem; @@ -81,23 +80,6 @@ public void testEnvironment() throws Exception { assertThat(env.get("PATH")).contains("/bin:/usr/bin"); } - @Test - public void testHostCrosstoolTop() throws Exception { - if (analysisMock.isThisBazel()) { - return; - } - - BuildConfigurationValue config = - createConfiguration("--cpu=piii", "--noincompatible_enable_cc_toolchain_resolution"); - assertThat(config.getFragment(CppConfiguration.class).getRuleProvidingCcToolchainProvider()) - .isEqualTo(Label.parseCanonicalUnchecked("//tools/cpp:toolchain")); - - BuildConfigurationValue execConfig = - createExec("--noincompatible_enable_cc_toolchain_resolution"); - assertThat(execConfig.getFragment(CppConfiguration.class).getRuleProvidingCcToolchainProvider()) - .isEqualTo(Label.parseCanonicalUnchecked("//tools/cpp:toolchain")); - } - @Test public void testCaching() { CoreOptions a = Options.getDefaults(CoreOptions.class); diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/BUILD b/src/test/java/com/google/devtools/build/lib/rules/cpp/BUILD index 15459e8ec20e43..82463082a994c7 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/cpp/BUILD +++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/BUILD @@ -341,15 +341,6 @@ java_test( ], ) -java_test( - name = "CcToolchainSuiteTest", - srcs = ["CcToolchainSuiteTest.java"], - deps = [ - "//src/test/java/com/google/devtools/build/lib/analysis/util", - "//third_party:junit4", - ], -) - java_test( name = "CcToolchainTest", srcs = ["CcToolchainTest.java"], @@ -656,7 +647,6 @@ java_test( "//src/main/java/com/google/devtools/build/lib/actions:commandline_item", "//src/main/java/com/google/devtools/build/lib/analysis:analysis_cluster", "//src/main/java/com/google/devtools/build/lib/analysis:configured_target", - "//src/main/java/com/google/devtools/build/lib/analysis:file_provider", "//src/main/java/com/google/devtools/build/lib/cmdline", "//src/main/java/com/google/devtools/build/lib/collect/nestedset", "//src/main/java/com/google/devtools/build/lib/packages", diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainSuiteTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainSuiteTest.java deleted file mode 100644 index 6923c2b4e785d0..00000000000000 --- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainSuiteTest.java +++ /dev/null @@ -1,37 +0,0 @@ -// 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.devtools.build.lib.analysis.util.BuildViewTestCase; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.JUnit4; - -/** - * Unit tests for the {@code cc_toolchain_suite} rule. - */ -@RunWith(JUnit4.class) -public class CcToolchainSuiteTest extends BuildViewTestCase { - - @Test - public void testInvalidCpu() throws Exception { - reporter.removeHandler(failFastHandler); - useConfiguration("--cpu=bogus", "--noincompatible_enable_cc_toolchain_resolution"); - getConfiguredTarget( - ruleClassProvider.getToolsRepository() + "//tools/cpp:current_cc_toolchain"); - assertContainsEvent("does not contain a toolchain for cpu 'bogus'"); - } -} diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/StarlarkCcCommonTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/StarlarkCcCommonTest.java index 0d11a6e44acc7f..64a66e1e8e44a5 100755 --- a/src/test/java/com/google/devtools/build/lib/rules/cpp/StarlarkCcCommonTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/StarlarkCcCommonTest.java @@ -5254,45 +5254,6 @@ public void testGetLegacyCcFlagsMakeVariable() throws Exception { assertThat(ccFlags).isEqualTo("-test-cflag1 -testcflag2"); } - private boolean toolchainResolutionEnabled() throws Exception { - scratch.file( - "a/rule.bzl", - "load('//myinfo:myinfo.bzl', 'MyInfo')", - "def _impl(ctx):", - " toolchain_resolution_enabled = cc_common.is_cc_toolchain_resolution_enabled_do_not_use(", - " ctx = ctx)", - " return [MyInfo(", - " toolchain_resolution_enabled = toolchain_resolution_enabled)]", - "toolchain_resolution_enabled = rule(", - " _impl,", - ");"); - - scratch.file( - "a/BUILD", - "load(':rule.bzl', 'toolchain_resolution_enabled')", - "toolchain_resolution_enabled(name='r')"); - - ConfiguredTarget r = getConfiguredTarget("//a:r"); - // Use an extra variable in order to suppress the warning. - boolean toolchainResolutionEnabled = - (boolean) getMyInfoFromTarget(r).getValue("toolchain_resolution_enabled"); - return toolchainResolutionEnabled; - } - - @Test - public void testIsToolchainResolutionEnabled_disabled() throws Exception { - useConfiguration("--incompatible_enable_cc_toolchain_resolution=false"); - - assertThat(toolchainResolutionEnabled()).isFalse(); - } - - @Test - public void testIsToolchainResolutionEnabled_enabled() throws Exception { - useConfiguration("--incompatible_enable_cc_toolchain_resolution"); - - assertThat(toolchainResolutionEnabled()).isTrue(); - } - @Test public void testWrongExtensionThrowsError() throws Exception { setUpCcLinkingContextTest(false); diff --git a/src/test/java/com/google/devtools/build/lib/view/java/JavaConfigurationTest.java b/src/test/java/com/google/devtools/build/lib/view/java/JavaConfigurationTest.java index f87ff20e1feccb..3152f84f9c4644 100644 --- a/src/test/java/com/google/devtools/build/lib/view/java/JavaConfigurationTest.java +++ b/src/test/java/com/google/devtools/build/lib/view/java/JavaConfigurationTest.java @@ -18,9 +18,7 @@ import com.google.devtools.build.lib.analysis.config.BuildConfigurationValue; import com.google.devtools.build.lib.analysis.util.ConfigurationTestCase; import com.google.devtools.build.lib.cmdline.Label; -import com.google.devtools.build.lib.rules.cpp.CppConfiguration; import com.google.devtools.build.lib.rules.java.JavaConfiguration; -import com.google.devtools.build.lib.testutil.TestConstants; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; @@ -45,21 +43,4 @@ public void testJavaLauncherConfiguration() throws Exception { cfg = config.getFragment(JavaConfiguration.class); assertThat(Label.parseCanonicalUnchecked("//foo:bar")).isEqualTo(cfg.getJavaLauncherLabel()); } - - @Test - public void testHostCrosstoolTop() throws Exception { - BuildConfigurationValue config = - createConfiguration("--noincompatible_enable_cc_toolchain_resolution"); - assertThat(config.getFragment(CppConfiguration.class).getRuleProvidingCcToolchainProvider()) - .isEqualTo( - Label.parseCanonicalUnchecked( - TestConstants.TOOLS_REPOSITORY + "//tools/cpp:toolchain")); - - BuildConfigurationValue execConfig = - createExec("--noincompatible_enable_cc_toolchain_resolution"); - assertThat(execConfig.getFragment(CppConfiguration.class).getRuleProvidingCcToolchainProvider()) - .isEqualTo( - Label.parseCanonicalUnchecked( - TestConstants.TOOLS_REPOSITORY + "//tools/cpp:toolchain")); - } } diff --git a/src/test/py/bazel/bazel_windows_cpp_test.py b/src/test/py/bazel/bazel_windows_cpp_test.py index 1d28826e43769f..e34da3e938fd1a 100644 --- a/src/test/py/bazel/bazel_windows_cpp_test.py +++ b/src/test/py/bazel/bazel_windows_cpp_test.py @@ -744,26 +744,6 @@ def testCppErrorShouldBeVisible(self): self.AssertExitCode(exit_code, 1, stderr) self.assertIn('this_is_an_error', ''.join(stdout)) - def testBuildWithClangClByCompilerFlag(self): - self.CreateWorkspaceWithDefaultRepos('WORKSPACE') - self.ScratchFile('BUILD', [ - 'cc_binary(', - ' name = "main",', - ' srcs = ["main.cc"],', - ')', - ]) - self.ScratchFile('main.cc', [ - 'int main() {', - ' return 0;', - '}', - ]) - exit_code, _, stderr = self.RunBazel([ - 'build', '-s', '--compiler=clang-cl', - '--incompatible_enable_cc_toolchain_resolution=false', '//:main' - ]) - self.AssertExitCode(exit_code, 0, stderr) - self.assertIn('clang-cl.exe', ''.join(stderr)) - def testBuildWithClangClByToolchainResolution(self): self.DisableBzlmod() self.CreateWorkspaceWithDefaultRepos('WORKSPACE', [ @@ -795,10 +775,7 @@ def testBuildWithClangClByToolchainResolution(self): ' return 0;', '}', ]) - exit_code, _, stderr = self.RunBazel([ - 'build', '-s', '--incompatible_enable_cc_toolchain_resolution=true', - '//:main' - ]) + exit_code, _, stderr = self.RunBazel(['build', '-s', '//:main']) self.AssertExitCode(exit_code, 0, stderr) self.assertIn('clang-cl.exe', ''.join(stderr)) @@ -888,6 +865,13 @@ def testCcCompileWithTreeArtifactAsSource(self): def testBuild32BitCppBinaryWithMsvcCL(self): self.CreateWorkspaceWithDefaultRepos('WORKSPACE') self.ScratchFile('BUILD', [ + 'platform(', + ' name = "windows_32",', + ' constraint_values = [', + ' "@platforms//cpu:x86_32",', + ' "@platforms//os:windows",', + ' ]', + ')', 'cc_binary(', ' name = "main",', ' srcs = ["main.cc"],', @@ -898,16 +882,22 @@ def testBuild32BitCppBinaryWithMsvcCL(self): ' return 0;', '}', ]) - exit_code, _, stderr = self.RunBazel([ - 'build', '-s', '--cpu=x64_x86_windows', - '--noincompatible_enable_cc_toolchain_resolution', '//:main' - ]) + exit_code, _, stderr = self.RunBazel( + ['build', '-s', '--platforms=//:windows_32', '//:main'] + ) self.AssertExitCode(exit_code, 0, stderr) self.assertIn('x86\\cl.exe', '\n'.join(stderr)) def testBuildArmCppBinaryWithMsvcCL(self): self.CreateWorkspaceWithDefaultRepos('WORKSPACE') self.ScratchFile('BUILD', [ + 'platform(', + ' name = "windows_arm",', + ' constraint_values = [', + ' "@platforms//cpu:arm",', + ' "@platforms//os:windows",', + ' ]', + ')', 'cc_binary(', ' name = "main",', ' srcs = ["main.cc"],', @@ -918,16 +908,22 @@ def testBuildArmCppBinaryWithMsvcCL(self): ' return 0;', '}', ]) - exit_code, _, stderr = self.RunBazel([ - 'build', '-s', '--cpu=x64_arm_windows', - '--noincompatible_enable_cc_toolchain_resolution', '//:main' - ]) + exit_code, _, stderr = self.RunBazel( + ['build', '-s', '--platforms=//:windows_arm', '//:main'] + ) self.AssertExitCode(exit_code, 0, stderr) self.assertIn('arm\\cl.exe', '\n'.join(stderr)) def testBuildArm64CppBinaryWithMsvcCLAndCpuX64Arm64Windows(self): self.CreateWorkspaceWithDefaultRepos('WORKSPACE') self.ScratchFile('BUILD', [ + 'platform(', + ' name = "windows_arm64",', + ' constraint_values = [', + ' "@platforms//cpu:arm64",', + ' "@platforms//os:windows",', + ' ]', + ')', 'cc_binary(', ' name = "main",', ' srcs = ["main.cc"],', @@ -938,16 +934,23 @@ def testBuildArm64CppBinaryWithMsvcCLAndCpuX64Arm64Windows(self): ' return 0;', '}', ]) - exit_code, _, stderr = self.RunBazel([ - 'build', '-s', '--cpu=x64_arm64_windows', - '--noincompatible_enable_cc_toolchain_resolution', '//:main' - ]) + exit_code, _, stderr = self.RunBazel( + ['build', '-s', '--platforms=//:windows_arm64', '//:main'] + ) self.AssertExitCode(exit_code, 0, stderr) self.assertIn('arm64\\cl.exe', '\n'.join(stderr)) def testBuildCppBinaryWithMingwGCC(self): self.CreateWorkspaceWithDefaultRepos('WORKSPACE') self.ScratchFile('BUILD', [ + 'platform(', + ' name = "x64_windows-mingw-gcc",', + ' constraint_values = [', + ' "@platforms//cpu:x86_64",', + ' "@platforms//os:windows",', + ' "@bazel_tools//tools/cpp:mingw",', + ' ],', + ')', 'cc_binary(', ' name = "main",', ' srcs = ["main.cc"],', @@ -962,7 +965,9 @@ def testBuildCppBinaryWithMingwGCC(self): # Test build without debug and optimize modes. exit_code, _, stderr = self.RunBazel([ 'build', '-s', '--compiler=mingw-gcc', - '--noincompatible_enable_cc_toolchain_resolution', '//:main' + '--extra_toolchains=@local_config_cc//:cc-toolchain-x64_windows_mingw', + '--extra_execution_platforms=//:x64_windows-mingw-gcc', + '//:main', ]) self.AssertExitCode(exit_code, 0, stderr) self.assertIn('mingw64\\bin\\gcc', '\n'.join(stderr)) @@ -974,8 +979,9 @@ def testBuildCppBinaryWithMingwGCC(self): # Test build in debug mode. exit_code, _, stderr = self.RunBazel([ 'build', '-s', '--compiler=mingw-gcc', - '--noincompatible_enable_cc_toolchain_resolution', '-c', 'dbg', - '//:main' + '--extra_toolchains=@local_config_cc//:cc-toolchain-x64_windows_mingw', + '--extra_execution_platforms=//:x64_windows-mingw-gcc', + '-c', 'dbg', '//:main', ]) self.AssertExitCode(exit_code, 0, stderr) self.assertIn('mingw64\\bin\\gcc', '\n'.join(stderr)) @@ -987,8 +993,9 @@ def testBuildCppBinaryWithMingwGCC(self): # Test build in optimize mode. exit_code, _, stderr = self.RunBazel([ 'build', '-s', '--compiler=mingw-gcc', - '--noincompatible_enable_cc_toolchain_resolution', '-c', 'opt', - '//:main' + '--extra_toolchains=@local_config_cc//:cc-toolchain-x64_windows_mingw', + '--extra_execution_platforms=//:x64_windows-mingw-gcc', + '-c', 'opt', '//:main', ]) self.AssertExitCode(exit_code, 0, stderr) self.assertIn('mingw64\\bin\\gcc', '\n'.join(stderr)) @@ -1000,6 +1007,14 @@ def testBuildCppBinaryWithMingwGCC(self): def testBuildCppBinaryWithMsysGCC(self): self.CreateWorkspaceWithDefaultRepos('WORKSPACE') self.ScratchFile('BUILD', [ + 'platform(', + ' name = "x64_windows-msys-gcc",', + ' constraint_values = [', + ' "@platforms//cpu:x86_64",', + ' "@platforms//os:windows",', + ' "@bazel_tools//tools/cpp:msys",', + ' ],', + ')', 'cc_binary(', ' name = "main",', ' srcs = ["main.cc"],', @@ -1017,7 +1032,9 @@ def testBuildCppBinaryWithMsysGCC(self): # Test build without debug and optimize modes. exit_code, _, stderr = self.RunBazel([ 'build', '-s', '--compiler=msys-gcc', - '--noincompatible_enable_cc_toolchain_resolution', '//:main' + '--extra_toolchains=@local_config_cc//:cc-toolchain-x64_windows_msys', + '--extra_execution_platforms=//:x64_windows-msys-gcc', + '//:main', ]) self.AssertExitCode(exit_code, 0, stderr) self.assertIn('usr\\bin\\gcc', '\n'.join(stderr)) @@ -1031,8 +1048,9 @@ def testBuildCppBinaryWithMsysGCC(self): # Test build in debug mode. exit_code, _, stderr = self.RunBazel([ 'build', '-s', '--compiler=msys-gcc', - '--noincompatible_enable_cc_toolchain_resolution', '-c', 'dbg', - '//:main' + '--extra_toolchains=@local_config_cc//:cc-toolchain-x64_windows_msys', + '--extra_execution_platforms=//:x64_windows-msys-gcc', + '-c', 'dbg', '//:main', ]) self.AssertExitCode(exit_code, 0, stderr) self.assertIn('usr\\bin\\gcc', '\n'.join(stderr)) @@ -1045,8 +1063,9 @@ def testBuildCppBinaryWithMsysGCC(self): # Test build in optimize mode. exit_code, _, stderr = self.RunBazel([ 'build', '-s', '--compiler=msys-gcc', - '--noincompatible_enable_cc_toolchain_resolution', '-c', 'opt', - '//:main' + '--extra_toolchains=@local_config_cc//:cc-toolchain-x64_windows_msys', + '--extra_execution_platforms=//:x64_windows-msys-gcc', + '-c', 'opt', '//:main', ]) self.AssertExitCode(exit_code, 0, stderr) self.assertIn('usr\\bin\\gcc', '\n'.join(stderr)) @@ -1059,6 +1078,13 @@ def testBuildCppBinaryWithMsysGCC(self): def testBuildArm64CppBinaryWithMsvcCLAndCpuArm64Windows(self): self.CreateWorkspaceWithDefaultRepos('WORKSPACE') self.ScratchFile('BUILD', [ + 'platform(', + ' name = "windows_arm64",', + ' constraint_values = [', + ' "@platforms//cpu:arm64",', + ' "@platforms//os:windows",', + ' ]', + ')', 'cc_binary(', ' name = "main",', ' srcs = ["main.cc"],', @@ -1069,10 +1095,9 @@ def testBuildArm64CppBinaryWithMsvcCLAndCpuArm64Windows(self): ' return 0;', '}', ]) - exit_code, _, stderr = self.RunBazel([ - 'build', '-s', '--cpu=arm64_windows', - '--noincompatible_enable_cc_toolchain_resolution', '//:main' - ]) + exit_code, _, stderr = self.RunBazel( + ['build', '-s', '--platforms=//:windows_arm64', '//:main'] + ) self.AssertExitCode(exit_code, 0, stderr) self.assertIn('arm64\\cl.exe', ''.join(stderr)) @@ -1102,12 +1127,17 @@ def testCompilerSettingMsvc(self): self.ScratchFile( 'BUILD', [ + 'platform(', + ' name = "x64_windows-msvc",', + ' constraint_values = [', + ' "@platforms//cpu:x86_64",', + ' "@platforms//os:windows",', + ' "@bazel_tools//tools/cpp:msvc",', + ' ],', + ')', 'config_setting(', - ' name = "msvc_compiler",', - ( - ' flag_values = {"@bazel_tools//tools/cpp:compiler":' - ' "msvc-cl"},' - ), + ' name = "msvc_compiler",', + ' flag_values = {"@bazel_tools//tools/cpp:compiler": "msvc-cl"},', ')', 'cc_binary(', ' name = "main",', @@ -1117,7 +1147,12 @@ def testCompilerSettingMsvc(self): ) self.ScratchFile('main.cc', ['int main() { return 0; }']) - exit_code, _, stderr = self.RunBazel(['build', '//:main']) + exit_code, _, stderr = self.RunBazel([ + 'build', + '--extra_toolchains=@local_config_cc//:cc-toolchain-x64_windows-clang-cl', + '--extra_execution_platforms=//:x64_windows-msvc', + '//:main', + ]) self.AssertExitCode(exit_code, 0, stderr) def testCompilerSettingClangCl(self): @@ -1134,11 +1169,8 @@ def testCompilerSettingClangCl(self): ' ],', ')', 'config_setting(', - ' name = "clang_cl_compiler",', - ( - ' flag_values = {"@bazel_tools//tools/cpp:compiler":' - ' "clang-cl"},' - ), + ' name = "clang_cl_compiler",', + ' flag_values = {"@bazel_tools//tools/cpp:compiler": "clang-cl"},', ')', 'cc_binary(', ' name = "main",', @@ -1150,7 +1182,6 @@ def testCompilerSettingClangCl(self): exit_code, _, stderr = self.RunBazel([ 'build', - '--incompatible_enable_cc_toolchain_resolution', '--extra_toolchains=@local_config_cc//:cc-toolchain-x64_windows-clang-cl', '--extra_execution_platforms=//:x64_windows-clang-cl', '//:main', @@ -1171,11 +1202,8 @@ def testCompilerSettingMingwGcc(self): ' ],', ')', 'config_setting(', - ' name = "mingw_gcc_compiler",', - ( - ' flag_values = {"@bazel_tools//tools/cpp:compiler":' - ' "mingw-gcc"},' - ), + ' name = "mingw_gcc_compiler",', + ' flag_values = {"@bazel_tools//tools/cpp:compiler": "mingw-gcc"},', ')', 'cc_binary(', ' name = "main",', @@ -1187,7 +1215,6 @@ def testCompilerSettingMingwGcc(self): exit_code, _, stderr = self.RunBazel([ 'build', - '--incompatible_enable_cc_toolchain_resolution', '--extra_toolchains=@local_config_cc//:cc-toolchain-x64_windows_mingw', '--extra_execution_platforms=//:x64_windows-mingw-gcc', '//:main', diff --git a/src/test/py/bazel/bazel_windows_test.py b/src/test/py/bazel/bazel_windows_test.py index f7a5eb5e308cc5..fdfa31fcbda9f0 100644 --- a/src/test/py/bazel/bazel_windows_test.py +++ b/src/test/py/bazel/bazel_windows_test.py @@ -21,10 +21,20 @@ class BazelWindowsTest(test_base.TestBase): def createProjectFiles(self): self.CreateWorkspaceWithDefaultRepos('WORKSPACE') - self.ScratchFile('foo/BUILD', ['cc_binary(name="x", srcs=["x.cc"])']) + self.ScratchFile('foo/BUILD', [ + 'platform(', + ' name = "x64_windows-msys-gcc",', + ' constraint_values = [', + ' "@platforms//cpu:x86_64",', + ' "@platforms//os:windows",', + ' "@bazel_tools//tools/cpp:msys",', + ' ],', + ')', + 'cc_binary(name="x", srcs=["x.cc"])', + ]) self.ScratchFile('foo/x.cc', [ '#include ', - 'int main(int, char**) {' + 'int main(int, char**) {', ' printf("hello\\n");', ' return 0;', '}', @@ -39,16 +49,22 @@ def testWindowsUnixRoot(self): '--host_jvm_args=-Dbazel.windows_unix_root=', 'build', '//foo:x', - '--cpu=x64_windows_msys', - '--noincompatible_enable_cc_toolchain_resolution', + '--extra_toolchains=@local_config_cc//:cc-toolchain-x64_windows_msys', + '--extra_execution_platforms=//foo:x64_windows-msys-gcc', ], allow_failure=True, ) self.AssertExitCode(exit_code, 37, stderr) - self.assertIn('"bazel.windows_unix_root" JVM flag is not set', - '\n'.join(stderr)) + self.assertIn( + '"bazel.windows_unix_root" JVM flag is not set', '\n'.join(stderr) + ) - self.RunBazel(['--batch', 'build', '//foo:x', '--cpu=x64_windows_msys']) + self.RunBazel([ + '--batch', 'build', + '--extra_toolchains=@local_config_cc//:cc-toolchain-x64_windows_msys', + '--extra_execution_platforms=//foo:x64_windows-msys-gcc', + '//foo:x', + ]) def testWindowsParameterFile(self): self.createProjectFiles() diff --git a/src/test/py/bazel/test_base.py b/src/test/py/bazel/test_base.py index a9362e9f73b5b3..9f8e7cb4d517f4 100644 --- a/src/test/py/bazel/test_base.py +++ b/src/test/py/bazel/test_base.py @@ -209,12 +209,18 @@ def AssertFileContentNotContains(self, file_path, entry): self.fail('File "%s" does contain "%s"' % (file_path, entry)) def CreateWorkspaceWithDefaultRepos(self, path, lines=None): + """Creates a `WORKSPACE` file with default repos and register C++ toolchains.""" rule_definition = [ 'load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")' ] rule_definition.extend(self.GetDefaultRepoRules()) if lines: rule_definition.extend(lines) + rule_definition.extend([ + 'register_toolchains(', + ' "@local_config_cc//:all",', + ')', + ]) self.ScratchFile(path, rule_definition) def GetDefaultRepoRules(self): diff --git a/src/test/shell/bazel/android/android_ndk_integration_test.sh b/src/test/shell/bazel/android/android_ndk_integration_test.sh index 6eda46cbfac091..dc1731d657833e 100755 --- a/src/test/shell/bazel/android/android_ndk_integration_test.sh +++ b/src/test/shell/bazel/android/android_ndk_integration_test.sh @@ -40,6 +40,8 @@ source "${CURRENT_DIR}/../../integration_test_setup.sh" \ resolve_android_toolchains +add_to_bazelrc "build --extra_toolchains=@androidndk//:all" + function create_android_binary() { mkdir -p java/bazel cat > java/bazel/BUILD < BUILD < foo.cc < -#include -#include -#include -#include - -using namespace std; -int main(){ - string foo = "foo"; - string bar = "bar"; - string foobar = foo + bar; - return 0; -} -EOF - assert_build //:foo \ - --noincompatible_enable_cc_toolchain_resolution \ - --cpu=armeabi-v7a \ - --crosstool_top=@androidndk//:toolchain-stlport \ - --host_crosstool_top=@bazel_tools//tools/cpp:toolchain - - assert_build //:foo \ - --noincompatible_enable_cc_toolchain_resolution \ - --features=compiler_param_file \ - --cpu=armeabi-v7a \ - --crosstool_top=@androidndk//:toolchain-stlport \ - --host_crosstool_top=@bazel_tools//tools/cpp:toolchain -} - function test_crosstool_libcpp() { create_new_workspace setup_android_sdk_support @@ -475,45 +417,6 @@ EOF --host_crosstool_top=@bazel_tools//tools/cpp:toolchain } -function test_crosstool_gnu_libstdcpp() { - create_new_workspace - setup_android_sdk_support - setup_android_ndk_support - cat > BUILD < foo.cc < -#include -#include -#include -#include - -using namespace std; -int main(){ - string foo = "foo"; - string bar = "bar"; - string foobar = foo + bar; - return 0; -} -EOF - assert_build //:foo \ - --noincompatible_enable_cc_toolchain_resolution \ - --cpu=armeabi-v7a \ - --crosstool_top=@androidndk//:toolchain-gnu-libstdcpp \ - --host_crosstool_top=@bazel_tools//tools/cpp:toolchain - - assert_build //:foo \ - --noincompatible_enable_cc_toolchain_resolution \ - --features=compiler_param_file \ - --cpu=armeabi-v7a \ - --crosstool_top=@androidndk//:toolchain-gnu-libstdcpp \ - --host_crosstool_top=@bazel_tools//tools/cpp:toolchain -} - function test_platforms_and_toolchains() { create_new_workspace setup_android_sdk_support @@ -524,12 +427,6 @@ cc_binary( srcs = ["foo.cc"], linkopts = ["-ldl", "-lm"], ) - -platform( - name = 'android_arm', - constraint_values = ['@platforms//cpu:armv7', '@platforms//os:android'], - visibility = ['//visibility:public'] -) EOF cat > foo.cc < @@ -549,49 +446,13 @@ EOF assert_build //:foo \ --cpu=armeabi-v7a \ --crosstool_top=@androidndk//:toolchain-libcpp \ - --host_crosstool_top=@bazel_tools//tools/cpp:toolchain \ - --platforms=//:android_arm \ - --extra_toolchains=@androidndk//:all + --host_crosstool_top=@bazel_tools//tools/cpp:toolchain assert_build //:foo \ --features=compiler_param_file \ --cpu=armeabi-v7a \ --crosstool_top=@androidndk//:toolchain-libcpp \ - --host_crosstool_top=@bazel_tools//tools/cpp:toolchain \ - --platforms=//:android_arm \ - --extra_toolchains=@androidndk//:all -} - -function test_crosstool_libcpp_with_multiarch() { - create_new_workspace - setup_android_sdk_support - setup_android_ndk_support - create_android_binary - - # TODO(b/161709111): enable platform-based toolchain resolution when - # --fat_apk_cpu fully supports it. Now it sets a split transition that clears - # out --platforms. The mapping in android_helper.sh re-enables a test Android - # platform for ARM but not x86. Enabling it for x86 requires an - # Android-compatible cc toolchain in tools/cpp/BUILD.tools. - add_to_bazelrc "build --noincompatible_enable_android_toolchain_resolution" - - cpus="armeabi,armeabi-v7a,arm64-v8a,x86,x86_64" - - assert_build //java/bazel:bin \ - --noincompatible_enable_cc_toolchain_resolution \ - --fat_apk_cpu="$cpus" \ - --android_crosstool_top=@androidndk//:toolchain-libcpp \ --host_crosstool_top=@bazel_tools//tools/cpp:toolchain - - assert_build //java/bazel:bin \ - --noincompatible_enable_cc_toolchain_resolution \ - --features=compiler_param_file \ - --fat_apk_cpu="$cpus" \ - --android_crosstool_top=@androidndk//:toolchain-libcpp \ - --host_crosstool_top=@bazel_tools//tools/cpp:toolchain - - check_num_sos - check_soname } run_suite "Android NDK integration tests" diff --git a/src/test/shell/bazel/bazel_windows_example_test.sh b/src/test/shell/bazel/bazel_windows_example_test.sh index 8c0cad4c366edd..c53e8891b91b5a 100755 --- a/src/test/shell/bazel/bazel_windows_example_test.sh +++ b/src/test/shell/bazel/bazel_windows_example_test.sh @@ -75,6 +75,25 @@ function set_up() { setup_bazelrc export MSYS_NO_PATHCONV=1 export MSYS2_ARG_CONV_EXCL="*" + mkdir platforms + cat >platforms/BUILD <& $TEST_log \ @@ -138,24 +159,29 @@ function test_cpp_with_mingw_gcc() { export PATH="/mingw64/bin:$PATH" assert_build_output \ ./bazel-bin/${cpp_pkg}/libhello-lib.a ${cpp_pkg}:hello-world \ - --noincompatible_enable_cc_toolchain_resolution \ + --extra_toolchains=@local_config_cc//:cc-toolchain-x64_windows_mingw \ + --extra_execution_platforms=//platforms:x64_windows-mingw-gcc \ --compiler=mingw-gcc --experimental_strict_action_env assert_build_output \ ./bazel-bin/${cpp_pkg}/libhello-lib_fbaaaedd.so ${cpp_pkg}:hello-lib\ - --noincompatible_enable_cc_toolchain_resolution \ + --extra_toolchains=@local_config_cc//:cc-toolchain-x64_windows_mingw \ + --extra_execution_platforms=//platforms:x64_windows-mingw-gcc \ --compiler=mingw-gcc --output_groups=dynamic_library \ --experimental_strict_action_env assert_build ${cpp_pkg}:hello-world --compiler=mingw-gcc \ - --noincompatible_enable_cc_toolchain_resolution \ + --extra_toolchains=@local_config_cc//:cc-toolchain-x64_windows_mingw \ + --extra_execution_platforms=//platforms:x64_windows-mingw-gcc \ --experimental_strict_action_env ./bazel-bin/${cpp_pkg}/hello-world foo >& $TEST_log \ || fail "./bazel-bin/${cpp_pkg}/hello-world foo execution failed" expect_log "Hello foo" assert_test_ok "//examples/cpp:hello-success_test" --compiler=mingw-gcc \ - --noincompatible_enable_cc_toolchain_resolution \ + --extra_toolchains=@local_config_cc//:cc-toolchain-x64_windows_mingw \ + --extra_execution_platforms=//platforms:x64_windows-mingw-gcc \ --experimental_strict_action_env --test_env=PATH assert_test_fails "//examples/cpp:hello-fail_test" --compiler=mingw-gcc \ - --noincompatible_enable_cc_toolchain_resolution \ + --extra_toolchains=@local_config_cc//:cc-toolchain-x64_windows_mingw \ + --extra_execution_platforms=//platforms:x64_windows-mingw-gcc \ --experimental_strict_action_env --test_env=PATH) } diff --git a/src/test/shell/integration/cpp_test.sh b/src/test/shell/integration/cpp_test.sh index 387424e566be8c..28076f1d9a2622 100755 --- a/src/test/shell/integration/cpp_test.sh +++ b/src/test/shell/integration/cpp_test.sh @@ -156,224 +156,4 @@ EOF expect_not_log "Compiling $pkg/a.cc" } -# host_crosstool_top should default to the initial value of crosstool_top, -# not the value after a transition. -function test_default_host_crosstool_top() { - local -r pkg=$FUNCNAME - - # Define two different toolchain suites to use with crosstool_top. - mkdir -p $pkg/toolchain - cat >> $pkg/toolchain/BUILD <> $pkg/toolchain/toolchain.bzl <inner dependency changes the value of crosstool_top, - # the tool should use the initial crosstool. - cat >> $pkg/BUILD <> $pkg/display.bzl <& $TEST_log || fail "build failed" - expect_log "Outer @//$pkg:outer found cc toolchain toolchain-alpha" - expect_log "Inner @//$pkg:inner found cc toolchain toolchain-beta" - expect_log "Tool @//$pkg:tool found cc toolchain toolchain-alpha" -} - run_suite "Tests for Bazel's C++ rules" diff --git a/src/test/shell/testenv.sh.tmpl b/src/test/shell/testenv.sh.tmpl index 6574a8018112cd..6db1a9997ce196 100755 --- a/src/test/shell/testenv.sh.tmpl +++ b/src/test/shell/testenv.sh.tmpl @@ -409,6 +409,51 @@ android_ndk_repository( name = "androidndk", path = "$ANDROID_NDK", ) +EOF + mkdir -p test_android_platforms + cat > test_android_platforms/BUILD < test_android_platforms/mappings <