# MCUXpresso SDK

# Copyright (c) 2016, Freescale Semiconductor, Inc.
# Copyright 2024 NXP
# SPDX-License-Identifier: Apache-2.0

config HAS_MCUX
	bool
	depends on SOC_FAMILY_KINETIS || SOC_FAMILY_NXP_IMX || SOC_FAMILY_LPC || \
		SOC_FAMILY_NXP_S32 || SOC_FAMILY_NXP_IMXRT || SOC_FAMILY_NXP_RW || \
		SOC_FAMILY_NXP_MCX

if HAS_MCUX

config MCUX_CORE_SUFFIX
	string
	help
	  String describing the core identifer used by MCUX SDK when using
	  dual core parts

config HAS_MCUX_12B1MSPS_SAR
	bool
	help
	  Set if the 12B1MSPS SAR ADC module is present in the SoC.

config HAS_MCUX_ADC12
	bool
	help
	  Set if the 12-bit ADC (ADC12) module is present in the SoC.

config HAS_MCUX_ADC16
	bool
	help
	  Set if the 16-bit ADC (ADC16) module is present in the SoC.

config HAS_MCUX_LPADC
	bool
	help
	  Set if the LPADC module is present in the SoC.

config HAS_MCUX_CACHE
	bool
	help
	  Set if the L1 or L2 cache is present in the SoC.

config HAS_MCUX_CCM
	bool
	help
	  Set if the clock control module (CCM) module is present in the SoC.

config HAS_MCUX_CCM_REV2
	bool
	help
	  Set if the revision 2 of clock control module (CCM) module is present in the SoC.
	  This is present in SoC's such as RT1170

config HAS_MCUX_SYSCON
	bool
	help
	  Set if the syscon module is present in the SoC.

config HAS_MCUX_PCC
	bool
	help
	  Set if the peripheral clock controller module (PCC) module is
	  present in the SoC.

config HAS_MCUX_ELCDIF
	bool
	help
	  Set if the enhanced LCD interface (eLCDIF) module is present in the
	  SoC.

config HAS_MCUX_MIPI_DSI
	bool
	help
	  Set if the MIPI DSI module is present in the SoC.

config HAS_MCUX_ENET
	bool
	help
	  Set if the ethernet (ENET) module is present in the SoC.

config HAS_MCUX_FLEXCAN
	bool
	help
	  Set if the FlexCAN module is presents in the SoC.

config HAS_MCUX_FLEXCOMM
	bool
	help
	  Set if the flexcomm (FLEXCOMM) module is present in the SoC.

config HAS_MCUX_FLEXSPI
	bool
	help
	  Set if the flexible SPI (FlexSPI) module is present in the SoC.

config HAS_MCUX_FTFX
	bool
	help
	  Set if the flash memory (FTFA, FTFE, or FTFL) module is present in
	  the SoC.

config HAS_MCUX_FTM
	bool
	help
	  Set if the FlexTimer (FTM) module is present in the SoC.

config HAS_MCUX_IAP
	bool
	help
	  Set if the flash memory In Application Programming is present in
	  the LPC55xxx family SoCs.

config HAS_MCUX_IAP_LEGACY
	bool
	help
	  Set if the flash memory In Application Programming is present in
	  the older LPC family SoCs (LPC54xxx, LPC11xxx).

config HAS_MCUX_IGPIO
	bool
	help
	  Set if the iMX GPIO (IGPIO) module is present in the SoC.

config HAS_MCUX_IOMUXC
	bool
	help
	  Set if the iMX I/O mux controller (IOMUXC) is present in the SoC.

config HAS_MCUX_LPI2C
	bool
	help
	  Set if the low power I2C (LPI2C) module is present in the SoC.

config HAS_MCUX_LPSCI
	bool
	help
	  Set if the low power uart (LPSCI) module is present in the SoC.

config HAS_MCUX_LPSPI
	bool
	help
	  Set if the low power SPI (LPSPI) module is present in the SoC.

config HAS_MCUX_LPUART
	bool
	help
	  Set if the low power uart (LPUART) module is present in the SoC.

config HAS_MCUX_GPT
	bool
	help
	  Set if the general purpose timer (GPT) module is present in the SoC.

config HAS_MCUX_QTMR
	bool
	help
	  Set if the quad timer (QTMR) module is present in the SoC.

config HAS_MCUX_GPC
	bool
	help
	  Set if the general power controller (GPC) module is present in the SoC.

config HAS_MCUX_PMU
	bool
	help
	  Set if the power management unit (PMU) module is present in the SoC.

config HAS_MCUX_DCDC
	bool
	help
	  Set if the DCDC converter module is present in the SoC.

config HAS_MCUX_SNVS
	bool
	help
	  Set if the SNVS module is present on the SoC.

config HAS_MCUX_RNG
	bool
	help
	  Set if the LPC specific random number generator (RNG) module is
	  present in the SoC.

