Add --incompatible_objc_alwayslink_by_default

Currently a no-op, this flag will be used to control the default behavior for
`alwayslink` on `objc_library` and `objc_import`. The value is then exposed
on the `objc` fragment.

PiperOrigin-RevId: 516547341
Change-Id: Ieb43112ece5f0c9ee2b0350bbcf734a9dac3ff68
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommandLineOptions.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommandLineOptions.java
index 58139b9..9168b12 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommandLineOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcCommandLineOptions.java
@@ -192,6 +192,17 @@
               + "objc_import.")
   public boolean incompatibleDisallowSdkFrameworksAttributes;
 
+  @Option(
+      name = "incompatible_objc_alwayslink_by_default",
+      defaultValue = "false",
+      documentationCategory = OptionDocumentationCategory.STARLARK_SEMANTICS,
+      effectTags = {OptionEffectTag.BUILD_FILE_SEMANTICS},
+      metadataTags = {OptionMetadataTag.INCOMPATIBLE_CHANGE},
+      help =
+          "If true, make the default value true for alwayslink attributes in objc_library and"
+              + " objc_import.")
+  public boolean incompatibleObjcAlwayslinkByDefault;
+
   /** @deprecated delete when we are sure it's not used anywhere. */
   @Deprecated
   @Option(
@@ -213,6 +224,7 @@
         incompatibleAvoidHardcodedObjcCompilationFlags;
     exec.incompatibleObjcLinkingInfoMigration = incompatibleObjcLinkingInfoMigration;
     exec.incompatibleDisallowSdkFrameworksAttributes = incompatibleDisallowSdkFrameworksAttributes;
+    exec.incompatibleObjcAlwayslinkByDefault = incompatibleObjcAlwayslinkByDefault;
     return exec;
   }
 }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcConfiguration.java
index 90b9880..085ce95 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcConfiguration.java
@@ -68,6 +68,7 @@
   private final boolean avoidHardcodedCompilationFlags;
   private final boolean linkingInfoMigration;
   private final boolean disallowSdkFrameworksAttributes;
+  private final boolean alwayslinkByDefault;
 
   public ObjcConfiguration(BuildOptions buildOptions) {
     CoreOptions options = buildOptions.get(CoreOptions.class);
@@ -93,6 +94,7 @@
         objcOptions.incompatibleAvoidHardcodedObjcCompilationFlags;
     this.linkingInfoMigration = objcOptions.incompatibleObjcLinkingInfoMigration;
     this.disallowSdkFrameworksAttributes = objcOptions.incompatibleDisallowSdkFrameworksAttributes;
+    this.alwayslinkByDefault = objcOptions.incompatibleObjcAlwayslinkByDefault;
   }
 
   /**
@@ -236,4 +238,10 @@
   public boolean disallowSdkFrameworksAttributes() {
     return disallowSdkFrameworksAttributes;
   }
+
+  /** Returns whether objc_library and objc_import should default to alwayslink=True. */
+  @Override
+  public boolean alwayslinkByDefault() {
+    return alwayslinkByDefault;
+  }
 }
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/ObjcConfigurationApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/ObjcConfigurationApi.java
index 4fe48ba..6d104f5 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/ObjcConfigurationApi.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/apple/ObjcConfigurationApi.java
@@ -140,4 +140,10 @@
       structField = true,
       doc = "Returns whether sdk_frameworks and weak_sdk_frameworks are disallowed attributes.")
   boolean disallowSdkFrameworksAttributes();
+
+  @StarlarkMethod(
+      name = "alwayslink_by_default",
+      structField = true,
+      doc = "Returns whether objc_library and objc_import should default to alwayslink=True.")
+  boolean alwayslinkByDefault();
 }