diff options
Diffstat (limited to 'src/main/java')
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( |