aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java
index 411c1527e4..fec028a6a1 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppHelper.java
@@ -240,6 +240,56 @@ public class CppHelper {
}
/**
+ * Returns the default options to use for compiling C, C++, and assembler. This is just the
+ * options that should be used for all three languages. There may be additional C-specific or
+ * C++-specific options that should be used, in addition to the ones returned by this method.
+ */
+ //TODO(b/70784100): Figure out if these methods can be moved to CcToolchainProvider.
+ public static ImmutableList<String> getCompilerOptions(
+ CppConfiguration config, CcToolchainProvider toolchain, Iterable<String> features) {
+ ImmutableList.Builder<String> coptsBuilder =
+ ImmutableList.<String>builder()
+ .addAll(toolchain.getToolchainCompilerFlags())
+ .addAll(toolchain.getCFlagsByCompilationMode().get(config.getCompilationMode()))
+ .addAll(toolchain.getLipoCFlags().get(config.getLipoMode()));
+
+ if (config.isOmitfp()) {
+ coptsBuilder.add("-fomit-frame-pointer");
+ coptsBuilder.add("-fasynchronous-unwind-tables");
+ coptsBuilder.add("-DNO_FRAME_POINTER");
+ }
+
+ FlagList compilerFlags =
+ new FlagList(
+ coptsBuilder.build(),
+ FlagList.convertOptionalOptions(toolchain.getOptionalCompilerFlags()),
+ ImmutableList.copyOf(config.getCopts()));
+
+ return compilerFlags.evaluate(features);
+ }
+
+ /**
+ * Returns the list of additional C++-specific options to use for compiling C++. These should be
+ * go on the command line after the common options returned by {@link #getCompilerOptions}.
+ */
+ public static ImmutableList<String> getCxxOptions(
+ CppConfiguration config, CcToolchainProvider toolchain, Iterable<String> features) {
+ ImmutableList.Builder<String> cxxOptsBuilder =
+ ImmutableList.<String>builder()
+ .addAll(toolchain.getToolchainCxxFlags())
+ .addAll(toolchain.getCxxFlagsByCompilationMode().get(config.getCompilationMode()))
+ .addAll(toolchain.getLipoCxxFlags().get(config.getLipoMode()));
+
+ FlagList cxxFlags =
+ new FlagList(
+ cxxOptsBuilder.build(),
+ FlagList.convertOptionalOptions(toolchain.getOptionalCxxFlags()),
+ ImmutableList.copyOf(config.getCxxopts()));
+
+ return cxxFlags.evaluate(features);
+ }
+
+ /**
* Returns the immutable list of linker options for fully statically linked outputs. Does not
* include command-line options passed via --linkopt or --linkopts.
*