From 4e030844e16696f466cfc9fe928a323a440afead Mon Sep 17 00:00:00 2001 From: PikachuHy Date: Fri, 14 Jun 2024 14:44:51 +0800 Subject: [PATCH] refactor createSourceAction --- .../lib/rules/cpp/CcCompilationHelper.java | 234 +++++++++--------- 1 file changed, 117 insertions(+), 117 deletions(-) diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java index 74dbb15a36ea63..500b821e98b9c7 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java @@ -1503,8 +1503,7 @@ private ImmutableList createModuleAction( /* bitcodeOutput= */ false); } - @CanIgnoreReturnValue - private ImmutableList createSourceAction( + private Artifact createSourceActionHelper( Label sourceLabel, String outputName, CcCompilationOutputs.Builder result, @@ -1515,67 +1514,60 @@ private ImmutableList createSourceAction( boolean addObject, boolean enableCoverage, boolean generateDwo, - boolean bitcodeOutput) + boolean bitcodeOutput, + PathFragment ccRelativeName, + boolean usePic, + ImmutableMap additionalBuildVariables) throws RuleErrorException, EvalException, InterruptedException { - ImmutableList.Builder directOutputs = new ImmutableList.Builder<>(); - PathFragment ccRelativeName = sourceArtifact.getRootRelativePath(); + Artifact outputFile = builder.getOutputFile(); + builder.setOutputs( + actionConstructionContext, ruleErrorConsumer, label, outputCategory, outputName); + String gcnoFileName = + CppHelper.getArtifactNameForCategory( + ccToolchain, ArtifactCategory.COVERAGE_DATA_FILE, outputName); - // Create PIC compile actions (same as no-PIC, but use -fPIC and - // generate .pic.o, .pic.d, .pic.gcno instead of .o, .d, .gcno.) - if (generatePicAction) { - String picOutputBase = - CppHelper.getArtifactNameForCategory(ccToolchain, ArtifactCategory.PIC_FILE, outputName); - CppCompileActionBuilder picBuilder = copyAsPicBuilder(builder, picOutputBase, outputCategory); - String gcnoFileName = - CppHelper.getArtifactNameForCategory( - ccToolchain, ArtifactCategory.COVERAGE_DATA_FILE, picOutputBase); - Artifact gcnoFile = - enableCoverage && !cppConfiguration.useLLVMCoverageMapFormat() - ? CppHelper.getCompileOutputArtifact( - actionConstructionContext, label, gcnoFileName, configuration) - : null; - Artifact dwoFile = - generateDwo && !bitcodeOutput ? getDwoFile(picBuilder.getOutputFile()) : null; - Artifact ltoIndexingFile = - bitcodeOutput ? getLtoIndexingFile(picBuilder.getOutputFile()) : null; - - picBuilder.setVariables( - setupCompileBuildVariables( - picBuilder, - sourceLabel, - /* usePic= */ true, - /* needsFdoBuildVariables= */ ccRelativeName != null && addObject, - cppModuleMap, - enableCoverage, - gcnoFile, - generateDwo, - dwoFile, - ltoIndexingFile, - /* additionalBuildVariables= */ ImmutableMap.of())); + Artifact gcnoFile = + enableCoverage && !cppConfiguration.useLLVMCoverageMapFormat() + ? CppHelper.getCompileOutputArtifact( + actionConstructionContext, label, gcnoFileName, configuration) + : null; - result.addTemps( - createTempsActions( - sourceArtifact, - sourceLabel, - outputName, - picBuilder, - /* usePic= */ true, - ccRelativeName)); + Artifact dwoFile = generateDwo && !bitcodeOutput ? getDwoFile(outputFile) : null; + Artifact ltoIndexingFile = bitcodeOutput ? getLtoIndexingFile(builder.getOutputFile()) : null; - picBuilder.setGcnoFile(gcnoFile); - picBuilder.setDwoFile(dwoFile); - picBuilder.setLtoIndexingFile(ltoIndexingFile); + builder.setVariables( + setupCompileBuildVariables( + builder, + sourceLabel, + usePic, + /* needsFdoBuildVariables= */ ccRelativeName != null, + cppModuleMap, + enableCoverage, + gcnoFile, + generateDwo, + dwoFile, + ltoIndexingFile, + additionalBuildVariables)); + + result.addTemps( + createTempsActions( + sourceArtifact, sourceLabel, outputName, builder, usePic, ccRelativeName)); + + builder.setGcnoFile(gcnoFile); + builder.setDwoFile(dwoFile); + builder.setLtoIndexingFile(ltoIndexingFile); - semantics.finalizeCompileActionBuilder(configuration, featureConfiguration, picBuilder); - CppCompileAction picAction = picBuilder.buildOrThrowRuleError(ruleErrorConsumer); - actionConstructionContext.registerAction(picAction); - directOutputs.add(picAction.getPrimaryOutput()); + semantics.finalizeCompileActionBuilder(configuration, featureConfiguration, builder); + CppCompileAction compileAction = builder.buildOrThrowRuleError(ruleErrorConsumer); + actionConstructionContext.registerAction(compileAction); + Artifact objectFile = compileAction.getPrimaryOutput(); + if (usePic) { if (addObject) { - result.addPicObjectFile(picAction.getPrimaryOutput()); + result.addPicObjectFile(objectFile); if (bitcodeOutput) { result.addLtoBitcodeFile( - picAction.getPrimaryOutput(), ltoIndexingFile, getCopts(sourceArtifact, sourceLabel)); + objectFile, ltoIndexingFile, getCopts(sourceArtifact, sourceLabel)); } } if (dwoFile != null) { @@ -1585,66 +1577,7 @@ private ImmutableList createSourceAction( if (gcnoFile != null) { result.addPicGcnoFile(gcnoFile); } - if (outputCategory == ArtifactCategory.CPP_MODULE) { - result.addModuleFile(picAction.getPrimaryOutput()); - } - } - - if (generateNoPicAction) { - Artifact noPicOutputFile = - CppHelper.getCompileOutputArtifact( - actionConstructionContext, - label, - CppHelper.getArtifactNameForCategory(ccToolchain, outputCategory, outputName), - configuration); - builder.setOutputs( - actionConstructionContext, ruleErrorConsumer, label, outputCategory, outputName); - String gcnoFileName = - CppHelper.getArtifactNameForCategory( - ccToolchain, ArtifactCategory.COVERAGE_DATA_FILE, outputName); - - // Create no-PIC compile actions - Artifact gcnoFile = - enableCoverage && !cppConfiguration.useLLVMCoverageMapFormat() - ? CppHelper.getCompileOutputArtifact( - actionConstructionContext, label, gcnoFileName, configuration) - : null; - - Artifact noPicDwoFile = generateDwo && !bitcodeOutput ? getDwoFile(noPicOutputFile) : null; - Artifact ltoIndexingFile = bitcodeOutput ? getLtoIndexingFile(builder.getOutputFile()) : null; - - builder.setVariables( - setupCompileBuildVariables( - builder, - sourceLabel, - /* usePic= */ false, - /* needsFdoBuildVariables= */ ccRelativeName != null, - cppModuleMap, - enableCoverage, - gcnoFile, - generateDwo, - noPicDwoFile, - ltoIndexingFile, - /* additionalBuildVariables= */ ImmutableMap.of())); - - result.addTemps( - createTempsActions( - sourceArtifact, - sourceLabel, - outputName, - builder, - /* usePic= */ false, - ccRelativeName)); - - builder.setGcnoFile(gcnoFile); - builder.setDwoFile(noPicDwoFile); - builder.setLtoIndexingFile(ltoIndexingFile); - - semantics.finalizeCompileActionBuilder(configuration, featureConfiguration, builder); - CppCompileAction compileAction = builder.buildOrThrowRuleError(ruleErrorConsumer); - actionConstructionContext.registerAction(compileAction); - Artifact objectFile = compileAction.getPrimaryOutput(); - directOutputs.add(objectFile); + } else { if (addObject) { result.addObjectFile(objectFile); if (bitcodeOutput) { @@ -1652,15 +1585,82 @@ private ImmutableList createSourceAction( objectFile, ltoIndexingFile, getCopts(sourceArtifact, sourceLabel)); } } - if (noPicDwoFile != null) { + if (dwoFile != null) { // Exec configuration targets don't produce .dwo files. - result.addDwoFile(noPicDwoFile); + result.addDwoFile(dwoFile); } if (gcnoFile != null) { result.addGcnoFile(gcnoFile); } + } + return objectFile; + } + + @CanIgnoreReturnValue + private ImmutableList createSourceAction( + Label sourceLabel, + String outputName, + CcCompilationOutputs.Builder result, + Artifact sourceArtifact, + CppCompileActionBuilder builder, + ArtifactCategory outputCategory, + CppModuleMap cppModuleMap, + boolean addObject, + boolean enableCoverage, + boolean generateDwo, + boolean bitcodeOutput) + throws RuleErrorException, EvalException, InterruptedException { + ImmutableList.Builder directOutputs = new ImmutableList.Builder<>(); + PathFragment ccRelativeName = sourceArtifact.getRootRelativePath(); + + // Create PIC compile actions (same as no-PIC, but use -fPIC and + // generate .pic.o, .pic.d, .pic.gcno instead of .o, .d, .gcno.) + if (generatePicAction) { + String picOutputBase = + CppHelper.getArtifactNameForCategory(ccToolchain, ArtifactCategory.PIC_FILE, outputName); + CppCompileActionBuilder picBuilder = copyAsPicBuilder(builder, picOutputBase, outputCategory); + Artifact picOutputFile = + createSourceActionHelper( + sourceLabel, + picOutputBase, + result, + sourceArtifact, + picBuilder, + outputCategory, + cppModuleMap, + addObject, + enableCoverage, + generateDwo, + bitcodeOutput, + ccRelativeName, + /* usePic= */ true, + /* additionalBuildVariables= */ ImmutableMap.of()); + directOutputs.add(picOutputFile); + if (outputCategory == ArtifactCategory.CPP_MODULE) { + result.addModuleFile(picOutputFile); + } + } + + if (generateNoPicAction) { + Artifact noPicOutputFile = + createSourceActionHelper( + sourceLabel, + outputName, + result, + sourceArtifact, + builder, + outputCategory, + cppModuleMap, + addObject, + enableCoverage, + generateDwo, + bitcodeOutput, + ccRelativeName, + /* usePic= */ false, + /* additionalBuildVariables= */ ImmutableMap.of()); + directOutputs.add(noPicOutputFile); if (outputCategory == ArtifactCategory.CPP_MODULE) { - result.addModuleFile(compileAction.getPrimaryOutput()); + result.addModuleFile(noPicOutputFile); } } return directOutputs.build();