Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 83eeebb4 authored by Jingwen Chen's avatar Jingwen Chen
Browse files

envsetup: add bmod to get Bazel label of a Soong module.

This benefits interactive workflows of folks who are used to typing just
module names on the command line, and lowers the cognitive load to find
the package name, and can be used to check if a module is converted.

Can be used as :

$ bmod libaapt2
//frameworks/base/tools/aapt2:libaapt2
$ b build $(bmod aapt2)

If the mod is not in the bp2build metrics file, it returns:

$ bmod nonexistent
nonexistent is not converted to Bazel.

Test: build/make/core/tests/b_tests.sh
Change-Id: I245665a393621a47598e6743c0fedcd87ac33631
parent 694cb51d
Loading
Loading
Loading
Loading
+39 −0
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@ Invoke ". build/envsetup.sh" from your shell to add the following functions to y
- godir:      Go to the directory containing a file.
- allmod:     List all modules.
- gomod:      Go to the directory containing a module.
- bmod:       Get the Bazel label of a Soong module if it is converted with bp2build.
- pathmod:    Get the directory containing a module.
- outmod:     Gets the location of a module's installed outputs with a certain extension.
- dirmods:    Gets the modules defined in a given directory.
@@ -430,6 +431,7 @@ function addcompletions()
    complete -F _complete_android_module_names gomod
    complete -F _complete_android_module_names outmod
    complete -F _complete_android_module_names installmod
    complete -F _complete_android_module_names bmod
    complete -F _complete_android_module_names m
}

@@ -1608,6 +1610,43 @@ function allmod() {
    python3 -c "import json; print('\n'.join(sorted(json.load(open('$ANDROID_PRODUCT_OUT/module-info.json')).keys())))"
}

# Return the Bazel label of a Soong module if it is converted with bp2build.
function bmod()
(
    if [ $# -ne 1 ]; then
        echo "usage: bmod <module>" >&2
        return 1
    fi

    # We could run bp2build here, but it might trigger bp2build invalidation
    # when used with `b` (e.g. --run_soong_tests) and/or add unnecessary waiting
    # time overhead.
    #
    # For a snappy result, use the latest generated version in soong_injection,
    # and ask users to run m bp2build if it doesn't exist.
    converted_json="out/soong/soong_injection/metrics/converted_modules_path_map.json"

    if [ ! -f $(gettop)/${converted_json} ]; then
      echo "bp2build files not found. Have you ran 'm bp2build'?" >&2
      return 1
    fi

    local target_label=$(python3 -c "import json
module = '$1'
converted_json='$converted_json'
bp2build_converted_map = json.load(open(converted_json))
if module not in bp2build_converted_map:
    exit(1)
print(bp2build_converted_map[module] + ':' + module)")

    if [ -z "${target_label}" ]; then
      echo "$1 is not converted to Bazel." >&2
      return 1
    else
      echo "${target_label}"
    fi
)

# Get the path of a specific module in the android tree, as cached in module-info.json.
# If any build change is made, and it should be reflected in the output, you should run
# 'refreshmod' first.  Note: This is the inverse of dirmods.
+5 −0
Original line number Diff line number Diff line
@@ -26,3 +26,8 @@ b build --run-soong-tests "$test_target"
b --run-soong-tests build "$test_target"
b cquery 'kind(test, //build/bazel/examples/android_app/...)' --config=android
b run $test_target -- --help >/dev/null

# Workflow tests for bmod
bmod libm
b run $(bmod fastboot) -- help
b build $(bmod libm) $(bmod libcutils) --config=android