Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,7 @@ public void finalizeCompileActionBuilder(
.setShouldScanIncludes(
cppConfig.experimentalIncludeScanning()
&& featureConfiguration.getRequestedFeatures().contains("cc_include_scanning")
&& !actionBuilder.getActionName().equals(CppActionNames.CPP_MODULE_DEPS_SCANNING)
&& !sourceFile.isFileType(CppFileTypes.ASSEMBLER)
&& !sourceFile.isFileType(CppFileTypes.CPP_MODULE));
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,7 @@ public enum ArtifactCategory {
SERIALIZED_DIAGNOSTICS_FILE("", ".dia"),
OBJECT_FILE("", ".o", ".obj"),
PIC_OBJECT_FILE("", ".pic.o"),
CPP_MODULE("", ".pcm"),
CPP_MODULE_GCM("", ".gcm"),
CPP_MODULE_IFC("", ".ifc"),
CPP_MODULE("", ".pcm", ".gcm", ".ifc"),
CPP_MODULES_INFO("", ".CXXModules.json"),
CPP_MODULES_DDI("", ".ddi"),
CPP_MODULES_MODMAP("", ".modmap"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,10 @@ public final class CcCompilationContext implements CcCompilationContextApi<Artif
HeaderInfo.EMPTY,
/* transitiveModules= */ NestedSetBuilder.emptySet(Order.STABLE_ORDER),
/* transitivePicModules= */ NestedSetBuilder.emptySet(Order.STABLE_ORDER),
/* moduleFiles= */ NestedSetBuilder.emptySet(Order.STABLE_ORDER),
/* picModuleFiles= */ NestedSetBuilder.emptySet(Order.STABLE_ORDER),
/* modulesInfoFiles= */ NestedSetBuilder.emptySet(Order.STABLE_ORDER),
/* picModulesInfoFiles= */ NestedSetBuilder.emptySet(Order.STABLE_ORDER),
/* directModuleMaps= */ ImmutableList.of(),
/* exportingModuleMaps= */ ImmutableList.of(),
/* cppModuleMap= */ null,
Expand All @@ -97,6 +101,11 @@ public final class CcCompilationContext implements CcCompilationContextApi<Artif
private final NestedSet<Artifact> transitiveModules;
private final NestedSet<Artifact> transitivePicModules;

private final NestedSet<Artifact> moduleFiles;
private final NestedSet<Artifact> picModuleFiles;
private final NestedSet<Artifact> modulesInfoFiles;
private final NestedSet<Artifact> picModulesInfoFiles;

private final CppModuleMap cppModuleMap;

// Derived from depsContexts.
Expand Down Expand Up @@ -126,6 +135,10 @@ private CcCompilationContext(
HeaderInfo headerInfo,
NestedSet<Artifact> transitiveModules,
NestedSet<Artifact> transitivePicModules,
NestedSet<Artifact> moduleFiles,
NestedSet<Artifact> picModuleFiles,
NestedSet<Artifact> modulesInfoFiles,
NestedSet<Artifact> picModulesInfoFiles,
ImmutableList<Artifact> directModuleMaps,
ImmutableList<CppModuleMap> exportingModuleMaps,
CppModuleMap cppModuleMap,
Expand All @@ -139,6 +152,10 @@ private CcCompilationContext(
this.headerInfo = headerInfo;
this.transitiveModules = transitiveModules;
this.transitivePicModules = transitivePicModules;
this.moduleFiles = moduleFiles;
this.picModuleFiles = picModuleFiles;
this.modulesInfoFiles = modulesInfoFiles;
this.picModulesInfoFiles = picModulesInfoFiles;
this.cppModuleMap = cppModuleMap;
this.nonCodeInputs = nonCodeInputs;
this.virtualToOriginalHeaders = virtualToOriginalHeaders;
Expand All @@ -153,6 +170,10 @@ public static CcCompilationContext create(
HeaderInfo headerInfo,
NestedSet<Artifact> transitiveModules,
NestedSet<Artifact> transitivePicModules,
NestedSet<Artifact> moduleFiles,
NestedSet<Artifact> picModuleFiles,
NestedSet<Artifact> modulesInfoFiles,
NestedSet<Artifact> picModulesInfoFiles,
ImmutableList<Artifact> directModuleMaps,
ImmutableList<CppModuleMap> exportingModuleMaps,
CppModuleMap cppModuleMap,
Expand All @@ -165,6 +186,10 @@ public static CcCompilationContext create(
headerInfo,
transitiveModules,
transitivePicModules,
moduleFiles,
picModuleFiles,
modulesInfoFiles,
picModulesInfoFiles,
directModuleMaps,
exportingModuleMaps,
cppModuleMap,
Expand Down Expand Up @@ -196,6 +221,10 @@ public static CcCompilationContext createAndMerge(
NestedSetBuilder<Artifact> nonCodeInputs = NestedSetBuilder.stableOrder();
NestedSetBuilder<Artifact> transitiveModules = NestedSetBuilder.stableOrder();
NestedSetBuilder<Artifact> transitivePicModules = NestedSetBuilder.stableOrder();
NestedSetBuilder<Artifact> moduleFiles = NestedSetBuilder.stableOrder();
NestedSetBuilder<Artifact> picModuleFiles = NestedSetBuilder.stableOrder();
NestedSetBuilder<Artifact> modulesInfoFiles = NestedSetBuilder.stableOrder();
NestedSetBuilder<Artifact> picModulesInfoFiles = NestedSetBuilder.stableOrder();
Set<Artifact> directModuleMaps = new LinkedHashSet<>();
Set<CppModuleMap> exportingModuleMaps = new LinkedHashSet<>();
NestedSetBuilder<Tuple> virtualToOriginalHeaders = NestedSetBuilder.stableOrder();
Expand Down Expand Up @@ -231,6 +260,10 @@ public static CcCompilationContext createAndMerge(
addIfNotNull(transitiveModules, otherCcCompilationContext.getHeaderInfo().getModule(false));
addIfNotNull(
transitiveModules, otherCcCompilationContext.getHeaderInfo().getSeparateModule(false));
moduleFiles.addTransitive(otherCcCompilationContext.getModuleFiles(false));
picModuleFiles.addTransitive(otherCcCompilationContext.getModuleFiles(true));
modulesInfoFiles.addTransitive(otherCcCompilationContext.getModulesInfoFiles(false));
picModulesInfoFiles.addTransitive(otherCcCompilationContext.getModulesInfoFiles(true));

transitivePicModules.addTransitive(otherCcCompilationContext.getTransitiveModules(true));
addIfNotNull(transitivePicModules, otherCcCompilationContext.getHeaderInfo().getModule(true));
Expand Down Expand Up @@ -299,6 +332,10 @@ public static CcCompilationContext createAndMerge(
headerInfo,
transitiveModules.build(),
transitivePicModules.build(),
moduleFiles.build(),
picModuleFiles.build(),
modulesInfoFiles.build(),
picModulesInfoFiles.build(),
ImmutableList.copyOf(directModuleMaps),
ImmutableList.copyOf(exportingModuleMaps),
single.getCppModuleMap(),
Expand Down Expand Up @@ -727,6 +764,34 @@ public NestedSet<Artifact> getTransitiveModules(boolean usePic) {
return usePic ? transitivePicModules : transitiveModules;
}

public NestedSet<Artifact> getModuleFiles(boolean usePic) {
return usePic ? picModuleFiles : moduleFiles;
}

public NestedSet<Artifact> getModulesInfoFiles(boolean usePic) {
return usePic ? picModulesInfoFiles : modulesInfoFiles;
}

@Override
public Depset getStarlarkModulesInfoFiles() {
return Depset.of(Artifact.class, getModulesInfoFiles(false));
}

@Override
public Depset getStarlarkPicModulesInfoFiles() {
return Depset.of(Artifact.class, getModulesInfoFiles(true));
}

@Override
public Depset getStarlarkModuleFiles() {
return Depset.of(Artifact.class, getModuleFiles(false));
}

@Override
public Depset getStarlarkPicModuleFiles() {
return Depset.of(Artifact.class, getModuleFiles(true));
}

@Override
public Depset getStarlarkTransitiveModules() {
return Depset.of(Artifact.class, getTransitiveModules(false));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -275,6 +275,10 @@ public CcCompilationContext createCcCompilationContext(
headerInfo,
/* transitiveModules= */ NestedSetBuilder.emptySet(Order.STABLE_ORDER),
/* transitivePicModules= */ NestedSetBuilder.emptySet(Order.STABLE_ORDER),
/* moduleFiles= */ NestedSetBuilder.emptySet(Order.STABLE_ORDER),
/* picModuleFiles= */ NestedSetBuilder.emptySet(Order.STABLE_ORDER),
/* modulesInfoFiles= */ NestedSetBuilder.emptySet(Order.STABLE_ORDER),
/* picModulesInfoFiles= */ NestedSetBuilder.emptySet(Order.STABLE_ORDER),
/* directModuleMaps= */ ImmutableList.of(),
/* exportingModuleMaps= */ ImmutableList.of(),
moduleMap instanceof CppModuleMap cppModuleMap ? cppModuleMap : null,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@
import com.google.devtools.build.lib.starlarkbuildapi.NativeComputedDefaultApi;
import com.google.devtools.build.lib.vfs.PathFragment;
import java.util.Objects;
import java.util.Map;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
import javax.annotation.Nullable;
Expand Down Expand Up @@ -482,7 +483,84 @@ public ImmutableList<String> collectPerFileLtoBackendOpts(
.flatMap(options -> options.stream())
.collect(toImmutableList());
}

/**
* Returns a {@code CcCompilationContext} that is based on a given {@code CcCompilationContext},
* with C++20 Module files and Modules info files in {@code ccOutputs} added.
*/
@StarlarkMethod(
name = "create_cc_compilation_context_with_cpp20_modules",
doc =
"Creates a <code>CompilationContext</code> based on an existing one, with C++20 Modules outputs",
parameters = {
@Param(
name = "cc_compilation_context",
doc = "The base <code>CompilationContext</code>.",
positional = false,
named = true),
@Param(
name = "cpp_module_files",
doc = "C++20 Module files",
positional = false,
named = true),
@Param(
name = "pic_cpp_module_files",
doc = "PIC C++20 Module files",
positional = false,
named = true),
@Param(
name = "cpp_modules_info_file",
doc = "C++20 Modules info file",
positional = false,
named = true,
allowedTypes = {@ParamType(type = Artifact.class), @ParamType(type = NoneType.class)}),
@Param(
name = "pic_cpp_modules_info_file",
doc = "PIC C++20 Modules info file",
positional = false,
named = true,
allowedTypes = {@ParamType(type = Artifact.class), @ParamType(type = NoneType.class)}),
})
public CcCompilationContext createCcCompilationContextWithCpp20Modules(
CcCompilationContext ccCompilationContext,
Sequence<?> cppModuleFiles,
Sequence<?> picCppModuleFiles,
Object cppModulesInfoFile,
Object picCppModulesInfoFile
)
throws EvalException {
var moduleFilesBuilder =
NestedSetBuilder.fromNestedSet(ccCompilationContext.getModuleFiles(/*pic= */false))
.addAll(Sequence.cast(cppModuleFiles, Artifact.class, "cpp_module_files").getImmutableList());
var picModuleFilesBuilder =
NestedSetBuilder.fromNestedSet(ccCompilationContext.getModuleFiles(/*pic= */true))
.addAll(Sequence.cast(picCppModuleFiles, Artifact.class, "pic_cpp_module_files").getImmutableList());
var modulesInfoFilesBuilder =
NestedSetBuilder.fromNestedSet(ccCompilationContext.getModulesInfoFiles(/*pic= */false));
if (cppModulesInfoFile instanceof Artifact artifact) {
modulesInfoFilesBuilder.add(artifact);
}
var picModulesInfoFilesBuilder =
NestedSetBuilder.fromNestedSet(ccCompilationContext.getModulesInfoFiles(/*pic= */true));
if (picCppModulesInfoFile instanceof Artifact artifact) {
picModulesInfoFilesBuilder.add(artifact);
}
return CcCompilationContext.create(
ccCompilationContext.getCommandLineCcCompilationContext(),
ccCompilationContext.getDeclaredIncludeSrcs(),
ccCompilationContext.getNonCodeInputs(),
ccCompilationContext.getHeaderInfo(),
ccCompilationContext.getTransitiveModules(false),
ccCompilationContext.getTransitiveModules(true),
moduleFilesBuilder.build(),
picModuleFilesBuilder.build(),
modulesInfoFilesBuilder.build(),
picModulesInfoFilesBuilder.build(),
ccCompilationContext.getDirectModuleMaps(),
ccCompilationContext.getExportingModuleMaps(),
ccCompilationContext.getCppModuleMap(),
ccCompilationContext.getVirtualToOriginalHeaders(),
ccCompilationContext.getHeaderTokens());
}
/**
* Returns a {@code CcCompilationContext} that is based on a given {@code CcCompilationContext},
* with {@code extraHeaderTokens} added to the header tokens.
Expand Down Expand Up @@ -519,6 +597,10 @@ public CcCompilationContext createCcCompilationContextWithExtraHeaderTokens(
ccCompilationContext.getHeaderInfo(),
ccCompilationContext.getTransitiveModules(false),
ccCompilationContext.getTransitiveModules(true),
ccCompilationContext.getModuleFiles(false),
ccCompilationContext.getModuleFiles(true),
ccCompilationContext.getModulesInfoFiles(false),
ccCompilationContext.getModulesInfoFiles(true),
ccCompilationContext.getDirectModuleMaps(),
ccCompilationContext.getExportingModuleMaps(),
ccCompilationContext.getCppModuleMap(),
Expand Down Expand Up @@ -629,6 +711,20 @@ public String computeOutputNamePrefixDir(BuildConfigurationValue configuration,
@Param(name = "lto_indexing_file", positional = false, named = true, defaultValue = "None"),
@Param(name = "use_pic", positional = false, named = true, defaultValue = "False"),
@Param(name = "compile_build_variables", positional = false, named = true),
@Param(
name = "action_name",
positional = false,
named = true,
allowedTypes = {@ParamType(type = String.class), @ParamType(type = NoneType.class)},
defaultValue = "None"),
@Param(name = "module_files", positional = false, named = true, defaultValue = "None"),
@Param(name = "modmap_file", positional = false, named = true, defaultValue = "None"),
@Param(name = "modmap_input_file", positional = false, named = true, defaultValue = "None"),
@Param(
name = "additional_outputs",
positional = false,
named = true,
defaultValue = "[]"),
})
public void createCppCompileAction(
StarlarkRuleContext starlarkRuleContext,
Expand All @@ -648,7 +744,13 @@ public void createCppCompileAction(
Object dwoFile,
Object ltoIndexingFile,
boolean usePic,
CcToolchainVariables compileBuildVariables)
CcToolchainVariables compileBuildVariables,
Object actionName,
Object moduleFiles,
Object modmapFile,
Object modmapInputFile,
Sequence<?> additionalOutputs
)
throws EvalException {
CppCompileActionBuilder builder =
createCppCompileActionBuilder(
Expand All @@ -670,6 +772,17 @@ public void createCppCompileAction(
ltoIndexingFile,
usePic);
builder.setVariables(compileBuildVariables);
if (actionName instanceof String actionNameString) {
builder.setActionName(actionNameString);
}
builder.setModuleFiles(Depset.noneableCast(moduleFiles, Artifact.class, "module_files"));
builder.setModmapFile(nullIfNone(modmapFile, Artifact.class));
builder.setModmapInputFile(nullIfNone(modmapInputFile, Artifact.class));
builder.setAdditionalOutputs(Sequence.cast(
additionalOutputs,
Artifact.class,
"additional_outputs"
).getImmutableList());
semantics.finalizeCompileActionBuilder(
configuration, featureConfigurationForStarlark.getFeatureConfiguration(), builder);
try {
Expand Down
Loading
Loading