Skip to content

Commit 855d74a

Browse files
committed
Enable libraries to have boot loader configuration
1 parent 195b3ea commit 855d74a

File tree

1 file changed

+26
-37
lines changed

1 file changed

+26
-37
lines changed

tools/config/__init__.py

Lines changed: 26 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -441,6 +441,9 @@ def __init__(self, tgt, top_level_dirs=None, app_config=None):
441441
self.target = tgt
442442
self.target = deepcopy(self.target)
443443
self.target_labels = self.target.labels
444+
for override in self.__unused_overrides:
445+
_, attr = override.split(".")
446+
setattr(self.target, attr, None)
444447

445448
self.cumulative_overrides = {key: ConfigCumulativeOverride(key)
446449
for key in CUMULATIVE_ATTRIBUTES}
@@ -488,15 +491,11 @@ def add_config_files(self, flist):
488491
@property
489492
def has_regions(self):
490493
"""Does this config have regions defined?"""
491-
if 'target_overrides' in self.app_config_data:
492-
target_overrides = self.app_config_data['target_overrides'].get(
493-
self.target.name, {})
494-
return ('target.bootloader_img' in target_overrides or
495-
'target.restrict_size' in target_overrides or
496-
'target.mbed_app_start' in target_overrides or
497-
'target.mbed_app_size' in target_overrides)
498-
else:
499-
return False
494+
for override in self.__unused_overrides:
495+
_, attr = override.split(".")
496+
if getattr(self.target, attr, None):
497+
return True
498+
return False
500499

501500
@property
502501
def sectors(self):
@@ -526,12 +525,8 @@ def regions(self):
526525
"targets.json `device_name` not found in "
527526
"arm_pack_manager index.")
528527
cmsis_part = cache.index[self.target.device_name]
529-
target_overrides = self.app_config_data['target_overrides'].get(
530-
self.target.name, {})
531-
if (('target.bootloader_img' in target_overrides or
532-
'target.restrict_size' in target_overrides) and
533-
('target.mbed_app_start' in target_overrides or
534-
'target.mbed_app_size' in target_overrides)):
528+
if ((self.target.bootloader_img or self.target.restrict_size) and
529+
(self.target.mbed_app_start or self.target.mbed_app_size)):
535530
raise ConfigException(
536531
"target.bootloader_img and target.restirct_size are "
537532
"incompatible with target.mbed_app_start and "
@@ -546,23 +541,19 @@ def regions(self):
546541
except KeyError:
547542
raise ConfigException("Not enough information in CMSIS packs to "
548543
"build a bootloader project")
549-
if ('target.bootloader_img' in target_overrides or
550-
'target.restrict_size' in target_overrides):
551-
return self._generate_bootloader_build(target_overrides,
552-
rom_start, rom_size)
553-
elif ('target.mbed_app_start' in target_overrides or
554-
'target.mbed_app_size' in target_overrides):
555-
return self._generate_linker_overrides(target_overrides,
556-
rom_start, rom_size)
544+
if self.target.bootloader_img or self.target.restrict_size:
545+
return self._generate_bootloader_build(rom_start, rom_size)
546+
elif self.target.mbed_app_start or self.target.mbed_app_size:
547+
return self._generate_linker_overrides(rom_start, rom_size)
557548
else:
558549
raise ConfigException(
559550
"Bootloader build requested but no bootlader configuration")
560551

561-
def _generate_bootloader_build(self, target_overrides, rom_start, rom_size):
552+
def _generate_bootloader_build(self, rom_start, rom_size):
562553
start = rom_start
563-
if 'target.bootloader_img' in target_overrides:
554+
if self.target.bootloader_img:
564555
basedir = abspath(dirname(self.app_config_location))
565-
filename = join(basedir, target_overrides['target.bootloader_img'])
556+
filename = join(basedir, self.target.bootloader_img)
566557
if not exists(filename):
567558
raise ConfigException("Bootloader %s not found" % filename)
568559
part = intelhex_offset(filename, offset=rom_start)
@@ -574,8 +565,8 @@ def _generate_bootloader_build(self, target_overrides, rom_start, rom_size):
574565
yield Region("bootloader", rom_start, part_size, False,
575566
filename)
576567
start = rom_start + part_size
577-
if 'target.restrict_size' in target_overrides:
578-
new_size = int(target_overrides['target.restrict_size'], 0)
568+
if self.target.restrict_size is not None:
569+
new_size = int(self.target.restrict_size, 0)
579570
new_size = Config._align_floor(start + new_size, self.sectors) - start
580571
yield Region("application", start, new_size, True, None)
581572
start += new_size
@@ -618,14 +609,13 @@ def report(self):
618609
return {'app_config': self.app_config_location,
619610
'library_configs': map(relpath, self.processed_configs.keys())}
620611

621-
@staticmethod
622-
def _generate_linker_overrides(target_overrides, rom_start, rom_size):
623-
if 'target.mbed_app_start' in target_overrides:
624-
start = int(target_overrides['target.mbed_app_start'], 0)
612+
def _generate_linker_overrides(self, rom_start, rom_size):
613+
if self.target.mbed_app_start is not None:
614+
start = int(self.target.mbed_app_start, 0)
625615
else:
626616
start = rom_start
627-
if 'target.mbed_app_size' in target_overrides:
628-
size = int(target_overrides['target.mbed_app_size'], 0)
617+
if self.target.mbed_app_size is not None:
618+
size = int(self.target.mbed_app_size, 0)
629619
else:
630620
size = (rom_size + rom_start) - start
631621
if start < rom_start:
@@ -701,10 +691,9 @@ def _process_config_and_overrides(self, data, params, unit_name, unit_kind):
701691
if full_name in params:
702692
params[full_name].set_value(val, unit_name, unit_kind,
703693
label)
704-
elif name in self.__unused_overrides:
705-
pass
706694
elif (name.startswith("target.") and
707-
unit_kind is "application"):
695+
unit_kind is "application" or
696+
name in self.__unused_overrides):
708697
_, attribute = name.split(".")
709698
setattr(self.target, attribute, val)
710699
else:

0 commit comments

Comments
 (0)