# SPDX-License-Identifier: GPL-2.0
#
# Makefile for the WatchDog device drivers.
#

# The WatchDog Timer Driver Core.
obj-$(CONFIG_WATCHDOG_CORE)	+= watchdog.o

watchdog-objs	+= watchdog_core.o watchdog_dev.o

watchdog-$(CONFIG_WATCHDOG_PRETIMEOUT_GOV)	+= watchdog_pretimeout.o
watchdog-$(CONFIG_WATCHDOG_HRTIMER_PRETIMEOUT)	+= watchdog_hrtimer_pretimeout.o

obj-$(CONFIG_WATCHDOG_PRETIMEOUT_GOV_NOOP)	+= pretimeout_noop.o
obj-$(CONFIG_WATCHDOG_PRETIMEOUT_GOV_PANIC)	+= pretimeout_panic.o

# Only one watchdog can succeed. We probe the ISA/PCI/USB based
# watchdog-cards first, then the architecture specific watchdog
# drivers and then the architecture independent "softdog" driver.
# This means that if your ISA/PCI/USB card isn't detected that
# you can fall back to an architecture specific driver and if
# that also fails then you can fall back to the software watchdog
# to give you some cover.

# ISA-based Watchdog Cards
# Berkshire ISA-PC Watchdog with optional Rust path.
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_PCWATCHDOG) += pcwd-rust.o
pcwd-rust-y := pcwd_rust.o

$(obj)/rust/watchdog_pcwd_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=pcwd \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/pcwd' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_pcwd_rust.o := y

ifeq ($(CONFIG_PCWATCHDOG),y)
pcwd-rust-y += rust/watchdog_pcwd_rust.o
endif
ifeq ($(CONFIG_PCWATCHDOG),m)
obj-y += pcwd-rust-builtin.o
pcwd-rust-builtin-y := rust/watchdog_pcwd_rust.o pcwd_builtin.o
CFLAGS_pcwd_builtin.o := -DPCWD_RUST_BUILTIN
$(obj)/pcwd_builtin.o: $(src)/pcwd_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_PCWATCHDOG) += pcwd.o
endif
obj-$(CONFIG_MIXCOMWD) += mixcomwd.o
# Industrial Computer Source WDT500/501 watchdog with optional Rust path.
#
# When CONFIG_RUST_DRIVERS=y we build a feature-gated Rust object that contains
# only the wdt crate (CARGO_FEATURES=wdt), and link it into the driver.
# =m additionally builds a vmlinux-side wdt-rust-builtin.o that aggregates
# the Rust .o + a wdt_builtin.o (compiled with -DWDT_RUST_BUILTIN)
# exposing the C-side bridge symbols Rust calls into.
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_WDT) += wdt-rust.o
wdt-rust-y := wdt_rust.o

$(obj)/rust/watchdog_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_wdt_rust.o := y

ifeq ($(CONFIG_WDT),y)
wdt-rust-y += rust/watchdog_wdt_rust.o
endif
ifeq ($(CONFIG_WDT),m)
obj-y += wdt-rust-builtin.o
wdt-rust-builtin-y := rust/watchdog_wdt_rust.o wdt_builtin.o
CFLAGS_wdt_builtin.o := -DWDT_RUST_BUILTIN
$(obj)/wdt_builtin.o: $(src)/wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_WDT) += wdt.o
endif

# PCI-based Watchdog Cards
obj-$(CONFIG_PCIPCWATCHDOG) += pcwd_pci.o
# ICS PCI-WDT500/501 watchdog with minimal Rust scaffolding shim
# (PCI driver + miscdevices + IRQ handler stay C-side unchanged).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_WDTPCI) += wdt_pci-rust.o
wdt_pci-rust-y := wdt_pci_rust.o

$(obj)/rust/watchdog_wdt_pci_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=wdt_pci \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/wdt_pci' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_wdt_pci_rust.o := y

ifeq ($(CONFIG_WDTPCI),y)
wdt_pci-rust-y += rust/watchdog_wdt_pci_rust.o
endif
ifeq ($(CONFIG_WDTPCI),m)
obj-y += wdt_pci-rust-builtin.o
wdt_pci-rust-builtin-y := rust/watchdog_wdt_pci_rust.o wdt_pci_builtin.o
CFLAGS_wdt_pci_builtin.o := -DWDT_PCI_RUST_BUILTIN
$(obj)/wdt_pci_builtin.o: $(src)/wdt_pci_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_WDTPCI) += wdt_pci.o
endif

# USB-based Watchdog Cards
# Berkshire USB-PC Watchdog with minimal Rust scaffolding shim
# (USB driver + URB handlers + miscdevices stay C-side unchanged).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_USBPCWATCHDOG) += pcwd_usb-rust.o
pcwd_usb-rust-y := pcwd_usb_rust.o

$(obj)/rust/watchdog_pcwd_usb_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=pcwd_usb \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/pcwd_usb' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_pcwd_usb_rust.o := y

ifeq ($(CONFIG_USBPCWATCHDOG),y)
pcwd_usb-rust-y += rust/watchdog_pcwd_usb_rust.o
endif
ifeq ($(CONFIG_USBPCWATCHDOG),m)
obj-y += pcwd_usb-rust-builtin.o
pcwd_usb-rust-builtin-y := rust/watchdog_pcwd_usb_rust.o pcwd_usb_builtin.o
CFLAGS_pcwd_usb_builtin.o := -DPCWD_USB_RUST_BUILTIN
$(obj)/pcwd_usb_builtin.o: $(src)/pcwd_usb_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_USBPCWATCHDOG) += pcwd_usb.o
endif

# ALPHA Architecture

# ARM Architecture
# ARM SP805 Watchdog with optional Rust path (AMBA bus + clk).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_ARM_SP805_WATCHDOG) += sp805_wdt-rust.o
sp805_wdt-rust-y := sp805_wdt_rust.o

$(obj)/rust/watchdog_sp805_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=sp805_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/sp805_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_sp805_wdt_rust.o := y

ifeq ($(CONFIG_ARM_SP805_WATCHDOG),y)
sp805_wdt-rust-y += rust/watchdog_sp805_wdt_rust.o
endif
ifeq ($(CONFIG_ARM_SP805_WATCHDOG),m)
obj-y += sp805_wdt-rust-builtin.o
sp805_wdt-rust-builtin-y := rust/watchdog_sp805_wdt_rust.o sp805_wdt_builtin.o
CFLAGS_sp805_wdt_builtin.o := -DSP805_WDT_RUST_BUILTIN
$(obj)/sp805_wdt_builtin.o: $(src)/sp805_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_ARM_SP805_WATCHDOG) += sp805_wdt.o
endif
# SBSA Generic Watchdog with optional Rust path.
#
# Same dual-mode shape as softdog / sp5100_tco above.  =y links the
# feature-gated Rust .o straight into the driver.  =m additionally
# builds a vmlinux-side sbsa_gwdt-rust-builtin.o that aggregates the
# Rust .o + a sbsa_gwdt_builtin.o (compiled with -DSBSA_GWDT_RUST_BUILTIN)
# exposing the C-side bridge symbols.
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_ARM_SBSA_WATCHDOG) += sbsa_gwdt-rust.o
sbsa_gwdt-rust-y := sbsa_gwdt_rust.o

$(obj)/rust/watchdog_sbsa_gwdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=sbsa_gwdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/sbsa_gwdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_sbsa_gwdt_rust.o := y

ifeq ($(CONFIG_ARM_SBSA_WATCHDOG),y)
sbsa_gwdt-rust-y += rust/watchdog_sbsa_gwdt_rust.o
endif
ifeq ($(CONFIG_ARM_SBSA_WATCHDOG),m)
obj-y += sbsa_gwdt-rust-builtin.o
sbsa_gwdt-rust-builtin-y := rust/watchdog_sbsa_gwdt_rust.o sbsa_gwdt_builtin.o
CFLAGS_sbsa_gwdt_builtin.o := -DSBSA_GWDT_RUST_BUILTIN
$(obj)/sbsa_gwdt_builtin.o: $(src)/sbsa_gwdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_ARM_SBSA_WATCHDOG) += sbsa_gwdt.o
endif
# Marvell Armada 37xx Watchdog with optional Rust path (platform_driver shape).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_ARMADA_37XX_WATCHDOG) += armada_37xx_wdt-rust.o
armada_37xx_wdt-rust-y := armada_37xx_wdt_rust.o

$(obj)/rust/watchdog_armada_37xx_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=armada_37xx_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/armada_37xx_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_armada_37xx_wdt_rust.o := y

ifeq ($(CONFIG_ARMADA_37XX_WATCHDOG),y)
armada_37xx_wdt-rust-y += rust/watchdog_armada_37xx_wdt_rust.o
endif
ifeq ($(CONFIG_ARMADA_37XX_WATCHDOG),m)
obj-y += armada_37xx_wdt-rust-builtin.o
armada_37xx_wdt-rust-builtin-y := rust/watchdog_armada_37xx_wdt_rust.o armada_37xx_wdt_builtin.o
CFLAGS_armada_37xx_wdt_builtin.o := -DARMADA_37XX_WDT_RUST_BUILTIN
$(obj)/armada_37xx_wdt_builtin.o: $(src)/armada_37xx_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_ARMADA_37XX_WATCHDOG) += armada_37xx_wdt.o
endif
# asm9260_wdt with optional Rust path.
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_ASM9260_WATCHDOG) += asm9260_wdt-rust.o
asm9260_wdt-rust-y := asm9260_wdt_rust.o

$(obj)/rust/watchdog_asm9260_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=asm9260_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/asm9260_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_asm9260_wdt_rust.o := y

ifeq ($(CONFIG_ASM9260_WATCHDOG),y)
asm9260_wdt-rust-y += rust/watchdog_asm9260_wdt_rust.o
endif
ifeq ($(CONFIG_ASM9260_WATCHDOG),m)
obj-y += asm9260_wdt-rust-builtin.o
asm9260_wdt-rust-builtin-y := rust/watchdog_asm9260_wdt_rust.o asm9260_wdt_builtin.o
CFLAGS_asm9260_wdt_builtin.o := -DASM9260_WDT_RUST_BUILTIN
$(obj)/asm9260_wdt_builtin.o: $(src)/asm9260_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_ASM9260_WATCHDOG) += asm9260_wdt.o
endif
obj-$(CONFIG_AT91RM9200_WATCHDOG) += at91rm9200_wdt.o
# at91sam9_wdt with optional Rust path.
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_AT91SAM9X_WATCHDOG) += at91sam9_wdt-rust.o
at91sam9_wdt-rust-y := at91sam9_wdt_rust.o

$(obj)/rust/watchdog_at91sam9_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=at91sam9_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/at91sam9_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_at91sam9_wdt_rust.o := y

ifeq ($(CONFIG_AT91SAM9X_WATCHDOG),y)
at91sam9_wdt-rust-y += rust/watchdog_at91sam9_wdt_rust.o
endif
ifeq ($(CONFIG_AT91SAM9X_WATCHDOG),m)
obj-y += at91sam9_wdt-rust-builtin.o
at91sam9_wdt-rust-builtin-y := rust/watchdog_at91sam9_wdt_rust.o at91sam9_wdt_builtin.o
CFLAGS_at91sam9_wdt_builtin.o := -DAT91SAM9_WDT_RUST_BUILTIN
$(obj)/at91sam9_wdt_builtin.o: $(src)/at91sam9_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_AT91SAM9X_WATCHDOG) += at91sam9_wdt.o
endif
# Cadence WDT with optional Rust path.
#
# Same dual-mode shape as softdog / sp5100_tco / sbsa_gwdt / dw_wdt above.
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_CADENCE_WATCHDOG) += cadence_wdt-rust.o
cadence_wdt-rust-y := cadence_wdt_rust.o

$(obj)/rust/watchdog_cadence_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=cadence_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/cadence_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_cadence_wdt_rust.o := y

ifeq ($(CONFIG_CADENCE_WATCHDOG),y)
cadence_wdt-rust-y += rust/watchdog_cadence_wdt_rust.o
endif
ifeq ($(CONFIG_CADENCE_WATCHDOG),m)
obj-y += cadence_wdt-rust-builtin.o
cadence_wdt-rust-builtin-y := rust/watchdog_cadence_wdt_rust.o cadence_wdt_builtin.o
CFLAGS_cadence_wdt_builtin.o := -DCADENCE_WDT_RUST_BUILTIN
$(obj)/cadence_wdt_builtin.o: $(src)/cadence_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_CADENCE_WATCHDOG) += cadence_wdt.o
endif
# TI OMAP Watchdog with optional Rust path (platform_driver shape).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_OMAP_WATCHDOG) += omap_wdt-rust.o
omap_wdt-rust-y := omap_wdt_rust.o

$(obj)/rust/watchdog_omap_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=omap_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/omap_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_omap_wdt_rust.o := y

ifeq ($(CONFIG_OMAP_WATCHDOG),y)
omap_wdt-rust-y += rust/watchdog_omap_wdt_rust.o
endif
ifeq ($(CONFIG_OMAP_WATCHDOG),m)
obj-y += omap_wdt-rust-builtin.o
omap_wdt-rust-builtin-y := rust/watchdog_omap_wdt_rust.o omap_wdt_builtin.o
CFLAGS_omap_wdt_builtin.o := -DOMAP_WDT_RUST_BUILTIN
$(obj)/omap_wdt_builtin.o: $(src)/omap_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_OMAP_WATCHDOG) += omap_wdt.o
endif
# TI TWL4030 PMIC watchdog with optional Rust path (I2C PMIC, no regmap).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_TWL4030_WATCHDOG) += twl4030_wdt-rust.o
twl4030_wdt-rust-y := twl4030_wdt_rust.o

$(obj)/rust/watchdog_twl4030_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=twl4030_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/twl4030_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_twl4030_wdt_rust.o := y

ifeq ($(CONFIG_TWL4030_WATCHDOG),y)
twl4030_wdt-rust-y += rust/watchdog_twl4030_wdt_rust.o
endif
ifeq ($(CONFIG_TWL4030_WATCHDOG),m)
obj-y += twl4030_wdt-rust-builtin.o
twl4030_wdt-rust-builtin-y := rust/watchdog_twl4030_wdt_rust.o twl4030_wdt_builtin.o
CFLAGS_twl4030_wdt_builtin.o := -DTWL4030_WDT_RUST_BUILTIN
$(obj)/twl4030_wdt_builtin.o: $(src)/twl4030_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_TWL4030_WATCHDOG) += twl4030_wdt.o
endif
obj-$(CONFIG_21285_WATCHDOG) += wdt285.o
obj-$(CONFIG_977_WATCHDOG) += wdt977.o
# ftwdt010_wdt with optional Rust path.
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_FTWDT010_WATCHDOG) += ftwdt010_wdt-rust.o
ftwdt010_wdt-rust-y := ftwdt010_wdt_rust.o

$(obj)/rust/watchdog_ftwdt010_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=ftwdt010_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/ftwdt010_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_ftwdt010_wdt_rust.o := y

ifeq ($(CONFIG_FTWDT010_WATCHDOG),y)
ftwdt010_wdt-rust-y += rust/watchdog_ftwdt010_wdt_rust.o
endif
ifeq ($(CONFIG_FTWDT010_WATCHDOG),m)
obj-y += ftwdt010_wdt-rust-builtin.o
ftwdt010_wdt-rust-builtin-y := rust/watchdog_ftwdt010_wdt_rust.o ftwdt010_wdt_builtin.o
CFLAGS_ftwdt010_wdt_builtin.o := -DFTWDT010_WDT_RUST_BUILTIN
$(obj)/ftwdt010_wdt_builtin.o: $(src)/ftwdt010_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_FTWDT010_WATCHDOG) += ftwdt010_wdt.o
endif
obj-$(CONFIG_IXP4XX_WATCHDOG) += ixp4xx_wdt.o
# s3c2410_wdt with optional Rust path.
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_S3C2410_WATCHDOG) += s3c2410_wdt-rust.o
s3c2410_wdt-rust-y := s3c2410_wdt_rust.o

