blob: 396b1c2bdf78fdd0db60faa7f686b8ffa0641f93 [file] [log] [blame]
Thomas Petazzoni21f3bcc2010-03-10 00:11:58 +01001#
2# Macro that builds the needed Makefile target to create a root
3# filesystem image.
4#
5# The following variable must be defined before calling this macro
6#
7# ROOTFS_$(FSTYPE)_CMD, the command that generates the root
8# filesystem image. A single command is allowed. The filename of the
9# filesystem image that it must generate is $$@.
10#
11# The following variables can optionaly be defined
12#
13# ROOTFS_$(FSTYPE)_DEPENDENCIES, the list of dependencies needed to
14# build the root filesystem (usually host tools)
15#
16# ROOTFS_$(FSTYPE)_PRE_GEN_HOOKS, a list of hooks to call before
17# generating the filesystem image
18#
Thomas Petazzoni15a53b92015-07-31 10:23:20 +020019# ROOTFS_$(FSTYPE)_POST_GEN_HOOKS, a list of hooks to call after
20# generating the filesystem image
21#
Thomas Petazzonif5079212010-06-13 19:19:38 +020022# ROOTFS_$(FSTYPE)_POST_TARGETS, the list of targets that should be
23# run after running the main filesystem target. This is useful for
24# initramfs, to rebuild the kernel once the initramfs is generated.
25#
Thomas Petazzoni21f3bcc2010-03-10 00:11:58 +010026# In terms of configuration option, this macro assumes that the
27# BR2_TARGET_ROOTFS_$(FSTYPE) config option allows to enable/disable
28# the generation of a filesystem image of a particular type. If
Brian 'redbeard' Harringtonb2dcb2d2016-05-07 20:27:48 -070029# the configuration options BR2_TARGET_ROOTFS_$(FSTYPE)_GZIP,
Thomas Petazzoni21f3bcc2010-03-10 00:11:58 +010030# BR2_TARGET_ROOTFS_$(FSTYPE)_BZIP2 or
31# BR2_TARGET_ROOTFS_$(FSTYPE)_LZMA exist and are enabled, then the
32# macro will automatically generate a compressed filesystem image.
33
34FAKEROOT_SCRIPT = $(BUILD_DIR)/_fakeroot.fs
Thomas Petazzoni4e005c42011-03-02 14:52:54 +010035FULL_DEVICE_TABLE = $(BUILD_DIR)/_device_table.txt
Ezequiel Garcia402d1472013-03-13 02:28:16 +000036ROOTFS_DEVICE_TABLES = $(call qstrip,$(BR2_ROOTFS_DEVICE_TABLE) \
Jerzy Grzegorek17699332014-10-25 20:29:31 +020037 $(BR2_ROOTFS_STATIC_DEVICE_TABLE))
Yann E. MORIN1f3af042013-04-12 07:14:18 +000038USERS_TABLE = $(BUILD_DIR)/_users_table.txt
Eric Le Bihanb0194902014-04-20 19:33:09 +020039ROOTFS_USERS_TABLES = $(call qstrip,$(BR2_ROOTFS_USERS_TABLES))
Thomas Petazzoni21f3bcc2010-03-10 00:11:58 +010040
Thomas De Schampheleire54456cc2014-06-11 21:12:24 +020041# Since this function will be called from within an $(eval ...)
42# all variable references except the arguments must be $$-quoted.
Thomas Petazzoni21f3bcc2010-03-10 00:11:58 +010043define ROOTFS_TARGET_INTERNAL
44
Peter Korsgaard094b2932010-11-19 15:05:20 +010045# extra deps
Peter Korsgaard79061fe2016-11-27 21:13:54 +010046ROOTFS_$(2)_DEPENDENCIES += host-fakeroot host-makedevs \
Thomas Petazzoni95bd0ad2015-07-21 17:36:07 +020047 $$(if $$(PACKAGES_USERS)$$(ROOTFS_USERS_TABLES),host-mkpasswd)
Arnout Vandecappellebd8ef7a2013-11-07 00:12:32 +010048
49ifeq ($$(BR2_TARGET_ROOTFS_$(2)_GZIP),y)
50ROOTFS_$(2)_COMPRESS_EXT = .gz
51ROOTFS_$(2)_COMPRESS_CMD = gzip -9 -c
52endif
53ifeq ($$(BR2_TARGET_ROOTFS_$(2)_BZIP2),y)
54ROOTFS_$(2)_COMPRESS_EXT = .bz2
55ROOTFS_$(2)_COMPRESS_CMD = bzip2 -9 -c
56endif
57ifeq ($$(BR2_TARGET_ROOTFS_$(2)_LZMA),y)
58ROOTFS_$(2)_DEPENDENCIES += host-lzma
59ROOTFS_$(2)_COMPRESS_EXT = .lzma
60ROOTFS_$(2)_COMPRESS_CMD = $$(LZMA) -9 -c
61endif
62ifeq ($$(BR2_TARGET_ROOTFS_$(2)_LZO),y)
63ROOTFS_$(2)_DEPENDENCIES += host-lzop
64ROOTFS_$(2)_COMPRESS_EXT = .lzo
65ROOTFS_$(2)_COMPRESS_CMD = $$(LZOP) -9 -c
66endif
67ifeq ($$(BR2_TARGET_ROOTFS_$(2)_XZ),y)
Thomas De Schampheleire26e0d502015-03-09 10:34:13 +010068ROOTFS_$(2)_DEPENDENCIES += host-xz
Arnout Vandecappellebd8ef7a2013-11-07 00:12:32 +010069ROOTFS_$(2)_COMPRESS_EXT = .xz
Peter Korsgaard28b514a2014-06-04 08:33:17 +020070ROOTFS_$(2)_COMPRESS_CMD = xz -9 -C crc32 -c
Arnout Vandecappellebd8ef7a2013-11-07 00:12:32 +010071endif
Peter Korsgaard094b2932010-11-19 15:05:20 +010072
Fabio Porceddaa2487752014-02-14 10:55:06 +010073$$(BINARIES_DIR)/rootfs.$(1): target-finalize $$(ROOTFS_$(2)_DEPENDENCIES)
Arnout Vandecappelle (Essensium/Mind)847895d2013-01-20 15:03:13 +010074 @$$(call MESSAGE,"Generating root filesystem image rootfs.$(1)")
75 $$(foreach hook,$$(ROOTFS_$(2)_PRE_GEN_HOOKS),$$(call $$(hook))$$(sep))
76 rm -f $$(FAKEROOT_SCRIPT)
77 rm -f $$(TARGET_DIR_WARNING_FILE)
Thomas De Schampheleire54456cc2014-06-11 21:12:24 +020078 rm -f $$(USERS_TABLE)
Yann E. MORIN974e83a2016-06-07 22:09:41 +020079 echo '#!/bin/sh' > $$(FAKEROOT_SCRIPT)
Stefan Sørensen6b577b32015-02-24 16:47:34 +010080 echo "set -e" >> $$(FAKEROOT_SCRIPT)
Yann E. MORIN3fbd9882014-06-08 22:02:23 +020081 echo "chown -h -R 0:0 $$(TARGET_DIR)" >> $$(FAKEROOT_SCRIPT)
Yann E. MORIN3f28a382016-01-21 22:23:36 +010082ifneq ($$(ROOTFS_USERS_TABLES),)
83 cat $$(ROOTFS_USERS_TABLES) >> $$(USERS_TABLE)
84endif
Yann E. MORIN6dd7bbb2016-06-06 22:43:39 +020085 $$(call PRINTF,$$(PACKAGES_USERS)) >> $$(USERS_TABLE)
Yann E. MORIN3f28a382016-01-21 22:23:36 +010086 PATH=$$(BR_PATH) $$(TOPDIR)/support/scripts/mkusers $$(USERS_TABLE) $$(TARGET_DIR) >> $$(FAKEROOT_SCRIPT)
Arnout Vandecappelle (Essensium/Mind)847895d2013-01-20 15:03:13 +010087ifneq ($$(ROOTFS_DEVICE_TABLES),)
88 cat $$(ROOTFS_DEVICE_TABLES) > $$(FULL_DEVICE_TABLE)
89ifeq ($$(BR2_ROOTFS_DEVICE_CREATION_STATIC),y)
Yann E. MORIN6dd7bbb2016-06-06 22:43:39 +020090 $$(call PRINTF,$$(PACKAGES_DEVICES_TABLE)) >> $$(FULL_DEVICE_TABLE)
Maxime Ripard24440852012-01-11 18:53:38 +010091endif
Yann E. MORIN5b272e32016-12-14 23:28:10 +010092endif
Yann E. MORIN6dd7bbb2016-06-06 22:43:39 +020093 $$(call PRINTF,$$(PACKAGES_PERMISSIONS_TABLE)) >> $$(FULL_DEVICE_TABLE)
Arnout Vandecappelle (Essensium/Mind)847895d2013-01-20 15:03:13 +010094 echo "$$(HOST_DIR)/usr/bin/makedevs -d $$(FULL_DEVICE_TABLE) $$(TARGET_DIR)" >> $$(FAKEROOT_SCRIPT)
Yann E. MORIN9cdb2812016-07-03 17:08:19 +020095 $$(foreach s,$$(call qstrip,$$(BR2_ROOTFS_POST_FAKEROOT_SCRIPT)),\
96 echo "echo '$$(TERM_BOLD)>>> Executing fakeroot script $$(s)$$(TERM_RESET)'" >> $$(FAKEROOT_SCRIPT); \
97 echo $$(s) $$(TARGET_DIR) $$(BR2_ROOTFS_POST_SCRIPT_ARGS) >> $$(FAKEROOT_SCRIPT)$$(sep))
Jérôme Pouiller68db7212016-11-23 13:58:47 +010098ifeq ($$(BR2_REPRODUCIBLE),y)
99 echo "find $$(TARGET_DIR) -print0 | xargs -0 -r touch -hd @$$(SOURCE_DATE_EPOCH)" >> $$(FAKEROOT_SCRIPT)
100endif
Yann E. MORIN6dd7bbb2016-06-06 22:43:39 +0200101 $$(call PRINTF,$$(ROOTFS_$(2)_CMD)) >> $$(FAKEROOT_SCRIPT)
Arnout Vandecappelle (Essensium/Mind)847895d2013-01-20 15:03:13 +0100102 chmod a+x $$(FAKEROOT_SCRIPT)
Peter Korsgaard79061fe2016-11-27 21:13:54 +0100103 PATH=$$(BR_PATH) $$(HOST_DIR)/usr/bin/fakeroot -- $$(FAKEROOT_SCRIPT)
Thomas De Schampheleire54456cc2014-06-11 21:12:24 +0200104 $$(INSTALL) -m 0644 support/misc/target-dir-warning.txt $$(TARGET_DIR_WARNING_FILE)
Arnout Vandecappelle (Essensium/Mind)847895d2013-01-20 15:03:13 +0100105 -@rm -f $$(FAKEROOT_SCRIPT) $$(FULL_DEVICE_TABLE)
Arnout Vandecappellebd8ef7a2013-11-07 00:12:32 +0100106ifneq ($$(ROOTFS_$(2)_COMPRESS_CMD),)
Thomas De Schampheleire54456cc2014-06-11 21:12:24 +0200107 PATH=$$(BR_PATH) $$(ROOTFS_$(2)_COMPRESS_CMD) $$@ > $$@$$(ROOTFS_$(2)_COMPRESS_EXT)
Gustavo Zacarias54196512013-01-22 01:03:43 +0000108endif
Thomas Petazzoni15a53b92015-07-31 10:23:20 +0200109 $$(foreach hook,$$(ROOTFS_$(2)_POST_GEN_HOOKS),$$(call $$(hook))$$(sep))
Thomas Petazzoni21f3bcc2010-03-10 00:11:58 +0100110
Peter Korsgaard0a0cb992010-11-19 15:01:13 +0100111rootfs-$(1)-show-depends:
Arnout Vandecappelle (Essensium/Mind)847895d2013-01-20 15:03:13 +0100112 @echo $$(ROOTFS_$(2)_DEPENDENCIES)
Thomas Petazzoni949db6a2010-05-13 19:20:21 +0200113
Arnout Vandecappelle (Essensium/Mind)847895d2013-01-20 15:03:13 +0100114rootfs-$(1): $$(BINARIES_DIR)/rootfs.$(1) $$(ROOTFS_$(2)_POST_TARGETS)
Thomas Petazzoni21f3bcc2010-03-10 00:11:58 +0100115
Thomas Petazzoni2aef7712015-04-12 18:37:46 +0200116.PHONY: rootfs-$(1) rootfs-$(1)-show-depends
117
Thomas Petazzoni21f3bcc2010-03-10 00:11:58 +0100118ifeq ($$(BR2_TARGET_ROOTFS_$(2)),y)
Fabio Porceddaa2487752014-02-14 10:55:06 +0100119TARGETS_ROOTFS += rootfs-$(1)
Thomas Petazzoni54640e82015-04-26 11:50:59 +0200120PACKAGES += $$(filter-out rootfs-%,$$(ROOTFS_$(2)_DEPENDENCIES))
Thomas Petazzoni21f3bcc2010-03-10 00:11:58 +0100121endif
122endef
123
124define ROOTFS_TARGET
Jerzy Grzegorek5d473402014-12-09 16:14:31 +0100125 $(call ROOTFS_TARGET_INTERNAL,$(1),$(call UPPERCASE,$(1)))
Thomas Petazzonid2b07912010-03-10 22:11:21 +0100126endef
Thomas Petazzoni05852412010-03-10 22:30:06 +0100127
Jérôme Pouiller741cbcc2013-09-03 10:45:41 +0200128include $(sort $(wildcard fs/*/*.mk))