blob: 2a59d92288498e1d0ee59d16226e65b6332b9c29 [file] [log] [blame]
Liz Kammer7ec40cc2022-07-29 10:44:23 -04001// Copyright 2022 Google Inc. All rights reserved.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15package android
16
17import (
18 "encoding/json"
19 "os"
20 "path/filepath"
21 "runtime"
22
23 "github.com/google/blueprint/proptools"
24)
25
26// TestConfig returns a Config object for testing.
27func TestConfig(buildDir string, env map[string]string, bp string, fs map[string][]byte) Config {
28 envCopy := make(map[string]string)
29 for k, v := range env {
30 envCopy[k] = v
31 }
32
33 // Copy the real PATH value to the test environment, it's needed by
34 // NonHermeticHostSystemTool() used in x86_darwin_host.go
35 envCopy["PATH"] = os.Getenv("PATH")
36
37 config := &config{
Cole Faustf8231dd2023-04-21 17:37:11 -070038 productVariables: ProductVariables{
Liz Kammer7ec40cc2022-07-29 10:44:23 -040039 DeviceName: stringPtr("test_device"),
40 DeviceProduct: stringPtr("test_product"),
41 Platform_sdk_version: intPtr(30),
42 Platform_sdk_codename: stringPtr("S"),
43 Platform_base_sdk_extension_version: intPtr(1),
44 Platform_version_active_codenames: []string{"S", "Tiramisu"},
45 DeviceSystemSdkVersions: []string{"14", "15"},
46 Platform_systemsdk_versions: []string{"29", "30"},
47 AAPTConfig: []string{"normal", "large", "xlarge", "hdpi", "xhdpi", "xxhdpi"},
48 AAPTPreferredConfig: stringPtr("xhdpi"),
49 AAPTCharacteristics: stringPtr("nosdcard"),
50 AAPTPrebuiltDPI: []string{"xhdpi", "xxhdpi"},
51 UncompressPrivAppDex: boolPtr(true),
52 ShippingApiLevel: stringPtr("30"),
53 },
54
55 outDir: buildDir,
56 soongOutDir: filepath.Join(buildDir, "soong"),
57 captureBuild: true,
58 env: envCopy,
59
60 // Set testAllowNonExistentPaths so that test contexts don't need to specify every path
61 // passed to PathForSource or PathForModuleSrc.
62 TestAllowNonExistentPaths: true,
63
64 BazelContext: noopBazelContext{},
Chris Parsons428c30f2022-11-29 14:14:52 -050065 BuildMode: BazelProdMode,
Liz Kammer7ec40cc2022-07-29 10:44:23 -040066 mixedBuildDisabledModules: make(map[string]struct{}),
67 mixedBuildEnabledModules: make(map[string]struct{}),
MarkDacek9c094ca2023-03-16 19:15:19 +000068 bazelForceEnabledModules: make(map[string]struct{}),
Liz Kammer7ec40cc2022-07-29 10:44:23 -040069 }
70 config.deviceConfig = &deviceConfig{
71 config: config,
72 }
73 config.TestProductVariables = &config.productVariables
74
75 config.mockFileSystem(bp, fs)
76
77 determineBuildOS(config)
78
79 return Config{config}
80}
81
82func modifyTestConfigToSupportArchMutator(testConfig Config) {
83 config := testConfig.config
84
85 config.Targets = map[OsType][]Target{
86 Android: []Target{
87 {Android, Arch{ArchType: Arm64, ArchVariant: "armv8-a", Abi: []string{"arm64-v8a"}}, NativeBridgeDisabled, "", "", false},
88 {Android, Arch{ArchType: Arm, ArchVariant: "armv7-a-neon", Abi: []string{"armeabi-v7a"}}, NativeBridgeDisabled, "", "", false},
89 },
90 config.BuildOS: []Target{
91 {config.BuildOS, Arch{ArchType: X86_64}, NativeBridgeDisabled, "", "", false},
92 {config.BuildOS, Arch{ArchType: X86}, NativeBridgeDisabled, "", "", false},
93 },
94 }
95
Paul Duffinde13a3a2022-10-05 15:47:25 +010096 // Make the CommonOS OsType available for all products.
97 config.Targets[CommonOS] = []Target{commonTargetMap[CommonOS.Name]}
98
Liz Kammer7ec40cc2022-07-29 10:44:23 -040099 if runtime.GOOS == "darwin" {
100 config.Targets[config.BuildOS] = config.Targets[config.BuildOS][:1]
101 }
102
103 config.BuildOSTarget = config.Targets[config.BuildOS][0]
104 config.BuildOSCommonTarget = getCommonTargets(config.Targets[config.BuildOS])[0]
105 config.AndroidCommonTarget = getCommonTargets(config.Targets[Android])[0]
106 config.AndroidFirstDeviceTarget = FirstTarget(config.Targets[Android], "lib64", "lib32")[0]
107 config.TestProductVariables.DeviceArch = proptools.StringPtr("arm64")
108 config.TestProductVariables.DeviceArchVariant = proptools.StringPtr("armv8-a")
109 config.TestProductVariables.DeviceSecondaryArch = proptools.StringPtr("arm")
110 config.TestProductVariables.DeviceSecondaryArchVariant = proptools.StringPtr("armv7-a-neon")
111}
112
Colin Cross5dc62c92023-02-15 12:20:19 -0800113// ModifyTestConfigForMusl takes a Config returned by TestConfig and changes the host targets from glibc to musl.
114func ModifyTestConfigForMusl(config Config) {
Liz Kammer7ec40cc2022-07-29 10:44:23 -0400115 delete(config.Targets, config.BuildOS)
116 config.productVariables.HostMusl = boolPtr(true)
117 determineBuildOS(config.config)
118 config.Targets[config.BuildOS] = []Target{
119 {config.BuildOS, Arch{ArchType: X86_64}, NativeBridgeDisabled, "", "", false},
120 {config.BuildOS, Arch{ArchType: X86}, NativeBridgeDisabled, "", "", false},
121 }
122
123 config.BuildOSTarget = config.Targets[config.BuildOS][0]
124 config.BuildOSCommonTarget = getCommonTargets(config.Targets[config.BuildOS])[0]
125}
126
Colin Crossc0f0eb82022-07-19 14:41:11 -0700127func modifyTestConfigForMuslArm64HostCross(config Config) {
128 config.Targets[LinuxMusl] = append(config.Targets[LinuxMusl],
129 Target{config.BuildOS, Arch{ArchType: Arm64}, NativeBridgeDisabled, "", "", true})
130}
131
Liz Kammer7ec40cc2022-07-29 10:44:23 -0400132// TestArchConfig returns a Config object suitable for using for tests that
133// need to run the arch mutator.
134func TestArchConfig(buildDir string, env map[string]string, bp string, fs map[string][]byte) Config {
135 testConfig := TestConfig(buildDir, env, bp, fs)
136 modifyTestConfigToSupportArchMutator(testConfig)
137 return testConfig
138}
139
140// CreateTestConfiguredJarList is a function to create ConfiguredJarList for tests.
141func CreateTestConfiguredJarList(list []string) ConfiguredJarList {
142 // Create the ConfiguredJarList in as similar way as it is created at runtime by marshalling to
143 // a json list of strings and then unmarshalling into a ConfiguredJarList instance.
144 b, err := json.Marshal(list)
145 if err != nil {
146 panic(err)
147 }
148
149 var jarList ConfiguredJarList
150 err = json.Unmarshal(b, &jarList)
151 if err != nil {
152 panic(err)
153 }
154
155 return jarList
156}