Newer
Older
buildroot-MynaPlayer / fs / dracut / dracut.mk
################################################################################
#
# Build the dracut initramfs image
#
################################################################################

# Dracut requires realpath from coreutils
ROOTFS_DRACUT_DEPENDENCIES += \
	host-dracut \
	dracut

ROOTFS_DRACUT_MODULES_INCLUDE = \
	base \
	dbus \
	rootfs-block \
	systemd \
	systemd-initrd \
	dracut-systemd \
	udev-rules
ROOTFS_DRACUT_MODULES_OMIT = dbus-broker

# Environment variables used to execute dracut
# We have to unset "prefix" as dracut uses it to move files around.
# Dracut doesn't support decimal points for the systemd version.
ROOTFS_DRACUT_SYSTEMD_VERSION_SANATIZED=`echo $(SYSTEMD_VERSION) |cut -d . -f 1`
ROOTFS_DRACUT_TARGET_DIR="$(ROOTFS_DRACUT_DIR)/target
ROOTFS_DRACUT_FS_ENV = \
	prefix="" \
	DESTROOTDIR="$(ROOTFS_DRACUT_TARGET_DIR)" \
	DRACUT_ARCH=$(BR2_ARCH) \
	DRACUT_COMPRESS_BZIP2="$(HOST_DIR)/bin/bzip2" \
	DRACUT_COMPRESS_GZIP="$(HOST_DIR)/bin/gzip" \
	DRACUT_COMPRESS_LZMA="$(HOST_DIR)/bin/lzma" \
	DRACUT_COMPRESS_XZ="$(HOST_DIR)/bin/xz" \
	DRACUT_FIRMWARE_PATH="$(ROOTFS_DRACUT_TARGET_DIR)/usr/lib/firmware" \
	DRACUT_INSTALL="$(HOST_DIR)/bin/dracut-install" \
	DRACUT_INSTALL_PATH="$(ROOTFS_DRACUT_TARGET_DIR)/usr/bin:$(ROOTFS_DRACUT_TARGET_DIR)/usr/sbin:$(ROOTFS_DRACUT_TARGET_DIR)/usr/lib" \
	DRACUT_LDCONFIG=/bin/true \
	DRACUT_LDD="$(HOST_DIR)/sbin/prelink-rtld --root=$(ROOTFS_DRACUT_TARGET_DIR)/" \
	DRACUT_PATH="/bin /sbin" \
	STRIP_CMD="$(TARGET_CROSS)strip" \
	SYSTEMCTL="$(HOST_DIR)/bin/systemctl" \
	systemctlpath="$(HOST_DIR)/bin/systemctl" \
	systemdsystemconfdir="$(ROOTFS_DRACUT_TARGET_DIR)/etc/systemd/system" \
	systemdsystemunitdir="$(ROOTFS_DRACUT_TARGET_DIR)/lib/systemd/system" \
	systemdutildir="$(ROOTFS_DRACUT_TARGET_DIR)/lib/systemd/" \
	SYSTEMD_VERSION=$(ROOTFS_DRACUT_SYSTEMD_VERSION_SANATIZED) \
	udevdir="$(ROOTFS_DRACUT_TARGET_DIR)/usr/lib/udev" \
	UDEVVERSION=$(ROOTFS_DRACUT_SYSTEMD_VERSION_SANATIZED)

ROOTFS_DRACUT_MKFS_CONF_OPTS = \
	--force \
	--fstab \
	--noprefix \
	--sysroot=$(ROOTFS_DRACUT_TARGET_DIR) \
	--tmpdir=$(ROOTFS_DRACUT_DIR)/rootfs.dracut.tmp \
	--verbose

ifeq ($(BR2_ROOTFS_DEVICE_TABLE_SUPPORTS_EXTENDED_ATTRIBUTES),y)
ROOTFS_DRACUT_FS_ENV += DRACUT_NO_XATTR=true
else
ROOTFS_DRACUT_FS_ENV += DRACUT_NO_XATTR=false
endif

ifeq ($(BR2_PACKAGE_BASH),y)
ROOTFS_DRACUT_MODULES_INCLUDE += bash
else
ROOTFS_DRACUT_MODULES_OMIT += bash
endif