$(obj)/rust/watchdog_s3c2410_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=s3c2410_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/s3c2410_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_s3c2410_wdt_rust.o := y

ifeq ($(CONFIG_S3C2410_WATCHDOG),y)
s3c2410_wdt-rust-y += rust/watchdog_s3c2410_wdt_rust.o
endif
ifeq ($(CONFIG_S3C2410_WATCHDOG),m)
obj-y += s3c2410_wdt-rust-builtin.o
s3c2410_wdt-rust-builtin-y := rust/watchdog_s3c2410_wdt_rust.o s3c2410_wdt_builtin.o
CFLAGS_s3c2410_wdt_builtin.o := -DS3C2410_WDT_RUST_BUILTIN
$(obj)/s3c2410_wdt_builtin.o: $(src)/s3c2410_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_S3C2410_WATCHDOG) += s3c2410_wdt.o
endif
obj-$(CONFIG_SA1100_WATCHDOG) += sa1100_wdt.o
# sama5d4_wdt with optional Rust path.
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_SAMA5D4_WATCHDOG) += sama5d4_wdt-rust.o
sama5d4_wdt-rust-y := sama5d4_wdt_rust.o

$(obj)/rust/watchdog_sama5d4_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=sama5d4_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/sama5d4_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_sama5d4_wdt_rust.o := y

ifeq ($(CONFIG_SAMA5D4_WATCHDOG),y)
sama5d4_wdt-rust-y += rust/watchdog_sama5d4_wdt_rust.o
endif
ifeq ($(CONFIG_SAMA5D4_WATCHDOG),m)
obj-y += sama5d4_wdt-rust-builtin.o
sama5d4_wdt-rust-builtin-y := rust/watchdog_sama5d4_wdt_rust.o sama5d4_wdt_builtin.o
CFLAGS_sama5d4_wdt_builtin.o := -DSAMA5D4_WDT_RUST_BUILTIN
$(obj)/sama5d4_wdt_builtin.o: $(src)/sama5d4_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_SAMA5D4_WATCHDOG) += sama5d4_wdt.o
endif
# Synopsys DesignWare Watchdog with optional Rust path.
#
# Same dual-mode shape as softdog / sp5100_tco / sbsa_gwdt above.  =y links
# the feature-gated Rust .o straight into the driver.  =m additionally
# builds a vmlinux-side dw_wdt-rust-builtin.o that aggregates the Rust .o +
# a dw_wdt_builtin.o (compiled with -DDW_WDT_RUST_BUILTIN) exposing the
# C-side helpers and platform_driver glue the Rust code calls back into.
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_DW_WATCHDOG) += dw_wdt-rust.o
dw_wdt-rust-y := dw_wdt_rust.o

$(obj)/rust/watchdog_dw_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=dw_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/dw_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_dw_wdt_rust.o := y

ifeq ($(CONFIG_DW_WATCHDOG),y)
dw_wdt-rust-y += rust/watchdog_dw_wdt_rust.o
endif
ifeq ($(CONFIG_DW_WATCHDOG),m)
obj-y += dw_wdt-rust-builtin.o
dw_wdt-rust-builtin-y := rust/watchdog_dw_wdt_rust.o dw_wdt_builtin.o
CFLAGS_dw_wdt_builtin.o := -DDW_WDT_RUST_BUILTIN
$(obj)/dw_wdt_builtin.o: $(src)/dw_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_DW_WATCHDOG) += dw_wdt.o
endif
# Cirrus Logic EP93xx Watchdog with optional Rust path (platform_driver shape).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_EP93XX_WATCHDOG) += ep93xx_wdt-rust.o
ep93xx_wdt-rust-y := ep93xx_wdt_rust.o

$(obj)/rust/watchdog_ep93xx_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=ep93xx_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/ep93xx_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_ep93xx_wdt_rust.o := y

ifeq ($(CONFIG_EP93XX_WATCHDOG),y)
ep93xx_wdt-rust-y += rust/watchdog_ep93xx_wdt_rust.o
endif
ifeq ($(CONFIG_EP93XX_WATCHDOG),m)
obj-y += ep93xx_wdt-rust-builtin.o
ep93xx_wdt-rust-builtin-y := rust/watchdog_ep93xx_wdt_rust.o ep93xx_wdt_builtin.o
CFLAGS_ep93xx_wdt_builtin.o := -DEP93XX_WDT_RUST_BUILTIN
$(obj)/ep93xx_wdt_builtin.o: $(src)/ep93xx_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_EP93XX_WATCHDOG) += ep93xx_wdt.o
endif
# pnx4008_wdt with optional Rust path.
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_PNX4008_WATCHDOG) += pnx4008_wdt-rust.o
pnx4008_wdt-rust-y := pnx4008_wdt_rust.o

$(obj)/rust/watchdog_pnx4008_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=pnx4008_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/pnx4008_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_pnx4008_wdt_rust.o := y

ifeq ($(CONFIG_PNX4008_WATCHDOG),y)
pnx4008_wdt-rust-y += rust/watchdog_pnx4008_wdt_rust.o
endif
ifeq ($(CONFIG_PNX4008_WATCHDOG),m)
obj-y += pnx4008_wdt-rust-builtin.o
pnx4008_wdt-rust-builtin-y := rust/watchdog_pnx4008_wdt_rust.o pnx4008_wdt_builtin.o
CFLAGS_pnx4008_wdt_builtin.o := -DPNX4008_WDT_RUST_BUILTIN
$(obj)/pnx4008_wdt_builtin.o: $(src)/pnx4008_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_PNX4008_WATCHDOG) += pnx4008_wdt.o
endif
# davinci_wdt with optional Rust path.
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_DAVINCI_WATCHDOG) += davinci_wdt-rust.o
davinci_wdt-rust-y := davinci_wdt_rust.o

$(obj)/rust/watchdog_davinci_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=davinci_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/davinci_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_davinci_wdt_rust.o := y

ifeq ($(CONFIG_DAVINCI_WATCHDOG),y)
davinci_wdt-rust-y += rust/watchdog_davinci_wdt_rust.o
endif
ifeq ($(CONFIG_DAVINCI_WATCHDOG),m)
obj-y += davinci_wdt-rust-builtin.o
davinci_wdt-rust-builtin-y := rust/watchdog_davinci_wdt_rust.o davinci_wdt_builtin.o
CFLAGS_davinci_wdt_builtin.o := -DDAVINCI_WDT_RUST_BUILTIN
$(obj)/davinci_wdt_builtin.o: $(src)/davinci_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_DAVINCI_WATCHDOG) += davinci_wdt.o
endif
# TI K3 RTI Watchdog with optional Rust path (platform_driver shape).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_K3_RTI_WATCHDOG) += rti_wdt-rust.o
rti_wdt-rust-y := rti_wdt_rust.o

$(obj)/rust/watchdog_rti_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=rti_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/rti_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_rti_wdt_rust.o := y

ifeq ($(CONFIG_K3_RTI_WATCHDOG),y)
rti_wdt-rust-y += rust/watchdog_rti_wdt_rust.o
endif
ifeq ($(CONFIG_K3_RTI_WATCHDOG),m)
obj-y += rti_wdt-rust-builtin.o
rti_wdt-rust-builtin-y := rust/watchdog_rti_wdt_rust.o rti_wdt_builtin.o
CFLAGS_rti_wdt_builtin.o := -DRTI_WDT_RUST_BUILTIN
$(obj)/rti_wdt_builtin.o: $(src)/rti_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_K3_RTI_WATCHDOG) += rti_wdt.o
endif
obj-$(CONFIG_ORION_WATCHDOG) += orion_wdt.o
# sunxi_wdt with optional Rust path.
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_SUNXI_WATCHDOG) += sunxi_wdt-rust.o
sunxi_wdt-rust-y := sunxi_wdt_rust.o

$(obj)/rust/watchdog_sunxi_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=sunxi_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/sunxi_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_sunxi_wdt_rust.o := y

ifeq ($(CONFIG_SUNXI_WATCHDOG),y)
sunxi_wdt-rust-y += rust/watchdog_sunxi_wdt_rust.o
endif
ifeq ($(CONFIG_SUNXI_WATCHDOG),m)
obj-y += sunxi_wdt-rust-builtin.o
sunxi_wdt-rust-builtin-y := rust/watchdog_sunxi_wdt_rust.o sunxi_wdt_builtin.o
CFLAGS_sunxi_wdt_builtin.o := -DSUNXI_WDT_RUST_BUILTIN
$(obj)/sunxi_wdt_builtin.o: $(src)/sunxi_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_SUNXI_WATCHDOG) += sunxi_wdt.o
endif
obj-$(CONFIG_RN5T618_WATCHDOG) += rn5t618_wdt.o
# npcm_wdt with optional Rust path.
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_NPCM7XX_WATCHDOG) += npcm_wdt-rust.o
npcm_wdt-rust-y := npcm_wdt_rust.o

$(obj)/rust/watchdog_npcm_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=npcm_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/npcm_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_npcm_wdt_rust.o := y

ifeq ($(CONFIG_NPCM7XX_WATCHDOG),y)
npcm_wdt-rust-y += rust/watchdog_npcm_wdt_rust.o
endif
ifeq ($(CONFIG_NPCM7XX_WATCHDOG),m)
obj-y += npcm_wdt-rust-builtin.o
npcm_wdt-rust-builtin-y := rust/watchdog_npcm_wdt_rust.o npcm_wdt_builtin.o
CFLAGS_npcm_wdt_builtin.o := -DNPCM_WDT_RUST_BUILTIN
$(obj)/npcm_wdt_builtin.o: $(src)/npcm_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_NPCM7XX_WATCHDOG) += npcm_wdt.o
endif
# STMP3xxx / i.MX23-28 RTC-based Watchdog with optional Rust path
# (meta-driver: HW arm goes through pdata->wdt_set_timeout callback).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_STMP3XXX_RTC_WATCHDOG) += stmp3xxx_rtc_wdt-rust.o
stmp3xxx_rtc_wdt-rust-y := stmp3xxx_rtc_wdt_rust.o

$(obj)/rust/watchdog_stmp3xxx_rtc_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=stmp3xxx_rtc_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/stmp3xxx_rtc_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_stmp3xxx_rtc_wdt_rust.o := y

ifeq ($(CONFIG_STMP3XXX_RTC_WATCHDOG),y)
stmp3xxx_rtc_wdt-rust-y += rust/watchdog_stmp3xxx_rtc_wdt_rust.o
endif
ifeq ($(CONFIG_STMP3XXX_RTC_WATCHDOG),m)
obj-y += stmp3xxx_rtc_wdt-rust-builtin.o
stmp3xxx_rtc_wdt-rust-builtin-y := rust/watchdog_stmp3xxx_rtc_wdt_rust.o stmp3xxx_rtc_wdt_builtin.o
CFLAGS_stmp3xxx_rtc_wdt_builtin.o := -DSTMP3XXX_RTC_WDT_RUST_BUILTIN
$(obj)/stmp3xxx_rtc_wdt_builtin.o: $(src)/stmp3xxx_rtc_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_STMP3XXX_RTC_WATCHDOG) += stmp3xxx_rtc_wdt.o
endif
# TS-4800 Watchdog with optional Rust path (platform_driver shape, syscon regmap).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_TS4800_WATCHDOG) += ts4800_wdt-rust.o
ts4800_wdt-rust-y := ts4800_wdt_rust.o

$(obj)/rust/watchdog_ts4800_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=ts4800_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/ts4800_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_ts4800_wdt_rust.o := y

ifeq ($(CONFIG_TS4800_WATCHDOG),y)
ts4800_wdt-rust-y += rust/watchdog_ts4800_wdt_rust.o
endif
ifeq ($(CONFIG_TS4800_WATCHDOG),m)
obj-y += ts4800_wdt-rust-builtin.o
ts4800_wdt-rust-builtin-y := rust/watchdog_ts4800_wdt_rust.o ts4800_wdt_builtin.o
CFLAGS_ts4800_wdt_builtin.o := -DTS4800_WDT_RUST_BUILTIN
$(obj)/ts4800_wdt_builtin.o: $(src)/ts4800_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_TS4800_WATCHDOG) += ts4800_wdt.o
endif
# TS-72xx Watchdog with optional Rust path (platform_driver shape, dual MMIO).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_TS72XX_WATCHDOG) += ts72xx_wdt-rust.o
ts72xx_wdt-rust-y := ts72xx_wdt_rust.o

$(obj)/rust/watchdog_ts72xx_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=ts72xx_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/ts72xx_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_ts72xx_wdt_rust.o := y

ifeq ($(CONFIG_TS72XX_WATCHDOG),y)
ts72xx_wdt-rust-y += rust/watchdog_ts72xx_wdt_rust.o
endif
ifeq ($(CONFIG_TS72XX_WATCHDOG),m)
obj-y += ts72xx_wdt-rust-builtin.o
ts72xx_wdt-rust-builtin-y := rust/watchdog_ts72xx_wdt_rust.o ts72xx_wdt_builtin.o
CFLAGS_ts72xx_wdt_builtin.o := -DTS72XX_WDT_RUST_BUILTIN
$(obj)/ts72xx_wdt_builtin.o: $(src)/ts72xx_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_TS72XX_WATCHDOG) += ts72xx_wdt.o
endif
# NXP i.MX2+ Watchdog with optional Rust path (regmap-based).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_IMX2_WDT) += imx2_wdt-rust.o
imx2_wdt-rust-y := imx2_wdt_rust.o

$(obj)/rust/watchdog_imx2_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=imx2_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/imx2_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_imx2_wdt_rust.o := y

ifeq ($(CONFIG_IMX2_WDT),y)
imx2_wdt-rust-y += rust/watchdog_imx2_wdt_rust.o
endif
ifeq ($(CONFIG_IMX2_WDT),m)
obj-y += imx2_wdt-rust-builtin.o
imx2_wdt-rust-builtin-y := rust/watchdog_imx2_wdt_rust.o imx2_wdt_builtin.o
CFLAGS_imx2_wdt_builtin.o := -DIMX2_WDT_RUST_BUILTIN
$(obj)/imx2_wdt_builtin.o: $(src)/imx2_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_IMX2_WDT) += imx2_wdt.o
endif
obj-$(CONFIG_IMX_SC_WDT) += imx_sc_wdt.o
# NXP i.MX7ULP / 8ULP / 93 Watchdog with optional Rust path.
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_IMX7ULP_WDT) += imx7ulp_wdt-rust.o
imx7ulp_wdt-rust-y := imx7ulp_wdt_rust.o

$(obj)/rust/watchdog_imx7ulp_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=imx7ulp_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/imx7ulp_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_imx7ulp_wdt_rust.o := y

ifeq ($(CONFIG_IMX7ULP_WDT),y)
imx7ulp_wdt-rust-y += rust/watchdog_imx7ulp_wdt_rust.o
endif
ifeq ($(CONFIG_IMX7ULP_WDT),m)
obj-y += imx7ulp_wdt-rust-builtin.o
imx7ulp_wdt-rust-builtin-y := rust/watchdog_imx7ulp_wdt_rust.o imx7ulp_wdt_builtin.o
CFLAGS_imx7ulp_wdt_builtin.o := -DIMX7ULP_WDT_RUST_BUILTIN
$(obj)/imx7ulp_wdt_builtin.o: $(src)/imx7ulp_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_IMX7ULP_WDT) += imx7ulp_wdt.o
endif
# ST-Ericsson DB8500 PRCMU watchdog with optional Rust path.
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_DB500_WATCHDOG) += db8500_wdt-rust.o
db8500_wdt-rust-y := db8500_wdt_rust.o

