summaryrefslogtreecommitdiff
path: root/java/classpath_fragment.go
diff options
context:
space:
mode:
author Artur Satayev <satayev@google.com> 2021-04-07 15:45:02 +0100
committer Artur Satayev <satayev@google.com> 2021-04-13 08:58:18 +0100
commiteabf2c175f83ed5608618b8487517ebf6c257e16 (patch)
treecab801bef030320a2e539f6cc09efbda7ca75adb /java/classpath_fragment.go
parented0f6e846fcd53aafb51c62072bfca6378b87aac (diff)
Introduce classpath_fragment.go.
A skeleton of a classpath fragment's interface and base to be used by any modules that provide entries for *CLASSPATH variables at runtime. In follow up changes, this would be extended to generate packages/modules/SdkExtensions/proto/classpaths.proto configs for such modules to be bundled into system and individual apex binaries. Bug: 180105615 Test: m Change-Id: I2df550862e97222c5650c4d0480c90231fd78ef0
Diffstat (limited to 'java/classpath_fragment.go')
-rw-r--r--java/classpath_fragment.go67
1 files changed, 67 insertions, 0 deletions
diff --git a/java/classpath_fragment.go b/java/classpath_fragment.go
new file mode 100644
index 000000000..adbe490f3
--- /dev/null
+++ b/java/classpath_fragment.go
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * 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 java
+
+import (
+ "android/soong/android"
+)
+
+// Build rules and utilities to generate individual packages/modules/SdkExtensions/proto/classpaths.proto
+// config files based on build configuration to embed into /system and /apex on a device.
+//
+// See `derive_classpath` service that reads the configs at runtime and defines *CLASSPATH variables
+// on the device.
+
+type classpathType int
+
+const (
+ // Matches definition in packages/modules/SdkExtensions/proto/classpaths.proto
+ BOOTCLASSPATH classpathType = iota
+ DEX2OATBOOTCLASSPATH
+ SYSTEMSERVERCLASSPATH
+)
+
+func (c classpathType) String() string {
+ return [...]string{"BOOTCLASSPATH", "DEX2OATBOOTCLASSPATH", "SYSTEMSERVERCLASSPATH"}[c]
+}
+
+type classpathFragmentProperties struct {
+}
+
+// classpathFragment interface is implemented by a module that contributes jars to a *CLASSPATH
+// variables at runtime.
+type classpathFragment interface {
+ android.Module
+
+ classpathFragmentBase() *classpathFragmentBase
+}
+
+// classpathFragmentBase is meant to be embedded in any module types that implement classpathFragment;
+// such modules are expected to call initClasspathFragment().
+type classpathFragmentBase struct {
+ properties classpathFragmentProperties
+
+ classpathType classpathType
+
+ outputFilepath android.OutputPath
+}
+
+// Initializes classpathFragmentBase struct. Must be called by all modules that include classpathFragmentBase.
+func initClasspathFragment(c classpathFragment) {
+ base := c.classpathFragmentBase()
+ c.AddProperties(&base.properties)
+}