# Copyright lowRISC contributors.
# Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0

foreach device_name, device_lib : sw_lib_arch_core_devices
  aes_serial_elf = executable(
    'aes_serial_' + device_name,
    sources: ['aes_serial.c'],
    name_suffix: 'elf',
    dependencies: [
      device_lib,
      sw_lib_dif_rv_timer,
      riscv_crt,
      sw_lib_aes,
      sw_lib_base_log,
      sw_lib_dif_gpio,
      sw_lib_irq_handlers,
      sw_lib_irq,
      sw_lib_mmio,
      sw_lib_pinmux,
      sw_lib_runtime_hart,
      sw_lib_uart,
    ],
  )

  aes_serial_embedded = custom_target(
    'aes_serial_' + device_name,
    command: make_embedded_target,
    input: aes_serial_elf,
    output: make_embedded_target_outputs,
    build_by_default: true,
  )

  custom_target(
    'aes_serial_export_' + device_name,
    command: export_embedded_target,
    input: [aes_serial_elf, aes_serial_embedded],
    output: 'aes_serial_export_' + device_name,
    build_always_stale: true,
    build_by_default: true,
  )
endforeach