$(obj)/rust/watchdog_db8500_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=db8500_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/db8500_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_db8500_wdt_rust.o := y

ifeq ($(CONFIG_DB500_WATCHDOG),y)
db8500_wdt-rust-y += rust/watchdog_db8500_wdt_rust.o
endif
ifeq ($(CONFIG_DB500_WATCHDOG),m)
obj-y += db8500_wdt-rust-builtin.o
db8500_wdt-rust-builtin-y := rust/watchdog_db8500_wdt_rust.o db8500_wdt_builtin.o
CFLAGS_db8500_wdt_builtin.o := -DDB8500_WDT_RUST_BUILTIN
$(obj)/db8500_wdt_builtin.o: $(src)/db8500_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_DB500_WATCHDOG) += db8500_wdt.o
endif
obj-$(CONFIG_RETU_WATCHDOG) += retu_wdt.o
# Broadcom BCM2835 Watchdog with optional Rust path (platform_driver shape).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_BCM2835_WDT) += bcm2835_wdt-rust.o
bcm2835_wdt-rust-y := bcm2835_wdt_rust.o

$(obj)/rust/watchdog_bcm2835_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=bcm2835_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/bcm2835_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_bcm2835_wdt_rust.o := y

ifeq ($(CONFIG_BCM2835_WDT),y)
bcm2835_wdt-rust-y += rust/watchdog_bcm2835_wdt_rust.o
endif
ifeq ($(CONFIG_BCM2835_WDT),m)
obj-y += bcm2835_wdt-rust-builtin.o
bcm2835_wdt-rust-builtin-y := rust/watchdog_bcm2835_wdt_rust.o bcm2835_wdt_builtin.o
CFLAGS_bcm2835_wdt_builtin.o := -DBCM2835_WDT_RUST_BUILTIN
$(obj)/bcm2835_wdt_builtin.o: $(src)/bcm2835_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_BCM2835_WDT) += bcm2835_wdt.o
endif
# MOXA ART SoC Watchdog with optional Rust ops path (clk-derived ticks).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_MOXART_WDT) += moxart_wdt-rust.o
moxart_wdt-rust-y := moxart_wdt_rust.o

$(obj)/rust/watchdog_moxart_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=moxart_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/moxart_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_moxart_wdt_rust.o := y

ifeq ($(CONFIG_MOXART_WDT),y)
moxart_wdt-rust-y += rust/watchdog_moxart_wdt_rust.o
endif
ifeq ($(CONFIG_MOXART_WDT),m)
obj-y += moxart_wdt-rust-builtin.o
moxart_wdt-rust-builtin-y := rust/watchdog_moxart_wdt_rust.o moxart_wdt_builtin.o
CFLAGS_moxart_wdt_builtin.o := -DMOXART_WDT_RUST_BUILTIN
$(obj)/moxart_wdt_builtin.o: $(src)/moxart_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_MOXART_WDT) += moxart_wdt.o
endif
# st_lpc_wdt with optional Rust path.
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_ST_LPC_WATCHDOG) += st_lpc_wdt-rust.o
st_lpc_wdt-rust-y := st_lpc_wdt_rust.o

$(obj)/rust/watchdog_st_lpc_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=st_lpc_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/st_lpc_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_st_lpc_wdt_rust.o := y

ifeq ($(CONFIG_ST_LPC_WATCHDOG),y)
st_lpc_wdt-rust-y += rust/watchdog_st_lpc_wdt_rust.o
endif
ifeq ($(CONFIG_ST_LPC_WATCHDOG),m)
obj-y += st_lpc_wdt-rust-builtin.o
st_lpc_wdt-rust-builtin-y := rust/watchdog_st_lpc_wdt_rust.o st_lpc_wdt_builtin.o
CFLAGS_st_lpc_wdt_builtin.o := -DST_LPC_WDT_RUST_BUILTIN
$(obj)/st_lpc_wdt_builtin.o: $(src)/st_lpc_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_ST_LPC_WATCHDOG) += st_lpc_wdt.o
endif
# Qualcomm KPSS Watchdog with optional Rust path (platform_driver shape).
# Note: C file uses dashed name (qcom-wdt.c), Rust uses underscored crate
# names — the .ko name follows the C file.
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_QCOM_WDT) += qcom-wdt-rust.o
qcom-wdt-rust-y := qcom-wdt_rust.o

$(obj)/rust/watchdog_qcom_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=qcom_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/qcom_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_qcom_wdt_rust.o := y

ifeq ($(CONFIG_QCOM_WDT),y)
qcom-wdt-rust-y += rust/watchdog_qcom_wdt_rust.o
endif
ifeq ($(CONFIG_QCOM_WDT),m)
obj-y += qcom-wdt-rust-builtin.o
qcom-wdt-rust-builtin-y := rust/watchdog_qcom_wdt_rust.o qcom_wdt_builtin.o
CFLAGS_qcom_wdt_builtin.o := -DQCOM_WDT_RUST_BUILTIN
$(obj)/qcom_wdt_builtin.o: $(src)/qcom-wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_QCOM_WDT) += qcom-wdt.o
endif
# Broadcom Kona Watchdog with optional Rust path (platform_driver shape).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_BCM_KONA_WDT) += bcm_kona_wdt-rust.o
bcm_kona_wdt-rust-y := bcm_kona_wdt_rust.o

$(obj)/rust/watchdog_bcm_kona_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=bcm_kona_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/bcm_kona_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_bcm_kona_wdt_rust.o := y

ifeq ($(CONFIG_BCM_KONA_WDT),y)
bcm_kona_wdt-rust-y += rust/watchdog_bcm_kona_wdt_rust.o
endif
ifeq ($(CONFIG_BCM_KONA_WDT),m)
obj-y += bcm_kona_wdt-rust-builtin.o
bcm_kona_wdt-rust-builtin-y := rust/watchdog_bcm_kona_wdt_rust.o bcm_kona_wdt_builtin.o
CFLAGS_bcm_kona_wdt_builtin.o := -DBCM_KONA_WDT_RUST_BUILTIN
$(obj)/bcm_kona_wdt_builtin.o: $(src)/bcm_kona_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_BCM_KONA_WDT) += bcm_kona_wdt.o
endif
# NVIDIA Tegra Watchdog with optional Rust path (platform_driver shape).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_TEGRA_WATCHDOG) += tegra_wdt-rust.o
tegra_wdt-rust-y := tegra_wdt_rust.o

$(obj)/rust/watchdog_tegra_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=tegra_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/tegra_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_tegra_wdt_rust.o := y

ifeq ($(CONFIG_TEGRA_WATCHDOG),y)
tegra_wdt-rust-y += rust/watchdog_tegra_wdt_rust.o
endif
ifeq ($(CONFIG_TEGRA_WATCHDOG),m)
obj-y += tegra_wdt-rust-builtin.o
tegra_wdt-rust-builtin-y := rust/watchdog_tegra_wdt_rust.o tegra_wdt_builtin.o
CFLAGS_tegra_wdt_builtin.o := -DTEGRA_WDT_RUST_BUILTIN
$(obj)/tegra_wdt_builtin.o: $(src)/tegra_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_TEGRA_WATCHDOG) += tegra_wdt.o
endif
# Amlogic Meson GXBB Watchdog with optional Rust path (platform_driver shape).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_MESON_GXBB_WATCHDOG) += meson_gxbb_wdt-rust.o
meson_gxbb_wdt-rust-y := meson_gxbb_wdt_rust.o

$(obj)/rust/watchdog_meson_gxbb_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=meson_gxbb_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/meson_gxbb_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_meson_gxbb_wdt_rust.o := y

ifeq ($(CONFIG_MESON_GXBB_WATCHDOG),y)
meson_gxbb_wdt-rust-y += rust/watchdog_meson_gxbb_wdt_rust.o
endif
ifeq ($(CONFIG_MESON_GXBB_WATCHDOG),m)
obj-y += meson_gxbb_wdt-rust-builtin.o
meson_gxbb_wdt-rust-builtin-y := rust/watchdog_meson_gxbb_wdt_rust.o meson_gxbb_wdt_builtin.o
CFLAGS_meson_gxbb_wdt_builtin.o := -DMESON_GXBB_WDT_RUST_BUILTIN
$(obj)/meson_gxbb_wdt_builtin.o: $(src)/meson_gxbb_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_MESON_GXBB_WATCHDOG) += meson_gxbb_wdt.o
endif
# Amlogic Meson Watchdog with optional Rust path (platform_driver shape).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_MESON_WATCHDOG) += meson_wdt-rust.o
meson_wdt-rust-y := meson_wdt_rust.o

$(obj)/rust/watchdog_meson_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=meson_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/meson_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_meson_wdt_rust.o := y

ifeq ($(CONFIG_MESON_WATCHDOG),y)
meson_wdt-rust-y += rust/watchdog_meson_wdt_rust.o
endif
ifeq ($(CONFIG_MESON_WATCHDOG),m)
obj-y += meson_wdt-rust-builtin.o
meson_wdt-rust-builtin-y := rust/watchdog_meson_wdt_rust.o meson_wdt_builtin.o
CFLAGS_meson_wdt_builtin.o := -DMESON_WDT_RUST_BUILTIN
$(obj)/meson_wdt_builtin.o: $(src)/meson_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_MESON_WATCHDOG) += meson_wdt.o
endif
# MediaTek Watchdog with optional Rust path (platform_driver + reset controller).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_MEDIATEK_WATCHDOG) += mtk_wdt-rust.o
mtk_wdt-rust-y := mtk_wdt_rust.o

$(obj)/rust/watchdog_mtk_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=mtk_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/mtk_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_mtk_wdt_rust.o := y

ifeq ($(CONFIG_MEDIATEK_WATCHDOG),y)
mtk_wdt-rust-y += rust/watchdog_mtk_wdt_rust.o
endif
ifeq ($(CONFIG_MEDIATEK_WATCHDOG),m)
obj-y += mtk_wdt-rust-builtin.o
mtk_wdt-rust-builtin-y := rust/watchdog_mtk_wdt_rust.o mtk_wdt_builtin.o
CFLAGS_mtk_wdt_builtin.o := -DMTK_WDT_RUST_BUILTIN
$(obj)/mtk_wdt_builtin.o: $(src)/mtk_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_MEDIATEK_WATCHDOG) += mtk_wdt.o
endif
# Conexant Digicolor Watchdog with optional Rust path (platform_driver shape).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_DIGICOLOR_WATCHDOG) += digicolor_wdt-rust.o
digicolor_wdt-rust-y := digicolor_wdt_rust.o

$(obj)/rust/watchdog_digicolor_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=digicolor_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/digicolor_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_digicolor_wdt_rust.o := y

ifeq ($(CONFIG_DIGICOLOR_WATCHDOG),y)
digicolor_wdt-rust-y += rust/watchdog_digicolor_wdt_rust.o
endif
ifeq ($(CONFIG_DIGICOLOR_WATCHDOG),m)
obj-y += digicolor_wdt-rust-builtin.o
digicolor_wdt-rust-builtin-y := rust/watchdog_digicolor_wdt_rust.o digicolor_wdt_builtin.o
CFLAGS_digicolor_wdt_builtin.o := -DDIGICOLOR_WDT_RUST_BUILTIN
$(obj)/digicolor_wdt_builtin.o: $(src)/digicolor_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_DIGICOLOR_WATCHDOG) += digicolor_wdt.o
endif
# lpc18xx_wdt with optional Rust path.
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_LPC18XX_WATCHDOG) += lpc18xx_wdt-rust.o
lpc18xx_wdt-rust-y := lpc18xx_wdt_rust.o

$(obj)/rust/watchdog_lpc18xx_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=lpc18xx_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/lpc18xx_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_lpc18xx_wdt_rust.o := y

ifeq ($(CONFIG_LPC18XX_WATCHDOG),y)
lpc18xx_wdt-rust-y += rust/watchdog_lpc18xx_wdt_rust.o
endif
ifeq ($(CONFIG_LPC18XX_WATCHDOG),m)
obj-y += lpc18xx_wdt-rust-builtin.o
lpc18xx_wdt-rust-builtin-y := rust/watchdog_lpc18xx_wdt_rust.o lpc18xx_wdt_builtin.o
CFLAGS_lpc18xx_wdt_builtin.o := -DLPC18XX_WDT_RUST_BUILTIN
$(obj)/lpc18xx_wdt_builtin.o: $(src)/lpc18xx_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_LPC18XX_WATCHDOG) += lpc18xx_wdt.o
endif
# Broadcom BCM7038 Watchdog with optional Rust path (platform_driver shape).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_BCM7038_WDT) += bcm7038_wdt-rust.o
bcm7038_wdt-rust-y := bcm7038_wdt_rust.o

$(obj)/rust/watchdog_bcm7038_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=bcm7038_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/bcm7038_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_bcm7038_wdt_rust.o := y

ifeq ($(CONFIG_BCM7038_WDT),y)
bcm7038_wdt-rust-y += rust/watchdog_bcm7038_wdt_rust.o
endif
ifeq ($(CONFIG_BCM7038_WDT),m)
obj-y += bcm7038_wdt-rust-builtin.o
bcm7038_wdt-rust-builtin-y := rust/watchdog_bcm7038_wdt_rust.o bcm7038_wdt_builtin.o
CFLAGS_bcm7038_wdt_builtin.o := -DBCM7038_WDT_RUST_BUILTIN
$(obj)/bcm7038_wdt_builtin.o: $(src)/bcm7038_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_BCM7038_WDT) += bcm7038_wdt.o
endif
# renesas_wdt with optional Rust path.
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_RENESAS_WDT) += renesas_wdt-rust.o
renesas_wdt-rust-y := renesas_wdt_rust.o

$(obj)/rust/watchdog_renesas_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=renesas_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/renesas_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_renesas_wdt_rust.o := y

ifeq ($(CONFIG_RENESAS_WDT),y)
renesas_wdt-rust-y += rust/watchdog_renesas_wdt_rust.o
endif
ifeq ($(CONFIG_RENESAS_WDT),m)
obj-y += renesas_wdt-rust-builtin.o
renesas_wdt-rust-builtin-y := rust/watchdog_renesas_wdt_rust.o renesas_wdt_builtin.o
CFLAGS_renesas_wdt_builtin.o := -DRENESAS_WDT_RUST_BUILTIN
$(obj)/renesas_wdt_builtin.o: $(src)/renesas_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_RENESAS_WDT) += renesas_wdt.o
endif
# rza_wdt with optional Rust path.
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_RENESAS_RZAWDT) += rza_wdt-rust.o
rza_wdt-rust-y := rza_wdt_rust.o

$(obj)/rust/watchdog_rza_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=rza_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/rza_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_rza_wdt_rust.o := y

ifeq ($(CONFIG_RENESAS_RZAWDT),y)
rza_wdt-rust-y += rust/watchdog_rza_wdt_rust.o
endif
ifeq ($(CONFIG_RENESAS_RZAWDT),m)
obj-y += rza_wdt-rust-builtin.o
rza_wdt-rust-builtin-y := rust/watchdog_rza_wdt_rust.o rza_wdt_builtin.o
CFLAGS_rza_wdt_builtin.o := -DRZA_WDT_RUST_BUILTIN
$(obj)/rza_wdt_builtin.o: $(src)/rza_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_RENESAS_RZAWDT) += rza_wdt.o
endif
# Renesas RZ/N1 Watchdog with optional Rust path (platform_driver shape).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_RENESAS_RZN1WDT) += rzn1_wdt-rust.o
rzn1_wdt-rust-y := rzn1_wdt_rust.o

$(obj)/rust/watchdog_rzn1_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=rzn1_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/rzn1_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_rzn1_wdt_rust.o := y

