| Sasha Smundak | 648e32c | 2022-12-15 14:36:03 -0800 | [diff] [blame] | 1 | #! /bin/bash -eu | 
 | 2 |  | 
 | 3 | # Run CKati step separately, tracing given Makefile variables. | 
 | 4 | # It is expected that the regular Android null build (`m nothing`) | 
 | 5 | # has been run so that $OUT_DIR/soong/Android-${TARGET_PRODUCT}.mk, | 
 | 6 | # $OUT_DIR/soong/make_vars-${TARGET_PRODUCT}.mk, etc. files exist. | 
 | 7 | # | 
 | 8 | # The output file is in JSON format and can be processed with, say, | 
 | 9 | # `jq`. For instance, the following invocation outputs all assignment | 
 | 10 | # traces concisely: | 
 | 11 | #  jq -c  '.assignments[] | (select (.operation == "assign")) | {("n"): .name, ("l"): .value_stack[0]?, ("v"): .value }' out/ckati.trace | 
 | 12 | # generates | 
 | 13 | #  {"n":"<var1>","l":"<file>:<line>","v":"<value1>"} | 
 | 14 | #  ... | 
 | 15 |  | 
 | 16 | function die() { format=$1; shift; printf "$format\n" $@; exit 1; } | 
 | 17 | function usage() { die "Usage: %s [-o FILE] VAR ...\n(without -o the output goes to ${outfile})"  ${0##*/}; } | 
 | 18 |  | 
 | 19 | [[ -d build/soong ]] || die "run this script from the top of the Android source tree" | 
 | 20 | declare -r out=${OUT_DIR:-out} | 
 | 21 | [[ -x ${out}/soong_ui ]] || die "run Android build first" | 
 | 22 | : ${TARGET_PRODUCT:?not set, run lunch?} | 
 | 23 | : ${TARGET_BUILD_VARIANT:?not set, run lunch?} | 
 | 24 | declare -r androidmk=${out}/soong/Android-${TARGET_PRODUCT}.mk | 
 | 25 | declare -r makevarsmk=${out}/soong/make_vars-${TARGET_PRODUCT}.mk | 
 | 26 | declare -r target_device_dir=$(${out}/soong_ui --dumpvar-mode TARGET_DEVICE_DIR) | 
 | 27 | : ${target_device_dir:?cannot find device directory for ${TARGET_PRODUCT}} | 
 | 28 | declare -r target_device=$(${out}/soong_ui --dumpvar-mode TARGET_DEVICE) | 
 | 29 | : ${target_device:?cannot find target device for ${TARGET_PRODUCT}} | 
 | 30 | declare -r timestamp_file=${out}/build_date.txt | 
 | 31 | # Files should exist, so ls should succeed: | 
 | 32 | ls -1d "$androidmk" "$makevarsmk" "$target_device_dir" "$timestamp_file" >/dev/null | 
 | 33 |  | 
 | 34 | outfile=${out}/ckati.trace | 
 | 35 | while getopts "ho:" opt; do | 
 | 36 |   case $opt in | 
 | 37 |     h) usage ;; | 
 | 38 |     o) outfile=$OPTARG ;; | 
 | 39 |     ?) usage ;; | 
 | 40 |   esac | 
 | 41 | done | 
 | 42 |  | 
 | 43 | if (($#>0)); then | 
 | 44 |   declare -a tracing=(--variable_assignment_trace_filter="$*" --dump_variable_assignment_trace "$outfile") | 
 | 45 | else | 
 | 46 |   printf "running ckati without tracing variables\n" | 
 | 47 | fi | 
 | 48 |  | 
 | 49 | # Touch one input for ckati, otherwise it will just print | 
 | 50 | # 'No need to regenerate ninja file' and exit. | 
 | 51 | touch "$androidmk" | 
 | 52 | prebuilts/build-tools/linux-x86/bin/ckati \ | 
 | 53 |   --gen_all_targets \ | 
 | 54 |   -i \ | 
 | 55 |   --ignore_optional_include=out/%.P \ | 
 | 56 |   --ninja \ | 
 | 57 |   --ninja_dir=out \ | 
 | 58 |   --ninja_suffix=-${TARGET_PRODUCT} \ | 
 | 59 |   --no_builtin_rules \ | 
 | 60 |   --no_ninja_prelude \ | 
 | 61 |   --regen \ | 
 | 62 |   --top_level_phony \ | 
 | 63 |   --use_find_emulator \ | 
 | 64 |   --use_ninja_phony_output \ | 
 | 65 |   --use_ninja_symlink_outputs \ | 
 | 66 |   --werror_find_emulator \ | 
 | 67 |   --werror_implicit_rules \ | 
 | 68 |   --werror_overriding_commands \ | 
 | 69 |   --werror_phony_looks_real \ | 
 | 70 |   --werror_real_to_phony \ | 
 | 71 |   --werror_suffix_rules \ | 
 | 72 |   --werror_writable \ | 
 | 73 |   --writable out/ \ | 
 | 74 |   -f build/make/core/main.mk \ | 
 | 75 |   "${tracing[@]}" \ | 
| Sorin Basca | 6b805b9 | 2024-07-18 09:39:00 +0000 | [diff] [blame] | 76 |   ANDROID_JAVA_HOME=prebuilts/jdk/jdk21/linux-x86 \ | 
| Sasha Smundak | 648e32c | 2022-12-15 14:36:03 -0800 | [diff] [blame] | 77 |   ASAN_SYMBOLIZER_PATH=$PWD/prebuilts/clang/host/linux-x86/llvm-binutils-stable/llvm-symbolizer \ | 
 | 78 |   BUILD_DATETIME_FILE="$timestamp_file" \ | 
 | 79 |   BUILD_HOSTNAME=$(hostname) \ | 
 | 80 |   BUILD_USERNAME="$USER" \ | 
| Sorin Basca | 6b805b9 | 2024-07-18 09:39:00 +0000 | [diff] [blame] | 81 |   JAVA_HOME=$PWD/prebuilts/jdk/jdk21/linux-x86 \ | 
| Sasha Smundak | 648e32c | 2022-12-15 14:36:03 -0800 | [diff] [blame] | 82 |   KATI_PACKAGE_MK_DIR="{$out}/target/product/${target_device}/CONFIG/kati_packaging" \ | 
 | 83 |   OUT_DIR="$out" \ | 
 | 84 |   PATH="$PWD/prebuilts/build-tools/path/linux-x86:$PWD/${out}/.path" \ | 
 | 85 |   PYTHONDONTWRITEBYTECODE=1 \ | 
 | 86 |   SOONG_ANDROID_MK="$androidmk" \ | 
 | 87 |   SOONG_MAKEVARS_MK="$makevarsmk" \ | 
 | 88 |   TARGET_BUILD_VARIANT="$TARGET_BUILD_VARIANT" \ | 
 | 89 |   TARGET_DEVICE_DIR="$target_device_dir" \ | 
 | 90 |   TARGET_PRODUCT=${TARGET_PRODUCT} \ | 
 | 91 |   TMPDIR="$PWD/$out/soong/.temp" |