diff options
Diffstat (limited to 'java')
| -rw-r--r-- | java/Android.bp | 2 | ||||
| -rw-r--r-- | java/platform_bootclasspath.go | 74 | ||||
| -rw-r--r-- | java/platform_bootclasspath_test.go | 38 | ||||
| -rw-r--r-- | java/testing.go | 1 | 
4 files changed, 115 insertions, 0 deletions
diff --git a/java/Android.bp b/java/Android.bp index b6c14ac37..8334b85ec 100644 --- a/java/Android.bp +++ b/java/Android.bp @@ -50,6 +50,7 @@ bootstrap_go_package {          "kotlin.go",          "lint.go",          "legacy_core_platform_api_usage.go", +        "platform_bootclasspath.go",          "platform_compat_config.go",          "plugin.go",          "prebuilt_apis.go", @@ -79,6 +80,7 @@ bootstrap_go_package {          "java_test.go",          "jdeps_test.go",          "kotlin_test.go", +        "platform_bootclasspath_test.go",          "platform_compat_config_test.go",          "plugin_test.go",          "rro_test.go", diff --git a/java/platform_bootclasspath.go b/java/platform_bootclasspath.go new file mode 100644 index 000000000..550707754 --- /dev/null +++ b/java/platform_bootclasspath.go @@ -0,0 +1,74 @@ +// Copyright 2021 Google Inc. 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 java + +import ( +	"android/soong/android" +	"android/soong/dexpreopt" +) + +func init() { +	registerPlatformBootclasspathBuildComponents(android.InitRegistrationContext) +} + +func registerPlatformBootclasspathBuildComponents(ctx android.RegistrationContext) { +	ctx.RegisterModuleType("platform_bootclasspath", platformBootclasspathFactory) +} + +type platformBootclasspathModule struct { +	android.ModuleBase +} + +func platformBootclasspathFactory() android.Module { +	m := &platformBootclasspathModule{} +	android.InitAndroidArchModule(m, android.DeviceSupported, android.MultilibCommon) +	return m +} + +func (b *platformBootclasspathModule) DepsMutator(ctx android.BottomUpMutatorContext) { +	if SkipDexpreoptBootJars(ctx) { +		return +	} + +	// Add a dependency onto the dex2oat tool which is needed for creating the boot image. The +	// path is retrieved from the dependency by GetGlobalSoongConfig(ctx). +	dexpreopt.RegisterToolDeps(ctx) +} + +func (b *platformBootclasspathModule) GenerateAndroidBuildActions(ctx android.ModuleContext) { +	// Nothing to do if skipping the dexpreopt of boot image jars. +	if SkipDexpreoptBootJars(ctx) { +		return +	} + +	// Force the GlobalSoongConfig to be created and cached for use by the dex_bootjars +	// GenerateSingletonBuildActions method as it cannot create it for itself. +	dexpreopt.GetGlobalSoongConfig(ctx) + +	imageConfig := b.getImageConfig(ctx) +	if imageConfig == nil { +		return +	} + +	// Construct the boot image info from the config. +	info := BootImageInfo{imageConfig: imageConfig} + +	// Make it available for other modules. +	ctx.SetProvider(BootImageInfoProvider, info) +} + +func (b *platformBootclasspathModule) getImageConfig(ctx android.EarlyModuleContext) *bootImageConfig { +	return defaultBootImageConfig(ctx) +} diff --git a/java/platform_bootclasspath_test.go b/java/platform_bootclasspath_test.go new file mode 100644 index 000000000..1c81cfdc2 --- /dev/null +++ b/java/platform_bootclasspath_test.go @@ -0,0 +1,38 @@ +// 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 ( +	"testing" + +	"android/soong/android" +	"android/soong/dexpreopt" +) + +// Contains some simple tests for platform_bootclasspath. + +var prepareForTestWithPlatformBootclasspath = android.GroupFixturePreparers( +	PrepareForTestWithJavaDefaultModules, +	dexpreopt.PrepareForTestByEnablingDexpreopt, +) + +func TestPlatformBootclasspath(t *testing.T) { +	prepareForTestWithPlatformBootclasspath. +		RunTestWithBp(t, ` +			platform_bootclasspath { +				name: "platform-bootclasspath", +			} +		`) +} diff --git a/java/testing.go b/java/testing.go index 1113af72c..80c107d12 100644 --- a/java/testing.go +++ b/java/testing.go @@ -194,6 +194,7 @@ func registerRequiredBuildComponentsForTest(ctx android.RegistrationContext) {  	RegisterDocsBuildComponents(ctx)  	RegisterGenRuleBuildComponents(ctx)  	registerJavaBuildComponents(ctx) +	registerPlatformBootclasspathBuildComponents(ctx)  	RegisterPrebuiltApisBuildComponents(ctx)  	RegisterRuntimeResourceOverlayBuildComponents(ctx)  	RegisterSdkLibraryBuildComponents(ctx)  |