| # Copyright lowRISC contributors. | |
| # Licensed under the Apache License, Version 2.0, see LICENSE for details. | |
| # SPDX-License-Identifier: Apache-2.0 | |
| # Mask ROM Linker Parameters | |
| # | |
| # See sw/device/exts/common/flash_link.ld for additional info about these | |
| # parameters. | |
| rom_ext_linkfile_slot_a = files(['rom_ext_slot_a.ld']) | |
| rom_ext_linkfile_slot_b = files(['rom_ext_slot_b.ld']) | |
| rom_ext_link_info = { | |
| 'rom_ext_slot_a' : | |
| [ | |
| # Link arguments for slot A. | |
| [ | |
| '-Wl,-L,@0@'.format(meson.source_root()), | |
| '-Wl,-T,@0@/@1@'.format(meson.source_root(), rom_ext_linkfile_slot_a[0]), | |
| embedded_target_extra_link_args, | |
| ], | |
| # Link dependency file for slot A. | |
| [ | |
| rom_ext_linkfile_slot_a, | |
| ], | |
| ], | |
| 'rom_ext_slot_b' : | |
| [ | |
| # Link arguments for slot B. | |
| [ | |
| '-Wl,-L,@0@'.format(meson.source_root()), | |
| '-Wl,-T,@0@/@1@'.format(meson.source_root(), rom_ext_linkfile_slot_b[0]), | |
| embedded_target_extra_link_args, | |
| ], | |
| # Link dependency file for slot B. | |
| [ | |
| rom_ext_linkfile_slot_b, | |
| ], | |
| ], | |
| } | |
| # ROM_EXT manifest generator. | |
| rom_exts_manifest_offsets_header = custom_target( | |
| 'rom_exts_manifest_h', | |
| output: 'manifest.h', | |
| depend_files: [ | |
| 'manifest.h.tpl', | |
| 'manifest.hjson', | |
| meson.source_root() / 'util/rom-ext-manifest-generator.py', | |
| ], | |
| command: [ | |
| prog_python, | |
| meson.source_root() / 'util/rom-ext-manifest-generator.py', | |
| '--input-dir', meson.current_source_dir(), | |
| '--output-dir', meson.current_build_dir(), | |
| '--output-files', 'c', | |
| ], | |
| ) | |
| # ROM_EXT manifest parser. | |
| rom_ext_manifest_parser = declare_dependency( | |
| link_with: static_library( | |
| 'rom_ext_manifest_parser', | |
| sources: [ | |
| 'rom_ext_manifest_parser.c', | |
| rom_exts_manifest_offsets_header, | |
| ], | |
| dependencies: [ | |
| sw_lib_mmio, | |
| ], | |
| ), | |
| sources: [ | |
| rom_exts_manifest_offsets_header, | |
| ], | |
| ) | |
| foreach device_name, device_lib : sw_lib_arch_core_devices | |
| foreach slot, slot_link_args : rom_ext_link_info | |
| rom_ext_elf = executable( | |
| slot + '_' + device_name, | |
| sources: [ | |
| 'rom_ext_manifest.S', | |
| 'rom_ext_start.S', | |
| 'rom_ext.c', | |
| ], | |
| name_suffix: 'elf', | |
| link_args: slot_link_args[0], | |
| link_depends: slot_link_args[1], | |
| dependencies: [ | |
| device_lib, | |
| sw_lib_dif_uart, | |
| sw_lib_runtime_hart, | |
| sw_lib_runtime_print, | |
| ], | |
| ) | |
| rom_ext_embedded = custom_target( | |
| slot + '_' + device_name, | |
| command: make_embedded_target_command, | |
| depend_files: [make_embedded_target_depend_files,], | |
| input: rom_ext_elf, | |
| output: make_embedded_target_outputs, | |
| build_by_default: true, | |
| ) | |
| custom_target( | |
| slot + '_export_' + device_name, | |
| command: export_target_command, | |
| depend_files: [export_target_depend_files,], | |
| input: [rom_ext_elf, rom_ext_embedded], | |
| output: slot + '_export_' + device_name, | |
| build_always_stale: true, | |
| build_by_default: true, | |
| ) | |
| endforeach | |
| endforeach |