"""
The complete list of the remaining Make files in each partition for all lunch targets
How to run?
python3 $(path-to-file)/mk2bp_partition.py """
from pathlib import Path
import csv import datetime import os import shutil import subprocess import sys import time
def get_top():
path = '.' whilenot os.path.isfile(os.path.join(path, 'build/soong/soong_ui.bash')): if os.path.abspath(path) == '/':
sys.exit('Could not find android source tree root.')
path = os.path.join(path, '..') return os.path.abspath(path)
# get the values of a build variable def get_build_var(variable, product, build_variant): """Returns the result of the shell command get_build_var."""
env = {
**os.environ, 'TARGET_PRODUCT': product if product else'', 'TARGET_BUILD_VARIANT': build_variant if build_variant else'',
} return subprocess.run([ 'build/soong/soong_ui.bash', '--dumpvar-mode',
variable
], check=True, capture_output=True, env=env, text=True).stdout.strip()
def get_make_file_partitions():
lunch_targets = set(get_build_var("all_named_products", "", "").split())
total_lunch_targets = len(lunch_targets)
makefile_by_partition = dict()
partitions = set()
current_count = 0
start_time = time.time() # cannot run command `m lunch_target`
broken_targets = {"mainline_sdk", "ndk"} for lunch_target in sorted(lunch_targets):
current_count += 1
current_time = time.time()
print (current_count, "/", total_lunch_targets, lunch_target, datetime.timedelta(seconds=current_time - start_time)) if lunch_target in broken_targets: continue
installed_product_out = get_build_var("PRODUCT_OUT", lunch_target, "userdebug")
filename = os.path.join(installed_product_out, "mk2bp_remaining.csv")
copy_filename = os.path.join(installed_product_out, lunch_target + "_mk2bp_remaining.csv") # only generate if not exists ifnot os.path.exists(copy_filename):
bash_cmd = "bash build/soong/soong_ui.bash --make-mode TARGET_PRODUCT=" + lunch_target
bash_cmd += " TARGET_BUILD_VARIANT=userdebug " + filename
subprocess.run(bash_cmd, shell=True, text=True, check=True, stdout=subprocess.DEVNULL) # generate a copied .csv file, to avoid possible overwritings with open(copy_filename, "w") as file:
shutil.copyfile(filename, copy_filename)
# open mk2bp_remaining.csv file with open(copy_filename, "r") as csvfile:
reader = csv.reader(csvfile, delimiter=",", quotechar='"') # bypass the header row
next(reader, None) for row in reader: # read partition information
partition = row[2]
makefile_by_partition.setdefault(partition, set()).add(row[0])
partitions.add(partition)
# write merged make file list for each partition into a csv file
installed_path = Path(installed_product_out).parents[0].as_posix()
csv_path = installed_path + "/mk2bp_partition.csv" with open(csv_path, "wt") as csvfile:
writer = csv.writer(csvfile, delimiter=",")
count_makefile = 0 for partition in sorted(partitions):
number_file = len(makefile_by_partition[partition])
count_makefile += number_file
writer.writerow([partition, number_file]) for makefile in sorted(makefile_by_partition[partition]):
writer.writerow([makefile])
row = ["The total count of make files is ", count_makefile]
writer.writerow(row)
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.