mirror of
https://github.com/google/pebble.git
synced 2025-03-15 08:41:21 +00:00
134 lines
4.7 KiB
Python
134 lines
4.7 KiB
Python
import os
|
|
import sys
|
|
|
|
import waflib.Logs
|
|
|
|
sys.path.append(os.path.abspath('waftools'))
|
|
|
|
import gitinfo
|
|
|
|
def options(opt):
|
|
opt.load('compiler_c')
|
|
opt.add_option('--board', action='store', default='snowy_bb',
|
|
help='Which board to build for '
|
|
'(snowy_bb|snowy_evt|snowy_evt2|spalding)',
|
|
choices=[ 'snowy_bb',
|
|
'snowy_bb2', # Alias for snowy_evt2
|
|
'snowy_dvt', # Alias for snowy_evt2
|
|
'snowy_s3',
|
|
'snowy_evt',
|
|
'snowy_evt2',
|
|
'spalding'])
|
|
opt.add_option('--nowatchdog', action='store_true',
|
|
help='Do not enable watchdog timer or reset upon failure')
|
|
opt.add_option('--loglevel', type='int', default=0,
|
|
help='Set the logging verbosity [default: %default]')
|
|
opt.add_option('--big-bootloader', action='store_true',
|
|
help='Build for boards with an unprogrammed FPGA, loading '
|
|
'and launching firmware at 0x08010000')
|
|
|
|
def configure(conf):
|
|
if conf.options.board in ('snowy_bb2', 'snowy_dvt', 'snowy_s3'):
|
|
conf.options.board = 'snowy_evt2'
|
|
|
|
CPU_FLAGS = [
|
|
'-mcpu=cortex-m4', '-mthumb',
|
|
'-mfpu=fpv4-sp-d16', '-mfloat-abi=softfp',
|
|
]
|
|
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'
|
|
]
|
|
|
|
conf.find_program('arm-none-eabi-gcc', var='CC', mandatory=True)
|
|
conf.env.AS = conf.env.CC
|
|
for tool in 'ar objcopy'.split():
|
|
conf.find_program('arm-none-eabi-' + tool, var=tool.upper(),
|
|
mandatory=True)
|
|
conf.env.BOARD = conf.options.board
|
|
conf.env.MICRO_FAMILY = 'STM32F4'
|
|
conf.env.append_unique('CFLAGS', CPU_FLAGS + OPT_FLAGS + C_FLAGS)
|
|
conf.env.append_unique('DEFINES', [
|
|
'_REENT_SMALL=1',
|
|
'USE_STDPERIPH_DRIVER=1',
|
|
'BOARD_' + conf.options.board.upper(),
|
|
'MICRO_FAMILY_' + conf.env.MICRO_FAMILY,
|
|
])
|
|
conf.env.append_unique('LINKFLAGS',
|
|
['-Wl,--cref', '-Wl,--gc-sections', '-specs=nano.specs']
|
|
+ CPU_FLAGS + OPT_FLAGS)
|
|
|
|
if conf.options.nowatchdog:
|
|
conf.env.append_unique('DEFINES', 'NO_WATCHDOG')
|
|
|
|
if conf.options.loglevel >= 1:
|
|
conf.env.append_unique('DEFINES', 'PBL_LOG_ENABLED')
|
|
if conf.options.loglevel >= 2:
|
|
conf.env.append_unique('DEFINES', 'VERBOSE_LOGGING')
|
|
|
|
if conf.options.big_bootloader:
|
|
conf.env.append_unique('DEFINES', 'BLANK_FPGA')
|
|
conf.env.BOOTLOADER_LENGTH = '65536'
|
|
else:
|
|
conf.env.BOOTLOADER_LENGTH = '16384'
|
|
conf.env.append_unique(
|
|
'DEFINES', 'BOOTLOADER_LENGTH=' + conf.env.BOOTLOADER_LENGTH)
|
|
|
|
conf.load('gcc gas objcopy ldscript')
|
|
conf.load('binary_header')
|
|
conf.load('file_name_c_define')
|
|
|
|
conf.recurse('vendor')
|
|
|
|
def build(bld):
|
|
if bld.cmd == 'install':
|
|
raise Exception("install isn't a supported command. Did you mean flash?")
|
|
|
|
linkflags = ['-Wl,-Map,snowy_boot.map']
|
|
sources = (
|
|
bld.path.ant_glob('src/*.S') + bld.path.ant_glob('src/**/*.c') )
|
|
|
|
|
|
bld(features='subst',
|
|
source='src/git_version.auto.h.in',
|
|
target='src/git_version.auto.h',
|
|
**gitinfo.get_git_revision(bld))
|
|
_generate_fpga_header(bld)
|
|
bld.recurse('vendor')
|
|
bld(features='subst',
|
|
source='src/stm32f_flash_boot.ld.in',
|
|
target='src/stm32f_flash_boot.ld')
|
|
bld(features='c asm cprogram objcopy',
|
|
source=sources,
|
|
includes='src',
|
|
target='snowy_boot.elf',
|
|
ldscript='src/stm32f_flash_boot.ld',
|
|
linkflags=linkflags,
|
|
objcopy_bfdname='ihex',
|
|
objcopy_target='snowy_boot.hex',
|
|
use='stm32_stdlib')
|
|
|
|
def _generate_fpga_header(bld):
|
|
# This is temporary. The bootloader FPGA image will not need to be included
|
|
# in the bootloader once it is burned into the FPGA's NVCM.
|
|
if bld.env.BOARD in ('snowy_bb', 'snowy_evt'):
|
|
fpga_src = 'snowy_bb1_boot.fpga'
|
|
elif bld.env.BOARD in ('snowy_evt2',):
|
|
fpga_src = 'snowy_boot.fpga'
|
|
elif bld.env.BOARD in ('spalding',):
|
|
fpga_src = 'spalding_boot.fpga'
|
|
else:
|
|
fpga_src = None
|
|
|
|
if fpga_src:
|
|
bld(features='binary_header',
|
|
source='../' + fpga_src,
|
|
target='src/drivers/display/bootloader_fpga_bitstream.auto.h',
|
|
array_name='s_fpga_bitstream')
|
|
|
|
# vim:filetype=python
|