From 2da8e84f979b4ce35fc78eda62642a565f34821d Mon Sep 17 00:00:00 2001 From: Googler Date: Wed, 14 Jul 2021 07:43:17 -0700 Subject: [PATCH] Allow Starlark to access dynamic_runtime_solib_dir from cc_toolchain PiperOrigin-RevId: 384696688 --- .../lib/rules/cpp/CcToolchainProvider.java | 22 ++++-------- .../cpp/CcToolchainProviderApi.java | 4 +-- .../lib/rules/cpp/StarlarkCcCommonTest.java | 36 ++++++++++++++++++- 3 files changed, 43 insertions(+), 19 deletions(-) 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 3ab062a0b4f2f9..2462ce1250ef73 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 @@ -405,11 +405,9 @@ public PathFragment getToolPathFragmentOrNull(CppConfiguration.Tool tool) { return CcToolchainProviderHelper.getToolPathFragment(toolPaths, tool); } - @Override public ImmutableList getBuiltInIncludeDirectoriesAsStrings() { - return builtInIncludeDirectories - .stream() + return builtInIncludeDirectories.stream() .map(PathFragment::getSafePathString) .collect(ImmutableList.toImmutableList()); } @@ -599,8 +597,7 @@ public PathFragment getDynamicRuntimeSolibDir() { } @Override - public String getDynamicRuntimeSolibDirForStarlark(StarlarkThread thread) throws EvalException { - CcModule.checkPrivateStarlarkificationAllowlist(thread); + public String getDynamicRuntimeSolibDirForStarlark() { return getDynamicRuntimeSolibDir().getPathString(); } @@ -614,16 +611,12 @@ public CcInfo getCcInfo() { return ccInfo; } - /** - * Whether the toolchains supports parameter files. - */ + /** Whether the toolchains supports parameter files. */ public boolean supportsParamFiles() { return supportsParamFiles; } - - /** - * Returns the configured features of the toolchain. - */ + + /** Returns the configured features of the toolchain. */ @Nullable public CcToolchainFeatures getFeatures() { return toolchainFeatures; @@ -731,9 +724,7 @@ public Artifact getLinkDynamicLibraryTool() { return linkDynamicLibraryTool; } - /** - * Returns the tool that builds interface libraries from dynamic libraries. - */ + /** Returns the tool that builds interface libraries from dynamic libraries. */ public Artifact getInterfaceSoBuilder() { return interfaceSoBuilder; } @@ -946,4 +937,3 @@ public PackageSpecificationProvider getAllowlistForLooseHeaderCheck() { return allowListForLooseHeaderCheck; } } - diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcToolchainProviderApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcToolchainProviderApi.java index 2a83c5509e837e..58eaa88e0775eb 100644 --- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcToolchainProviderApi.java +++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CcToolchainProviderApi.java @@ -169,8 +169,8 @@ String getToolPathStringOrNoneForStarlark(String tool, StarlarkThread thread) @StarlarkMethod(name = "solib_dir", documented = false, useStarlarkThread = true) String getSolibDirectoryForStarlark(StarlarkThread thread) throws EvalException; - @StarlarkMethod(name = "dynamic_runtime_solib_dir", documented = false, useStarlarkThread = true) - String getDynamicRuntimeSolibDirForStarlark(StarlarkThread thread) throws EvalException; + @StarlarkMethod(name = "dynamic_runtime_solib_dir", documented = false, structField = true) + String getDynamicRuntimeSolibDirForStarlark() throws EvalException; @StarlarkMethod(name = "linker_files", documented = false, useStarlarkThread = true) Depset getLinkerFilesForStarlark(StarlarkThread thread) throws EvalException; 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 d55736de2cd4e9..5076dfc6ec1519 100644 --- 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 @@ -197,6 +197,41 @@ public void testRuntimeLib() throws Exception { .isEqualTo(toolchain.getDynamicRuntimeLibForTesting()); } + @Test + public void testGetDynamicRuntimeSolibDir() throws Exception { + scratch.file( + "a/BUILD", + "load(':rule.bzl', 'crule')", + "cc_toolchain_alias(name='alias')", + "crule(name='r')"); + + scratch.file( + "a/rule.bzl", + "load('//myinfo:myinfo.bzl', 'MyInfo')", + "def _impl(ctx):", + " toolchain = ctx.attr._cc_toolchain[cc_common.CcToolchainInfo]", + " return [MyInfo(", + " dynamic_runtime_solib_dir = toolchain.dynamic_runtime_solib_dir,", + " )]", + "crule = rule(", + " _impl,", + " attrs = { ", + " '_cc_toolchain': attr.label(default=Label('//a:alias'))", + " },", + " fragments = ['cpp'],", + ");"); + + ConfiguredTarget r = getConfiguredTarget("//a:r"); + String dynamicRuntimeSolibDir = + (String) getMyInfoFromTarget(r).getValue("dynamic_runtime_solib_dir"); + + RuleContext ruleContext = getRuleContext(r); + CcToolchainProvider toolchain = + CppHelper.getToolchain(ruleContext, ruleContext.getPrerequisite("$cc_toolchain")); + + assertThat(dynamicRuntimeSolibDir).isEqualTo(toolchain.getDynamicRuntimeSolibDirForStarlark()); + } + @Test public void testGetToolForAction() throws Exception { scratch.file( @@ -6897,7 +6932,6 @@ public void testExpandedToolchainApiBlocked() throws Exception { "toolchain.objcopy_files()", "toolchain.tool_path(tool='ld')", "toolchain.solib_dir()", - "toolchain.dynamic_runtime_solib_dir()", "toolchain.linker_files()", "toolchain.coverage_files()", "toolchain.strip_files()");