ifeq ($(CONFIG_RENESAS_RZN1WDT),y)
rzn1_wdt-rust-y += rust/watchdog_rzn1_wdt_rust.o
endif
ifeq ($(CONFIG_RENESAS_RZN1WDT),m)
obj-y += rzn1_wdt-rust-builtin.o
rzn1_wdt-rust-builtin-y := rust/watchdog_rzn1_wdt_rust.o rzn1_wdt_builtin.o
CFLAGS_rzn1_wdt_builtin.o := -DRZN1_WDT_RUST_BUILTIN
$(obj)/rzn1_wdt_builtin.o: $(src)/rzn1_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_RENESAS_RZN1WDT) += rzn1_wdt.o
endif
# Renesas RZ/G2L Watchdog with optional Rust path (platform_driver shape).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_RENESAS_RZG2LWDT) += rzg2l_wdt-rust.o
rzg2l_wdt-rust-y := rzg2l_wdt_rust.o

$(obj)/rust/watchdog_rzg2l_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=rzg2l_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/rzg2l_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_rzg2l_wdt_rust.o := y

ifeq ($(CONFIG_RENESAS_RZG2LWDT),y)
rzg2l_wdt-rust-y += rust/watchdog_rzg2l_wdt_rust.o
endif
ifeq ($(CONFIG_RENESAS_RZG2LWDT),m)
obj-y += rzg2l_wdt-rust-builtin.o
rzg2l_wdt-rust-builtin-y := rust/watchdog_rzg2l_wdt_rust.o rzg2l_wdt_builtin.o
CFLAGS_rzg2l_wdt_builtin.o := -DRZG2L_WDT_RUST_BUILTIN
$(obj)/rzg2l_wdt_builtin.o: $(src)/rzg2l_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_RENESAS_RZG2LWDT) += rzg2l_wdt.o
endif
# Aspeed BMC Watchdog with optional Rust ops path.
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_ASPEED_WATCHDOG) += aspeed_wdt-rust.o
aspeed_wdt-rust-y := aspeed_wdt_rust.o

$(obj)/rust/watchdog_aspeed_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=aspeed_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/aspeed_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_aspeed_wdt_rust.o := y

ifeq ($(CONFIG_ASPEED_WATCHDOG),y)
aspeed_wdt-rust-y += rust/watchdog_aspeed_wdt_rust.o
endif
ifeq ($(CONFIG_ASPEED_WATCHDOG),m)
obj-y += aspeed_wdt-rust-builtin.o
aspeed_wdt-rust-builtin-y := rust/watchdog_aspeed_wdt_rust.o aspeed_wdt_builtin.o
CFLAGS_aspeed_wdt_builtin.o := -DASPEED_WDT_RUST_BUILTIN
$(obj)/aspeed_wdt_builtin.o: $(src)/aspeed_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_ASPEED_WATCHDOG) += aspeed_wdt.o
endif
# stm32_iwdg with optional Rust path.
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_STM32_WATCHDOG) += stm32_iwdg-rust.o
stm32_iwdg-rust-y := stm32_iwdg_rust.o

$(obj)/rust/watchdog_stm32_iwdg_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=stm32_iwdg \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/stm32_iwdg' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_stm32_iwdg_rust.o := y

ifeq ($(CONFIG_STM32_WATCHDOG),y)
stm32_iwdg-rust-y += rust/watchdog_stm32_iwdg_rust.o
endif
ifeq ($(CONFIG_STM32_WATCHDOG),m)
obj-y += stm32_iwdg-rust-builtin.o
stm32_iwdg-rust-builtin-y := rust/watchdog_stm32_iwdg_rust.o stm32_iwdg_builtin.o
CFLAGS_stm32_iwdg_builtin.o := -DSTM32_IWDG_RUST_BUILTIN
$(obj)/stm32_iwdg_builtin.o: $(src)/stm32_iwdg_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_STM32_WATCHDOG) += stm32_iwdg.o
endif
# uniphier_wdt with optional Rust path.
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_UNIPHIER_WATCHDOG) += uniphier_wdt-rust.o
uniphier_wdt-rust-y := uniphier_wdt_rust.o

$(obj)/rust/watchdog_uniphier_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=uniphier_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/uniphier_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_uniphier_wdt_rust.o := y

ifeq ($(CONFIG_UNIPHIER_WATCHDOG),y)
uniphier_wdt-rust-y += rust/watchdog_uniphier_wdt_rust.o
endif
ifeq ($(CONFIG_UNIPHIER_WATCHDOG),m)
obj-y += uniphier_wdt-rust-builtin.o
uniphier_wdt-rust-builtin-y := rust/watchdog_uniphier_wdt_rust.o uniphier_wdt_builtin.o
CFLAGS_uniphier_wdt_builtin.o := -DUNIPHIER_WDT_RUST_BUILTIN
$(obj)/uniphier_wdt_builtin.o: $(src)/uniphier_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_UNIPHIER_WATCHDOG) += uniphier_wdt.o
endif
# Realtek RTD119x watchdog with optional Rust path
# (builtin_platform_driver — Kconfig is bool, so =y only; no -rust-builtin
# aggregator needed since `=m` is never an option.)
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_RTD119X_WATCHDOG) += rtd119x_wdt.o
obj-$(CONFIG_RTD119X_WATCHDOG) += rust/watchdog_rtd119x_wdt_rust.o

$(obj)/rust/watchdog_rtd119x_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=rtd119x_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/rtd119x_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_rtd119x_wdt_rust.o := y
else
obj-$(CONFIG_RTD119X_WATCHDOG) += rtd119x_wdt.o
endif
# sprd_wdt with optional Rust path.
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_SPRD_WATCHDOG) += sprd_wdt-rust.o
sprd_wdt-rust-y := sprd_wdt_rust.o

$(obj)/rust/watchdog_sprd_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=sprd_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/sprd_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_sprd_wdt_rust.o := y

ifeq ($(CONFIG_SPRD_WATCHDOG),y)
sprd_wdt-rust-y += rust/watchdog_sprd_wdt_rust.o
endif
ifeq ($(CONFIG_SPRD_WATCHDOG),m)
obj-y += sprd_wdt-rust-builtin.o
sprd_wdt-rust-builtin-y := rust/watchdog_sprd_wdt_rust.o sprd_wdt_builtin.o
CFLAGS_sprd_wdt_builtin.o := -DSPRD_WDT_RUST_BUILTIN
$(obj)/sprd_wdt_builtin.o: $(src)/sprd_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_SPRD_WATCHDOG) += sprd_wdt.o
endif
obj-$(CONFIG_PM8916_WATCHDOG) += pm8916_wdt.o
# ARM SMC Watchdog with optional Rust path (platform_driver shape).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_ARM_SMC_WATCHDOG) += arm_smc_wdt-rust.o
arm_smc_wdt-rust-y := arm_smc_wdt_rust.o

$(obj)/rust/watchdog_arm_smc_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=arm_smc_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/arm_smc_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_arm_smc_wdt_rust.o := y

ifeq ($(CONFIG_ARM_SMC_WATCHDOG),y)
arm_smc_wdt-rust-y += rust/watchdog_arm_smc_wdt_rust.o
endif
ifeq ($(CONFIG_ARM_SMC_WATCHDOG),m)
obj-y += arm_smc_wdt-rust-builtin.o
arm_smc_wdt-rust-builtin-y := rust/watchdog_arm_smc_wdt_rust.o arm_smc_wdt_builtin.o
CFLAGS_arm_smc_wdt_builtin.o := -DARM_SMC_WDT_RUST_BUILTIN
$(obj)/arm_smc_wdt_builtin.o: $(src)/arm_smc_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_ARM_SMC_WATCHDOG) += arm_smc_wdt.o
endif
# HPE GXP BMC Watchdog with optional Rust path (full port).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_GXP_WATCHDOG) += gxp-wdt-rust.o
gxp-wdt-rust-y := gxp-wdt_rust.o

$(obj)/rust/watchdog_gxp_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=gxp_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/gxp_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_gxp_wdt_rust.o := y

ifeq ($(CONFIG_GXP_WATCHDOG),y)
gxp-wdt-rust-y += rust/watchdog_gxp_wdt_rust.o
endif
ifeq ($(CONFIG_GXP_WATCHDOG),m)
obj-y += gxp-wdt-rust-builtin.o
gxp-wdt-rust-builtin-y := rust/watchdog_gxp_wdt_rust.o gxp-wdt_builtin.o
CFLAGS_gxp-wdt_builtin.o := -DGXP_WDT_RUST_BUILTIN
$(obj)/gxp-wdt_builtin.o: $(src)/gxp-wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_GXP_WATCHDOG) += gxp-wdt.o
endif
# Toshiba Visconti Watchdog with optional Rust ops path (clk-derived divider).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_VISCONTI_WATCHDOG) += visconti_wdt-rust.o
visconti_wdt-rust-y := visconti_wdt_rust.o

$(obj)/rust/watchdog_visconti_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=visconti_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/visconti_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_visconti_wdt_rust.o := y

ifeq ($(CONFIG_VISCONTI_WATCHDOG),y)
visconti_wdt-rust-y += rust/watchdog_visconti_wdt_rust.o
endif
ifeq ($(CONFIG_VISCONTI_WATCHDOG),m)
obj-y += visconti_wdt-rust-builtin.o
visconti_wdt-rust-builtin-y := rust/watchdog_visconti_wdt_rust.o visconti_wdt_builtin.o
CFLAGS_visconti_wdt_builtin.o := -DVISCONTI_WDT_RUST_BUILTIN
$(obj)/visconti_wdt_builtin.o: $(src)/visconti_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_VISCONTI_WATCHDOG) += visconti_wdt.o
endif
# MStar MSC313e Watchdog with optional Rust ops path (clk inside ops).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_MSC313E_WATCHDOG) += msc313e_wdt-rust.o
msc313e_wdt-rust-y := msc313e_wdt_rust.o

$(obj)/rust/watchdog_msc313e_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=msc313e_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/msc313e_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_msc313e_wdt_rust.o := y

ifeq ($(CONFIG_MSC313E_WATCHDOG),y)
msc313e_wdt-rust-y += rust/watchdog_msc313e_wdt_rust.o
endif
ifeq ($(CONFIG_MSC313E_WATCHDOG),m)
obj-y += msc313e_wdt-rust-builtin.o
msc313e_wdt-rust-builtin-y := rust/watchdog_msc313e_wdt_rust.o msc313e_wdt_builtin.o
CFLAGS_msc313e_wdt_builtin.o := -DMSC313E_WDT_RUST_BUILTIN
$(obj)/msc313e_wdt_builtin.o: $(src)/msc313e_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_MSC313E_WATCHDOG) += msc313e_wdt.o
endif
# Apple SoC Watchdog with optional Rust path (platform_driver shape).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_APPLE_WATCHDOG) += apple_wdt-rust.o
apple_wdt-rust-y := apple_wdt_rust.o

$(obj)/rust/watchdog_apple_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=apple_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/apple_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_apple_wdt_rust.o := y

ifeq ($(CONFIG_APPLE_WATCHDOG),y)
apple_wdt-rust-y += rust/watchdog_apple_wdt_rust.o
endif
ifeq ($(CONFIG_APPLE_WATCHDOG),m)
obj-y += apple_wdt-rust-builtin.o
apple_wdt-rust-builtin-y := rust/watchdog_apple_wdt_rust.o apple_wdt_builtin.o
CFLAGS_apple_wdt_builtin.o := -DAPPLE_WDT_RUST_BUILTIN
$(obj)/apple_wdt_builtin.o: $(src)/apple_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_APPLE_WATCHDOG) += apple_wdt.o
endif
# Sunplus Watchdog with optional Rust path (platform_driver shape, direct MMIO).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_SUNPLUS_WATCHDOG) += sunplus_wdt-rust.o
sunplus_wdt-rust-y := sunplus_wdt_rust.o

$(obj)/rust/watchdog_sunplus_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=sunplus_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/sunplus_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_sunplus_wdt_rust.o := y

ifeq ($(CONFIG_SUNPLUS_WATCHDOG),y)
sunplus_wdt-rust-y += rust/watchdog_sunplus_wdt_rust.o
endif
ifeq ($(CONFIG_SUNPLUS_WATCHDOG),m)
obj-y += sunplus_wdt-rust-builtin.o
sunplus_wdt-rust-builtin-y := rust/watchdog_sunplus_wdt_rust.o sunplus_wdt_builtin.o
CFLAGS_sunplus_wdt_builtin.o := -DSUNPLUS_WDT_RUST_BUILTIN
$(obj)/sunplus_wdt_builtin.o: $(src)/sunplus_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_SUNPLUS_WATCHDOG) += sunplus_wdt.o
endif
obj-$(CONFIG_MARVELL_GTI_WDT) += marvell_gti_wdt.o

# X86 (i386 + ia64 + x86_64) Architecture
# Acquire SBC Watchdog with optional Rust path (misc-shape).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_ACQUIRE_WDT) += acquirewdt-rust.o
acquirewdt-rust-y := acquirewdt_rust.o

$(obj)/rust/watchdog_acquirewdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=acquirewdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/acquirewdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_acquirewdt_rust.o := y

ifeq ($(CONFIG_ACQUIRE_WDT),y)
acquirewdt-rust-y += rust/watchdog_acquirewdt_rust.o
endif
ifeq ($(CONFIG_ACQUIRE_WDT),m)
obj-y += acquirewdt-rust-builtin.o
acquirewdt-rust-builtin-y := rust/watchdog_acquirewdt_rust.o acquirewdt_builtin.o
CFLAGS_acquirewdt_builtin.o := -DACQUIREWDT_RUST_BUILTIN
$(obj)/acquirewdt_builtin.o: $(src)/acquirewdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_ACQUIRE_WDT) += acquirewdt.o
endif
# Advantech SBC Watchdog with optional Rust path (misc-shape).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_ADVANTECH_WDT) += advantechwdt-rust.o
advantechwdt-rust-y := advantechwdt_rust.o

$(obj)/rust/watchdog_advantechwdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=advantechwdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/advantechwdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_advantechwdt_rust.o := y

ifeq ($(CONFIG_ADVANTECH_WDT),y)
advantechwdt-rust-y += rust/watchdog_advantechwdt_rust.o
endif
ifeq ($(CONFIG_ADVANTECH_WDT),m)
obj-y += advantechwdt-rust-builtin.o
advantechwdt-rust-builtin-y := rust/watchdog_advantechwdt_rust.o advantechwdt_builtin.o
CFLAGS_advantechwdt_builtin.o := -DADVANTECHWDT_RUST_BUILTIN
$(obj)/advantechwdt_builtin.o: $(src)/advantechwdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_ADVANTECH_WDT) += advantechwdt.o
endif
obj-$(CONFIG_ADVANTECH_EC_WDT) += advantech_ec_wdt.o
# ALi M1535 PMU Watchdog with optional Rust path (misc + PCI config).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_ALIM1535_WDT) += alim1535_wdt-rust.o
alim1535_wdt-rust-y := alim1535_wdt_rust.o

$(obj)/rust/watchdog_alim1535_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=alim1535_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/alim1535_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_alim1535_wdt_rust.o := y

ifeq ($(CONFIG_ALIM1535_WDT),y)
alim1535_wdt-rust-y += rust/watchdog_alim1535_wdt_rust.o
endif
ifeq ($(CONFIG_ALIM1535_WDT),m)
obj-y += alim1535_wdt-rust-builtin.o
alim1535_wdt-rust-builtin-y := rust/watchdog_alim1535_wdt_rust.o alim1535_wdt_builtin.o
CFLAGS_alim1535_wdt_builtin.o := -DALIM1535_WDT_RUST_BUILTIN
$(obj)/alim1535_wdt_builtin.o: $(src)/alim1535_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_ALIM1535_WDT) += alim1535_wdt.o
endif
# ALi M7101 PMU Watchdog with optional Rust path (misc + PCI config).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_ALIM7101_WDT) += alim7101_wdt-rust.o
alim7101_wdt-rust-y := alim7101_wdt_rust.o

