blob: ea8e8f34054f4755e857c6d8b62e6b1a449caa18 [file] [log] [blame]
#!/usr/bin/env python3
""" build_helper.py:
Build helper instantiates a build manager with user provided arguments,
or default ones.
"""
from __future__ import print_function
__copyright__ = """
/*
* Copyright (c) 2018-2019, Arm Limited. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*
*/
"""
__author__ = "Minos Galanakis"
__email__ = "minos.galanakis@linaro.org"
__project__ = "Trusted Firmware-M Open CI"
__status__ = "stable"
__version__ = "1.0"
import os
import sys
import time
import argparse
import datetime
from build_helper_configs import config_AN521
try:
from tfm_ci_pylib.utils import get_cmd_args, load_json
from tfm_ci_pylib.tfm_build_manager import TFM_Build_Manager
except ImportError:
dir_path = os.path.dirname(os.path.realpath(__file__))
sys.path.append(os.path.join(dir_path, "../"))
from tfm_ci_pylib.utils import get_cmd_args, load_json
from tfm_ci_pylib.tfm_build_manager import TFM_Build_Manager
def build(tfm_dir, build_dir, buid_report_f, build_config):
""" Instantiate a build manager class and build all configurations """
start_time = time.time()
bm = TFM_Build_Manager(tfm_dir=tfm_dir,
work_dir=build_dir,
cfg_dict=build_config,
report=buid_report_f,
install=True)
bm.start()
bm.join()
build_report = bm.get_report()
elapsed = time.time() - start_time
elapsed = str(datetime.timedelta(seconds=elapsed))
print("=============== Time Elapsed: %s ===================" % elapsed)
return bm.get_status(), build_report
def main(user_args):
""" Main logic """
if user_args.config_f:
try:
build_config = load_json(user_args.config_f)
except Exception as e:
print("Failed to load config %s. Exception: %s" % (build_config,
e.msg))
sys.exit(1)
else:
build_config = config_AN521
# Build everything
build_status, build_report = build(user_args.tfm_dir,
user_args.build_dir,
user_args.report,
build_config)
if not build_report:
print("Build Report Empty, check build status")
sys.exit(1)
if build_status:
print("Build Failed")
sys.exit(1)
# pprint(build_report)
print("Build Complete!")
sys.exit(0)
if __name__ == "__main__":
# Calcuate the workspace root directory relative to the script location
# Equivalent to realpath $(dirname ./build_helper/build_helper.py)/../../
root_path = os.path.dirname(os.path.realpath(__file__))
for i in range(2):
root_path = os.path.split(root_path)[0]
parser = argparse.ArgumentParser(description="")
parser.add_argument("-b", "--build_dir",
dest="build_dir",
action="store",
default="./builds",
help="Where to generate the artifacts")
parser.add_argument("-c", "--config_file",
dest="config_f",
action="store",
help="Manual configuration override file (JSON)")
parser.add_argument("-r", "--report",
dest="report",
action="store",
help="JSON file containing build report")
parser.add_argument("-t", "--tfm_dir",
dest="tfm_dir",
action="store",
default=os.path.join(root_path, "tf-m"),
help="TFM directory")
main(get_cmd_args(parser=parser))