diff --git a/verdin.mk b/verdin.mk
new file mode 100644
index 0000000000000000000000000000000000000000..8907422cbb9d3eea7f0f24d98b0a62d6303936e7
--- /dev/null
+++ b/verdin.mk
@@ -0,0 +1,180 @@
+################################################################################
+# Following variables defines how the NS_USER (Non Secure User - Client
+# Application), NS_KERNEL (Non Secure Kernel), S_KERNEL (Secure Kernel) and
+# S_USER (Secure User - TA) are compiled
+################################################################################
+COMPILE_NS_USER   ?= 64
+override COMPILE_NS_KERNEL := 64
+COMPILE_S_USER    ?= 64
+COMPILE_S_KERNEL  ?= 64
+
+BR2_TARGET_GENERIC_GETTY_PORT = ttymxc0
+################################################################################
+# Includes
+################################################################################
+include common.mk
+
+################################################################################
+# Paths to git projects and various binaries
+################################################################################
+OUT_PATH		?= $(ROOT)/out
+ROOTFS_BIN		?= $(ROOT)/out-br/images/rootfs.tar
+TF_A_PATH		?= $(ROOT)/trusted-firmware-a
+UBOOT_PATH		?= $(ROOT)/u-boot
+OPTEE_CLIENT_EXPORT	?= $(OPTEE_CLIENT_PATH)/out/export
+OPTEE_PATH		?= $(ROOT)/optee_os
+LINUX_PATH		?= $(ROOT)/linux
+
+LINUX_DTB		?= $(LINUX_PATH)/arch/arm64/boot/dts/freescale/fsl-imx8mm-verdin-dev.dtb
+MODULE_OUTPUT		?= $(ROOT)/module_output
+
+UBOOT_BIN		?= $(UBOOT_PATH)/flash.bin
+OPTEE_ELF		?= $(OPTEE_PATH)/out/arm/core/tee.elf
+
+DDR_URL			?= https://www.nxp.com/lgfiles/NMG/MAD/YOCTO/firmware-imx-8.1.1.bin
+DDR_PATH		?= $(ROOT)/ddr-firmware
+
+ATF_LOAD_ADDR		?= 0x920000
+TEE_LOAD_ADDR		?= 0xbe000000
+
+
+################################################################################
+# Targets
+################################################################################
+.PHONY: all
+all: u-boot arm-tf buildroot linux prepare-images | toolchains
+
+.PHONY: clean
+clean: u-boot-clean arm-tf-clean linux-clean optee-os-clean \
+	buildroot-clean
+
+################################################################################
+# Toolchain
+################################################################################
+include toolchain.mk
+
+################################################################################
+# U-Boot
+################################################################################
+.PHONY: u-boot-config
+u-boot-config:
+ifeq ($(wildcard $(UBOOT_PATH)/.config),)
+	$(MAKE) -C $(UBOOT_PATH) \
+		CROSS_COMPILE=$(AARCH64_CROSS_COMPILE) verdin-imx8mm_defconfig
+endif
+
+.PHONY: u-boot-menuconfig
+u-boot-menuconfig: u-boot-config
+	$(MAKE) -C $(UBOOT_PATH) \
+		CROSS_COMPILE=$(AARCH64_CROSS_COMPILE) menuconfig
+
+.PHONY: u-boot
+u-boot: u-boot-config arm-tf optee-os ddr-firmware
+	# Copy BL31 binary from TF-A
+	cp $(TF_A_PATH)/build/imx8mm/release/bl31.bin $(UBOOT_PATH)
+	# Prepare proper tee.bin
+	$(AARCH64_CROSS_COMPILE)objcopy -O binary \
+		$(OPTEE_ELF) $(UBOOT_PATH)/tee.bin
+	# Copy DDR4 firmware
+	cp $(DDR_PATH)/firmware-imx-8.1.1/firmware/ddr/synopsys/lpddr4*.bin \
+		$(UBOOT_PATH)
+	# Build U-Boot and final ready-to-flash flash.bin image
+	ATF_LOAD_ADDR=$(ATF_LOAD_ADDR) TEE_LOAD_ADDR=$(TEE_LOAD_ADDR) \
+	$(MAKE) -C $(UBOOT_PATH) \
+		CROSS_COMPILE="$(AARCH64_CROSS_COMPILE)" flash.bin
+
+.PHONY: u-boot-clean
+u-boot-clean:
+	cd $(UBOOT_PATH) && git clean -xdf
+
+################################################################################
+# DDR4 Firmware
+################################################################################
+.PHONY: ddr-firmware
+ddr-firmware:
+	# DDR is exported to the $PWD only, so cd to $(DDR_PATH)
+	# before unpacking
+	if [ ! -d "$(DDR_PATH)" ]; then \
+		mkdir -p $(DDR_PATH) && \
+		wget $(DDR_URL) -O $(DDR_PATH)/firmware.bin && \
+		chmod +x $(DDR_PATH)/firmware.bin && \
+		cd $(DDR_PATH) && \
+		$(DDR_PATH)/firmware.bin --auto-accept && \
+		cd $(ROOT)/build; \
+	fi;
+
+.PHONY: ddr-firmware-clean
+ddr-firmware-clean:
+	rm -rf $(DDR_PATH)
+
+################################################################################
+# ARM Trusted Firmware
+################################################################################
+.PHONY: arm-tf
+arm-tf:
+	$(MAKE) -C $(TF_A_PATH) \
+		PLAT=imx8mm \
+		CROSS_COMPILE="$(CCACHE)$(AARCH64_CROSS_COMPILE)" \
+		SPD=opteed \
+		bl31
+
+.PHONY: arm-tf-clean
+arm-tf-clean:
+	cd $(TF_A_PATH) && git clean -xdf
+
+################################################################################
+# OP-TEE
+################################################################################
+OPTEE_OS_COMMON_FLAGS += PLATFORM=imx PLATFORM_FLAVOR=mx8mmevk CFG_ARM64_core=y CFG_UART_BASE=0x30860000
+OPTEE_OS_CLEAN_COMMON_FLAGS += PLATFORM=imx-mx8mmevk
+
+.PHONY: optee-os
+optee-os: optee-os-common
+
+.PHONY: optee-os-clean
+optee-os-clean: optee-os-clean-common
+
+################################################################################
+# Linux
+################################################################################
+LINUX_DEFCONFIG_COMMON_ARCH := arm64
+LINUX_DEFCONFIG_COMMON_FILES := \
+		$(LINUX_PATH)/arch/arm64/configs/defconfig \
+
+linux-defconfig: $(LINUX_PATH)/.config
+
+LINUX_COMMON_FLAGS += ARCH=arm64
+
+linux: linux-common
+	$(MAKE) -C $(LINUX_PATH) $(LINUX_COMMON_FLAGS) freescale/fsl-imx8mm-verdin-dev.dtb
+	$(MAKE) -C $(LINUX_PATH) $(LINUX_COMMON_FLAGS) INSTALL_MOD_STRIP=1 \
+		INSTALL_MOD_PATH=$(MODULE_OUTPUT) modules_install
+
+linux-defconfig-clean: linux-defconfig-clean-common
+
+LINUX_CLEAN_COMMON_FLAGS += ARCH=arm64
+
+linux-clean: linux-clean-common
+
+LINUX_CLEANER_COMMON_FLAGS += ARCH=arm64
+
+linux-cleaner: linux-cleaner-common
+
+.PHONY: prepare-images
+prepare-images: linux u-boot buildroot
+	@mkdir -p $(OUT_PATH)
+	@cp $(UBOOT_BIN) $(OUT_PATH)
+	@cp $(LINUX_PATH)/arch/arm64/boot/Image $(OUT_PATH)
+	@cp $(LINUX_DTB) $(OUT_PATH)
+	@cp $(ROOT)/out-br/images/rootfs.tar $(OUT_PATH)
+
+################################################################################
+# Buildroot/RootFS
+################################################################################
+.PHONY: update_rootfs
+update_rootfs: u-boot linux
+	@cd $(MODULE_OUTPUT) && find . | cpio -pudm $(BUILDROOT_TARGET_ROOT)
+	@cd $(ROOT)/build
+
+.PHONY: buildroot
+buildroot: update_rootfs