aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java17
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppModel.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppRuleClasses.java8
5 files changed, 34 insertions, 5 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java
index 06f2ef176f..e77bef91b4 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCommon.java
@@ -86,7 +86,8 @@ public final class CcCommon {
CppRuleClasses.MODULE_MAPS,
CppRuleClasses.MODULE_MAP_HOME_CWD,
CppRuleClasses.HEADER_MODULE_INCLUDES_DEPENDENCIES,
- CppRuleClasses.INCLUDE_PATHS);
+ CppRuleClasses.INCLUDE_PATHS,
+ CppRuleClasses.PIC);
/** C++ configuration */
private final CppConfiguration cppConfiguration;
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java
index 721ad0f889..f3f024d5e3 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileAction.java
@@ -1415,10 +1415,6 @@ public class CppCompileAction extends AbstractAction
options.add("-E");
}
- if (usePic) {
- options.add("-fPIC");
- }
-
return options;
}
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 f0d4906637..7e15b41323 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
@@ -692,6 +692,23 @@ public class CppConfiguration extends BuildConfiguration.Fragment {
return toolchain;
}
try {
+ if (!features.contains("pic")) {
+ TextFormat.merge(""
+ + "feature {"
+ + " name: 'pic'"
+ + " flag_set {"
+ + " action: 'c-compile'"
+ + " action: 'c++-compile'"
+ + " action: 'c++-module-compile'"
+ + " action: 'preprocess-assemble'"
+ + " expand_if_all_available: 'pic'"
+ + " flag_group {"
+ + " flag: '-fPIC'"
+ + " }"
+ + " }"
+ + "}",
+ toolchainBuilder);
+ }
if (!features.contains("include_paths")) {
TextFormat.merge(""
+ "feature {"
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModel.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModel.java
index 65c158dce7..07497df4ee 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModel.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModel.java
@@ -388,6 +388,13 @@ public final class CppModel {
getSafePathStrings(context.getSystemIncludeDirs()));
}
+ if (usePic) {
+ if (!featureConfiguration.isEnabled(CppRuleClasses.PIC)) {
+ ruleContext.ruleError("PIC compilation is requested but the toolchain does not support it");
+ }
+ buildVariables.addVariable("pic", "");
+ }
+
if (ccRelativeName != null) {
CppHelper.getFdoSupport(ruleContext).configureCompilation(builder, buildVariables,
ruleContext, ccRelativeName, autoFdoImportPath, usePic, featureConfiguration);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppRuleClasses.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppRuleClasses.java
index 77a9719923..074900356c 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppRuleClasses.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppRuleClasses.java
@@ -165,6 +165,14 @@ public class CppRuleClasses {
public static final String NO_LEGACY_FEATURES = "no_legacy_features";
/**
+ * A string constant for the PIC feature.
+ *
+ * If this feature is active (currently it cannot be switched off) and PIC compilation is
+ * requested, the "pic" build variable will be defined with an empty string as its value.
+ */
+ public static final String PIC = "pic";
+
+ /**
* A string constant for the include_paths feature.
*/
public static final String INCLUDE_PATHS = "include_paths";