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

# Autogen EDN DIF library
sw_lib_dif_autogen_edn = declare_dependency(
  link_with: static_library(
    'sw_lib_dif_autogen_edn',
    sources: [
      hw_ip_edn_reg_h,
      'dif_edn_autogen.c',
    ],
    dependencies: [
      sw_lib_mmio,
    ],
  )
)

# Autogen AES DIF library
sw_lib_dif_autogen_aes = declare_dependency(
  link_with: static_library(
    'sw_lib_dif_autogen_aes',
    sources: [
      hw_ip_aes_reg_h,
      'dif_aes_autogen.c',
    ],
    dependencies: [
      sw_lib_mmio,
    ],
  )
)

# Autogen Alert Handler DIF library
sw_lib_dif_autogen_alert_handler = declare_dependency(
  link_with: static_library(
    'sw_lib_dif_autogen_alert_handler',
    sources: [
      hw_ip_alert_handler_reg_h,
      'dif_alert_handler_autogen.c',
    ],
    dependencies: [
      sw_lib_mmio,
    ],
  )
)

# Autogen CSRNG DIF library
sw_lib_dif_autogen_csrng = declare_dependency(
  link_with: static_library(
    'sw_lib_dif_autogen_csrng',
    sources: [
      hw_ip_csrng_reg_h,
      'dif_csrng_autogen.c',
    ],
    dependencies: [
      sw_lib_mmio,
    ],
  )
)

# Autogen Entropy Source DIF library
sw_lib_dif_autogen_entropy_src = declare_dependency(
  link_with: static_library(
    'sw_lib_dif_autogen_entropy_src',
    sources: [
      hw_ip_entropy_src_reg_h,
      'dif_entropy_src_autogen.c',
    ],
    dependencies: [
      sw_lib_mmio,
    ],
  )
)

# Autogen GPIO DIF library
sw_lib_dif_autogen_gpio = declare_dependency(
  link_with: static_library(
    'sw_lib_dif_autogen_gpio',
    sources: [
      hw_ip_gpio_reg_h,
      'dif_gpio_autogen.c',
    ],
    dependencies: [
      sw_lib_mmio,
    ],
  )
)

# Autogen HMAC DIF library
sw_lib_dif_autogen_hmac = declare_dependency(
  link_with: static_library(
    'sw_lib_dif_autogen_hmac',
    sources: [
      hw_ip_hmac_reg_h,
      'dif_hmac_autogen.c',
    ],
    dependencies: [
      sw_lib_mmio,
    ],
  )
)

# Autogen I2C DIF library
sw_lib_dif_autogen_i2c = declare_dependency(
  link_with: static_library(
    'sw_lib_dif_autogen_i2c',
    sources: [
      hw_ip_i2c_reg_h,
      'dif_i2c_autogen.c',
    ],
    dependencies: [
      sw_lib_mmio,
    ],
  )
)

# Autogen Key Manager DIF library
sw_lib_dif_autogen_keymgr = declare_dependency(
  link_with: static_library(
    'sw_lib_dif_autogen_keymgr',
    sources: [
      hw_ip_keymgr_reg_h,
      'dif_keymgr_autogen.c',
    ],
    dependencies: [
      sw_lib_mmio,
    ],
  )
)

# Autogen Lifecycle Controller DIF library
sw_lib_dif_autogen_lc_ctrl = declare_dependency(
  link_with: static_library(
    'sw_lib_dif_autogen_lc_ctrl',
    sources: [
      hw_ip_lc_ctrl_reg_h,
      'dif_lc_ctrl_autogen.c',
    ],
    dependencies: [
      sw_lib_mmio,
    ],
  )
)

# Autogen OTBN DIF library
sw_lib_dif_autogen_otbn = declare_dependency(
  link_with: static_library(
    'sw_lib_dif_autogen_otbn',
    sources: [
      hw_ip_otbn_reg_h,
      'dif_otbn_autogen.c',
    ],
    dependencies: [
      sw_lib_mmio,
    ],
  )
)

# Autogen UART DIF library
sw_lib_dif_autogen_uart = declare_dependency(
  link_with: static_library(
    'sw_lib_dif_autogen_uart',
    sources: [
      hw_ip_uart_reg_h,
      'dif_uart_autogen.c',
    ],
    dependencies: [
      sw_lib_mmio,
    ],
  )
)
