Complete Yocto mirror with license table for TQMa6UL (2038-compliance)
- 264 license table entries with exact download URLs (224/264 resolved) - Complete sources/ directory with all BitBake recipes - Build configuration: tqma6ul-multi-mba6ulx, spaetzle (musl) - Full traceability for Softwarefreigabeantrag - GCC 13.4.0, Linux 6.6.102, U-Boot 2023.04, musl 1.2.4 - License distribution: GPL-2.0 (24), MIT (23), GPL-2.0+ (18), BSD-3 (16)
This commit is contained in:
154
sources/poky/scripts/tiny/ksum.py
Executable file
154
sources/poky/scripts/tiny/ksum.py
Executable file
@@ -0,0 +1,154 @@
|
||||
#!/usr/bin/env python3
|
||||
#
|
||||
# Copyright (c) 2016, Intel Corporation.
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
#
|
||||
# DESCRIPTION 'ksum.py' generates a combined summary of vmlinux and
|
||||
# module sizes for a built kernel, as a quick tool for comparing the
|
||||
# overall effects of systemic tinification changes. Execute from the
|
||||
# base directory of the kernel build you want to summarize. Setting
|
||||
# the 'verbose' flag will display the sizes for each file included in
|
||||
# the summary.
|
||||
#
|
||||
# AUTHORS
|
||||
# Tom Zanussi <tom.zanussi (at] linux.intel.com>
|
||||
#
|
||||
|
||||
__version__ = "0.1.0"
|
||||
|
||||
# Python Standard Library modules
|
||||
import os
|
||||
import sys
|
||||
import getopt
|
||||
from subprocess import *
|
||||
|
||||
def usage():
|
||||
prog = os.path.basename(sys.argv[0])
|
||||
print('Usage: %s [OPTION]...' % prog)
|
||||
print(' -v, display sizes for each file')
|
||||
print(' -h, --help display this help and exit')
|
||||
print('')
|
||||
print('Run %s from the top-level Linux kernel build directory.' % prog)
|
||||
|
||||
verbose = False
|
||||
|
||||
n_ko_files = 0
|
||||
ko_file_list = []
|
||||
|
||||
ko_text = 0
|
||||
ko_data = 0
|
||||
ko_bss = 0
|
||||
ko_total = 0
|
||||
|
||||
vmlinux_file = ""
|
||||
vmlinux_level = 0
|
||||
|
||||
vmlinux_text = 0
|
||||
vmlinux_data = 0
|
||||
vmlinux_bss = 0
|
||||
vmlinux_total = 0
|
||||
|
||||
def is_vmlinux_file(filename):
|
||||
global vmlinux_level
|
||||
if filename == ("vmlinux") and vmlinux_level == 0:
|
||||
vmlinux_level += 1
|
||||
return True
|
||||
return False
|
||||
|
||||
def is_ko_file(filename):
|
||||
if filename.endswith(".ko"):
|
||||
return True
|
||||
return False
|
||||
|
||||
def collect_object_files():
|
||||
print("Collecting object files recursively from %s..." % os.getcwd())
|
||||
for dirpath, dirs, files in os.walk(os.getcwd()):
|
||||
for filename in files:
|
||||
if is_ko_file(filename):
|
||||
ko_file_list.append(os.path.join(dirpath, filename))
|
||||
elif is_vmlinux_file(filename):
|
||||
global vmlinux_file
|
||||
vmlinux_file = os.path.join(dirpath, filename)
|
||||
print("Collecting object files [DONE]")
|
||||
|
||||
def add_ko_file(filename):
|
||||
p = Popen("size -t " + filename, shell=True, stdout=PIPE, stderr=PIPE)
|
||||
output = p.communicate()[0].splitlines()
|
||||
if len(output) > 2:
|
||||
sizes = output[-1].split()[0:4]
|
||||
if verbose:
|
||||
print(" %10d %10d %10d %10d\t" % \
|
||||
(int(sizes[0]), int(sizes[1]), int(sizes[2]), int(sizes[3])), end=' ')
|
||||
print("%s" % filename[len(os.getcwd()) + 1:])
|
||||
global n_ko_files, ko_text, ko_data, ko_bss, ko_total
|
||||
ko_text += int(sizes[0])
|
||||
ko_data += int(sizes[1])
|
||||
ko_bss += int(sizes[2])
|
||||
ko_total += int(sizes[3])
|
||||
n_ko_files += 1
|
||||
|
||||
def get_vmlinux_totals():
|
||||
p = Popen("size -t " + vmlinux_file, shell=True, stdout=PIPE, stderr=PIPE)
|
||||
output = p.communicate()[0].splitlines()
|
||||
if len(output) > 2:
|
||||
sizes = output[-1].split()[0:4]
|
||||
if verbose:
|
||||
print(" %10d %10d %10d %10d\t" % \
|
||||
(int(sizes[0]), int(sizes[1]), int(sizes[2]), int(sizes[3])), end=' ')
|
||||
print("%s" % vmlinux_file[len(os.getcwd()) + 1:])
|
||||
global vmlinux_text, vmlinux_data, vmlinux_bss, vmlinux_total
|
||||
vmlinux_text += int(sizes[0])
|
||||
vmlinux_data += int(sizes[1])
|
||||
vmlinux_bss += int(sizes[2])
|
||||
vmlinux_total += int(sizes[3])
|
||||
|
||||
def sum_ko_files():
|
||||
for ko_file in ko_file_list:
|
||||
add_ko_file(ko_file)
|
||||
|
||||
def main():
|
||||
try:
|
||||
opts, args = getopt.getopt(sys.argv[1:], "vh", ["help"])
|
||||
except getopt.GetoptError as err:
|
||||
print('%s' % str(err))
|
||||
usage()
|
||||
sys.exit(2)
|
||||
|
||||
for o, a in opts:
|
||||
if o == '-v':
|
||||
global verbose
|
||||
verbose = True
|
||||
elif o in ('-h', '--help'):
|
||||
usage()
|
||||
sys.exit(0)
|
||||
else:
|
||||
assert False, "unhandled option"
|
||||
|
||||
collect_object_files()
|
||||
sum_ko_files()
|
||||
get_vmlinux_totals()
|
||||
|
||||
print("\nTotals:")
|
||||
print("\nvmlinux:")
|
||||
print(" text\tdata\t\tbss\t\ttotal")
|
||||
print(" %-10d\t%-10d\t%-10d\t%-10d" % \
|
||||
(vmlinux_text, vmlinux_data, vmlinux_bss, vmlinux_total))
|
||||
print("\nmodules (%d):" % n_ko_files)
|
||||
print(" text\tdata\t\tbss\t\ttotal")
|
||||
print(" %-10d\t%-10d\t%-10d\t%-10d" % \
|
||||
(ko_text, ko_data, ko_bss, ko_total))
|
||||
print("\nvmlinux + modules:")
|
||||
print(" text\tdata\t\tbss\t\ttotal")
|
||||
print(" %-10d\t%-10d\t%-10d\t%-10d" % \
|
||||
(vmlinux_text + ko_text, vmlinux_data + ko_data, \
|
||||
vmlinux_bss + ko_bss, vmlinux_total + ko_total))
|
||||
|
||||
if __name__ == "__main__":
|
||||
try:
|
||||
ret = main()
|
||||
except Exception:
|
||||
ret = 1
|
||||
import traceback
|
||||
traceback.print_exc(5)
|
||||
sys.exit(ret)
|
||||
Reference in New Issue
Block a user