aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidCcLinkParamsProvider.java42
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParamsStore.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingInfo.java1
-rw-r--r--src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidCcLinkParamsProviderApi.java59
-rw-r--r--src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/BUILD1
-rw-r--r--src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcLinkParamsStoreApi.java26
-rw-r--r--src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcLinkingInfoApi.java7
8 files changed, 133 insertions, 13 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCcLinkParamsProvider.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCcLinkParamsProvider.java
index 405e68bd96..5d88498db7 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCcLinkParamsProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCcLinkParamsProvider.java
@@ -11,31 +11,55 @@
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
+
package com.google.devtools.build.lib.rules.android;
-import com.google.auto.value.AutoValue;
import com.google.common.base.Function;
import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
-import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
+import com.google.devtools.build.lib.packages.BuiltinProvider;
+import com.google.devtools.build.lib.packages.NativeInfo;
import com.google.devtools.build.lib.rules.cpp.AbstractCcLinkParamsStore;
import com.google.devtools.build.lib.rules.cpp.CcLinkParamsStore;
+import com.google.devtools.build.lib.skylarkbuildapi.android.AndroidCcLinkParamsProviderApi;
+import com.google.devtools.build.lib.syntax.EvalException;
/** A target that provides C++ libraries to be linked into Android targets. */
-@AutoValue
@Immutable
-public abstract class AndroidCcLinkParamsProvider implements TransitiveInfoProvider {
- public static AndroidCcLinkParamsProvider create(AbstractCcLinkParamsStore store) {
- return new AutoValue_AndroidCcLinkParamsProvider(new CcLinkParamsStore(store));
+public final class AndroidCcLinkParamsProvider extends NativeInfo
+ implements AndroidCcLinkParamsProviderApi<CcLinkParamsStore> {
+ public static final String PROVIDER_NAME = "AndroidCcLinkParamsInfo";
+ public static final Provider PROVIDER = new Provider();
+
+ private final CcLinkParamsStore store;
+
+ public AndroidCcLinkParamsProvider(AbstractCcLinkParamsStore store) {
+ super(PROVIDER);
+ this.store = new CcLinkParamsStore(store);
}
- public abstract AbstractCcLinkParamsStore getLinkParams();
+ @Override
+ public CcLinkParamsStore getLinkParams() {
+ return store;
+ }
public static final Function<TransitiveInfoCollection, AbstractCcLinkParamsStore> TO_LINK_PARAMS =
(TransitiveInfoCollection input) -> {
- AndroidCcLinkParamsProvider provider = input.getProvider(AndroidCcLinkParamsProvider.class);
+ AndroidCcLinkParamsProvider provider = input.get(AndroidCcLinkParamsProvider.PROVIDER);
return provider == null ? null : provider.getLinkParams();
};
- AndroidCcLinkParamsProvider() {}
+ /** Provider class for {@link AndroidCcLinkParamsProvider} objects. */
+ public static class Provider extends BuiltinProvider<AndroidCcLinkParamsProvider>
+ implements AndroidCcLinkParamsProviderApi.Provider<CcLinkParamsStore> {
+ private Provider() {
+ super(PROVIDER_NAME, AndroidCcLinkParamsProvider.class);
+ }
+
+ @Override
+ public AndroidCcLinkParamsProviderApi<CcLinkParamsStore> createInfo(CcLinkParamsStore store)
+ throws EvalException {
+ return new AndroidCcLinkParamsProvider(store);
+ }
+ }
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java
index f65080041d..96fb3994f4 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibrary.java
@@ -11,6 +11,7 @@
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
+
package com.google.devtools.build.lib.rules.android;
import com.google.common.collect.ImmutableList;
@@ -243,9 +244,8 @@ public abstract class AndroidLibrary implements RuleConfiguredTargetFactory {
.add(
JavaSourceInfoProvider.class,
JavaSourceInfoProvider.fromJavaTargetAttributes(javaTargetAttributes, javaSemantics))
- .add(
- AndroidCcLinkParamsProvider.class,
- AndroidCcLinkParamsProvider.create(androidCommon.getCcLinkParamsStore()))
+ .addNativeDeclaredProvider(
+ new AndroidCcLinkParamsProvider(androidCommon.getCcLinkParamsStore()))
.add(ProguardSpecProvider.class, new ProguardSpecProvider(transitiveProguardConfigs))
.addNativeDeclaredProvider(
new AndroidProguardInfo(proguardLibrary.collectLocalProguardSpecs()))
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParamsStore.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParamsStore.java
index e4f6e183c8..f3cc7ee8a5 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParamsStore.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParamsStore.java
@@ -19,10 +19,12 @@ import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
import com.google.devtools.build.lib.skyframe.serialization.ObjectCodec;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
+import com.google.devtools.build.lib.skylarkbuildapi.cpp.CcLinkParamsStoreApi;
/** An implementation class for the AbstractCcLinkParamsStore. */
@AutoCodec
-public final class CcLinkParamsStore extends AbstractCcLinkParamsStore {
+public final class CcLinkParamsStore extends AbstractCcLinkParamsStore
+ implements CcLinkParamsStoreApi {
public static final ObjectCodec<com.google.devtools.build.lib.rules.cpp.CcLinkParamsStore> CODEC =
new CcLinkParamsStore_AutoCodec();
public static final Function<TransitiveInfoCollection, AbstractCcLinkParamsStore> TO_LINK_PARAMS =
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingInfo.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingInfo.java
index dd792ccb75..21494f7765 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingInfo.java
@@ -129,6 +129,7 @@ public final class CcLinkingInfo extends NativeInfo implements CcLinkingInfoApi
this.ccDynamicLibrariesForRuntime = ccDynamicLibrariesForRuntime;
}
+ @Override
public CcLinkParamsStore getCcLinkParamsStore() {
return ccLinkParamsStore;
}
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidCcLinkParamsProviderApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidCcLinkParamsProviderApi.java
new file mode 100644
index 0000000000..34b4dd4cc3
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidCcLinkParamsProviderApi.java
@@ -0,0 +1,59 @@
+// Copyright 2018 The Bazel Authors. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.google.devtools.build.lib.skylarkbuildapi.android;
+
+import com.google.devtools.build.lib.skylarkbuildapi.ProviderApi;
+import com.google.devtools.build.lib.skylarkbuildapi.StructApi;
+import com.google.devtools.build.lib.skylarkbuildapi.cpp.CcLinkParamsStoreApi;
+import com.google.devtools.build.lib.skylarkinterface.Param;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkConstructor;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+import com.google.devtools.build.lib.syntax.EvalException;
+
+/** A target that provides C++ libraries to be linked into Android targets. */
+@SkylarkModule(
+ name = "AndroidCcLinkParamsInfo",
+ doc = "Information about the c++ libraries to be linked into Android targets.",
+ category = SkylarkModuleCategory.PROVIDER)
+public interface AndroidCcLinkParamsProviderApi<T extends CcLinkParamsStoreApi> extends StructApi {
+ /** Name of this info object. */
+ public static String NAME = "AndroidCcLinkParamsInfo";
+
+ /** Returns the cc link params. */
+ @SkylarkCallable(name = "link_params", structField = true, doc = "", documented = false)
+ T getLinkParams();
+
+ /** The provider implementing this can construct the AndroidCcLinkParamsInfo provider. */
+ @SkylarkModule(name = "Provider", doc = "", documented = false)
+ public interface Provider<T extends CcLinkParamsStoreApi> extends ProviderApi {
+
+ @SkylarkCallable(
+ name = NAME,
+ doc = "The <code>AndroidCcLinkParamsInfo</code> constructor.",
+ parameters = {
+ @Param(
+ name = "store",
+ doc = "The cc link params store.",
+ positional = true,
+ named = false,
+ type = CcLinkParamsStoreApi.class),
+ },
+ selfCall = true)
+ @SkylarkConstructor(objectType = AndroidCcLinkParamsProviderApi.class)
+ public AndroidCcLinkParamsProviderApi<T> createInfo(T store) throws EvalException;
+ }
+}
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/BUILD b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/BUILD
index 9dc608afd4..5e08d3cd68 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/BUILD
@@ -25,6 +25,7 @@ java_library(
"//src/main/java/com/google/devtools/build/lib/cmdline",
"//src/main/java/com/google/devtools/build/lib/collect/nestedset",
"//src/main/java/com/google/devtools/build/lib/skylarkbuildapi",
+ "//src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp",
"//src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java",
"//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
"//third_party:guava",
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcLinkParamsStoreApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcLinkParamsStoreApi.java
new file mode 100644
index 0000000000..66e2fe53d1
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcLinkParamsStoreApi.java
@@ -0,0 +1,26 @@
+// Copyright 2018 The Bazel Authors. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.google.devtools.build.lib.skylarkbuildapi.cpp;
+
+import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
+import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
+
+/** Interface for Runfiles of C++ targets. */
+@SkylarkModule(
+ name = "CcLinkParamsStore",
+ documented = false,
+ category = SkylarkModuleCategory.BUILTIN,
+ doc = "Parameters that affect linking actions.")
+public interface CcLinkParamsStoreApi {}
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcLinkingInfoApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcLinkingInfoApi.java
index 590d00503e..fe57f3c4f0 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcLinkingInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcLinkingInfoApi.java
@@ -64,4 +64,11 @@ public interface CcLinkingInfoApi extends StructApi {
allowReturnNones = true,
structField = true)
CcLinkParamsApi getDynamicModeParamsForExecutable();
+
+ @SkylarkCallable(
+ name = "cc_link_params_store",
+ documented = false,
+ allowReturnNones = true,
+ structField = true)
+ public CcLinkParamsStoreApi getCcLinkParamsStore();
}