mirror of
https://github.com/google/pebble.git
synced 2025-05-28 05:53:12 +00:00
Import of the watch repository from Pebble
This commit is contained in:
commit
3b92768480
10334 changed files with 2564465 additions and 0 deletions
158
platform/robert/boot/wscript
Normal file
158
platform/robert/boot/wscript
Normal file
|
@ -0,0 +1,158 @@
|
|||
# Build script for the robert bootloader
|
||||
#
|
||||
# This bootloader is different than the other bootloaders that are in the platform/boot tree
|
||||
# because it's still in development, so it's built as part of the normal firmware build, including
|
||||
# using the environments and waftools that are part of the firmware build. At a later point, we'll
|
||||
# want to split this out again to be more like the other bootloaders.
|
||||
|
||||
import sys
|
||||
import os
|
||||
from waflib import Logs
|
||||
|
||||
sys.path.append(os.path.abspath('waftools'))
|
||||
import gitinfo
|
||||
import objcopy
|
||||
|
||||
waf_dir = sys.path[0]
|
||||
sys.path.append(os.path.abspath('waftools'))
|
||||
sys.path.append(os.path.join(waf_dir, '../../../tools'))
|
||||
|
||||
def options(opt):
|
||||
opt.load('gcc')
|
||||
opt.add_option('--board', action='store',
|
||||
choices=['robert_bb', 'robert_bb2', 'cutts_bb', 'robert_evt'],
|
||||
help='Which board to build for (robert_bb, robert_bb2, cutts_bb, robert_evt)')
|
||||
opt.add_option('--nowatchdog', action='store_true',
|
||||
help='Disable automatic reboots when watchdog fires')
|
||||
opt.add_option('--display_test', action='store_true', help='Enables the diplsay test loop')
|
||||
|
||||
|
||||
def configure(conf):
|
||||
conf.env.BOARD = conf.options.board if conf.options.board != 'cutts_bb' else 'robert_bb'
|
||||
|
||||
# Find our binary tools
|
||||
conf.find_program('arm-none-eabi-gcc', var='CC', mandatory=True)
|
||||
conf.env.AS = conf.env.CC
|
||||
conf.find_program('arm-none-eabi-gcc-ar', var='AR', mandatory=True)
|
||||
|
||||
conf.load('gcc')
|
||||
conf.load('binary_header')
|
||||
|
||||
for tool in 'ar objcopy'.split():
|
||||
conf.find_program('arm-none-eabi-' + tool, var=tool.upper(),
|
||||
mandatory=True)
|
||||
|
||||
# Set up our compiler configuration
|
||||
CPU_FLAGS = ['-mcpu=cortex-m7', '-mthumb']
|
||||
OPT_FLAGS = ['-Os', '-g']
|
||||
C_FLAGS = [
|
||||
'-std=c11', '-ffunction-sections',
|
||||
'-Wall', '-Wextra', '-Werror', '-Wpointer-arith',
|
||||
'-Wno-unused-parameter', '-Wno-missing-field-initializers',
|
||||
'-Wno-error=unused-function', '-Wno-error=unused-variable',
|
||||
'-Wno-error=unused-parameter', '-Wno-error=unused-but-set-variable',
|
||||
'-Wno-packed-bitfield-compat'
|
||||
]
|
||||
LINK_FLAGS = ['-Wl,--gc-sections', '-specs=nano.specs']
|
||||
|
||||
conf.env.append_unique('CFLAGS', CPU_FLAGS + OPT_FLAGS + C_FLAGS)
|
||||
conf.env.append_unique('LINKFLAGS', LINK_FLAGS + CPU_FLAGS + OPT_FLAGS)
|
||||
|
||||
if conf.options.nowatchdog:
|
||||
conf.env.append_unique('DEFINES', 'NO_WATCHDOG')
|
||||
|
||||
if conf.options.display_test:
|
||||
conf.env.append_unique('DEFINES', 'DISPLAY_DEMO_LOOP')
|
||||
|
||||
conf.env.append_unique('DEFINES', [
|
||||
'_REENT_SMALL=1',
|
||||
'USE_STDPERIPH_DRIVER=1',
|
||||
'BOARD_{}=1'.format(conf.env.BOARD.upper())
|
||||
])
|
||||
|
||||
|
||||
# Load up other waftools that we need
|
||||
conf.load('objcopy ldscript', tooldir='waftools')
|
||||
|
||||
conf.recurse('vendor')
|
||||
|
||||
|
||||
def size_bootloader(ctx):
|
||||
"""prints size information of the firmware"""
|
||||
|
||||
elf = ctx.path.get_bld().find_node('robert_boot.elf')
|
||||
if elf is None:
|
||||
ctx.fatal('No bootloader ELF found for size')
|
||||
|
||||
bin = ctx.path.get_bld().find_node('robert_boot.hex')
|
||||
if bin is None:
|
||||
ctx.fatal('No bootloader BIN found for size')
|
||||
|
||||
import binutils
|
||||
text, data, bss = binutils.size(elf.abspath())
|
||||
total = text + data
|
||||
output = ('{:>7} {:>7} {:>7} {:>7} {:>7} filename\n'
|
||||
'{:7} {:7} {:7} {:7} {:7x} robert_boot.elf'.
|
||||
format('text', 'data', 'bss', 'dec', 'hex', text, data, bss, total, total))
|
||||
Logs.pprint('ORANGE', '\n' + output)
|
||||
|
||||
MAX_SIZE = 32 * 1024
|
||||
|
||||
if total > MAX_SIZE:
|
||||
ctx.fatal('Bootloader is too large! Size is 0x%x should be less than 0x%x'
|
||||
% (total, MAX_SIZE))
|
||||
else:
|
||||
Logs.pprint('ORANGE', 'Bootloader: {}/{} bytes used ({} free)\n'.format(total, MAX_SIZE,
|
||||
MAX_SIZE - total))
|
||||
|
||||
|
||||
def build(bld):
|
||||
elf_node = bld.path.get_bld().make_node('robert_boot.elf')
|
||||
|
||||
bld.recurse('vendor')
|
||||
|
||||
linkflags = ['-Wl,-Map,robert_boot.map']
|
||||
|
||||
sources = ['src/*.c',
|
||||
'src/drivers/**/*.c',
|
||||
'src/system/**/*.c',
|
||||
'src/util/**/*.c']
|
||||
|
||||
if bld.env.BOARD in ('robert_bb', 'robert_bb2'):
|
||||
sources.append('src/board/board_robert_bb.c')
|
||||
elif bld.env.BOARD in ('robert_evt',):
|
||||
sources.append('src/board/board_robert_evt.c')
|
||||
else:
|
||||
bld.fatal("Invalid board set %s" % bld.env.BOARD)
|
||||
|
||||
includes = ['src']
|
||||
|
||||
_generate_fpga_header(bld)
|
||||
|
||||
bld(features='subst',
|
||||
source='src/git_version.auto.h.in',
|
||||
target='src/git_version.auto.h',
|
||||
**gitinfo.get_git_revision(bld))
|
||||
|
||||
bld.program(features="objcopy",
|
||||
source=bld.path.ant_glob(sources),
|
||||
includes=includes,
|
||||
target=elf_node,
|
||||
ldscript='src/stm32f_flash_boot.ld',
|
||||
linkflags=linkflags,
|
||||
objcopy_bfdname='ihex',
|
||||
objcopy_target=elf_node.change_ext('.hex'),
|
||||
use=['stm32_stdlib'])
|
||||
bld(rule=objcopy.objcopy_simple_bin, source='robert_boot.elf', target='robert_boot.bin')
|
||||
|
||||
bld.add_post_fun(size_bootloader)
|
||||
|
||||
|
||||
def _generate_fpga_header(bld):
|
||||
bld(features='binary_header',
|
||||
source='../Robert_UL1K_bootloader_bitmap.fpga',
|
||||
target='src/drivers/display/bootloader_fpga_bitstream.auto.h',
|
||||
array_name='s_fpga_bitstream',
|
||||
compressed=True)
|
||||
|
||||
# vim:filetype=python
|
Loading…
Add table
Add a link
Reference in a new issue