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

subdir('lib')

# Dictionary for SCA programs.
sca_programs = {
  # 'program_name': {
  #   'dependency': dependency_name,
  # },
}

aes_serial = declare_dependency(
  sources: ['aes_serial.c'],
  dependencies: [
    sw_lib_dif_aes,
  ],
)
sca_programs += {
  'aes_serial': {
    'dependency': aes_serial,
  },
}

foreach sca_program_name, sca_program_info: sca_programs
  foreach device_name, device_lib : sw_lib_arch_core_devices
    sca_program_elf = executable(
      '@0@_@1@'.format(sca_program_name, device_name),
      name_suffix: 'elf',
      dependencies: [
        device_lib,
        riscv_crt,
        sw_lib_mmio,
        sw_lib_runtime_hart,
        sw_lib_runtime_log,
        sw_sca_lib_prng,
        sw_sca_lib_sca,
        sw_sca_lib_simple_serial,
        sca_program_info['dependency'],
      ]
    )

    target_name = sca_program_name + '_@0@_' + device_name

    sca_program_dis = custom_target(
      target_name.format('dis'),
      input: sca_program_elf,
      kwargs: elf_to_dis_custom_target_args,
    )

    sca_program_bin = custom_target(
      target_name.format('bin'),
      input: sca_program_elf,
      kwargs: elf_to_bin_custom_target_args,
    )

    sca_program_vmem32 = custom_target(
      target_name.format('vmem32'),
      input: sca_program_bin,
      kwargs: bin_to_vmem32_custom_target_args,
    )

    sca_program_vmem64 = custom_target(
      target_name.format('vmem64'),
      input: sca_program_bin,
      kwargs: bin_to_vmem64_custom_target_args,
    )

    custom_target(
      target_name.format('export'),
      command: export_target_command,
      depend_files: [export_target_depend_files,],
      input: [
        sca_program_elf,
        sca_program_dis,
        sca_program_bin,
        sca_program_vmem32,
        sca_program_vmem64,
      ],
      output: target_name.format('export'),
      build_always_stale: true,
      build_by_default: true,
    )
  endforeach
endforeach
