aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib')
-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/CcToolchain.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppConfiguration.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java8
4 files changed, 26 insertions, 0 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 097b809f7e..1ddb027b6c 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
@@ -81,6 +81,9 @@ public final class CcCommon {
/** Name of the build variable for the path to the input file being processed. */
public static final String INPUT_FILE_VARIABLE_NAME = "input_file";
+ /** Name of the build variable for the minimum_os_version being targeted. */
+ public static final String MINIMUM_OS_VERSION_VARIABLE_NAME = "minimum_os_version";
+
public static final String PIC_CONFIGURATION_ERROR =
"PIC compilation is requested but the toolchain does not support it";
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java
index ffad5c5084..6de5145463 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchain.java
@@ -879,6 +879,13 @@ public class CcToolchain implements RuleConfiguredTargetFactory {
RuleContext ruleContext, PathFragment defaultSysroot) throws RuleErrorException {
CcToolchainVariables.Builder variables = new CcToolchainVariables.Builder();
+ CppConfiguration cppConfiguration =
+ Preconditions.checkNotNull(ruleContext.getFragment(CppConfiguration.class));
+ String minOsVersion = cppConfiguration.getMinimumOsVersion();
+ if (minOsVersion != null) {
+ variables.addStringVariable(CcCommon.MINIMUM_OS_VERSION_VARIABLE_NAME, minOsVersion);
+ }
+
PathFragment sysroot = calculateSysroot(ruleContext, defaultSysroot);
if (sysroot != null) {
variables.addStringVariable(CcCommon.SYSROOT_VARIABLE_NAME, sysroot.getPathString());
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 d8337f6160..12aa64382d 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
@@ -38,6 +38,7 @@ import com.google.devtools.build.lib.rules.cpp.CrosstoolConfigurationLoader.Cros
import com.google.devtools.build.lib.rules.cpp.Link.LinkingMode;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.skylarkbuildapi.cpp.CppConfigurationApi;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.syntax.EvalException;
import com.google.devtools.build.lib.vfs.PathFragment;
import com.google.devtools.build.lib.view.config.crosstool.CrosstoolConfig;
@@ -757,6 +758,13 @@ public final class CppConfiguration extends BuildConfiguration.Fragment
return ldExecutable != null ? ldExecutable.getPathString() : "";
}
+ @SkylarkCallable(
+ name = "minimum_os_version",
+ doc = "The minimum OS version for C/C++ compilation.")
+ public String getMinimumOsVersion() {
+ return cppOptions.minimumOsVersion;
+ }
+
/** Returns the value of the --dynamic_mode flag. */
public DynamicMode getDynamicModeFlag() {
return cppOptions.dynamicMode;
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java
index d06e6a78a5..ac7a1f6e31 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppOptions.java
@@ -151,6 +151,14 @@ public class CppOptions extends FragmentOptions {
)
public String outputDirectoryTag;
+ @Option(
+ name = "minimum_os_version",
+ defaultValue = "null",
+ documentationCategory = OptionDocumentationCategory.TOOLCHAIN,
+ effectTags = {OptionEffectTag.LOADING_AND_ANALYSIS, OptionEffectTag.AFFECTS_OUTPUTS},
+ help = "The minimum OS version which your compilation targets.")
+ public String minimumOsVersion;
+
// O intrepid reaper of unused options: Be warned that the [no]start_end_lib
// option, however tempting to remove, has a use case. Look in our telemetry data.
@Option(