xref: /aosp_15_r20/build/make/tools/check-flagged-apis/check-flagged-apis.sh (revision 9e94795a3d4ef5c1d47486f9a02bb378756cea8a)
1*9e94795aSAndroid Build Coastguard Worker#!/bin/bash
2*9e94795aSAndroid Build Coastguard Worker
3*9e94795aSAndroid Build Coastguard Worker# Copyright (C) 2024 The Android Open Source Project
4*9e94795aSAndroid Build Coastguard Worker#
5*9e94795aSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License");
6*9e94795aSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License.
7*9e94795aSAndroid Build Coastguard Worker# You may obtain a copy of the License at
8*9e94795aSAndroid Build Coastguard Worker#
9*9e94795aSAndroid Build Coastguard Worker#      http://www.apache.org/licenses/LICENSE-2.0
10*9e94795aSAndroid Build Coastguard Worker#
11*9e94795aSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
12*9e94795aSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS,
13*9e94795aSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*9e94795aSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and
15*9e94795aSAndroid Build Coastguard Worker# limitations under the License.
16*9e94795aSAndroid Build Coastguard Worker
17*9e94795aSAndroid Build Coastguard Worker# Run check-flagged-apis for public APIs and the three @SystemApi flavours.
18*9e94795aSAndroid Build Coastguard Worker#
19*9e94795aSAndroid Build Coastguard Worker# This script expects an argument to tell it which subcommand of
20*9e94795aSAndroid Build Coastguard Worker# check-flagged-apis to execute. Run the script without any arguments to see
21*9e94795aSAndroid Build Coastguard Worker# the valid options.
22*9e94795aSAndroid Build Coastguard Worker#
23*9e94795aSAndroid Build Coastguard Worker# Remember to lunch to select the relevant release config before running this script.
24*9e94795aSAndroid Build Coastguard Worker
25*9e94795aSAndroid Build Coastguard Workersource $(cd $(dirname $BASH_SOURCE) &> /dev/null && pwd)/../../shell_utils.sh
26*9e94795aSAndroid Build Coastguard Workerrequire_top
27*9e94795aSAndroid Build Coastguard Worker
28*9e94795aSAndroid Build Coastguard WorkerPUBLIC_XML_VERSIONS=out/target/common/obj/PACKAGING/api_versions_public_generated-api-versions.xml
29*9e94795aSAndroid Build Coastguard WorkerSYSTEM_XML_VERSIONS=out/target/common/obj/PACKAGING/api_versions_system_generated-api-versions.xml
30*9e94795aSAndroid Build Coastguard WorkerSYSTEM_SERVER_XML_VERSONS=out/target/common/obj/PACKAGING/api_versions_system_server_complete_generated-api-versions.xml
31*9e94795aSAndroid Build Coastguard WorkerMODULE_LIB_XML_VERSIONS=out/target/common/obj/PACKAGING/api_versions_module_lib_complete_generated-api-versions.xml
32*9e94795aSAndroid Build Coastguard Worker
33*9e94795aSAndroid Build Coastguard Workerfunction m() {
34*9e94795aSAndroid Build Coastguard Worker    $(gettop)/build/soong/soong_ui.bash --build-mode --all-modules --dir="$(pwd)" "$@"
35*9e94795aSAndroid Build Coastguard Worker}
36*9e94795aSAndroid Build Coastguard Worker
37*9e94795aSAndroid Build Coastguard Workerfunction build() {
38*9e94795aSAndroid Build Coastguard Worker    m \
39*9e94795aSAndroid Build Coastguard Worker        check-flagged-apis \
40*9e94795aSAndroid Build Coastguard Worker        all_aconfig_declarations \
41*9e94795aSAndroid Build Coastguard Worker        frameworks-base-api-current.txt \
42*9e94795aSAndroid Build Coastguard Worker        frameworks-base-api-system-current.txt \
43*9e94795aSAndroid Build Coastguard Worker        frameworks-base-api-system-server-current.txt \
44*9e94795aSAndroid Build Coastguard Worker        frameworks-base-api-module-lib-current.txt \
45*9e94795aSAndroid Build Coastguard Worker        $PUBLIC_XML_VERSIONS \
46*9e94795aSAndroid Build Coastguard Worker        $SYSTEM_XML_VERSIONS \
47*9e94795aSAndroid Build Coastguard Worker        $SYSTEM_SERVER_XML_VERSONS \
48*9e94795aSAndroid Build Coastguard Worker        $MODULE_LIB_XML_VERSIONS
49*9e94795aSAndroid Build Coastguard Worker}
50*9e94795aSAndroid Build Coastguard Worker
51*9e94795aSAndroid Build Coastguard Workerfunction noop() {
52*9e94795aSAndroid Build Coastguard Worker    true
53*9e94795aSAndroid Build Coastguard Worker}
54*9e94795aSAndroid Build Coastguard Worker
55*9e94795aSAndroid Build Coastguard Workerfunction aninja() {
56*9e94795aSAndroid Build Coastguard Worker    local T="$(gettop)"
57*9e94795aSAndroid Build Coastguard Worker    (\cd "${T}" && prebuilts/build-tools/linux-x86/bin/ninja -f out/combined-${TARGET_PRODUCT}.ninja "$@")
58*9e94795aSAndroid Build Coastguard Worker}
59*9e94795aSAndroid Build Coastguard Worker
60*9e94795aSAndroid Build Coastguard Workerfunction path_to_api_signature_file {
61*9e94795aSAndroid Build Coastguard Worker    aninja -t query device_"$1"_all_targets | grep -A1 -e input: | tail -n1
62*9e94795aSAndroid Build Coastguard Worker}
63*9e94795aSAndroid Build Coastguard Worker
64*9e94795aSAndroid Build Coastguard Workerfunction run_check() {
65*9e94795aSAndroid Build Coastguard Worker    local errors=0
66*9e94795aSAndroid Build Coastguard Worker
67*9e94795aSAndroid Build Coastguard Worker    echo "# current"
68*9e94795aSAndroid Build Coastguard Worker    check-flagged-apis check \
69*9e94795aSAndroid Build Coastguard Worker        --api-signature $(path_to_api_signature_file "frameworks-base-api-current.txt") \
70*9e94795aSAndroid Build Coastguard Worker        --flag-values $(gettop)/out/soong/.intermediates/all_aconfig_declarations.pb \
71*9e94795aSAndroid Build Coastguard Worker        --api-versions $PUBLIC_XML_VERSIONS
72*9e94795aSAndroid Build Coastguard Worker    (( errors += $? ))
73*9e94795aSAndroid Build Coastguard Worker
74*9e94795aSAndroid Build Coastguard Worker    echo
75*9e94795aSAndroid Build Coastguard Worker    echo "# system-current"
76*9e94795aSAndroid Build Coastguard Worker    check-flagged-apis check \
77*9e94795aSAndroid Build Coastguard Worker        --api-signature $(path_to_api_signature_file "frameworks-base-api-system-current.txt") \
78*9e94795aSAndroid Build Coastguard Worker        --flag-values $(gettop)/out/soong/.intermediates/all_aconfig_declarations.pb \
79*9e94795aSAndroid Build Coastguard Worker        --api-versions $SYSTEM_XML_VERSIONS
80*9e94795aSAndroid Build Coastguard Worker    (( errors += $? ))
81*9e94795aSAndroid Build Coastguard Worker
82*9e94795aSAndroid Build Coastguard Worker    echo
83*9e94795aSAndroid Build Coastguard Worker    echo "# system-server-current"
84*9e94795aSAndroid Build Coastguard Worker    check-flagged-apis check \
85*9e94795aSAndroid Build Coastguard Worker        --api-signature $(path_to_api_signature_file "frameworks-base-api-system-server-current.txt") \
86*9e94795aSAndroid Build Coastguard Worker        --flag-values $(gettop)/out/soong/.intermediates/all_aconfig_declarations.pb \
87*9e94795aSAndroid Build Coastguard Worker        --api-versions $SYSTEM_SERVER_XML_VERSONS
88*9e94795aSAndroid Build Coastguard Worker    (( errors += $? ))
89*9e94795aSAndroid Build Coastguard Worker
90*9e94795aSAndroid Build Coastguard Worker    echo
91*9e94795aSAndroid Build Coastguard Worker    echo "# module-lib"
92*9e94795aSAndroid Build Coastguard Worker    check-flagged-apis check \
93*9e94795aSAndroid Build Coastguard Worker        --api-signature $(path_to_api_signature_file "frameworks-base-api-module-lib-current.txt") \
94*9e94795aSAndroid Build Coastguard Worker        --flag-values $(gettop)/out/soong/.intermediates/all_aconfig_declarations.pb \
95*9e94795aSAndroid Build Coastguard Worker        --api-versions $MODULE_LIB_XML_VERSIONS
96*9e94795aSAndroid Build Coastguard Worker    (( errors += $? ))
97*9e94795aSAndroid Build Coastguard Worker
98*9e94795aSAndroid Build Coastguard Worker    return $errors
99*9e94795aSAndroid Build Coastguard Worker}
100*9e94795aSAndroid Build Coastguard Worker
101*9e94795aSAndroid Build Coastguard Workerfunction run_list() {
102*9e94795aSAndroid Build Coastguard Worker    echo "# current"
103*9e94795aSAndroid Build Coastguard Worker    check-flagged-apis list \
104*9e94795aSAndroid Build Coastguard Worker        --api-signature $(path_to_api_signature_file "frameworks-base-api-current.txt") \
105*9e94795aSAndroid Build Coastguard Worker        --flag-values $(gettop)/out/soong/.intermediates/all_aconfig_declarations.pb
106*9e94795aSAndroid Build Coastguard Worker
107*9e94795aSAndroid Build Coastguard Worker    echo
108*9e94795aSAndroid Build Coastguard Worker    echo "# system-current"
109*9e94795aSAndroid Build Coastguard Worker    check-flagged-apis list \
110*9e94795aSAndroid Build Coastguard Worker        --api-signature $(path_to_api_signature_file "frameworks-base-api-system-current.txt") \
111*9e94795aSAndroid Build Coastguard Worker        --flag-values $(gettop)/out/soong/.intermediates/all_aconfig_declarations.pb
112*9e94795aSAndroid Build Coastguard Worker
113*9e94795aSAndroid Build Coastguard Worker    echo
114*9e94795aSAndroid Build Coastguard Worker    echo "# system-server-current"
115*9e94795aSAndroid Build Coastguard Worker    check-flagged-apis list \
116*9e94795aSAndroid Build Coastguard Worker        --api-signature $(path_to_api_signature_file "frameworks-base-api-system-server-current.txt") \
117*9e94795aSAndroid Build Coastguard Worker        --flag-values $(gettop)/out/soong/.intermediates/all_aconfig_declarations.pb
118*9e94795aSAndroid Build Coastguard Worker
119*9e94795aSAndroid Build Coastguard Worker    echo
120*9e94795aSAndroid Build Coastguard Worker    echo "# module-lib"
121*9e94795aSAndroid Build Coastguard Worker    check-flagged-apis list \
122*9e94795aSAndroid Build Coastguard Worker        --api-signature $(path_to_api_signature_file "frameworks-base-api-module-lib-current.txt") \
123*9e94795aSAndroid Build Coastguard Worker        --flag-values $(gettop)/out/soong/.intermediates/all_aconfig_declarations.pb
124*9e94795aSAndroid Build Coastguard Worker}
125*9e94795aSAndroid Build Coastguard Worker
126*9e94795aSAndroid Build Coastguard Workerbuild_cmd=build
127*9e94795aSAndroid Build Coastguard Workerif [[ "$1" == "--skip-build" ]]; then
128*9e94795aSAndroid Build Coastguard Worker    build_cmd=noop
129*9e94795aSAndroid Build Coastguard Worker    shift 1
130*9e94795aSAndroid Build Coastguard Workerfi
131*9e94795aSAndroid Build Coastguard Worker
132*9e94795aSAndroid Build Coastguard Workercase "$1" in
133*9e94795aSAndroid Build Coastguard Worker    check) $build_cmd && run_check ;;
134*9e94795aSAndroid Build Coastguard Worker    list) $build_cmd && run_list ;;
135*9e94795aSAndroid Build Coastguard Worker    *) echo "usage: $(basename $0): [--skip-build] check|list"; exit 1
136*9e94795aSAndroid Build Coastguard Workeresac
137