mirror of https://github.com/ARMmbed/mbed-os.git
Rework find_policy() in post build script to enable default locations
parent
66f6e2a199
commit
fc42c74e7b
|
@ -24,6 +24,7 @@ from struct import (pack, unpack)
|
|||
from shutil import copy2
|
||||
import json
|
||||
from intelhex import IntelHex, hex2bin, bin2hex
|
||||
from pathlib import Path
|
||||
|
||||
from ..config import ConfigException
|
||||
|
||||
|
@ -171,28 +172,10 @@ def sign_image(toolchain, resourses, elf, binf, m0hex):
|
|||
except KeyError:
|
||||
raise ConfigException("[PSOC6.sign_image] Target " + toolchain.target.name + " is not supported in cysecuretools.")
|
||||
|
||||
from pathlib import Path, PurePath
|
||||
policy_file = find_policy(toolchain)
|
||||
|
||||
mbed_os_root = Path(os.getcwd())
|
||||
|
||||
policy_path = Path(toolchain.target.policy_file)
|
||||
if policy_path.is_absolute():
|
||||
policy_file = policy_path
|
||||
else:
|
||||
policy_path = mbed_os_root / policy_path
|
||||
|
||||
if os.path.isfile(str(policy_path)):
|
||||
policy_file = policy_path
|
||||
else:
|
||||
policy_file = Path(find_policy(toolchain, resourses))
|
||||
|
||||
toolchain.notify.info("[PSOC6.sign_image] Using policy file: " + str(policy_file))
|
||||
|
||||
# Append cysecuretools path to sys.path and import cysecuretools. This will
|
||||
# prioritize system installations of cysecuretools over the included
|
||||
# cysecuretools.
|
||||
#sb_tools_path = mbed_os_root / Path("targets/TARGET_Cypress/TARGET_PSOC6/")
|
||||
#sys.path.append(str(sb_tools_path))
|
||||
import cysecuretools
|
||||
|
||||
tools = cysecuretools.CySecureTools(secure_target, str(policy_file))
|
||||
|
@ -208,7 +191,8 @@ def sign_image(toolchain, resourses, elf, binf, m0hex):
|
|||
complete(toolchain, elf, hexf0=binf, hexf1=m0hex)
|
||||
|
||||
else:
|
||||
raise ConfigException("[PSOC6.sign_image] Boot scheme " + str(toolchain.target.boot_scheme) + "is not supported. Supported boot schemes are 'single_image' and 'multi_image' ")
|
||||
raise ConfigException("[PSOC6.sign_image] Boot scheme " + str(toolchain.target.boot_scheme) + \
|
||||
"is not supported. Supported boot schemes are 'single_image' and 'multi_image' ")
|
||||
|
||||
|
||||
def sign_application(toolchain, tools, binary, image_id):
|
||||
|
@ -228,28 +212,46 @@ def sign_application(toolchain, tools, binary, image_id):
|
|||
+ str(image_id) + " is " + hex(address) + ", " + hex(size))
|
||||
|
||||
|
||||
def find_policy(toolchain, resources):
|
||||
def find_policy(toolchain):
|
||||
"""
|
||||
Locate path to policy file, defined in targets.json
|
||||
Locate path to policy file, by name defined in targets.json
|
||||
:param toolchain: toolchain object from mbed build system
|
||||
:param resources: resources object from mbed build system
|
||||
"""
|
||||
policy_filename = toolchain.target.policy_file
|
||||
|
||||
if policy_filename is None:
|
||||
return None
|
||||
# Locate user-specified image
|
||||
from tools.resources import FileType
|
||||
json_files = resources.get_file_paths(FileType.JSON)
|
||||
policy = next((f for f in json_files if os.path.basename(f) == policy_filename), None)
|
||||
mbed_os_root = Path(os.getcwd())
|
||||
|
||||
policy_path = Path(toolchain.target.policy_file)
|
||||
|
||||
if policy:
|
||||
toolchain.notify.info("Policy file found: %s." % policy)
|
||||
# Absolute path provided
|
||||
if policy_path.is_absolute():
|
||||
policy_file = policy_path
|
||||
|
||||
# May also be relative to mbed-os file scturcture
|
||||
else:
|
||||
toolchain.notify.info("Policy file %s not found. Aborting." % policy_filename)
|
||||
policy_path = mbed_os_root / policy_path
|
||||
|
||||
if os.path.exists(str(policy_path)):
|
||||
policy_file = policy_path
|
||||
|
||||
else:
|
||||
default_path = Path("targets/TARGET_Cypress/TARGET_PSOC6/") / \
|
||||
Path("TARGET_" + toolchain.target.name) / Path("policy") / \
|
||||
toolchain.target.policy_file
|
||||
|
||||
# Consider default location
|
||||
policy_file = mbed_os_root / default_path
|
||||
|
||||
if not os.path.exists(str(policy_file)):
|
||||
policy_file = mbed_os_root / "mbed-os" / default_path
|
||||
|
||||
|
||||
if os.path.exists(str(policy_file)):
|
||||
toolchain.notify.info("Policy file found: %s." % policy_file)
|
||||
else:
|
||||
toolchain.notify.info("Policy file %s not found. Aborting." % policy_path)
|
||||
raise ConfigException("Required policy file not found.")
|
||||
|
||||
return policy
|
||||
return policy_file
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue