in src/main/java/com/google/devtools/build/lib/starlarkbuildapi/cpp/BazelCcModuleApi.java [348:589]
Tuple compile(
StarlarkActionFactoryT starlarkActionFactoryApi,
FeatureConfigurationT starlarkFeatureConfiguration,
CcToolchainProviderT starlarkCcToolchainProvider,
Sequence<?> sources, // <FileT> or Tuple<FileT,Label> expected
Sequence<?> publicHeaders, // <FileT> or Tuple<FileT,Label> expected
Sequence<?> privateHeaders, // <FileT> or Tuple<FileT,Label> expected
Object textualHeaders,
Object additionalExportedHeaders,
Sequence<?> includes, // <String> expected
Object starlarkLooseIncludes,
Sequence<?> quoteIncludes, // <String> expected
Sequence<?> systemIncludes, // <String> expected
Sequence<?> frameworkIncludes, // <String> expected
Sequence<?> defines, // <String> expected
Sequence<?> localDefines, // <String> expected
String includePrefix,
String stripIncludePrefix,
Sequence<?> userCompileFlags, // <String> expected
Sequence<?> ccCompilationContexts, // <CompilationContextT> expected
Object implementationCcCompilationContexts,
String name,
boolean disallowPicOutputs,
boolean disallowNopicOutputs,
Sequence<?> additionalInputs, // <FileT> expected
Object moduleMap,
Object additionalModuleMaps,
Object propagateModuleMapToCompileAction,
Object doNotGenerateModuleMap,
Object codeCoverageEnabled,
Object hdrsCheckingMode,
Object variablesExtension,
Object language,
Object purpose,
Object grepIncludes,
Object coptsFilter,
StarlarkThread thread)
throws EvalException, InterruptedException;
@StarlarkMethod(
name = "link",
doc = "Should be used for C++ transitive linking.",
useStarlarkThread = true,
parameters = {
@Param(
name = "actions",
positional = false,
named = true,
doc = "<code>actions</code> object."),
@Param(
name = "feature_configuration",
doc = "<code>feature_configuration</code> to be queried.",
positional = false,
named = true),
@Param(
name = "cc_toolchain",
doc = "<code>CcToolchainInfo</code> provider to be used.",
positional = false,
named = true),
@Param(
name = "compilation_outputs",
doc = "Compilation outputs containing object files to link.",
positional = false,
named = true,
defaultValue = "None",
allowedTypes = {
@ParamType(type = CcCompilationOutputsApi.class),
@ParamType(type = NoneType.class)
}),
@Param(
name = "user_link_flags",
doc = "Additional list of linker options.",
positional = false,
named = true,
defaultValue = "[]"),
@Param(
name = "linking_contexts",
doc =
"Linking contexts from dependencies to be linked into the linking context "
+ "generated by this rule.",
positional = false,
named = true,
defaultValue = "[]"),
@Param(
name = "name",
doc =
"This is used for naming the output artifacts of actions created by this "
+ "method.",
positional = false,
named = true),
@Param(
name = "language",
doc = "Only C++ supported for now. Do not use this parameter.",
positional = false,
named = true,
defaultValue = "'c++'"),
@Param(
name = "output_type",
doc = "Can be either 'executable' or 'dynamic_library'.",
positional = false,
named = true,
defaultValue = "'executable'"),
@Param(
name = "link_deps_statically",
doc = " True to link dependencies statically, False dynamically.",
positional = false,
named = true,
defaultValue = "True"),
@Param(
name = "stamp",
doc =
"Whether to include build information in the linked executable, if output_type is "
+ "'executable'. If 1, build information is always included. If 0 (the "
+ "default build information is always excluded. If -1, uses the default "
+ "behavior, which may be overridden by the --[no]stamp flag. This should be "
+ "unset (or set to 0) when generating the executable output for test rules.",
positional = false,
named = true,
defaultValue = "0"),
@Param(
name = "additional_inputs",
doc = "For additional inputs to the linking action, e.g.: linking scripts.",
positional = false,
named = true,
defaultValue = "[]",
allowedTypes = {
@ParamType(type = Sequence.class),
@ParamType(type = Depset.class),
}),
@Param(
name = "grep_includes",
positional = false,
named = true,
defaultValue = "None",
allowedTypes = {
@ParamType(type = FileApi.class),
@ParamType(type = NoneType.class),
}),
@Param(
name = "link_artifact_name_suffix",
positional = false,
named = true,
documented = false,
allowedTypes = {@ParamType(type = String.class)},
defaultValue = "unbound"),
@Param(
name = "never_link",
positional = false,
named = true,
documented = false,
allowedTypes = {@ParamType(type = Boolean.class)},
defaultValue = "unbound"),
@Param(
name = "always_link",
positional = false,
named = true,
documented = false,
allowedTypes = {@ParamType(type = Boolean.class)},
defaultValue = "unbound"),
@Param(
name = "test_only_target",
positional = false,
named = true,
documented = false,
allowedTypes = {@ParamType(type = Boolean.class)},
defaultValue = "unbound"),
@Param(
name = "variables_extension",
positional = false,
named = true,
documented = false,
allowedTypes = {@ParamType(type = Dict.class)},
defaultValue = "unbound"),
@Param(
name = "native_deps",
positional = false,
named = true,
documented = false,
allowedTypes = {@ParamType(type = Boolean.class)},
defaultValue = "unbound"),
@Param(
name = "whole_archive",
positional = false,
named = true,
documented = false,
allowedTypes = {@ParamType(type = Boolean.class)},
defaultValue = "unbound"),
@Param(
name = "additional_linkstamp_defines",
positional = false,
named = true,
documented = false,
allowedTypes = {@ParamType(type = Sequence.class, generic1 = String.class)},
defaultValue = "unbound"),
@Param(
name = "only_for_dynamic_libs",
positional = false,
named = true,
documented = false,
allowedTypes = {@ParamType(type = Boolean.class)},
defaultValue = "unbound"),
@Param(
name = "main_output",
doc =
"Name of the main output artifact that will be produced by the linker. "
+ "Only set this if the default name generation does not match you needs "
+ "For output_type=executable, this is the final executable filename. "
+ "For output_type=dynamic_library, this is the shared library filename. "
+ "If not specified, then one will be computed based on `name` and "
+ "`output_type`",
positional = false,
named = true,
documented = false,
defaultValue = "unbound",
allowedTypes = {@ParamType(type = FileApi.class), @ParamType(type = NoneType.class)}),
@Param(
name = "additional_outputs",
doc = "For additional outputs to the linking action, e.g.: map files.",
positional = false,
named = true,
allowedTypes = {@ParamType(type = Sequence.class)},
defaultValue = "unbound"),
@Param(
name = "use_test_only_flags",
documented = false,
positional = false,
named = true,
allowedTypes = {@ParamType(type = Boolean.class)},
defaultValue = "unbound"),
@Param(
name = "pdb_file",
documented = false,
positional = false,
named = true,
defaultValue = "unbound"),
@Param(
name = "win_def_file",
documented = false,
positional = false,
named = true,
defaultValue = "unbound"),
})