# Dracut typically executes busybox --list to get a list of installed busybox
# applets. Without a qemu wrapper, executing the busybox binary won't work in a
# cross-compiled environment. To avoid using a qemu-wrapper, we manually pass
# the list to Dracut using the busybox.links file that busybox creates when
# compiling.
ifeq ($(BR2_PACKAGE_BUSYBOX)$(BR2_PACKAGE_BUSYBOX_INDIVIDUAL_BINARIES),y)
ROOTFS_DRACUT_FS_ENV += \
	BUSYBOX_LIST=`sed -r -e s%.*/%%  $(BUSYBOX_DIR)/busybox.links;`
ROOTFS_DRACUT_MODULES_INCLUDE += busybox
else
ROOTFS_DRACUT_MODULES_OMIT += busybox
endif

ifeq ($(BR2_PACKAGE_MKSH),y)
ROOTFS_DRACUT_MODULES_INCLUDE += mksh
else
ROOTFS_DRACUT_MODULES_OMIT += mksh
endif

ifeq ($(BR2_PACKAGE_BTRFS_PROGS),y)
ROOTFS_DRACUT_MODULES_INCLUDE += btrfs
else
ROOTFS_DRACUT_MODULES_OMIT += btrfs
endif

ifeq ($(BR2_PACKAGE_DASH),y)
ROOTFS_DRACUT_MODULES_INCLUDE += dash
else
ROOTFS_DRACUT_MODULES_OMIT += dash
endif

ifeq ($(BR2_PACKAGE_PERL_I18N)$(BR2_PACKAGE_KBD),yy)
ROOTFS_DRACUT_MODULES_INCLUDE += i18n
else
ROOTFS_DRACUT_MODULES_OMIT += i18n
endif

ifeq ($(BR2_PACKAGE_RNG_TOOLS),y)
ROOTFS_DRACUT_MODULES_INCLUDE += rngd
else
ROOTFS_DRACUT_MODULES_OMIT += rngd
endif

ifeq ($(BR2_PACKAGE_LIBSELINUX),y)
ROOTFS_DRACUT_MODULES_INCLUDE += securityfs selinux
else
ROOTFS_DRACUT_MODULES_OMIT += securityfs selinux
endif

ifeq ($(BR2_PACKAGE_SYSTEMD_REPART),y)
ROOTFS_DRACUT_MODULES_INCLUDE += systemd-repart
else
ROOTFS_DRACUT_MODULES_OMIT += systemd-repart
endif

ifeq ($(BR2_PACKAGE_SYSTEMD_SYSUSERS),y)
ROOTFS_DRACUT_MODULES_INCLUDE += systemd-sysusers
else
ROOTFS_DRACUT_MODULES_OMIT += systemd-sysusers
endif

ifeq ($(BR2_PACKAGE_SYSTEMD_NETWORKD),y)
ROOTFS_DRACUT_MODULES_INCLUDE += systemd-networkd
else
ROOTFS_DRACUT_MODULES_OMIT += systemd-networkd
endif

ifeq ($(BR2_PACKAGE_UTIL_LINUX_HWCLOCK),y)
ROOTFS_DRACUT_MODULES_INCLUDE += warpclock
else
ROOTFS_DRACUT_MODULES_OMIT += warpclock
endif

ifeq ($(BR2_PACKAGE_PLYMOUTH),y)
ROOTFS_DRACUT_DEPENDENCIES += plymouth
ROOTFS_DRACUT_MODULES_INCLUDE += plymouth
ROOTFS_DRACUT_FS_ENV += \
	PLYMOUTH_SYSROOT=$(ROOTFS_DRACUT_TARGET_DIR) \
	PLYMOUTH_CONFDIR=/etc/plymouth \
	PLYMOUTH_DATADIR=/usr/share \
	PLYMOUTH_POLICYDIR=/usr/share/plymouth/ \
	PLYMOUTH_LOGO_FILE=/etc/plymouth/bizcom.png \
	PLYMOUTH_LIBEXECDIR=/usr/libexec \
	PLYMOUTH_LDD="$(HOST_DIR)/sbin/prelink-rtld --root=$(ROOTFS_DRACUT_TARGET_DIR)/" \
	PLYMOUTH_LDD_PATH=/bin/true \
	PLYMOUTH_PLUGIN_PATH=/usr/lib/plymouth \
	PLYMOUTH_THEME_NAME="spinner" \
	PLYMOUTH_THEME="spinner"
else
ROOTFS_DRACUT_MODULES_OMIT += plymouth
endif

ifeq ($(BR2_TARGET_ROOTFS_DRACUT_MOD_SIG),y)
ROOTFS_DRACUT_DEPENDENCIES += keyutils
ROOTFS_DRACUT_MODULES_INCLUDE += modsign
else
ROOTFS_DRACUT_MODULES_OMIT += modsign
endif