$(obj)/rust/watchdog_alim7101_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=alim7101_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/alim7101_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_alim7101_wdt_rust.o := y

ifeq ($(CONFIG_ALIM7101_WDT),y)
alim7101_wdt-rust-y += rust/watchdog_alim7101_wdt_rust.o
endif
ifeq ($(CONFIG_ALIM7101_WDT),m)
obj-y += alim7101_wdt-rust-builtin.o
alim7101_wdt-rust-builtin-y := rust/watchdog_alim7101_wdt_rust.o alim7101_wdt_builtin.o
CFLAGS_alim7101_wdt_builtin.o := -DALIM7101_WDT_RUST_BUILTIN
$(obj)/alim7101_wdt_builtin.o: $(src)/alim7101_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_ALIM7101_WDT) += alim7101_wdt.o
endif
# WinSystems EBC-C384 SBC Watchdog with optional Rust path
# (isa_driver + watchdog_device shape).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_EBC_C384_WDT) += ebc-c384_wdt-rust.o
ebc-c384_wdt-rust-y := ebc-c384_wdt_rust.o

$(obj)/rust/watchdog_ebc_c384_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=ebc_c384_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/ebc_c384_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_ebc_c384_wdt_rust.o := y

ifeq ($(CONFIG_EBC_C384_WDT),y)
ebc-c384_wdt-rust-y += rust/watchdog_ebc_c384_wdt_rust.o
endif
ifeq ($(CONFIG_EBC_C384_WDT),m)
obj-y += ebc-c384_wdt-rust-builtin.o
ebc-c384_wdt-rust-builtin-y := rust/watchdog_ebc_c384_wdt_rust.o ebc-c384_wdt_builtin.o
CFLAGS_ebc-c384_wdt_builtin.o := -DEBC_C384_WDT_RUST_BUILTIN
$(obj)/ebc-c384_wdt_builtin.o: $(src)/ebc-c384_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_EBC_C384_WDT) += ebc-c384_wdt.o
endif
# Exar XR28V38x Watchdog with optional Rust path.
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_EXAR_WDT) += exar_wdt-rust.o
exar_wdt-rust-y := exar_wdt_rust.o

$(obj)/rust/watchdog_exar_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=exar_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/exar_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_exar_wdt_rust.o := y

ifeq ($(CONFIG_EXAR_WDT),y)
exar_wdt-rust-y += rust/watchdog_exar_wdt_rust.o
endif
ifeq ($(CONFIG_EXAR_WDT),m)
obj-y += exar_wdt-rust-builtin.o
exar_wdt-rust-builtin-y := rust/watchdog_exar_wdt_rust.o exar_wdt_builtin.o
CFLAGS_exar_wdt_builtin.o := -DEXAR_WDT_RUST_BUILTIN
$(obj)/exar_wdt_builtin.o: $(src)/exar_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_EXAR_WDT) += exar_wdt.o
endif
# Fintek F71808E and friends Watchdog with optional Rust path (watchdog_device).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_F71808E_WDT) += f71808e_wdt-rust.o
f71808e_wdt-rust-y := f71808e_wdt_rust.o

$(obj)/rust/watchdog_f71808e_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=f71808e_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/f71808e_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_f71808e_wdt_rust.o := y

ifeq ($(CONFIG_F71808E_WDT),y)
f71808e_wdt-rust-y += rust/watchdog_f71808e_wdt_rust.o
endif
ifeq ($(CONFIG_F71808E_WDT),m)
obj-y += f71808e_wdt-rust-builtin.o
f71808e_wdt-rust-builtin-y := rust/watchdog_f71808e_wdt_rust.o f71808e_wdt_builtin.o
CFLAGS_f71808e_wdt_builtin.o := -DF71808E_WDT_RUST_BUILTIN
$(obj)/f71808e_wdt_builtin.o: $(src)/f71808e_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_F71808E_WDT) += f71808e_wdt.o
endif
# SP5100 TCO watchdog with optional Rust path.
#
# When CONFIG_RUST_DRIVERS=y we build a feature-gated Rust object that
# contains only the sp5100_tco crate (CARGO_FEATURES=sp5100_tco), and link
# it into the driver. =m additionally builds a vmlinux-side
# sp5100_tco-rust-builtin.o that aggregates the Rust .o + a
# sp5100_tco_builtin.o (compiled with -DSP5100_TCO_RUST_BUILTIN) exposing
# the C-side bridge symbols Rust calls into.
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_SP5100_TCO) += sp5100_tco-rust.o
sp5100_tco-rust-y := sp5100_tco_rust.o

$(obj)/rust/watchdog_sp5100_tco_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=sp5100_tco \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/sp5100_tco' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_sp5100_tco_rust.o := y

ifeq ($(CONFIG_SP5100_TCO),y)
sp5100_tco-rust-y += rust/watchdog_sp5100_tco_rust.o
endif
ifeq ($(CONFIG_SP5100_TCO),m)
obj-y += sp5100_tco-rust-builtin.o
sp5100_tco-rust-builtin-y := rust/watchdog_sp5100_tco_rust.o sp5100_tco_builtin.o
CFLAGS_sp5100_tco_builtin.o := -DSP5100_TCO_RUST_BUILTIN
$(obj)/sp5100_tco_builtin.o: $(src)/sp5100_tco_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_SP5100_TCO) += sp5100_tco.o
endif
obj-$(CONFIG_GEODE_WDT) += geodewdt.o
# AMD Elan SC520 watchdog with optional Rust path (miscdevice + ioremap + timer).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_SC520_WDT) += sc520_wdt-rust.o
sc520_wdt-rust-y := sc520_wdt_rust.o

$(obj)/rust/watchdog_sc520_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=sc520_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/sc520_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_sc520_wdt_rust.o := y

ifeq ($(CONFIG_SC520_WDT),y)
sc520_wdt-rust-y += rust/watchdog_sc520_wdt_rust.o
endif
ifeq ($(CONFIG_SC520_WDT),m)
obj-y += sc520_wdt-rust-builtin.o
sc520_wdt-rust-builtin-y := rust/watchdog_sc520_wdt_rust.o sc520_wdt_builtin.o
CFLAGS_sc520_wdt_builtin.o := -DSC520_WDT_RUST_BUILTIN
$(obj)/sc520_wdt_builtin.o: $(src)/sc520_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_SC520_WDT) += sc520_wdt.o
endif
# SBC-FITPC2 Watchdog with optional Rust path (misc + mutex + command/data).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_SBC_FITPC2_WATCHDOG) += sbc_fitpc2_wdt-rust.o
sbc_fitpc2_wdt-rust-y := sbc_fitpc2_wdt_rust.o

$(obj)/rust/watchdog_sbc_fitpc2_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=sbc_fitpc2_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/sbc_fitpc2_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_sbc_fitpc2_wdt_rust.o := y

ifeq ($(CONFIG_SBC_FITPC2_WATCHDOG),y)
sbc_fitpc2_wdt-rust-y += rust/watchdog_sbc_fitpc2_wdt_rust.o
endif
ifeq ($(CONFIG_SBC_FITPC2_WATCHDOG),m)
obj-y += sbc_fitpc2_wdt-rust-builtin.o
sbc_fitpc2_wdt-rust-builtin-y := rust/watchdog_sbc_fitpc2_wdt_rust.o sbc_fitpc2_wdt_builtin.o
CFLAGS_sbc_fitpc2_wdt_builtin.o := -DSBC_FITPC2_WDT_RUST_BUILTIN
$(obj)/sbc_fitpc2_wdt_builtin.o: $(src)/sbc_fitpc2_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_SBC_FITPC2_WATCHDOG) += sbc_fitpc2_wdt.o
endif
# Eurotech CPU-1220/1410 Watchdog with optional Rust path (misc+IRQ).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_EUROTECH_WDT) += eurotechwdt-rust.o
eurotechwdt-rust-y := eurotechwdt_rust.o

$(obj)/rust/watchdog_eurotechwdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=eurotechwdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/eurotechwdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_eurotechwdt_rust.o := y

ifeq ($(CONFIG_EUROTECH_WDT),y)
eurotechwdt-rust-y += rust/watchdog_eurotechwdt_rust.o
endif
ifeq ($(CONFIG_EUROTECH_WDT),m)
obj-y += eurotechwdt-rust-builtin.o
eurotechwdt-rust-builtin-y := rust/watchdog_eurotechwdt_rust.o eurotechwdt_builtin.o
CFLAGS_eurotechwdt_builtin.o := -DEUROTECHWDT_RUST_BUILTIN
$(obj)/eurotechwdt_builtin.o: $(src)/eurotechwdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_EUROTECH_WDT) += eurotechwdt.o
endif
# IB700 SBC Watchdog with optional Rust path.
#
# Same dual-mode shape as the platform_driver-shape ports above.  This
# is the first misc-shape (legacy raw-miscdevice) Rust port — the file
# operations / ioctl interpreter live in Rust, while the legacy
# platform_device + platform_driver_probe two-step that runs the probe
# stays in C.
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_IB700_WDT) += ib700wdt-rust.o
ib700wdt-rust-y := ib700wdt_rust.o

$(obj)/rust/watchdog_ib700wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=ib700wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/ib700wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_ib700wdt_rust.o := y

ifeq ($(CONFIG_IB700_WDT),y)
ib700wdt-rust-y += rust/watchdog_ib700wdt_rust.o
endif
ifeq ($(CONFIG_IB700_WDT),m)
obj-y += ib700wdt-rust-builtin.o
ib700wdt-rust-builtin-y := rust/watchdog_ib700wdt_rust.o ib700wdt_builtin.o
CFLAGS_ib700wdt_builtin.o := -DIB700WDT_RUST_BUILTIN
$(obj)/ib700wdt_builtin.o: $(src)/ib700wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_IB700_WDT) += ib700wdt.o
endif
# IBM Automatic Server Restart with optional Rust path
# (misc-shape; DMI-discovered variants TOPAZ/JASPER/PEARL/JUNIPER/SPRUCE).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_IBMASR) += ibmasr-rust.o
ibmasr-rust-y := ibmasr_rust.o

$(obj)/rust/watchdog_ibmasr_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=ibmasr \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/ibmasr' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_ibmasr_rust.o := y

ifeq ($(CONFIG_IBMASR),y)
ibmasr-rust-y += rust/watchdog_ibmasr_rust.o
endif
ifeq ($(CONFIG_IBMASR),m)
obj-y += ibmasr-rust-builtin.o
ibmasr-rust-builtin-y := rust/watchdog_ibmasr_rust.o ibmasr_builtin.o
CFLAGS_ibmasr_builtin.o := -DIBMASR_RUST_BUILTIN
$(obj)/ibmasr_builtin.o: $(src)/ibmasr_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_IBMASR) += ibmasr.o
endif
# Wafer 5823 SBC Watchdog with optional Rust path (misc-shape).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_WAFER_WDT) += wafer5823wdt-rust.o
wafer5823wdt-rust-y := wafer5823wdt_rust.o

$(obj)/rust/watchdog_wafer5823wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=wafer5823wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/wafer5823wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_wafer5823wdt_rust.o := y

ifeq ($(CONFIG_WAFER_WDT),y)
wafer5823wdt-rust-y += rust/watchdog_wafer5823wdt_rust.o
endif
ifeq ($(CONFIG_WAFER_WDT),m)
obj-y += wafer5823wdt-rust-builtin.o
wafer5823wdt-rust-builtin-y := rust/watchdog_wafer5823wdt_rust.o wafer5823wdt_builtin.o
CFLAGS_wafer5823wdt_builtin.o := -DWAFER5823WDT_RUST_BUILTIN
$(obj)/wafer5823wdt_builtin.o: $(src)/wafer5823wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_WAFER_WDT) += wafer5823wdt.o
endif
obj-$(CONFIG_I6300ESB_WDT) += i6300esb.o
# Intel Atom E6xx Watchdog with optional Rust path (watchdog_device).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_IE6XX_WDT) += ie6xx_wdt-rust.o
ie6xx_wdt-rust-y := ie6xx_wdt_rust.o

$(obj)/rust/watchdog_ie6xx_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=ie6xx_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/ie6xx_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_ie6xx_wdt_rust.o := y

ifeq ($(CONFIG_IE6XX_WDT),y)
ie6xx_wdt-rust-y += rust/watchdog_ie6xx_wdt_rust.o
endif
ifeq ($(CONFIG_IE6XX_WDT),m)
obj-y += ie6xx_wdt-rust-builtin.o
ie6xx_wdt-rust-builtin-y := rust/watchdog_ie6xx_wdt_rust.o ie6xx_wdt_builtin.o
CFLAGS_ie6xx_wdt_builtin.o := -DIE6XX_WDT_RUST_BUILTIN
$(obj)/ie6xx_wdt_builtin.o: $(src)/ie6xx_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_IE6XX_WDT) += ie6xx_wdt.o
endif
obj-$(CONFIG_ITCO_WDT) += iTCO_wdt.o
# Lenovo SE10 Watchdog with optional Rust path (DMI-gated x86 board driver).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_LENOVO_SE10_WDT) += lenovo_se10_wdt-rust.o
lenovo_se10_wdt-rust-y := lenovo_se10_wdt_rust.o

$(obj)/rust/watchdog_lenovo_se10_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=lenovo_se10_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/lenovo_se10_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_lenovo_se10_wdt_rust.o := y

ifeq ($(CONFIG_LENOVO_SE10_WDT),y)
lenovo_se10_wdt-rust-y += rust/watchdog_lenovo_se10_wdt_rust.o
endif
ifeq ($(CONFIG_LENOVO_SE10_WDT),m)
obj-y += lenovo_se10_wdt-rust-builtin.o
lenovo_se10_wdt-rust-builtin-y := rust/watchdog_lenovo_se10_wdt_rust.o lenovo_se10_wdt_builtin.o
CFLAGS_lenovo_se10_wdt_builtin.o := -DLENOVO_SE10_WDT_RUST_BUILTIN
$(obj)/lenovo_se10_wdt_builtin.o: $(src)/lenovo_se10_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_LENOVO_SE10_WDT) += lenovo_se10_wdt.o
endif
# Lenovo SE30 Watchdog with optional Rust path (DMI-gated x86 board driver).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_LENOVO_SE30_WDT) += lenovo_se30_wdt-rust.o
lenovo_se30_wdt-rust-y := lenovo_se30_wdt_rust.o

$(obj)/rust/watchdog_lenovo_se30_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=lenovo_se30_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/lenovo_se30_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_lenovo_se30_wdt_rust.o := y

ifeq ($(CONFIG_LENOVO_SE30_WDT),y)
lenovo_se30_wdt-rust-y += rust/watchdog_lenovo_se30_wdt_rust.o
endif
ifeq ($(CONFIG_LENOVO_SE30_WDT),m)
obj-y += lenovo_se30_wdt-rust-builtin.o
lenovo_se30_wdt-rust-builtin-y := rust/watchdog_lenovo_se30_wdt_rust.o lenovo_se30_wdt_builtin.o
CFLAGS_lenovo_se30_wdt_builtin.o := -DLENOVO_SE30_WDT_RUST_BUILTIN
$(obj)/lenovo_se30_wdt_builtin.o: $(src)/lenovo_se30_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_LENOVO_SE30_WDT) += lenovo_se30_wdt.o
endif
ifeq ($(CONFIG_ITCO_VENDOR_SUPPORT),y)
obj-$(CONFIG_ITCO_WDT) += iTCO_vendor_support.o
endif
# IT8712F Smart Guardian Watchdog with optional Rust path.
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_IT8712F_WDT) += it8712f_wdt-rust.o
it8712f_wdt-rust-y := it8712f_wdt_rust.o

