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
|
from shutil import copy2
|
||||||
import json
|
import json
|
||||||
from intelhex import IntelHex, hex2bin, bin2hex
|
from intelhex import IntelHex, hex2bin, bin2hex
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
from ..config import ConfigException
|
from ..config import ConfigException
|
||||||
|
|
||||||
|
@ -171,28 +172,10 @@ def sign_image(toolchain, resourses, elf, binf, m0hex):
|
||||||
except KeyError:
|
except KeyError:
|
||||||
raise ConfigException("[PSOC6.sign_image] Target " + toolchain.target.name + " is not supported in cysecuretools.")
|
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))
|
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
|
import cysecuretools
|
||||||
|
|
||||||
tools = cysecuretools.CySecureTools(secure_target, str(policy_file))
|
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)
|
complete(toolchain, elf, hexf0=binf, hexf1=m0hex)
|
||||||
|
|
||||||
else:
|
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):
|
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))
|
+ 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 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:
|
mbed_os_root = Path(os.getcwd())
|
||||||
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)
|
|
||||||
|
|
||||||
if policy:
|
policy_path = Path(toolchain.target.policy_file)
|
||||||
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:
|
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.")
|
raise ConfigException("Required policy file not found.")
|
||||||
|
|
||||||
return policy
|
return policy_file
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue