xref: /aosp_15_r20/build/soong/bin/overrideflags (revision 333d2b3687b3a337dbcca9d65000bca186795e39)
1*333d2b36SAndroid Build Coastguard Worker#!/bin/bash -e
2*333d2b36SAndroid Build Coastguard Worker# Copyright (C) 2023 The Android Open Source Project
3*333d2b36SAndroid Build Coastguard Worker#
4*333d2b36SAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License");
5*333d2b36SAndroid Build Coastguard Worker# you may not use this file except in compliance with the License.
6*333d2b36SAndroid Build Coastguard Worker# You may obtain a copy of the License at
7*333d2b36SAndroid Build Coastguard Worker#
8*333d2b36SAndroid Build Coastguard Worker#      http://www.apache.org/licenses/LICENSE-2.0
9*333d2b36SAndroid Build Coastguard Worker#
10*333d2b36SAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
11*333d2b36SAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS,
12*333d2b36SAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*333d2b36SAndroid Build Coastguard Worker# See the License for the specific language governing permissions and
14*333d2b36SAndroid Build Coastguard Worker# limitations under the License.
15*333d2b36SAndroid Build Coastguard Worker
16*333d2b36SAndroid Build Coastguard Worker
17*333d2b36SAndroid Build Coastguard Workersource $(cd $(dirname $BASH_SOURCE) &> /dev/null && pwd)/../../make/shell_utils.sh
18*333d2b36SAndroid Build Coastguard Worker
19*333d2b36SAndroid Build Coastguard Workerrequire_top
20*333d2b36SAndroid Build Coastguard Worker
21*333d2b36SAndroid Build Coastguard Workerfunction print_help() {
22*333d2b36SAndroid Build Coastguard Worker    echo -e "overrideflags is used to set default value for local build."
23*333d2b36SAndroid Build Coastguard Worker    echo -e "\nOptions:"
24*333d2b36SAndroid Build Coastguard Worker    echo -e "\t--release-config  \tPath to release configuration directory. Required"
25*333d2b36SAndroid Build Coastguard Worker    echo -e "\t--no-edit         \tIf present, skip editing flag value file."
26*333d2b36SAndroid Build Coastguard Worker    echo -e "\t-h/--help         \tShow this help."
27*333d2b36SAndroid Build Coastguard Worker}
28*333d2b36SAndroid Build Coastguard Worker
29*333d2b36SAndroid Build Coastguard Workerfunction main() {
30*333d2b36SAndroid Build Coastguard Worker    while (($# > 0)); do
31*333d2b36SAndroid Build Coastguard Worker        case $1 in
32*333d2b36SAndroid Build Coastguard Worker        --release-config)
33*333d2b36SAndroid Build Coastguard Worker            if [[ $# -le 1 ]]; then
34*333d2b36SAndroid Build Coastguard Worker                echo "--release-config requires a path"
35*333d2b36SAndroid Build Coastguard Worker                return 1
36*333d2b36SAndroid Build Coastguard Worker            fi
37*333d2b36SAndroid Build Coastguard Worker            local release_config_dir="$2"
38*333d2b36SAndroid Build Coastguard Worker            shift 2
39*333d2b36SAndroid Build Coastguard Worker            ;;
40*333d2b36SAndroid Build Coastguard Worker        --no-edit)
41*333d2b36SAndroid Build Coastguard Worker            local no_edit="true"
42*333d2b36SAndroid Build Coastguard Worker            shift 1
43*333d2b36SAndroid Build Coastguard Worker            ;;
44*333d2b36SAndroid Build Coastguard Worker        -h|--help)
45*333d2b36SAndroid Build Coastguard Worker            print_help
46*333d2b36SAndroid Build Coastguard Worker            return
47*333d2b36SAndroid Build Coastguard Worker            ;;
48*333d2b36SAndroid Build Coastguard Worker        *)
49*333d2b36SAndroid Build Coastguard Worker            echo "$1 is unrecognized"
50*333d2b36SAndroid Build Coastguard Worker            print_help
51*333d2b36SAndroid Build Coastguard Worker            return 1
52*333d2b36SAndroid Build Coastguard Worker            ;;
53*333d2b36SAndroid Build Coastguard Worker        esac
54*333d2b36SAndroid Build Coastguard Worker    done
55*333d2b36SAndroid Build Coastguard Worker
56*333d2b36SAndroid Build Coastguard Worker
57*333d2b36SAndroid Build Coastguard Worker
58*333d2b36SAndroid Build Coastguard Worker    case $(uname -s) in
59*333d2b36SAndroid Build Coastguard Worker        Darwin)
60*333d2b36SAndroid Build Coastguard Worker            local host_arch=darwin-x86
61*333d2b36SAndroid Build Coastguard Worker            ;;
62*333d2b36SAndroid Build Coastguard Worker        Linux)
63*333d2b36SAndroid Build Coastguard Worker            local host_arch=linux-x86
64*333d2b36SAndroid Build Coastguard Worker            ;;
65*333d2b36SAndroid Build Coastguard Worker        *)
66*333d2b36SAndroid Build Coastguard Worker            >&2 echo Unknown host $(uname -s)
67*333d2b36SAndroid Build Coastguard Worker            return
68*333d2b36SAndroid Build Coastguard Worker            ;;
69*333d2b36SAndroid Build Coastguard Worker    esac
70*333d2b36SAndroid Build Coastguard Worker
71*333d2b36SAndroid Build Coastguard Worker    if [[ -z "${release_config_dir}" ]]; then
72*333d2b36SAndroid Build Coastguard Worker        echo "Please provide release configuration path by --release-config"
73*333d2b36SAndroid Build Coastguard Worker        exit 1
74*333d2b36SAndroid Build Coastguard Worker    elif [ ! -d "${release_config_dir}" ]; then
75*333d2b36SAndroid Build Coastguard Worker        echo "${release_config_dir} is an invalid directory"
76*333d2b36SAndroid Build Coastguard Worker        exit 1
77*333d2b36SAndroid Build Coastguard Worker    fi
78*333d2b36SAndroid Build Coastguard Worker    local T="$(gettop)"
79*333d2b36SAndroid Build Coastguard Worker    local aconfig_dir="${T}"/build/make/tools/aconfig/
80*333d2b36SAndroid Build Coastguard Worker    local overrideflag_py="${aconfig_dir}"/overrideflags/overrideflags.py
81*333d2b36SAndroid Build Coastguard Worker    local overridefile="${release_config_dir}/aconfig/override_values.textproto"
82*333d2b36SAndroid Build Coastguard Worker
83*333d2b36SAndroid Build Coastguard Worker    # Edit override file
84*333d2b36SAndroid Build Coastguard Worker    if [[ -z "${no_edit}" ]]; then
85*333d2b36SAndroid Build Coastguard Worker        editor="${EDITOR:-$(which vim)}"
86*333d2b36SAndroid Build Coastguard Worker
87*333d2b36SAndroid Build Coastguard Worker        eval "${editor} ${overridefile}"
88*333d2b36SAndroid Build Coastguard Worker        if [ $? -ne 0 ]; then
89*333d2b36SAndroid Build Coastguard Worker            echo "Fail to set override values"
90*333d2b36SAndroid Build Coastguard Worker            return 1
91*333d2b36SAndroid Build Coastguard Worker        fi
92*333d2b36SAndroid Build Coastguard Worker    fi
93*333d2b36SAndroid Build Coastguard Worker
94*333d2b36SAndroid Build Coastguard Worker    ${T}/prebuilts/build-tools/${host_arch}/bin/py3-cmd -u "${overrideflag_py}" \
95*333d2b36SAndroid Build Coastguard Worker        --overrides "${overridefile}" \
96*333d2b36SAndroid Build Coastguard Worker        --out "${release_config_dir}/aconfig"
97*333d2b36SAndroid Build Coastguard Worker}
98*333d2b36SAndroid Build Coastguard Worker
99*333d2b36SAndroid Build Coastguard Worker
100*333d2b36SAndroid Build Coastguard Workermain "$@"
101