|  | # Copyright lowRISC contributors. | 
|  | # Licensed under the Apache License, Version 2.0, see LICENSE for details. | 
|  | # SPDX-License-Identifier: Apache-2.0 | 
|  |  | 
|  | # ROM_EXT ePMP library | 
|  | sw_silicon_creator_rom_ext_epmp = declare_dependency( | 
|  | link_with: static_library( | 
|  | 'sw_silicon_creator_rom_ext_epmp', | 
|  | sources: [ | 
|  | 'rom_ext_epmp.c', | 
|  | ], | 
|  | dependencies: [ | 
|  | sw_silicon_creator_lib_epmp, | 
|  | ], | 
|  | ) | 
|  | ) | 
|  |  | 
|  | # ROM_EXT boot policy. | 
|  | sw_silicon_creator_rom_ext_boot_policy = declare_dependency( | 
|  | link_with: static_library( | 
|  | 'sw_silicon_creator_rom_ext_boot_policy', | 
|  | sources: [ | 
|  | 'rom_ext_boot_policy.c', | 
|  | ], | 
|  | dependencies: [ | 
|  | sw_silicon_creator_lib_manifest, | 
|  | ], | 
|  | ), | 
|  | ) | 
|  |  | 
|  | test('sw_silicon_creator_rom_ext_boot_policy_unittest', executable( | 
|  | 'sw_silicon_creator_rom_ext_boot_policy_unittest', | 
|  | sources: [ | 
|  | 'rom_ext_boot_policy_unittest.cc', | 
|  | 'rom_ext_boot_policy.c', | 
|  | ], | 
|  | dependencies: [ | 
|  | sw_vendor_gtest, | 
|  | ], | 
|  | native: true, | 
|  | c_args: ['-DOT_OFF_TARGET_TEST'], | 
|  | cpp_args: ['-DOT_OFF_TARGET_TEST'], | 
|  | ), | 
|  | suite: 'rom_ext', | 
|  | ) | 
|  |  | 
|  | # Mask ROM Linker Parameters | 
|  | # | 
|  | # See `sw/device/lib/testing/test_rom_ext/test_rom_ext.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_slot_libs = {} | 
|  | foreach slot, slot_link_args : rom_ext_link_info | 
|  | rom_ext_slot_libs += { | 
|  | slot: declare_dependency( | 
|  | sources: [ | 
|  | 'rom_ext_start.S', | 
|  | ], | 
|  | link_args: slot_link_args[0], | 
|  | dependencies: [ | 
|  | freestanding_headers, | 
|  | sw_silicon_creator_lib_base_sec_mmio, | 
|  | sw_silicon_creator_lib_driver_flash_ctrl, | 
|  | sw_silicon_creator_lib_driver_hmac, | 
|  | sw_silicon_creator_lib_driver_otp, | 
|  | sw_silicon_creator_lib_driver_pinmux, | 
|  | sw_silicon_creator_lib_driver_uart, | 
|  | sw_silicon_creator_lib_fake_deps, | 
|  | sw_silicon_creator_lib_log, | 
|  | sw_silicon_creator_lib_shutdown, | 
|  | sw_silicon_creator_lib_manifest_section, | 
|  | sw_silicon_creator_mask_rom_sigverify, | 
|  | sw_silicon_creator_rom_ext_epmp, | 
|  | sw_silicon_creator_rom_ext_boot_policy, | 
|  | sw_lib_crt, | 
|  |  | 
|  | ], | 
|  | link_with: static_library( | 
|  | slot + '_rom_ext_lib', | 
|  | sources: [ | 
|  | 'rom_ext.c', | 
|  | ], | 
|  | link_depends: [slot_link_args[1]], | 
|  | ) | 
|  | ) | 
|  | } | 
|  | endforeach | 
|  |  | 
|  | foreach device_name, device_lib : sw_lib_arch_core_devices | 
|  | foreach slot, slot_lib : rom_ext_slot_libs | 
|  | rom_ext_elf = executable( | 
|  | slot + '_' + device_name, | 
|  | name_suffix: 'elf', | 
|  | dependencies: [ | 
|  | device_lib, | 
|  | slot_lib, | 
|  | ], | 
|  | ) | 
|  |  | 
|  | target_name = slot + '_@0@_' + device_name | 
|  |  | 
|  | rom_ext_dis = custom_target( | 
|  | target_name.format('dis'), | 
|  | input: rom_ext_elf, | 
|  | kwargs: elf_to_dis_custom_target_args, | 
|  | ) | 
|  |  | 
|  | rom_ext_bin = custom_target( | 
|  | target_name.format('bin'), | 
|  | input: rom_ext_elf, | 
|  | kwargs: elf_to_bin_custom_target_args, | 
|  | ) | 
|  |  | 
|  | targets_to_export = [ | 
|  | rom_ext_elf, | 
|  | rom_ext_dis, | 
|  | rom_ext_bin, | 
|  | ] | 
|  |  | 
|  | foreach key_name, key_info : signing_keys | 
|  | signed_target_name = '_'.join(['rom_ext', slot, key_name, 'signed', '@0@', device_name]) | 
|  |  | 
|  | rom_ext_signed_bin = custom_target( | 
|  | signed_target_name.format('bin'), | 
|  | input: rom_ext_bin, | 
|  | output: '@BASENAME@.@0@.signed.bin'.format(key_name), | 
|  | command: [ | 
|  | rom_ext_signer_export.full_path(), | 
|  | 'rom_ext', | 
|  | '@INPUT@', | 
|  | key_info['path'], | 
|  | rom_ext_elf.full_path(), | 
|  | '@OUTPUT@', | 
|  | ], | 
|  | depends: rom_ext_signer_export, | 
|  | build_by_default: true, | 
|  | ) | 
|  |  | 
|  | rom_ext_signed_vmem32 = custom_target( | 
|  | signed_target_name.format('vmem32'), | 
|  | input: rom_ext_signed_bin, | 
|  | kwargs: bin_to_vmem32_custom_target_args, | 
|  | ) | 
|  |  | 
|  | rom_ext_signed_vmem64 = custom_target( | 
|  | signed_target_name.format('vmem64'), | 
|  | input: rom_ext_signed_bin, | 
|  | kwargs: bin_to_vmem64_custom_target_args, | 
|  | ) | 
|  |  | 
|  | rom_ext_signed_scr_vmem64 = custom_target( | 
|  | signed_target_name.format('scrambled'), | 
|  | input: rom_ext_signed_vmem64, | 
|  | output: flash_image_outputs, | 
|  | command: flash_image_command, | 
|  | depend_files: flash_image_depend_files, | 
|  | build_by_default: true, | 
|  | ) | 
|  |  | 
|  | targets_to_export += [ | 
|  | rom_ext_signed_bin, | 
|  | rom_ext_signed_vmem32, | 
|  | rom_ext_signed_vmem64, | 
|  | rom_ext_signed_scr_vmem64, | 
|  | ] | 
|  | endforeach | 
|  |  | 
|  | custom_target( | 
|  | target_name.format('export'), | 
|  | command: export_target_command, | 
|  | depend_files: [export_target_depend_files,], | 
|  | input: targets_to_export, | 
|  | output: target_name.format('export'), | 
|  | build_always_stale: true, | 
|  | build_by_default: true, | 
|  | ) | 
|  | endforeach | 
|  | endforeach |