config HAS_MCUX_RNGA
	bool
	help
	  Set if the random number generator accelerator (RNGA) module is
	  present in the SoC.

config HAS_MCUX_RTC
	bool
	help
	  Set if the real time clock (RTC) modules is present in the SoC.

config HAS_MCUX_LPC_RTC
	bool
	help
	  Set if the LPC real time clock (RTC) modules is present in the SoC.

config HAS_MCUX_SCG
	bool
	help
	  Set if the system clock generator (SCG) module is present in the
	  SoC.

config HAS_MCUX_SEMC
	bool
	help
	  Set if the smart external memory controller (SEMC) module is present
	  in the SoC.

config HAS_MCUX_SIM
	bool
	help
	  Set if the system integration module (SIM) module is present in the
	  SoC.

config HAS_MCUX_SRC
	bool
	help
	  Set if the system reset controller (SRC) module is present in the
	  SoC.

config HAS_MCUX_SRC_V2
	bool
	help
	  Set if version 2 of the system reset controller (SRC) module is
	  present in the SoC.

config HAS_MCUX_TRNG
	bool
	help
	  Set if the true random number generator (TRNG) module is present in
	  the SoC.

config HAS_MCUX_USB_EHCI
	bool
	help
	  Set if the USB controller EHCI module is present in the SoC.

config HAS_MCUX_USB_LPCIP3511
	bool
	help
	  Set if the USB controller LPCIP3511 module is present in the SoC.

config HAS_MCUX_USDHC1
	bool
	help
	  Set if the USDHC instance 1 module is present in the SoC.

config HAS_MCUX_USDHC2
	bool
	help
	  Set if the USDHC2 instance 2 module is present in the SoC.

config HAS_MCUX_WDOG32
	bool
	help
	  Set if the watchdog (WDOG32) module is present in the SoC.

config HAS_MCUX_WWDT
	bool
	help
	  Set if the watchdog (WWDT) module is present in the SoC.

config HAS_MCUX_PWM
	bool
	help
	  Set if the PWM  module is present in the SoC.

config HAS_MCUX_SCTIMER
	bool
	help
	  Set if the sctimer module is present in the SoC.

config HAS_MCUX_SMC
	bool
	help
	  Set if the SMC  module is present in the SoC.

config HAS_MCUX_LPTMR
	bool
	help
	  Set if the Low Power Timer (LPTMR) module is present in the SoC.

config HAS_MCUX_DAC
	bool
	help
	  Set if the Digital-to-Analog (DAC) module is present in the SoC.

config HAS_MCUX_DAC32
	bool
	help
	  Set if the Digital-to-Analog (DAC32) module is present in the SoC.

config HAS_MCUX_TPM
	bool
	help
	  Set if the Timer/PWM Module is present in the SoC

config HAS_MCUX_EDMA
	bool
	help
	  Set if the EDMA module is present on the SoC.

config HAS_MCUX_LPC_DMA
	bool
	help
	  Set if the DMA module is present on the SoC.

config HAS_MCUX_RDC
	bool
	help
	  Set if the RDC module is present in the SoC.

config HAS_MCUX_PIT
	bool
	help
	  Set if the PIT module is present on the SoC.

config HAS_MCUX_OS_TIMER
	bool
	help
	  Set if the OS timer is used as a kernel timer on the SoC.

config HAS_MCUX_PWT
	bool
	help
	  Set if the PWT module is present on the SoC.

config HAS_MCUX_RCM
	bool
	help
	  Set if the Reset Control Module (RCM) module is present in
	  the SoC.

config HAS_MCUX_CTIMER
	bool
	help
	  Set if the CTIMER module is present in the SoC.

config HAS_MCUX_I2S
	bool
	help
	  Set if the I2S/SAI module is present on the Soc

config HAS_MCUX_MCAN
	bool
	help
	  Set if the MCAN module is present on the SoC.

config HAS_MCUX_ADC_ETC
	bool
	help
	  Set if the ADC External Trigger Control module is present
	  on the SoC.

config HAS_MCUX_XBARA
	bool
	help
	  Set if the XBARA module is present on the SoC.

config HAS_NXP_MONOLITHIC_BT
	bool
	help
	  Set if the platform supports the monolithic build for BT applications.

config NXP_FW_LOADER
	bool "Include firmware loader component"
	help
	   The firmware loader is used to load firmwares to embedded tranceivers.
	   It is needed to enable connectivity features.

config NXP_MONOLITHIC_WIFI
	bool "WiFi firmware monolithic build"
	help
	   If enabled, the WiFi firmware used by the device will be linked with the
	   application directly.

config NXP_MONOLITHIC_BT
	bool "BT firmware monolithic build"
	depends on HAS_NXP_MONOLITHIC_BT
	help
	   If enabled, the BT firmware used by the device will be linked with the
	   application directly.

config NXP_RF_IMU
	bool "Include RF_IMU adapter for intercore messaging"
	select EVENTS
	help
	   RF_IMU adapter is needed for intercore messaging.

endif # HAS_MCUX