$(obj)/rust/watchdog_it8712f_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=it8712f_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/it8712f_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_it8712f_wdt_rust.o := y

ifeq ($(CONFIG_IT8712F_WDT),y)
it8712f_wdt-rust-y += rust/watchdog_it8712f_wdt_rust.o
endif
ifeq ($(CONFIG_IT8712F_WDT),m)
obj-y += it8712f_wdt-rust-builtin.o
it8712f_wdt-rust-builtin-y := rust/watchdog_it8712f_wdt_rust.o it8712f_wdt_builtin.o
CFLAGS_it8712f_wdt_builtin.o := -DIT8712F_WDT_RUST_BUILTIN
$(obj)/it8712f_wdt_builtin.o: $(src)/it8712f_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_IT8712F_WDT) += it8712f_wdt.o
endif
# ITE IT87xx Watchdog with optional Rust path (watchdog_device + SuperIO).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_IT87_WDT) += it87_wdt-rust.o
it87_wdt-rust-y := it87_wdt_rust.o

$(obj)/rust/watchdog_it87_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=it87_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/it87_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_it87_wdt_rust.o := y

ifeq ($(CONFIG_IT87_WDT),y)
it87_wdt-rust-y += rust/watchdog_it87_wdt_rust.o
endif
ifeq ($(CONFIG_IT87_WDT),m)
obj-y += it87_wdt-rust-builtin.o
it87_wdt-rust-builtin-y := rust/watchdog_it87_wdt_rust.o it87_wdt_builtin.o
CFLAGS_it87_wdt_builtin.o := -DIT87_WDT_RUST_BUILTIN
$(obj)/it87_wdt_builtin.o: $(src)/it87_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_IT87_WDT) += it87_wdt.o
endif
# HPE iLO2+ Watchdog with optional Rust path
# (module_pci_driver shape; NMI decoding stays C-side).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_HP_WATCHDOG) += hpwdt-rust.o
hpwdt-rust-y := hpwdt_rust.o

$(obj)/rust/watchdog_hpwdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=hpwdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/hpwdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_hpwdt_rust.o := y

ifeq ($(CONFIG_HP_WATCHDOG),y)
hpwdt-rust-y += rust/watchdog_hpwdt_rust.o
endif
ifeq ($(CONFIG_HP_WATCHDOG),m)
obj-y += hpwdt-rust-builtin.o
hpwdt-rust-builtin-y := rust/watchdog_hpwdt_rust.o hpwdt_builtin.o
CFLAGS_hpwdt_builtin.o := -DHPWDT_RUST_BUILTIN
$(obj)/hpwdt_builtin.o: $(src)/hpwdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_HP_WATCHDOG) += hpwdt.o
endif
obj-$(CONFIG_KEMPLD_WDT) += kempld_wdt.o
# National Semi SC1200 / PC87307 / PC97307 Watchdog with optional Rust path
# (misc-shape + PnP discovery; pnp_driver stays C-side).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_SC1200_WDT) += sc1200wdt-rust.o
sc1200wdt-rust-y := sc1200wdt_rust.o

$(obj)/rust/watchdog_sc1200wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=sc1200wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/sc1200wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_sc1200wdt_rust.o := y

ifeq ($(CONFIG_SC1200_WDT),y)
sc1200wdt-rust-y += rust/watchdog_sc1200wdt_rust.o
endif
ifeq ($(CONFIG_SC1200_WDT),m)
obj-y += sc1200wdt-rust-builtin.o
sc1200wdt-rust-builtin-y := rust/watchdog_sc1200wdt_rust.o sc1200wdt_builtin.o
CFLAGS_sc1200wdt_builtin.o := -DSC1200WDT_RUST_BUILTIN
$(obj)/sc1200wdt_builtin.o: $(src)/sc1200wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_SC1200_WDT) += sc1200wdt.o
endif
obj-$(CONFIG_SCx200_WDT) += scx200_wdt.o
# NS PC87413 Watchdog with optional Rust path (misc-shape + SuperIO).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_PC87413_WDT) += pc87413_wdt-rust.o
pc87413_wdt-rust-y := pc87413_wdt_rust.o

$(obj)/rust/watchdog_pc87413_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=pc87413_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/pc87413_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_pc87413_wdt_rust.o := y

ifeq ($(CONFIG_PC87413_WDT),y)
pc87413_wdt-rust-y += rust/watchdog_pc87413_wdt_rust.o
endif
ifeq ($(CONFIG_PC87413_WDT),m)
obj-y += pc87413_wdt-rust-builtin.o
pc87413_wdt-rust-builtin-y := rust/watchdog_pc87413_wdt_rust.o pc87413_wdt_builtin.o
CFLAGS_pc87413_wdt_builtin.o := -DPC87413_WDT_RUST_BUILTIN
$(obj)/pc87413_wdt_builtin.o: $(src)/pc87413_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_PC87413_WDT) += pc87413_wdt.o
endif
# NV chipset TCO Watchdog with optional Rust path (PCI-discovered platform_driver).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_NV_TCO) += nv_tco-rust.o
nv_tco-rust-y := nv_tco_rust.o

$(obj)/rust/watchdog_nv_tco_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=nv_tco \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/nv_tco' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_nv_tco_rust.o := y

ifeq ($(CONFIG_NV_TCO),y)
nv_tco-rust-y += rust/watchdog_nv_tco_rust.o
endif
ifeq ($(CONFIG_NV_TCO),m)
obj-y += nv_tco-rust-builtin.o
nv_tco-rust-builtin-y := rust/watchdog_nv_tco_rust.o nv_tco_builtin.o
CFLAGS_nv_tco_builtin.o := -DNV_TCO_RUST_BUILTIN
$(obj)/nv_tco_builtin.o: $(src)/nv_tco_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_NV_TCO) += nv_tco.o
endif
obj-$(CONFIG_RDC321X_WDT) += rdc321x_wdt.o
# SBC 60XX Watchdog with optional Rust path (misc-shape + timer).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_60XX_WDT) += sbc60xxwdt-rust.o
sbc60xxwdt-rust-y := sbc60xxwdt_rust.o

$(obj)/rust/watchdog_sbc60xxwdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=sbc60xxwdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/sbc60xxwdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_sbc60xxwdt_rust.o := y

ifeq ($(CONFIG_60XX_WDT),y)
sbc60xxwdt-rust-y += rust/watchdog_sbc60xxwdt_rust.o
endif
ifeq ($(CONFIG_60XX_WDT),m)
obj-y += sbc60xxwdt-rust-builtin.o
sbc60xxwdt-rust-builtin-y := rust/watchdog_sbc60xxwdt_rust.o sbc60xxwdt_builtin.o
CFLAGS_sbc60xxwdt_builtin.o := -DSBC60XXWDT_RUST_BUILTIN
$(obj)/sbc60xxwdt_builtin.o: $(src)/sbc60xxwdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_60XX_WDT) += sbc60xxwdt.o
endif
# Axiomtek SBC8360 Watchdog with optional Rust path (misc-shape, table-driven).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_SBC8360_WDT) += sbc8360-rust.o
sbc8360-rust-y := sbc8360_rust.o

$(obj)/rust/watchdog_sbc8360_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=sbc8360 \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/sbc8360' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_sbc8360_rust.o := y

ifeq ($(CONFIG_SBC8360_WDT),y)
sbc8360-rust-y += rust/watchdog_sbc8360_rust.o
endif
ifeq ($(CONFIG_SBC8360_WDT),m)
obj-y += sbc8360-rust-builtin.o
sbc8360-rust-builtin-y := rust/watchdog_sbc8360_rust.o sbc8360_builtin.o
CFLAGS_sbc8360_builtin.o := -DSBC8360_RUST_BUILTIN
$(obj)/sbc8360_builtin.o: $(src)/sbc8360_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_SBC8360_WDT) += sbc8360.o
endif
# iEi NANO-7240 SBC Watchdog with optional Rust path (misc-shape).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_SBC7240_WDT) += sbc7240_wdt-rust.o
sbc7240_wdt-rust-y := sbc7240_wdt_rust.o

$(obj)/rust/watchdog_sbc7240_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=sbc7240_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/sbc7240_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_sbc7240_wdt_rust.o := y

ifeq ($(CONFIG_SBC7240_WDT),y)
sbc7240_wdt-rust-y += rust/watchdog_sbc7240_wdt_rust.o
endif
ifeq ($(CONFIG_SBC7240_WDT),m)
obj-y += sbc7240_wdt-rust-builtin.o
sbc7240_wdt-rust-builtin-y := rust/watchdog_sbc7240_wdt_rust.o sbc7240_wdt_builtin.o
CFLAGS_sbc7240_wdt_builtin.o := -DSBC7240_WDT_RUST_BUILTIN
$(obj)/sbc7240_wdt_builtin.o: $(src)/sbc7240_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_SBC7240_WDT) += sbc7240_wdt.o
endif
# SMA CPU5 Watchdog with optional Rust path (misc-shape + timer).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_CPU5_WDT) += cpu5wdt-rust.o
cpu5wdt-rust-y := cpu5wdt_rust.o

$(obj)/rust/watchdog_cpu5wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=cpu5wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/cpu5wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_cpu5wdt_rust.o := y

ifeq ($(CONFIG_CPU5_WDT),y)
cpu5wdt-rust-y += rust/watchdog_cpu5wdt_rust.o
endif
ifeq ($(CONFIG_CPU5_WDT),m)
obj-y += cpu5wdt-rust-builtin.o
cpu5wdt-rust-builtin-y := rust/watchdog_cpu5wdt_rust.o cpu5wdt_builtin.o
CFLAGS_cpu5wdt_builtin.o := -DCPU5WDT_RUST_BUILTIN
$(obj)/cpu5wdt_builtin.o: $(src)/cpu5wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_CPU5_WDT) += cpu5wdt.o
endif
# SMSC SCH311x Watchdog with optional Rust path (platform_driver shape).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_SMSC_SCH311X_WDT) += sch311x_wdt-rust.o
sch311x_wdt-rust-y := sch311x_wdt_rust.o

$(obj)/rust/watchdog_sch311x_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=sch311x_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/sch311x_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_sch311x_wdt_rust.o := y

ifeq ($(CONFIG_SMSC_SCH311X_WDT),y)
sch311x_wdt-rust-y += rust/watchdog_sch311x_wdt_rust.o
endif
ifeq ($(CONFIG_SMSC_SCH311X_WDT),m)
obj-y += sch311x_wdt-rust-builtin.o
sch311x_wdt-rust-builtin-y := rust/watchdog_sch311x_wdt_rust.o sch311x_wdt_builtin.o
CFLAGS_sch311x_wdt_builtin.o := -DSCH311X_WDT_RUST_BUILTIN
$(obj)/sch311x_wdt_builtin.o: $(src)/sch311x_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_SMSC_SCH311X_WDT) += sch311x_wdt.o
endif
# SMsC 37B787 Watchdog with optional Rust path (misc-shape + SuperIO).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_SMSC37B787_WDT) += smsc37b787_wdt-rust.o
smsc37b787_wdt-rust-y := smsc37b787_wdt_rust.o

$(obj)/rust/watchdog_smsc37b787_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=smsc37b787_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/smsc37b787_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_smsc37b787_wdt_rust.o := y

ifeq ($(CONFIG_SMSC37B787_WDT),y)
smsc37b787_wdt-rust-y += rust/watchdog_smsc37b787_wdt_rust.o
endif
ifeq ($(CONFIG_SMSC37B787_WDT),m)
obj-y += smsc37b787_wdt-rust-builtin.o
smsc37b787_wdt-rust-builtin-y := rust/watchdog_smsc37b787_wdt_rust.o smsc37b787_wdt_builtin.o
CFLAGS_smsc37b787_wdt_builtin.o := -DSMSC37B787_WDT_RUST_BUILTIN
$(obj)/smsc37b787_wdt_builtin.o: $(src)/smsc37b787_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_SMSC37B787_WDT) += smsc37b787_wdt.o
endif
# TQMx86 PLD watchdog with optional Rust path.
#
# Same dual-mode shape as softdog / sp5100_tco / sbsa_gwdt / dw_wdt /
# cadence_wdt above.
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_TQMX86_WDT) += tqmx86_wdt-rust.o
tqmx86_wdt-rust-y := tqmx86_wdt_rust.o

$(obj)/rust/watchdog_tqmx86_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=tqmx86_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/tqmx86_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_tqmx86_wdt_rust.o := y

ifeq ($(CONFIG_TQMX86_WDT),y)
tqmx86_wdt-rust-y += rust/watchdog_tqmx86_wdt_rust.o
endif
ifeq ($(CONFIG_TQMX86_WDT),m)
obj-y += tqmx86_wdt-rust-builtin.o
tqmx86_wdt-rust-builtin-y := rust/watchdog_tqmx86_wdt_rust.o tqmx86_wdt_builtin.o
CFLAGS_tqmx86_wdt_builtin.o := -DTQMX86_WDT_RUST_BUILTIN
$(obj)/tqmx86_wdt_builtin.o: $(src)/tqmx86_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_TQMX86_WDT) += tqmx86_wdt.o
endif
# VIA Chipset Watchdog with optional Rust path (true module_pci_driver).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_VIA_WDT) += via_wdt-rust.o
via_wdt-rust-y := via_wdt_rust.o

$(obj)/rust/watchdog_via_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=via_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/via_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_via_wdt_rust.o := y

ifeq ($(CONFIG_VIA_WDT),y)
via_wdt-rust-y += rust/watchdog_via_wdt_rust.o
endif
ifeq ($(CONFIG_VIA_WDT),m)
obj-y += via_wdt-rust-builtin.o
via_wdt-rust-builtin-y := rust/watchdog_via_wdt_rust.o via_wdt_builtin.o
CFLAGS_via_wdt_builtin.o := -DVIA_WDT_RUST_BUILTIN
$(obj)/via_wdt_builtin.o: $(src)/via_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_VIA_WDT) += via_wdt.o
endif
# Winbond W83627HF Watchdog with optional Rust path (watchdog_device).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_W83627HF_WDT) += w83627hf_wdt-rust.o
w83627hf_wdt-rust-y := w83627hf_wdt_rust.o

$(obj)/rust/watchdog_w83627hf_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=w83627hf_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/w83627hf_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_w83627hf_wdt_rust.o := y

ifeq ($(CONFIG_W83627HF_WDT),y)
w83627hf_wdt-rust-y += rust/watchdog_w83627hf_wdt_rust.o
endif
ifeq ($(CONFIG_W83627HF_WDT),m)
obj-y += w83627hf_wdt-rust-builtin.o
w83627hf_wdt-rust-builtin-y := rust/watchdog_w83627hf_wdt_rust.o w83627hf_wdt_builtin.o
CFLAGS_w83627hf_wdt_builtin.o := -DW83627HF_WDT_RUST_BUILTIN
$(obj)/w83627hf_wdt_builtin.o: $(src)/w83627hf_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_W83627HF_WDT) += w83627hf_wdt.o
endif
# W83877F Watchdog with optional Rust path (misc-shape + timer + SuperIO).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_W83877F_WDT) += w83877f_wdt-rust.o
w83877f_wdt-rust-y := w83877f_wdt_rust.o

$(obj)/rust/watchdog_w83877f_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=w83877f_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/w83877f_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_w83877f_wdt_rust.o := y

ifeq ($(CONFIG_W83877F_WDT),y)
w83877f_wdt-rust-y += rust/watchdog_w83877f_wdt_rust.o
endif
ifeq ($(CONFIG_W83877F_WDT),m)
obj-y += w83877f_wdt-rust-builtin.o
w83877f_wdt-rust-builtin-y := rust/watchdog_w83877f_wdt_rust.o w83877f_wdt_builtin.o
CFLAGS_w83877f_wdt_builtin.o := -DW83877F_WDT_RUST_BUILTIN
$(obj)/w83877f_wdt_builtin.o: $(src)/w83877f_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_W83877F_WDT) += w83877f_wdt.o
endif
# W83977F Watchdog with optional Rust path (misc-shape + SuperIO).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_W83977F_WDT) += w83977f_wdt-rust.o
w83977f_wdt-rust-y := w83977f_wdt_rust.o