ROOTFS_DRACUT_KERNEL_MODULES = $(call qstrip,$(BR2_TARGET_ROOTFS_DRACUT_KERNEL_MODULES))
ROOTFS_DRACUT_MODULES_INCLUDE += $(call qstrip,$(BR2_TARGET_ROOTFS_DRACUT_MODULES))
ROOTFS_DRACUT_CUSTOM_KERNEL_CMDLINE = $(call qstrip,$(BR2_TARGET_ROOTFS_DRACUT_CUSTOM_KERNEL_CMDLINE))
ROOTFS_DRACUT_COMPRESSION_METHOD = $(call qstrip,$(BR2_TARGET_ROOTFS_DRACUT_COMPRESSION_METHOD))
ROOTFS_DRACUT_CONF_PATH = $(call qstrip,$(BR2_TARGET_ROOTFS_DRACUT_CONF_PATH))
ROOTFS_DRACUT_MKFS_CONF_OPTS += \
	--modules="$(ROOTFS_DRACUT_MODULES_INCLUDE)" \
	--omit="$(ROOTFS_DRACUT_MODULES_OMIT)" \
	--drivers=$(ROOTFS_DRACUT_KERNEL_MODULES) \
	--$(ROOTFS_DRACUT_COMPRESSION_METHOD)

ifneq ($(ROOTFS_DRACUT_CONF_PATH),)
ROOTFS_DRACUT_MKFS_CONF_OPTS += --conf=$(ROOTFS_DRACUT_CONF_PATH)
endif

ifneq ($(ROOTFS_DRACUT_CUSTOM_KERNEL_CMDLINE),)
ROOTFS_DRACUT_MKFS_CONF_OPTS += --kernel-cmdline=$(ROOTFS_DRACUT_CUSTOM_KERNEL_CMDLINE)
endif

ifeq ($(BR2_LINUX_KERNEL),y)
ROOTFS_DRACUT_KERNEL_IMAGE_PATH=$(BINARIES_DIR)/$(LINUX_TARGET_NAME)
ROOTFS_DRACUT_KERNEL_VERSION=$(LINUX_VERSION_PROBED)

ROOTFS_DRACUT_MKFS_CONF_OPTS += \
	--kver=$(ROOTFS_DRACUT_KERNEL_VERSION) \
	--kernel-image=$(ROOTFS_DRACUT_KERNEL_IMAGE_PATH) \
	--kmoddir="$(ROOTFS_DRACUT_TARGET_DIR)/lib/modules/$(ROOTFS_DRACUT_KERNEL_VERSION)"

ROOTFS_DRACUT_FS_ENV += KERNEL_VERSION=$(ROOTFS_DRACUT_KERNEL_VERSION)
ROOTFS_DRACUT_MODULES_INCLUDE += kernel-modules
endif

ifeq ($(BR2_TARGET_ROOTFS_DRACUT_HOST_ONLY),y)
ROOTFS_DRACUT_MKFS_CONF_OPTS += --hostonly
ROOTFS_DRACUT_MKFS_CONF_OPTS += --no-hostonly-cmdline
ifeq ($(BR2_TARGET_ROOTFS_DRACUT_HOST_ONLY_SLOPPY),y)
ROOTFS_DRACUT_MKFS_CONF_OPTS += --hostonly-mode=sloppy
else
ROOTFS_DRACUT_MKFS_CONF_OPTS += --hostonly-mode=strict
endif
else
ROOTFS_DRACUT_MKFS_CONF_OPTS += --no-hostonly
endif

ifeq ($(BR2_STRIP_strip),y)
ROOTFS_DRACUT_MKFS_CONF_OPTS += --strip
else
ROOTFS_DRACUT_MKFS_CONF_OPTS += --nostrip
endif

ifeq ($(BR2_REPRODUCIBLE),y)
ROOTFS_DRACUT_MKFS_CONF_OPTS += --reproducible
else
ROOTFS_DRACUT_MKFS_CONF_OPTS += --no-reproducible
endif

define ROOTFS_DRACUT_CMD
	(mkdir -p $(ROOTFS_DRACUT_DIR)/rootfs.dracut.tmp && \
		$(ROOTFS_DRACUT_FS_ENV) \
		$(HOST_DIR)/bin/dracut \
		$(ROOTFS_DRACUT_MKFS_CONF_OPTS) \
		$(BINARIES_DIR)/rootfs.cpio)
endef

$(eval $(rootfs))