aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java
diff options
context:
space:
mode:
authorGravatar cpeyser <cpeyser@google.com>2017-11-22 13:26:12 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2017-11-22 13:28:21 -0800
commit6c91871f49e966128f18e2986449b4c19939c14e (patch)
tree16e2b533619d12695ab42a6ea6417e2f8ccd56ba /src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java
parentfa484fd91ed3421d9685bdfe2a9851681bbcaa4f (diff)
Move CppConfiguration's treatment of pic, --start-lib/--end-lib, and fission to
CppHelper. In CppHelper, CcToolchainProvider and CppConfiguration are used sepereately, allowing toolchain information to be removed from CppConfiguration. This is necessary to introduce hermetic toolchains, which require that toolchain information be seperated from the configuration, into the c++ rules. PiperOrigin-RevId: 176694160
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java87
1 files changed, 20 insertions, 67 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java
index 30dbdd976f..7341b84a88 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java
@@ -222,8 +222,6 @@ public class CppConfiguration extends BuildConfiguration.Fragment {
private final boolean convertLipoToThinLto;
private final PathFragment crosstoolTopPathFragment;
- private final boolean usePicForBinaries;
-
private final Path fdoZip;
// TODO(bazel-team): All these labels (except for ccCompilerRuleLabel) can be removed once the
@@ -292,9 +290,6 @@ public class CppConfiguration extends BuildConfiguration.Fragment {
|| (cppOptions.stripBinaries == StripMode.SOMETIMES
&& compilationMode == CompilationMode.FASTBUILD));
- this.usePicForBinaries =
- cppToolchainInfo.toolchainNeedsPic() && compilationMode != CompilationMode.OPT;
-
ListMultimap<CompilationMode, String> cFlags = ArrayListMultimap.create();
ListMultimap<CompilationMode, String> cxxFlags = ArrayListMultimap.create();
for (CrosstoolConfig.CompilationModeFlags flags : toolchain.getCompilationModeFlagsList()) {
@@ -535,44 +530,17 @@ public class CppConfiguration extends BuildConfiguration.Fragment {
}
/**
- * Returns whether the toolchain supports the --start-lib/--end-lib options.
- */
- public boolean supportsStartEndLib() {
- return cppToolchainInfo.supportsStartEndLib();
- }
-
- /**
- * Returns whether this toolchain supports interface shared objects.
+ * Returns whether the toolchain supports "Fission" C++ builds, i.e. builds where compilation
+ * partitions object code and debug symbols into separate output files.
*
- * <p>Should be true if this toolchain generates ELF objects.
- */
- public boolean supportsInterfaceSharedObjects() {
- return cppToolchainInfo.supportsInterfaceSharedObjects();
- }
-
- /**
- * Returns whether the toolchain supports "Fission" C++ builds, i.e. builds
- * where compilation partitions object code and debug symbols into separate
- * output files.
+ * <p>Deprecated: Use {@link CcToolchainProvider#supportsFission()}
*/
+ // TODO(b/64384912): Refactor out of reportInvalidOptions() and remove
+ @Deprecated
public boolean supportsFission() {
return cppToolchainInfo.supportsFission();
}
- /**
- * Returns whether binaries must be compiled with position independent code.
- */
- public boolean usePicForBinaries() {
- return usePicForBinaries;
- }
-
- /**
- * Returns the type of archives being used.
- */
- public Link.ArchiveType archiveType() {
- return useStartEndLib() ? Link.ArchiveType.START_END_LIB : Link.ArchiveType.REGULAR;
- }
-
@SkylarkCallable(
name = "built_in_include_directories",
structField = true,
@@ -1039,19 +1007,25 @@ public class CppConfiguration extends BuildConfiguration.Fragment {
return cppOptions.processHeadersInDependencies;
}
+ /** Returns true if --fission contains the current compilation mode. */
+ public boolean fissionIsActiveForCurrentCompilationMode() {
+ return cppOptions.fissionModes.contains(compilationMode);
+ }
+
/**
* Returns true if Fission is specified for this build and supported by the crosstool.
+ *
+ * <p>Deprecated: Use {@link CppHelper#useFission(CppConfiguration, CcToolchainProvider)}
*/
+ // TODO(b/64384912): Remove usage in java_binary and configurationEnabledFeatures()
+ @Deprecated
public boolean useFission() {
return cppOptions.fissionModes.contains(compilationMode) && supportsFission();
}
- /**
- * Returns true if Fission is enabled for this build and the user requested automatic building
- * of .dwp files for C++ test targets.
- */
- public boolean shouldBuildTestDwp() {
- return useFission() && cppOptions.buildTestDwp;
+ /** Returns true if --build_test_dwp is set on this build. */
+ public boolean buildTestDwpIsActivated() {
+ return cppOptions.buildTestDwp;
}
/**
@@ -1064,36 +1038,15 @@ public class CppConfiguration extends BuildConfiguration.Fragment {
return cppOptions.forcePic;
}
- public boolean useStartEndLib() {
- return cppOptions.useStartEndLib && supportsStartEndLib();
- }
-
- /**
- * Returns true if interface shared objects should be used.
- */
- public boolean useInterfaceSharedObjects() {
- return supportsInterfaceSharedObjects() && cppOptions.useInterfaceSharedObjects;
+ /** Returns true if --start_end_lib is set on this build. */
+ public boolean startEndLibIsRequested() {
+ return cppOptions.useStartEndLib;
}
public boolean forceIgnoreDashStatic() {
return cppOptions.forceIgnoreDashStatic;
}
- /**
- * Returns true if shared libraries must be compiled with position independent code
- * on this platform or in this configuration.
- */
- public boolean needsPic() {
- return forcePic() || cppToolchainInfo.toolchainNeedsPic();
- }
-
- /**
- * Returns true iff we should use ".pic.o" files when linking executables.
- */
- public boolean usePicObjectsForBinaries() {
- return forcePic() || usePicForBinaries();
- }
-
public boolean legacyWholeArchive() {
return cppOptions.legacyWholeArchive;
}