$(obj)/rust/watchdog_w83977f_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=w83977f_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/w83977f_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_w83977f_wdt_rust.o := y

ifeq ($(CONFIG_W83977F_WDT),y)
w83977f_wdt-rust-y += rust/watchdog_w83977f_wdt_rust.o
endif
ifeq ($(CONFIG_W83977F_WDT),m)
obj-y += w83977f_wdt-rust-builtin.o
w83977f_wdt-rust-builtin-y := rust/watchdog_w83977f_wdt_rust.o w83977f_wdt_builtin.o
CFLAGS_w83977f_wdt_builtin.o := -DW83977F_WDT_RUST_BUILTIN
$(obj)/w83977f_wdt_builtin.o: $(src)/w83977f_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_W83977F_WDT) += w83977f_wdt.o
endif
# MachZ ZFL Watchdog with optional Rust path (misc-shape + timer).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_MACHZ_WDT) += machzwd-rust.o
machzwd-rust-y := machzwd_rust.o

$(obj)/rust/watchdog_machzwd_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=machzwd \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/machzwd' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_machzwd_rust.o := y

ifeq ($(CONFIG_MACHZ_WDT),y)
machzwd-rust-y += rust/watchdog_machzwd_rust.o
endif
ifeq ($(CONFIG_MACHZ_WDT),m)
obj-y += machzwd-rust-builtin.o
machzwd-rust-builtin-y := rust/watchdog_machzwd_rust.o machzwd_builtin.o
CFLAGS_machzwd_builtin.o := -DMACHZWD_RUST_BUILTIN
$(obj)/machzwd_builtin.o: $(src)/machzwd_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_MACHZ_WDT) += machzwd.o
endif
# SBC EPX-C3 Watchdog with optional Rust path (misc-shape).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_SBC_EPX_C3_WATCHDOG) += sbc_epx_c3-rust.o
sbc_epx_c3-rust-y := sbc_epx_c3_rust.o

$(obj)/rust/watchdog_sbc_epx_c3_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=sbc_epx_c3 \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/sbc_epx_c3' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_sbc_epx_c3_rust.o := y

ifeq ($(CONFIG_SBC_EPX_C3_WATCHDOG),y)
sbc_epx_c3-rust-y += rust/watchdog_sbc_epx_c3_rust.o
endif
ifeq ($(CONFIG_SBC_EPX_C3_WATCHDOG),m)
obj-y += sbc_epx_c3-rust-builtin.o
sbc_epx_c3-rust-builtin-y := rust/watchdog_sbc_epx_c3_rust.o sbc_epx_c3_builtin.o
CFLAGS_sbc_epx_c3_builtin.o := -DSBC_EPX_C3_RUST_BUILTIN
$(obj)/sbc_epx_c3_builtin.o: $(src)/sbc_epx_c3_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_SBC_EPX_C3_WATCHDOG) += sbc_epx_c3.o
endif
obj-$(CONFIG_INTEL_MID_WATCHDOG) += intel-mid_wdt.o
obj-$(CONFIG_INTEL_MEI_WDT) += mei_wdt.o
# NI 903x Watchdog with optional Rust path (watchdog_device + ACPI).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_NI903X_WDT) += ni903x_wdt-rust.o
ni903x_wdt-rust-y := ni903x_wdt_rust.o

$(obj)/rust/watchdog_ni903x_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=ni903x_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/ni903x_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_ni903x_wdt_rust.o := y

ifeq ($(CONFIG_NI903X_WDT),y)
ni903x_wdt-rust-y += rust/watchdog_ni903x_wdt_rust.o
endif
ifeq ($(CONFIG_NI903X_WDT),m)
obj-y += ni903x_wdt-rust-builtin.o
ni903x_wdt-rust-builtin-y := rust/watchdog_ni903x_wdt_rust.o ni903x_wdt_builtin.o
CFLAGS_ni903x_wdt_builtin.o := -DNI903X_WDT_RUST_BUILTIN
$(obj)/ni903x_wdt_builtin.o: $(src)/ni903x_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_NI903X_WDT) += ni903x_wdt.o
endif
# NI NIC7018 Watchdog with optional Rust path (watchdog_device + ACPI).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_NIC7018_WDT) += nic7018_wdt-rust.o
nic7018_wdt-rust-y := nic7018_wdt_rust.o

$(obj)/rust/watchdog_nic7018_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=nic7018_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/nic7018_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_nic7018_wdt_rust.o := y

ifeq ($(CONFIG_NIC7018_WDT),y)
nic7018_wdt-rust-y += rust/watchdog_nic7018_wdt_rust.o
endif
ifeq ($(CONFIG_NIC7018_WDT),m)
obj-y += nic7018_wdt-rust-builtin.o
nic7018_wdt-rust-builtin-y := rust/watchdog_nic7018_wdt_rust.o nic7018_wdt_builtin.o
CFLAGS_nic7018_wdt_builtin.o := -DNIC7018_WDT_RUST_BUILTIN
$(obj)/nic7018_wdt_builtin.o: $(src)/nic7018_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_NIC7018_WDT) += nic7018_wdt.o
endif
obj-$(CONFIG_MLX_WDT) += mlx_wdt.o
# keembay_wdt with optional Rust path.
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_KEEMBAY_WATCHDOG) += keembay_wdt-rust.o
keembay_wdt-rust-y := keembay_wdt_rust.o

$(obj)/rust/watchdog_keembay_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=keembay_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/keembay_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_keembay_wdt_rust.o := y

ifeq ($(CONFIG_KEEMBAY_WATCHDOG),y)
keembay_wdt-rust-y += rust/watchdog_keembay_wdt_rust.o
endif
ifeq ($(CONFIG_KEEMBAY_WATCHDOG),m)
obj-y += keembay_wdt-rust-builtin.o
keembay_wdt-rust-builtin-y := rust/watchdog_keembay_wdt_rust.o keembay_wdt_builtin.o
CFLAGS_keembay_wdt_builtin.o := -DKEEMBAY_WDT_RUST_BUILTIN
$(obj)/keembay_wdt_builtin.o: $(src)/keembay_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_KEEMBAY_WATCHDOG) += keembay_wdt.o
endif
obj-$(CONFIG_SIEMENS_SIMATIC_IPC_WDT) += simatic-ipc-wdt.o

# M68K Architecture
obj-$(CONFIG_M54xx_WATCHDOG) += m54xx_wdt.o

# MicroBlaze Architecture
# of_xilinx_wdt with optional Rust path.
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_XILINX_WATCHDOG) += of_xilinx_wdt-rust.o
of_xilinx_wdt-rust-y := of_xilinx_wdt_rust.o

$(obj)/rust/watchdog_of_xilinx_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=of_xilinx_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/of_xilinx_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_of_xilinx_wdt_rust.o := y

ifeq ($(CONFIG_XILINX_WATCHDOG),y)
of_xilinx_wdt-rust-y += rust/watchdog_of_xilinx_wdt_rust.o
endif
ifeq ($(CONFIG_XILINX_WATCHDOG),m)
obj-y += of_xilinx_wdt-rust-builtin.o
of_xilinx_wdt-rust-builtin-y := rust/watchdog_of_xilinx_wdt_rust.o of_xilinx_wdt_builtin.o
CFLAGS_of_xilinx_wdt_builtin.o := -DOF_XILINX_WDT_RUST_BUILTIN
$(obj)/of_xilinx_wdt_builtin.o: $(src)/of_xilinx_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_XILINX_WATCHDOG) += of_xilinx_wdt.o
endif
# xilinx_wwdt with optional Rust path.
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_XILINX_WINDOW_WATCHDOG) += xilinx_wwdt-rust.o
xilinx_wwdt-rust-y := xilinx_wwdt_rust.o

$(obj)/rust/watchdog_xilinx_wwdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=xilinx_wwdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/xilinx_wwdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_xilinx_wwdt_rust.o := y

ifeq ($(CONFIG_XILINX_WINDOW_WATCHDOG),y)
xilinx_wwdt-rust-y += rust/watchdog_xilinx_wwdt_rust.o
endif
ifeq ($(CONFIG_XILINX_WINDOW_WATCHDOG),m)
obj-y += xilinx_wwdt-rust-builtin.o
xilinx_wwdt-rust-builtin-y := rust/watchdog_xilinx_wwdt_rust.o xilinx_wwdt_builtin.o
CFLAGS_xilinx_wwdt_builtin.o := -DXILINX_WWDT_RUST_BUILTIN
$(obj)/xilinx_wwdt_builtin.o: $(src)/xilinx_wwdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_XILINX_WINDOW_WATCHDOG) += xilinx_wwdt.o
endif
# MIPS Architecture
obj-$(CONFIG_ATH79_WDT) += ath79_wdt.o
# Broadcom BCM47xx Watchdog with optional Rust hard-ops path
# (soft-timer fallback stays C-side).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_BCM47XX_WDT) += bcm47xx_wdt-rust.o
bcm47xx_wdt-rust-y := bcm47xx_wdt_rust.o

$(obj)/rust/watchdog_bcm47xx_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=bcm47xx_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/bcm47xx_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_bcm47xx_wdt_rust.o := y

ifeq ($(CONFIG_BCM47XX_WDT),y)
bcm47xx_wdt-rust-y += rust/watchdog_bcm47xx_wdt_rust.o
endif
ifeq ($(CONFIG_BCM47XX_WDT),m)
obj-y += bcm47xx_wdt-rust-builtin.o
bcm47xx_wdt-rust-builtin-y := rust/watchdog_bcm47xx_wdt_rust.o bcm47xx_wdt_builtin.o
CFLAGS_bcm47xx_wdt_builtin.o := -DBCM47XX_WDT_RUST_BUILTIN
$(obj)/bcm47xx_wdt_builtin.o: $(src)/bcm47xx_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_BCM47XX_WDT) += bcm47xx_wdt.o
endif
obj-$(CONFIG_RC32434_WDT) += rc32434_wdt.o
obj-$(CONFIG_INDYDOG) += indydog.o
# Ingenic JZ4740 Watchdog with optional Rust path (platform_driver shape).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_JZ4740_WDT) += jz4740_wdt-rust.o
jz4740_wdt-rust-y := jz4740_wdt_rust.o

$(obj)/rust/watchdog_jz4740_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=jz4740_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/jz4740_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_jz4740_wdt_rust.o := y

ifeq ($(CONFIG_JZ4740_WDT),y)
jz4740_wdt-rust-y += rust/watchdog_jz4740_wdt_rust.o
endif
ifeq ($(CONFIG_JZ4740_WDT),m)
obj-y += jz4740_wdt-rust-builtin.o
jz4740_wdt-rust-builtin-y := rust/watchdog_jz4740_wdt_rust.o jz4740_wdt_builtin.o
CFLAGS_jz4740_wdt_builtin.o := -DJZ4740_WDT_RUST_BUILTIN
$(obj)/jz4740_wdt_builtin.o: $(src)/jz4740_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_JZ4740_WDT) += jz4740_wdt.o
endif
obj-$(CONFIG_WDT_MTX1) += mtx-1_wdt.o
obj-$(CONFIG_SIBYTE_WDOG) += sb_wdog.o
obj-$(CONFIG_AR7_WDT) += ar7_wdt.o
obj-$(CONFIG_TXX9_WDT) += txx9wdt.o
obj-$(CONFIG_OCTEON_WDT) += octeon-wdt.o
octeon-wdt-y := octeon-wdt-main.o octeon-wdt-nmi.o
obj-$(CONFIG_LANTIQ_WDT) += lantiq_wdt.o
# Loongson 1 Watchdog with optional Rust path (platform_driver shape).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_LOONGSON1_WDT) += loongson1_wdt-rust.o
loongson1_wdt-rust-y := loongson1_wdt_rust.o

$(obj)/rust/watchdog_loongson1_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=loongson1_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/loongson1_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_loongson1_wdt_rust.o := y

ifeq ($(CONFIG_LOONGSON1_WDT),y)
loongson1_wdt-rust-y += rust/watchdog_loongson1_wdt_rust.o
endif
ifeq ($(CONFIG_LOONGSON1_WDT),m)
obj-y += loongson1_wdt-rust-builtin.o
loongson1_wdt-rust-builtin-y := rust/watchdog_loongson1_wdt_rust.o loongson1_wdt_builtin.o
CFLAGS_loongson1_wdt_builtin.o := -DLOONGSON1_WDT_RUST_BUILTIN
$(obj)/loongson1_wdt_builtin.o: $(src)/loongson1_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_LOONGSON1_WDT) += loongson1_wdt.o
endif
obj-$(CONFIG_RALINK_WDT) += rt2880_wdt.o
# imgpdc_wdt with optional Rust path.
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_IMGPDC_WDT) += imgpdc_wdt-rust.o
imgpdc_wdt-rust-y := imgpdc_wdt_rust.o

$(obj)/rust/watchdog_imgpdc_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=imgpdc_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/imgpdc_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_imgpdc_wdt_rust.o := y

ifeq ($(CONFIG_IMGPDC_WDT),y)
imgpdc_wdt-rust-y += rust/watchdog_imgpdc_wdt_rust.o
endif
ifeq ($(CONFIG_IMGPDC_WDT),m)
obj-y += imgpdc_wdt-rust-builtin.o
imgpdc_wdt-rust-builtin-y := rust/watchdog_imgpdc_wdt_rust.o imgpdc_wdt_builtin.o
CFLAGS_imgpdc_wdt_builtin.o := -DIMGPDC_WDT_RUST_BUILTIN
$(obj)/imgpdc_wdt_builtin.o: $(src)/imgpdc_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_IMGPDC_WDT) += imgpdc_wdt.o
endif
# mt7621_wdt with optional Rust path.
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_MT7621_WDT) += mt7621_wdt-rust.o
mt7621_wdt-rust-y := mt7621_wdt_rust.o

$(obj)/rust/watchdog_mt7621_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=mt7621_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/mt7621_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_mt7621_wdt_rust.o := y

ifeq ($(CONFIG_MT7621_WDT),y)
mt7621_wdt-rust-y += rust/watchdog_mt7621_wdt_rust.o
endif
ifeq ($(CONFIG_MT7621_WDT),m)
obj-y += mt7621_wdt-rust-builtin.o
mt7621_wdt-rust-builtin-y := rust/watchdog_mt7621_wdt_rust.o mt7621_wdt_builtin.o
CFLAGS_mt7621_wdt_builtin.o := -DMT7621_WDT_RUST_BUILTIN
$(obj)/mt7621_wdt_builtin.o: $(src)/mt7621_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_MT7621_WDT) += mt7621_wdt.o
endif
obj-$(CONFIG_PIC32_WDT) += pic32-wdt.o
obj-$(CONFIG_PIC32_DMT) += pic32-dmt.o
# realtek_otto_wdt with optional Rust path.
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_REALTEK_OTTO_WDT) += realtek_otto_wdt-rust.o
realtek_otto_wdt-rust-y := realtek_otto_wdt_rust.o

$(obj)/rust/watchdog_realtek_otto_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=realtek_otto_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/realtek_otto_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_realtek_otto_wdt_rust.o := y

ifeq ($(CONFIG_REALTEK_OTTO_WDT),y)
realtek_otto_wdt-rust-y += rust/watchdog_realtek_otto_wdt_rust.o
endif
ifeq ($(CONFIG_REALTEK_OTTO_WDT),m)
obj-y += realtek_otto_wdt-rust-builtin.o
realtek_otto_wdt-rust-builtin-y := rust/watchdog_realtek_otto_wdt_rust.o realtek_otto_wdt_builtin.o
CFLAGS_realtek_otto_wdt_builtin.o := -DREALTEK_OTTO_WDT_RUST_BUILTIN
$(obj)/realtek_otto_wdt_builtin.o: $(src)/realtek_otto_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_REALTEK_OTTO_WDT) += realtek_otto_wdt.o
endif
# PARISC Architecture

