c21dc3c8c1
1. Filtered out the Android.mk file if the Make modules on them are not in the PRODUCT_PACKAGES or the correspoding deps; 2. Merged the Android.mk file list by partitions for all lunch targets. Bug: 225256154 Test: lunch aosp_coral-eng; m out/target/product/coral/mk2bp_remaining.html Test: python3 build/make/tools/mk2bp_partition.py Change-Id: I40919e81ab3c6bd516379f0acd72932e8db50088
100 lines
3.7 KiB
Python
100 lines
3.7 KiB
Python
#!/usr/bin/env python3
|
|
|
|
"""
|
|
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 = '.'
|
|
while not 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
|
|
if not 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)
|
|
|
|
def main():
|
|
os.chdir(get_top())
|
|
get_make_file_partitions()
|
|
|
|
if __name__ == "__main__":
|
|
main()
|