Skip to content

Commit 7a9a2f8

Browse files
buildbreaker2021copybara-github
authored andcommitted
Add a partial Starlark implementation of common.copts_filter.
Variable expansion and some checks will be done in Starlark, however CoptsFilter constructor will be exposed to construct an object which is then passed to CcCompilationHelper. PiperOrigin-RevId: 507725876 Change-Id: Ifae7fc54db6e9ea20b1c11b0b47f8ffb078e7456
1 parent 39c7bd5 commit 7a9a2f8

File tree

8 files changed

+41
-8
lines changed

8 files changed

+41
-8
lines changed

src/main/java/com/google/devtools/build/lib/rules/cpp/BUILD

-3
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,6 @@ java_library(
6666
"//src/main/java/com/google/devtools/build/lib/analysis:make_variable_supplier",
6767
"//src/main/java/com/google/devtools/build/lib/analysis:package_specification_provider",
6868
"//src/main/java/com/google/devtools/build/lib/analysis:platform_configuration",
69-
"//src/main/java/com/google/devtools/build/lib/analysis:resolved_toolchain_context",
7069
"//src/main/java/com/google/devtools/build/lib/analysis:rule_definition_environment",
7170
"//src/main/java/com/google/devtools/build/lib/analysis:starlark/args",
7271
"//src/main/java/com/google/devtools/build/lib/analysis:starlark/starlark_api_provider",
@@ -95,14 +94,12 @@ java_library(
9594
"//src/main/java/com/google/devtools/build/lib/rules/apple",
9695
"//src/main/java/com/google/devtools/build/lib/shell",
9796
"//src/main/java/com/google/devtools/build/lib/skyframe:action_execution_value",
98-
"//src/main/java/com/google/devtools/build/lib/skyframe:configured_target_and_data",
9997
"//src/main/java/com/google/devtools/build/lib/skyframe:tree_artifact_value",
10098
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec",
10199
"//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec:serialization-constant",
102100
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi",
103101
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core",
104102
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp",
105-
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/go",
106103
"//src/main/java/com/google/devtools/build/lib/starlarkbuildapi/platform",
107104
"//src/main/java/com/google/devtools/build/lib/util",
108105
"//src/main/java/com/google/devtools/build/lib/util:detailed_exit_code",

src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -436,7 +436,7 @@ public ImmutableMap<String, String> getAllMakeVariables() throws ExpansionExcept
436436
}
437437

438438
/** A filter that removes copts from a c++ compile action according to a nocopts regex. */
439-
public static final class CoptsFilter implements StarlarkValue {
439+
public static final class CoptsFilter {
440440
private final Pattern noCoptsPattern;
441441
private final boolean allPasses;
442442

@@ -469,7 +469,6 @@ public boolean passesFilter(String flag) {
469469
}
470470

471471
/** Returns copts filter built from the make variable expanded nocopts attribute. */
472-
@StarlarkMethod(name = "copts_filter", structField = true, documented = false)
473472
public CoptsFilter getCoptsFilter() {
474473
return getCoptsFilter(ruleContext);
475474
}

src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java

+15-1
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,8 @@
8484
import com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig.CToolchain;
8585
import com.google.errorprone.annotations.FormatMethod;
8686
import java.util.List;
87+
import java.util.regex.Pattern;
88+
import java.util.regex.PatternSyntaxException;
8789
import javax.annotation.Nullable;
8890
import net.starlark.java.annot.Param;
8991
import net.starlark.java.annot.ParamType;
@@ -2280,6 +2282,7 @@ private static boolean checkObjectsBound(Object... objects) {
22802282
documented = false,
22812283
positional = false,
22822284
named = true,
2285+
allowedTypes = {@ParamType(type = String.class), @ParamType(type = NoneType.class)},
22832286
defaultValue = "unbound"),
22842287
@Param(
22852288
name = "separate_module_headers",
@@ -2376,7 +2379,18 @@ public Tuple compile(
23762379
ImmutableList<CppModuleMap> additionalModuleMaps =
23772380
asClassImmutableList(additionalModuleMapsNoneable);
23782381

2379-
CoptsFilter coptsFilter = convertFromNoneable(coptsFilterObject, /* defaultValue= */ null);
2382+
String coptsFilterRegex = convertFromNoneable(coptsFilterObject, /* defaultValue= */ null);
2383+
CoptsFilter coptsFilter = null;
2384+
if (Strings.isNullOrEmpty(coptsFilterRegex)) {
2385+
coptsFilter = CoptsFilter.alwaysPasses();
2386+
} else {
2387+
try {
2388+
coptsFilter = CoptsFilter.fromRegex(Pattern.compile(coptsFilterRegex));
2389+
} catch (PatternSyntaxException e) {
2390+
throw Starlark.errorf(
2391+
"invalid regular expression '%s': %s", coptsFilterRegex, e.getMessage());
2392+
}
2393+
}
23802394

23812395
Object textualHeadersObject =
23822396
asClassImmutableListOrNestedSet(

src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java

+6
Original file line numberDiff line numberDiff line change
@@ -786,6 +786,12 @@ public boolean disableNoCopts() {
786786
return cppOptions.disableNoCopts;
787787
}
788788

789+
@Override
790+
public boolean disableNocoptsStarlark(StarlarkThread thread) throws EvalException {
791+
CcModule.checkPrivateStarlarkificationAllowlist(thread);
792+
return disableNoCopts();
793+
}
794+
789795
public boolean loadCcRulesFromBzl() {
790796
return cppOptions.loadCcRulesFromBzl;
791797
}

src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/CppConfigurationApi.java

+3
Original file line numberDiff line numberDiff line change
@@ -203,4 +203,7 @@ boolean fissionActiveForCurrentCompilationModeStarlark(StarlarkThread thread)
203203

204204
@StarlarkMethod(name = "share_native_deps", documented = false, useStarlarkThread = true)
205205
boolean shareNativeDepsStarlark(StarlarkThread thread) throws EvalException;
206+
207+
@StarlarkMethod(name = "disable_nocopts", documented = false, useStarlarkThread = true)
208+
boolean disableNocoptsStarlark(StarlarkThread thread) throws EvalException;
206209
}

src/main/starlark/builtins_bzl/common/cc/cc_binary.bzl

+1-1
Original file line numberDiff line numberDiff line change
@@ -651,7 +651,7 @@ def cc_binary_impl(ctx, additional_linkopts):
651651
system_includes = cc_helper.system_include_dirs(ctx, additional_make_variable_substitutions),
652652
private_hdrs = cc_helper.get_private_hdrs(ctx),
653653
public_hdrs = cc_helper.get_public_hdrs(ctx),
654-
copts_filter = common.copts_filter,
654+
copts_filter = cc_helper.copts_filter(ctx, additional_make_variable_substitutions),
655655
srcs = cc_helper.get_srcs(ctx),
656656
compilation_contexts = compilation_context_deps,
657657
grep_includes = cc_helper.grep_includes_executable(ctx.attr._grep_includes),

src/main/starlark/builtins_bzl/common/cc/cc_helper.bzl

+14
Original file line numberDiff line numberDiff line change
@@ -1193,6 +1193,19 @@ def _linker_scripts(ctx):
11931193
result.append(f)
11941194
return result
11951195

1196+
def _copts_filter(ctx, additional_make_variable_substitutions):
1197+
nocopts = getattr(ctx.attr, "nocopts", None)
1198+
1199+
if nocopts == None or len(nocopts) == 0:
1200+
return nocopts
1201+
1202+
# Check if nocopts is disabled.
1203+
if ctx.fragments.cpp.disable_nocopts():
1204+
fail("This attribute was removed. See https://github.com/bazelbuild/bazel/issues/8706 for details.", attr = "nocopts")
1205+
1206+
# Expand nocopts and create CoptsFilter.
1207+
return _expand(ctx, nocopts, additional_make_variable_substitutions)
1208+
11961209
cc_helper = struct(
11971210
merge_cc_debug_contexts = _merge_cc_debug_contexts,
11981211
is_code_coverage_enabled = _is_code_coverage_enabled,
@@ -1252,4 +1265,5 @@ cc_helper = struct(
12521265
defines = _defines,
12531266
local_defines = _local_defines,
12541267
linker_scripts = _linker_scripts,
1268+
copts_filter = _copts_filter,
12551269
)

src/main/starlark/builtins_bzl/common/cc/cc_library.bzl

+1-1
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ def _cc_library_impl(ctx):
5858
local_defines = cc_helper.local_defines(ctx, additional_make_variable_substitutions) + cc_helper.get_local_defines_for_runfiles_lookup(ctx),
5959
loose_includes = common.loose_include_dirs,
6060
system_includes = cc_helper.system_include_dirs(ctx, additional_make_variable_substitutions),
61-
copts_filter = common.copts_filter,
61+
copts_filter = cc_helper.copts_filter(ctx, additional_make_variable_substitutions),
6262
purpose = "cc_library-compile",
6363
srcs = cc_helper.get_srcs(ctx),
6464
private_hdrs = cc_helper.get_private_hdrs(ctx),

0 commit comments

Comments
 (0)