# POWERPC Architecture
obj-$(CONFIG_GEF_WDT) += gef_wdt.o
obj-$(CONFIG_8xxx_WDT) += mpc8xxx_wdt.o
# PIKA FPGA Watchdog with optional Rust path (misc + OF + timer).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_PIKA_WDT) += pika_wdt-rust.o
pika_wdt-rust-y := pika_wdt_rust.o

$(obj)/rust/watchdog_pika_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=pika_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/pika_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_pika_wdt_rust.o := y

ifeq ($(CONFIG_PIKA_WDT),y)
pika_wdt-rust-y += rust/watchdog_pika_wdt_rust.o
endif
ifeq ($(CONFIG_PIKA_WDT),m)
obj-y += pika_wdt-rust-builtin.o
pika_wdt-rust-builtin-y := rust/watchdog_pika_wdt_rust.o pika_wdt_builtin.o
CFLAGS_pika_wdt_builtin.o := -DPIKA_WDT_RUST_BUILTIN
$(obj)/pika_wdt_builtin.o: $(src)/pika_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_PIKA_WDT) += pika_wdt.o
endif
obj-$(CONFIG_BOOKE_WDT) += booke_wdt.o
obj-$(CONFIG_MEN_A21_WDT) += mena21_wdt.o

# PPC64 Architecture
obj-$(CONFIG_PSERIES_WDT) += pseries-wdt.o
obj-$(CONFIG_WATCHDOG_RTAS) += wdrtas.o

# RISC-V Architecture
# StarFive JH7100/JH7110 Watchdog with optional Rust ops path
# (probe + pm_runtime + reset_control stay C-side; variant table
# is read by Rust through a #[repr(C)] mirror struct).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_STARFIVE_WATCHDOG) += starfive-wdt-rust.o
starfive-wdt-rust-y := starfive-wdt_rust.o

$(obj)/rust/watchdog_starfive_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=starfive_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/starfive_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_starfive_wdt_rust.o := y

ifeq ($(CONFIG_STARFIVE_WATCHDOG),y)
starfive-wdt-rust-y += rust/watchdog_starfive_wdt_rust.o
endif
ifeq ($(CONFIG_STARFIVE_WATCHDOG),m)
obj-y += starfive-wdt-rust-builtin.o
starfive-wdt-rust-builtin-y := rust/watchdog_starfive_wdt_rust.o starfive-wdt_builtin.o
CFLAGS_starfive-wdt_builtin.o := -DSTARFIVE_WDT_RUST_BUILTIN
$(obj)/starfive-wdt_builtin.o: $(src)/starfive-wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_STARFIVE_WATCHDOG) += starfive-wdt.o
endif

# S390 Architecture
obj-$(CONFIG_DIAG288_WATCHDOG) += diag288_wdt.o

# SUPERH (sh + sh64) Architecture
obj-$(CONFIG_SH_WDT) += shwdt.o

# SPARC Architecture

# SPARC64 Architecture

obj-$(CONFIG_WATCHDOG_RIO)		+= riowd.o
obj-$(CONFIG_WATCHDOG_CP1XXX)		+= cpwd.o
obj-$(CONFIG_WATCHDOG_SUN4V)		+= sun4v_wdt.o

# XTENSA Architecture

# Xen
obj-$(CONFIG_XEN_WDT) += xen_wdt.o

# Architecture Independent
obj-$(CONFIG_BD957XMUF_WATCHDOG) += bd9576_wdt.o
# Dialog DA9052 PMIC Watchdog with optional Rust path.
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_DA9052_WATCHDOG) += da9052_wdt-rust.o
da9052_wdt-rust-y := da9052_wdt_rust.o

$(obj)/rust/watchdog_da9052_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=da9052_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/da9052_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_da9052_wdt_rust.o := y

ifeq ($(CONFIG_DA9052_WATCHDOG),y)
da9052_wdt-rust-y += rust/watchdog_da9052_wdt_rust.o
endif
ifeq ($(CONFIG_DA9052_WATCHDOG),m)
obj-y += da9052_wdt-rust-builtin.o
da9052_wdt-rust-builtin-y := rust/watchdog_da9052_wdt_rust.o da9052_wdt_builtin.o
CFLAGS_da9052_wdt_builtin.o := -DDA9052_WDT_RUST_BUILTIN
$(obj)/da9052_wdt_builtin.o: $(src)/da9052_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_DA9052_WATCHDOG) += da9052_wdt.o
endif
# Dialog DA9055 PMIC Watchdog with optional Rust path.
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_DA9055_WATCHDOG) += da9055_wdt-rust.o
da9055_wdt-rust-y := da9055_wdt_rust.o

$(obj)/rust/watchdog_da9055_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=da9055_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/da9055_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_da9055_wdt_rust.o := y

ifeq ($(CONFIG_DA9055_WATCHDOG),y)
da9055_wdt-rust-y += rust/watchdog_da9055_wdt_rust.o
endif
ifeq ($(CONFIG_DA9055_WATCHDOG),m)
obj-y += da9055_wdt-rust-builtin.o
da9055_wdt-rust-builtin-y := rust/watchdog_da9055_wdt_rust.o da9055_wdt_builtin.o
CFLAGS_da9055_wdt_builtin.o := -DDA9055_WDT_RUST_BUILTIN
$(obj)/da9055_wdt_builtin.o: $(src)/da9055_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_DA9055_WATCHDOG) += da9055_wdt.o
endif
# Dialog DA9062 / DA9061 PMIC Watchdog with optional Rust path.
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_DA9062_WATCHDOG) += da9062_wdt-rust.o
da9062_wdt-rust-y := da9062_wdt_rust.o

$(obj)/rust/watchdog_da9062_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=da9062_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/da9062_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_da9062_wdt_rust.o := y

ifeq ($(CONFIG_DA9062_WATCHDOG),y)
da9062_wdt-rust-y += rust/watchdog_da9062_wdt_rust.o
endif
ifeq ($(CONFIG_DA9062_WATCHDOG),m)
obj-y += da9062_wdt-rust-builtin.o
da9062_wdt-rust-builtin-y := rust/watchdog_da9062_wdt_rust.o da9062_wdt_builtin.o
CFLAGS_da9062_wdt_builtin.o := -DDA9062_WDT_RUST_BUILTIN
$(obj)/da9062_wdt_builtin.o: $(src)/da9062_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_DA9062_WATCHDOG) += da9062_wdt.o
endif
# Dialog DA9063 PMIC Watchdog with optional Rust path.
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_DA9063_WATCHDOG) += da9063_wdt-rust.o
da9063_wdt-rust-y := da9063_wdt_rust.o

$(obj)/rust/watchdog_da9063_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=da9063_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/da9063_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_da9063_wdt_rust.o := y

ifeq ($(CONFIG_DA9063_WATCHDOG),y)
da9063_wdt-rust-y += rust/watchdog_da9063_wdt_rust.o
endif
ifeq ($(CONFIG_DA9063_WATCHDOG),m)
obj-y += da9063_wdt-rust-builtin.o
da9063_wdt-rust-builtin-y := rust/watchdog_da9063_wdt_rust.o da9063_wdt_builtin.o
CFLAGS_da9063_wdt_builtin.o := -DDA9063_WDT_RUST_BUILTIN
$(obj)/da9063_wdt_builtin.o: $(src)/da9063_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_DA9063_WATCHDOG) += da9063_wdt.o
endif
# GPIO Watchdog with optional Rust path (watchdog_device + DT/GPIO).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_GPIO_WATCHDOG) += gpio_wdt-rust.o
gpio_wdt-rust-y := gpio_wdt_rust.o

$(obj)/rust/watchdog_gpio_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=gpio_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/gpio_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_gpio_wdt_rust.o := y

ifeq ($(CONFIG_GPIO_WATCHDOG),y)
gpio_wdt-rust-y += rust/watchdog_gpio_wdt_rust.o
endif
ifeq ($(CONFIG_GPIO_WATCHDOG),m)
obj-y += gpio_wdt-rust-builtin.o
gpio_wdt-rust-builtin-y := rust/watchdog_gpio_wdt_rust.o gpio_wdt_builtin.o
CFLAGS_gpio_wdt_builtin.o := -DGPIO_WDT_RUST_BUILTIN
$(obj)/gpio_wdt_builtin.o: $(src)/gpio_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_GPIO_WATCHDOG)	+= gpio_wdt.o
endif
# ACPI Hardware Watchdog (WDAT) with optional Rust path
# (platform_driver + ACPI table parsing + dynamic instruction lists).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_WDAT_WDT) += wdat_wdt-rust.o
wdat_wdt-rust-y := wdat_wdt_rust.o

$(obj)/rust/watchdog_wdat_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=wdat_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/wdat_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_wdat_wdt_rust.o := y

ifeq ($(CONFIG_WDAT_WDT),y)
wdat_wdt-rust-y += rust/watchdog_wdat_wdt_rust.o
endif
ifeq ($(CONFIG_WDAT_WDT),m)
obj-y += wdat_wdt-rust-builtin.o
wdat_wdt-rust-builtin-y := rust/watchdog_wdat_wdt_rust.o wdat_wdt_builtin.o
CFLAGS_wdat_wdt_builtin.o := -DWDAT_WDT_RUST_BUILTIN
$(obj)/wdat_wdt_builtin.o: $(src)/wdat_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_WDAT_WDT) += wdat_wdt.o
endif
obj-$(CONFIG_WM831X_WATCHDOG) += wm831x_wdt.o
# Wolfson WM8350 PMIC Watchdog with optional Rust path.
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_WM8350_WATCHDOG) += wm8350_wdt-rust.o
wm8350_wdt-rust-y := wm8350_wdt_rust.o

$(obj)/rust/watchdog_wm8350_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=wm8350_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/wm8350_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_wm8350_wdt_rust.o := y

ifeq ($(CONFIG_WM8350_WATCHDOG),y)
wm8350_wdt-rust-y += rust/watchdog_wm8350_wdt_rust.o
endif
ifeq ($(CONFIG_WM8350_WATCHDOG),m)
obj-y += wm8350_wdt-rust-builtin.o
wm8350_wdt-rust-builtin-y := rust/watchdog_wm8350_wdt_rust.o wm8350_wdt_builtin.o
CFLAGS_wm8350_wdt_builtin.o := -DWM8350_WDT_RUST_BUILTIN
$(obj)/wm8350_wdt_builtin.o: $(src)/wm8350_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_WM8350_WATCHDOG) += wm8350_wdt.o
endif
obj-$(CONFIG_MAX63XX_WATCHDOG) += max63xx_wdt.o
obj-$(CONFIG_MAX77620_WATCHDOG) += max77620_wdt.o
obj-$(CONFIG_ZIIRAVE_WATCHDOG) += ziirave_wdt.o
# Software watchdog with optional Rust path.
#
# When CONFIG_RUST_DRIVERS=y we build a feature-gated Rust object that contains
# only the softdog crate (CARGO_FEATURES=softdog), and link it into the driver.
# =m additionally builds a vmlinux-side softdog-rust-builtin.o that aggregates
# the Rust .o + a softdog_builtin.o (compiled with -DSOFTDOG_RUST_BUILTIN)
# exposing the C-side bridge symbols Rust calls into.
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_SOFT_WATCHDOG) += softdog-rust.o
softdog-rust-y := softdog_rust.o

$(obj)/rust/watchdog_softdog_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=softdog \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/softdog' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_softdog_rust.o := y

ifeq ($(CONFIG_SOFT_WATCHDOG),y)
softdog-rust-y += rust/watchdog_softdog_rust.o
endif
ifeq ($(CONFIG_SOFT_WATCHDOG),m)
obj-y += softdog-rust-builtin.o
softdog-rust-builtin-y := rust/watchdog_softdog_rust.o softdog_builtin.o
CFLAGS_softdog_builtin.o := -DSOFTDOG_RUST_BUILTIN
$(obj)/softdog_builtin.o: $(src)/softdog_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_SOFT_WATCHDOG) += softdog.o
endif
obj-$(CONFIG_MENF21BMC_WATCHDOG) += menf21bmc_wdt.o
# MEN z069 IP-Core watchdog with optional Rust ops path (MCB bus).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_MENZ069_WATCHDOG) += menz69_wdt-rust.o
menz69_wdt-rust-y := menz69_wdt_rust.o

$(obj)/rust/watchdog_menz69_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=menz69_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/menz69_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_menz69_wdt_rust.o := y

ifeq ($(CONFIG_MENZ069_WATCHDOG),y)
menz69_wdt-rust-y += rust/watchdog_menz69_wdt_rust.o
endif
ifeq ($(CONFIG_MENZ069_WATCHDOG),m)
obj-y += menz69_wdt-rust-builtin.o
menz69_wdt-rust-builtin-y := rust/watchdog_menz69_wdt_rust.o menz69_wdt_builtin.o
CFLAGS_menz69_wdt_builtin.o := -DMENZ69_WDT_RUST_BUILTIN
$(obj)/menz69_wdt_builtin.o: $(src)/menz69_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_MENZ069_WATCHDOG) += menz69_wdt.o
endif
obj-$(CONFIG_RAVE_SP_WATCHDOG) += rave-sp-wdt.o
# STMicro STPMIC1 PMIC watchdog with optional Rust path (regmap on parent MFD).
ifdef CONFIG_RUST_DRIVERS
obj-$(CONFIG_STPMIC1_WATCHDOG) += stpmic1_wdt-rust.o
stpmic1_wdt-rust-y := stpmic1_wdt_rust.o

$(obj)/rust/watchdog_stpmic1_wdt_rust.o: FORCE
	$(Q)mkdir -p $(dir $@)
	$(Q)OBJTREE=$(abspath $(objtree)) OBJ=$(abspath $(obj)) \
		OUTPUT_FILE=$(abspath $@).__rust_tmp \
		CARGO_FEATURES=stpmic1_wdt \
		CROSS_COMPILE=$(CROSS_COMPILE) SRCARCH=$(SRCARCH) \
		$(srctree)/drivers/rust/drivers/watchdog/build_rust.sh
	$(Q)if [ ! -f $@ ] || ! cmp -s $@.__rust_tmp $@; then \
		mv $@.__rust_tmp $@; \
	else \
		rm -f $@.__rust_tmp; \
	fi
	$(Q)echo 'savedcmd_$@ := rust-build watchdog/stpmic1_wdt' > $(dir $@).$(notdir $@).cmd
OBJECT_FILES_NON_STANDARD_watchdog_stpmic1_wdt_rust.o := y

ifeq ($(CONFIG_STPMIC1_WATCHDOG),y)
stpmic1_wdt-rust-y += rust/watchdog_stpmic1_wdt_rust.o
endif
ifeq ($(CONFIG_STPMIC1_WATCHDOG),m)
obj-y += stpmic1_wdt-rust-builtin.o
stpmic1_wdt-rust-builtin-y := rust/watchdog_stpmic1_wdt_rust.o stpmic1_wdt_builtin.o
CFLAGS_stpmic1_wdt_builtin.o := -DSTPMIC1_WDT_RUST_BUILTIN
$(obj)/stpmic1_wdt_builtin.o: $(src)/stpmic1_wdt_rust.c FORCE
	$(call if_changed_rule,cc_o_c)
endif
else
obj-$(CONFIG_STPMIC1_WATCHDOG) += stpmic1_wdt.o
endif
obj-$(CONFIG_SL28CPLD_WATCHDOG) += sl28cpld_wdt.o
obj-n += wdt-timer-2022-1130-test.o
