xref: /aosp_15_r20/build/soong/cc/sabi_test.go (revision 333d2b3687b3a337dbcca9d65000bca186795e39)
1*333d2b36SAndroid Build Coastguard Worker// Copyright 2024 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	"android/soong/android"
19*333d2b36SAndroid Build Coastguard Worker	"testing"
20*333d2b36SAndroid Build Coastguard Worker)
21*333d2b36SAndroid Build Coastguard Worker
22*333d2b36SAndroid Build Coastguard Workerfunc TestSabi(t *testing.T) {
23*333d2b36SAndroid Build Coastguard Worker	bp := `
24*333d2b36SAndroid Build Coastguard Worker		cc_library {
25*333d2b36SAndroid Build Coastguard Worker			name: "libsabi",
26*333d2b36SAndroid Build Coastguard Worker			srcs: ["sabi.cpp"],
27*333d2b36SAndroid Build Coastguard Worker			static_libs: ["libdirect"],
28*333d2b36SAndroid Build Coastguard Worker			header_abi_checker: {
29*333d2b36SAndroid Build Coastguard Worker				enabled: true,
30*333d2b36SAndroid Build Coastguard Worker				symbol_file: "libsabi.map.txt",
31*333d2b36SAndroid Build Coastguard Worker                ref_dump_dirs: ["abi-dumps"],
32*333d2b36SAndroid Build Coastguard Worker			},
33*333d2b36SAndroid Build Coastguard Worker		}
34*333d2b36SAndroid Build Coastguard Worker
35*333d2b36SAndroid Build Coastguard Worker		cc_library {
36*333d2b36SAndroid Build Coastguard Worker			name: "libdirect",
37*333d2b36SAndroid Build Coastguard Worker			srcs: ["direct.cpp"],
38*333d2b36SAndroid Build Coastguard Worker			whole_static_libs: ["libtransitive"],
39*333d2b36SAndroid Build Coastguard Worker		}
40*333d2b36SAndroid Build Coastguard Worker
41*333d2b36SAndroid Build Coastguard Worker		cc_library {
42*333d2b36SAndroid Build Coastguard Worker			name: "libtransitive",
43*333d2b36SAndroid Build Coastguard Worker			srcs: ["transitive.cpp"],
44*333d2b36SAndroid Build Coastguard Worker		}
45*333d2b36SAndroid Build Coastguard Worker	`
46*333d2b36SAndroid Build Coastguard Worker
47*333d2b36SAndroid Build Coastguard Worker	result := android.GroupFixturePreparers(
48*333d2b36SAndroid Build Coastguard Worker		PrepareForTestWithCcDefaultModules,
49*333d2b36SAndroid Build Coastguard Worker	).RunTestWithBp(t, bp)
50*333d2b36SAndroid Build Coastguard Worker
51*333d2b36SAndroid Build Coastguard Worker	libsabiStatic := result.ModuleForTests("libsabi", "android_arm64_armv8-a_static_sabi")
52*333d2b36SAndroid Build Coastguard Worker	sabiObjSDump := libsabiStatic.Output("obj/sabi.sdump")
53*333d2b36SAndroid Build Coastguard Worker
54*333d2b36SAndroid Build Coastguard Worker	libDirect := result.ModuleForTests("libdirect", "android_arm64_armv8-a_static_sabi")
55*333d2b36SAndroid Build Coastguard Worker	directObjSDump := libDirect.Output("obj/direct.sdump")
56*333d2b36SAndroid Build Coastguard Worker
57*333d2b36SAndroid Build Coastguard Worker	libTransitive := result.ModuleForTests("libtransitive", "android_arm64_armv8-a_static_sabi")
58*333d2b36SAndroid Build Coastguard Worker	transitiveObjSDump := libTransitive.Output("obj/transitive.sdump")
59*333d2b36SAndroid Build Coastguard Worker
60*333d2b36SAndroid Build Coastguard Worker	libsabiShared := result.ModuleForTests("libsabi", "android_arm64_armv8-a_shared")
61*333d2b36SAndroid Build Coastguard Worker	sabiLink := libsabiShared.Rule("sAbiLink")
62*333d2b36SAndroid Build Coastguard Worker
63*333d2b36SAndroid Build Coastguard Worker	android.AssertStringListContains(t, "sabi link inputs", sabiLink.Inputs.Strings(), sabiObjSDump.Output.String())
64*333d2b36SAndroid Build Coastguard Worker	android.AssertStringListContains(t, "sabi link inputs", sabiLink.Inputs.Strings(), directObjSDump.Output.String())
65*333d2b36SAndroid Build Coastguard Worker	android.AssertStringListContains(t, "sabi link inputs", sabiLink.Inputs.Strings(), transitiveObjSDump.Output.String())
66*333d2b36SAndroid Build Coastguard Worker}
67