blob: e69e9d652909bf4fef56f2514ad8fa3455fc3099 [file] [log] [blame]
# Copyright lowRISC contributors.
# Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0
cargo = find_program('cargo', required: false)
target = 'riscv32imc-unknown-none-elf'
build_type = 'release'
tock_board_dir = meson.source_root() / 'sw/device/tock/boards/opentitan'
toolchain_file = tock_board_dir / 'rust-toolchain'
manifest_path = tock_board_dir / 'Cargo.toml'
lock_path = tock_board_dir / 'Cargo.lock'
rust_flags = '-C link-arg=-Tlayout.ld ' + \
'-C linker=rust-lld ' + \
'-C linker-flavor=ld.lld ' + \
'-C relocation-model=dynamic-no-pic ' + \
'-C link-arg=-zmax-page-size=512'
build_tock_cmd = meson.source_root() / 'util/build_tock.sh'
if tock_local
run_command('ln', '-s', '-f', tock_board_dir / 'Cargo_local.toml', manifest_path)
run_command('touch', tock_board_dir / 'Cargo_local.lock')
run_command('ln', '-s', '-f', tock_board_dir / 'Cargo_local.lock', lock_path)
else
run_command('ln', '-s', '-f', tock_board_dir / 'Cargo_remote.toml', manifest_path)
run_command('ln', '-s', '-f', tock_board_dir / 'Cargo_remote.lock', lock_path)
endif
tock_raw = custom_target(
'tock_raw',
command: [
build_tock_cmd,
target,
build_type,
manifest_path,
'@OUTDIR@',
toolchain_file,
rust_flags,
],
output: target,
console: true,
build_always_stale: true,
build_by_default: false,
)
tock_elf = custom_target(
'tock_elf',
command: ['cp', '@INPUT@' / build_type / 'opentitan', '@OUTPUT@'],
depends: tock_raw,
input: tock_raw,
output: 'opentitan.elf',
build_always_stale: true,
build_by_default: false,
)
tock_bin = custom_target(
'tock_bin',
command: [
prog_objcopy,
# Remove .apps section to dramatically reduce binary size.
'--remove-section', '.apps',
'-O', 'binary',
'@INPUT@',
'@OUTPUT@'
],
depends: tock_elf,
input: tock_elf,
output: 'opentitan.bin',
build_always_stale: true,
build_by_default: false,
)
custom_target(
'tock_export',
command: export_embedded_target,
input: [tock_elf, tock_bin],
depends: [tock_elf, tock_bin],
output: 'tock',
build_always_stale: true,
build_by_default: false,
)