xref: /aosp_15_r20/build/soong/cc/sdk_test.go (revision 333d2b3687b3a337dbcca9d65000bca186795e39)
1*333d2b36SAndroid Build Coastguard Worker// Copyright 2020 Google Inc. All rights reserved.
2*333d2b36SAndroid Build Coastguard Worker//
3*333d2b36SAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License");
4*333d2b36SAndroid Build Coastguard Worker// you may not use this file except in compliance with the License.
5*333d2b36SAndroid Build Coastguard Worker// You may obtain a copy of the License at
6*333d2b36SAndroid Build Coastguard Worker//
7*333d2b36SAndroid Build Coastguard Worker//     http://www.apache.org/licenses/LICENSE-2.0
8*333d2b36SAndroid Build Coastguard Worker//
9*333d2b36SAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software
10*333d2b36SAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS,
11*333d2b36SAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*333d2b36SAndroid Build Coastguard Worker// See the License for the specific language governing permissions and
13*333d2b36SAndroid Build Coastguard Worker// limitations under the License.
14*333d2b36SAndroid Build Coastguard Worker
15*333d2b36SAndroid Build Coastguard Workerpackage cc
16*333d2b36SAndroid Build Coastguard Worker
17*333d2b36SAndroid Build Coastguard Workerimport (
18*333d2b36SAndroid Build Coastguard Worker	"testing"
19*333d2b36SAndroid Build Coastguard Worker
20*333d2b36SAndroid Build Coastguard Worker	"android/soong/android"
21*333d2b36SAndroid Build Coastguard Worker)
22*333d2b36SAndroid Build Coastguard Worker
23*333d2b36SAndroid Build Coastguard Workerfunc TestSdkMutator(t *testing.T) {
24*333d2b36SAndroid Build Coastguard Worker	bp := `
25*333d2b36SAndroid Build Coastguard Worker		cc_library {
26*333d2b36SAndroid Build Coastguard Worker			name: "libsdk",
27*333d2b36SAndroid Build Coastguard Worker			shared_libs: ["libsdkdep"],
28*333d2b36SAndroid Build Coastguard Worker			sdk_version: "current",
29*333d2b36SAndroid Build Coastguard Worker			stl: "c++_shared",
30*333d2b36SAndroid Build Coastguard Worker		}
31*333d2b36SAndroid Build Coastguard Worker
32*333d2b36SAndroid Build Coastguard Worker		cc_library {
33*333d2b36SAndroid Build Coastguard Worker			name: "libsdkdep",
34*333d2b36SAndroid Build Coastguard Worker			sdk_version: "current",
35*333d2b36SAndroid Build Coastguard Worker			stl: "c++_shared",
36*333d2b36SAndroid Build Coastguard Worker		}
37*333d2b36SAndroid Build Coastguard Worker
38*333d2b36SAndroid Build Coastguard Worker		cc_library {
39*333d2b36SAndroid Build Coastguard Worker			name: "libplatform",
40*333d2b36SAndroid Build Coastguard Worker			shared_libs: ["libsdk"],
41*333d2b36SAndroid Build Coastguard Worker			stl: "libc++",
42*333d2b36SAndroid Build Coastguard Worker		}
43*333d2b36SAndroid Build Coastguard Worker
44*333d2b36SAndroid Build Coastguard Worker		cc_binary {
45*333d2b36SAndroid Build Coastguard Worker			name: "platformbinary",
46*333d2b36SAndroid Build Coastguard Worker			shared_libs: ["libplatform"],
47*333d2b36SAndroid Build Coastguard Worker			stl: "libc++",
48*333d2b36SAndroid Build Coastguard Worker		}
49*333d2b36SAndroid Build Coastguard Worker
50*333d2b36SAndroid Build Coastguard Worker		cc_binary {
51*333d2b36SAndroid Build Coastguard Worker			name: "sdkbinary",
52*333d2b36SAndroid Build Coastguard Worker			shared_libs: ["libsdk"],
53*333d2b36SAndroid Build Coastguard Worker			sdk_version: "current",
54*333d2b36SAndroid Build Coastguard Worker			stl: "libc++",
55*333d2b36SAndroid Build Coastguard Worker		}
56*333d2b36SAndroid Build Coastguard Worker	`
57*333d2b36SAndroid Build Coastguard Worker
58*333d2b36SAndroid Build Coastguard Worker	assertDep := func(t *testing.T, from, to android.TestingModule) {
59*333d2b36SAndroid Build Coastguard Worker		t.Helper()
60*333d2b36SAndroid Build Coastguard Worker		found := false
61*333d2b36SAndroid Build Coastguard Worker
62*333d2b36SAndroid Build Coastguard Worker		var toFile android.Path
63*333d2b36SAndroid Build Coastguard Worker		m := to.Module().(*Module)
64*333d2b36SAndroid Build Coastguard Worker		if toc := m.Toc(); toc.Valid() {
65*333d2b36SAndroid Build Coastguard Worker			toFile = toc.Path()
66*333d2b36SAndroid Build Coastguard Worker		} else {
67*333d2b36SAndroid Build Coastguard Worker			toFile = m.outputFile.Path()
68*333d2b36SAndroid Build Coastguard Worker		}
69*333d2b36SAndroid Build Coastguard Worker		toFile = toFile.RelativeToTop()
70*333d2b36SAndroid Build Coastguard Worker
71*333d2b36SAndroid Build Coastguard Worker		rule := from.Description("link")
72*333d2b36SAndroid Build Coastguard Worker		for _, dep := range rule.Implicits {
73*333d2b36SAndroid Build Coastguard Worker			if dep.String() == toFile.String() {
74*333d2b36SAndroid Build Coastguard Worker				found = true
75*333d2b36SAndroid Build Coastguard Worker			}
76*333d2b36SAndroid Build Coastguard Worker		}
77*333d2b36SAndroid Build Coastguard Worker		if !found {
78*333d2b36SAndroid Build Coastguard Worker			t.Errorf("expected %q in %q", toFile.String(), rule.Implicits.Strings())
79*333d2b36SAndroid Build Coastguard Worker		}
80*333d2b36SAndroid Build Coastguard Worker	}
81*333d2b36SAndroid Build Coastguard Worker
82*333d2b36SAndroid Build Coastguard Worker	ctx := testCc(t, bp)
83*333d2b36SAndroid Build Coastguard Worker
84*333d2b36SAndroid Build Coastguard Worker	libsdkNDK := ctx.ModuleForTests("libsdk", "android_arm64_armv8-a_sdk_shared")
85*333d2b36SAndroid Build Coastguard Worker	libsdkPlatform := ctx.ModuleForTests("libsdk", "android_arm64_armv8-a_shared")
86*333d2b36SAndroid Build Coastguard Worker	libsdkdepNDK := ctx.ModuleForTests("libsdkdep", "android_arm64_armv8-a_sdk_shared")
87*333d2b36SAndroid Build Coastguard Worker	libsdkdepPlatform := ctx.ModuleForTests("libsdkdep", "android_arm64_armv8-a_shared")
88*333d2b36SAndroid Build Coastguard Worker	libplatform := ctx.ModuleForTests("libplatform", "android_arm64_armv8-a_shared")
89*333d2b36SAndroid Build Coastguard Worker	platformbinary := ctx.ModuleForTests("platformbinary", "android_arm64_armv8-a")
90*333d2b36SAndroid Build Coastguard Worker	sdkbinary := ctx.ModuleForTests("sdkbinary", "android_arm64_armv8-a_sdk")
91*333d2b36SAndroid Build Coastguard Worker
92*333d2b36SAndroid Build Coastguard Worker	libcxxNDK := ctx.ModuleForTests("ndk_libc++_shared", "android_arm64_armv8-a_sdk_shared")
93*333d2b36SAndroid Build Coastguard Worker	libcxxPlatform := ctx.ModuleForTests("libc++", "android_arm64_armv8-a_shared")
94*333d2b36SAndroid Build Coastguard Worker
95*333d2b36SAndroid Build Coastguard Worker	assertDep(t, libsdkNDK, libsdkdepNDK)
96*333d2b36SAndroid Build Coastguard Worker	assertDep(t, libsdkPlatform, libsdkdepPlatform)
97*333d2b36SAndroid Build Coastguard Worker	assertDep(t, libplatform, libsdkPlatform)
98*333d2b36SAndroid Build Coastguard Worker	assertDep(t, platformbinary, libplatform)
99*333d2b36SAndroid Build Coastguard Worker	assertDep(t, sdkbinary, libsdkNDK)
100*333d2b36SAndroid Build Coastguard Worker
101*333d2b36SAndroid Build Coastguard Worker	assertDep(t, libsdkNDK, libcxxNDK)
102*333d2b36SAndroid Build Coastguard Worker	assertDep(t, libsdkPlatform, libcxxPlatform)
103*333d2b36SAndroid Build Coastguard Worker}
104