github.com/stackdocker/rkt@v0.10.1-0.20151109095037-1aa827478248/stage1/usr_from_src/usr_from_src.mk (about)

     1  # This file prepares the initial ACI rootfs contents from systemd
     2  # sources. The libraries required by systemd are taken from the build
     3  # host.
     4  
     5  # tmp dir for this flavor
     6  $(call setup-tmp-dir,UFS_TMPDIR)
     7  # directory for systemd stuff (srcdir, builddir, installdir)
     8  UFS_SYSTEMDDIR := $(UFS_TMPDIR)/systemd
     9  # systemd src dir
    10  UFS_SYSTEMD_SRCDIR := $(UFS_SYSTEMDDIR)/src
    11  # systemd build dir
    12  UFS_SYSTEMD_BUILDDIR := $(UFS_SYSTEMDDIR)/build
    13  # systemd install dir, also serves as a temporary rootfs
    14  UFS_ROOTFSDIR := $(UFS_SYSTEMDDIR)/rootfs
    15  
    16  # main stamp, makes sure that initial rootfs contents are prepared and
    17  # clean/deps/filelist are generated
    18  $(call setup-stamp-file,UFS_STAMP,systemd)
    19  # stamp for generating initial ACI rootfs contents
    20  $(call setup-stamp-file,UFS_ROOTFS_STAMP,systemd-rootfs)
    21  # stamp for installing systemd into tmp rootfs
    22  $(call setup-stamp-file,UFS_SYSTEMD_INSTALL_STAMP,systemd-install)
    23  # stamp for building systemd
    24  $(call setup-stamp-file,UFS_SYSTEMD_BUILD_STAMP,systemd-build)
    25  # stamp for cloning the git repo and patching it
    26  $(call setup-stamp-file,UFS_SYSTEMD_CLONE_AND_PATCH_STAMP,systemd-clone-and-patch)
    27  
    28  # stamp for generating dep file on install/tmp rootfs dir
    29  $(call setup-stamp-file,UFS_ROOTFS_DEPS_STAMP,systemd-rootfs-deps)
    30  # dep.mk for install/tmp rootfs dir contents, will cause ACI rootfs
    31  # removal if they change
    32  $(call setup-dep-file,UFS_ROOTFS_DEPMK,systemd-rootfs)
    33  # stamp for generating install/tmp rootfs dir clean file
    34  $(call setup-stamp-file,UFS_SYSTEMD_ROOTFSDIR_CLEAN_STAMP,systemd-rootfs-clean)
    35  # clean file for installdir/tmp rootfs dir
    36  $(call setup-clean-file,UFS_ROOTFSDIR_CLEANMK,systemd-rootfs)
    37  # install/tmp rootfs dir filelist
    38  $(call setup-filelist-file,UFS_ROOTFSDIR_FILELIST,systemd-rootfs)
    39  
    40  # stamp for generating build dir clean file
    41  $(call setup-stamp-file,UFS_SYSTEMD_BUILDDIR_CLEAN_STAMP,systemd-build-clean)
    42  # clean file for build dir
    43  $(call setup-clean-file,UFS_SYSTEMD_BUILDDIR_CLEANMK,systemd-build)
    44  # build dir filelist
    45  $(call setup-filelist-file,UFS_SYSTEMD_BUILDDIR_FILELIST,systemd-build)
    46  
    47  # stamp for generating dep file on patches dir
    48  $(call setup-stamp-file,UFS_PATCHES_DEPS_STAMP,systemd-patches-deps)
    49  # dep.mk file for patches dir, will cause git repo reset and clean if
    50  # they change
    51  $(call setup-dep-file,UFS_PATCHES_DEPMK,systemd-patches)
    52  # patches dir filelist
    53  $(call setup-filelist-file,UFS_PATCHES_FILELIST,systemd-patches)
    54  
    55  # stamp for generating src dir clean file
    56  $(call setup-stamp-file,UFS_SYSTEMD_SRCDIR_CLEAN_STAMP,systemd-src-clean)
    57  # clean file for src dir
    58  $(call setup-clean-file,UFS_SYSTEMD_SRCDIR_CLEANMK,systemd-src)
    59  # src dir filelist
    60  $(call setup-filelist-file,UFS_SYSTEMD_SRCDIR_FILELIST,systemd-src)
    61  
    62  # stamp for removing builddir
    63  $(call setup-stamp-file,UFS_SYSTEMD_RM_BUILDDIR_STAMP,systemd-rm-build)
    64  # stamp for removing installdir
    65  $(call setup-stamp-file,UFS_SYSTEMD_RM_ROOTFSDIR_STAMP,systemd-rm-rootfs)
    66  # stamp for removing ACI rootfsdir
    67  $(call setup-stamp-file,UFS_SYSTEMD_RM_ACIROOTFSDIR_STAMP,systemd-rm-acirootfs)
    68  
    69  # We assume that the name passed to --stage1-systemd-version that
    70  # matches a regexp '^v\d+$' (a name starts with a v followed by a
    71  # number, like v211) is a name of a tag. Otherwise it is a branch.
    72  # `expr string : regexp` returns a number of characters that matched
    73  # the regexp, so if that number is equal to the string length then it
    74  # means that the string matched the regexp.
    75  UFS_SYSTEMD_TAG_MATCH := $(shell expr "$(RKT_STAGE1_SYSTEMD_VER)" : 'v[[:digit:]]\+')
    76  UFS_SYSTEMD_TAG_LENGTH := $(shell expr length "$(RKT_STAGE1_SYSTEMD_VER)")
    77  # patches dir
    78  UFS_PATCHES_DIR := $(MK_SRCDIR)/patches/$(RKT_STAGE1_SYSTEMD_VER)
    79  # output file for autogen.sh, used for the truncated verbosity
    80  UFS_AG_OUT := $(UFS_TMPDIR)/ag_out
    81  # systemd configure script
    82  UFS_SYSTEMD_CONFIGURE := $(UFS_SYSTEMD_SRCDIR)/configure
    83  UFS_SYSTEMD_CONFIGURE_AC := $(UFS_SYSTEMD_CONFIGURE).ac
    84  
    85  # TODO: the symlinks should be build-host specific, instead of hardcoded
    86  # UFS_LIB_SYMLINK := $(S1_RF_ACIROOTFSDIR)/lib
    87  # UFS_LIB64_SYMLINK := $(S1_RF_ACIROOTFSDIR)/lib64
    88  # INSTALL_SYMLINKS += usr/lib:$(UFS_LIB_SYMLINK) usr/lib64:$(UFS_LIB64_SYMLINK)
    89  # $(UFS_ROOTFS_STAMP): | $(UFS_LIB_SYMLINK) $(UFS_LIB64_SYMLINK)
    90  
    91  S1_RF_USR_STAMPS += $(UFS_STAMP)
    92  S1_RF_COPY_SO_DEPS := yes
    93  INSTALL_DIRS += \
    94  	$(UFS_SYSTEMDDIR):- \
    95  	$(UFS_SYSTEMD_SRCDIR):- \
    96  	$(UFS_SYSTEMD_BUILDDIR):- \
    97  	$(UFS_ROOTFSDIR):0755
    98  CLEAN_FILES += \
    99  	$(S1_RF_ACIROOTFSDIR)/systemd-version \
   100  	$(UFS_AG_OUT)
   101  CLEAN_DIRS += \
   102  	$(UFS_SYSTEMD_BUILDDIR) \
   103  	$(UFS_ROOTFSDIR)
   104  CLEAN_SYMLINKS += $(S1_RF_ACIROOTFSDIR)/flavor
   105  
   106  $(call inc-one,bash.mk)
   107  
   108  # this makes sure everything is done - ACI rootfs is populated,
   109  # clean/deps/filelist are generated
   110  $(call generate-stamp-rule,$(UFS_STAMP),$(UFS_ROOTFS_STAMP) $(UFS_ROOTFS_DEPS_STAMP) $(UFS_PATCHES_DEPS_STAMP) $(UFS_SYSTEMD_ROOTFSDIR_CLEAN_STAMP) $(UFS_SYSTEMD_BUILDDIR_CLEAN_STAMP) $(UFS_SYSTEMD_SRCDIR_CLEAN_STAMP))
   111  
   112  # this copies the temporary rootfs contents to ACI rootfs and adds
   113  # some misc files
   114  $(call generate-stamp-rule,$(UFS_ROOTFS_STAMP),$(UFS_SYSTEMD_INSTALL_STAMP),$(S1_RF_ACIROOTFSDIR), \
   115  	$(call vb,v2,CP TREE,$(call vsp,$(UFS_ROOTFSDIR)/.) => $(call vsp,$(S1_RF_ACIROOTFSDIR))) \
   116  	cp -af "$(UFS_ROOTFSDIR)/." "$(S1_RF_ACIROOTFSDIR)"; \
   117  	$(call vb,v2,LN SF,src,$(call vsp,$(S1_RF_ACIROOTFSDIR)/flavor)) \
   118  	ln -sf 'src' "$(S1_RF_ACIROOTFSDIR)/flavor"; \
   119  	$(call vb,v2,GEN,$(call vsp,$(S1_RF_ACIROOTFSDIR)/systemd-version)) \
   120  	echo "$(RKT_STAGE1_SYSTEMD_VER)" >"$(S1_RF_ACIROOTFSDIR)/systemd-version")
   121  
   122  # this installs systemd into temporary rootfs
   123  $(call generate-stamp-rule,$(UFS_SYSTEMD_INSTALL_STAMP),$(UFS_SYSTEMD_BUILD_STAMP),$(UFS_ROOTFSDIR), \
   124  	$(call vb,v2,INSTALL,systemd) \
   125  	DESTDIR="$(abspath $(UFS_ROOTFSDIR))" $$(MAKE) -C "$(UFS_SYSTEMD_BUILDDIR)" V=0 install-strip $(call vl2,>/dev/null))
   126  
   127  # This filelist can be generated only after the installation of
   128  # systemd to temporary rootfs was performed
   129  $(UFS_ROOTFSDIR_FILELIST): $(UFS_SYSTEMD_INSTALL_STAMP)
   130  $(call generate-deep-filelist,$(UFS_ROOTFSDIR_FILELIST),$(UFS_ROOTFSDIR))
   131  
   132  # Generate dep.mk file which will cause the initial ACI rootfs to be
   133  # recreated if any file in temporary rootfs changes.
   134  $(call generate-glob-deps,$(UFS_ROOTFS_DEPS_STAMP),$(UFS_SYSTEMD_RM_ACIROOTFSDIR_STAMP),$(UFS_ROOTFS_DEPMK),,$(UFS_ROOTFSDIR_FILELIST),$(UFS_ROOTFSDIR))
   135  
   136  # Generate a clean.mk files for cleaning everything that systemd's
   137  # "make install" put in a temporary rootfs and for the same files in
   138  # ACI rootfs.
   139  $(call generate-clean-mk,$(UFS_SYSTEMD_ROOTFSDIR_CLEAN_STAMP),$(UFS_ROOTFSDIR_CLEANMK),$(UFS_ROOTFSDIR_FILELIST),$(UFS_ROOTFSDIR) $(S1_RF_ACIROOTFSDIR))
   140  
   141  # this builds systemd
   142  $(call generate-stamp-rule,$(UFS_SYSTEMD_BUILD_STAMP),$(UFS_SYSTEMD_CLONE_AND_PATCH_STAMP),$(UFS_SYSTEMD_BUILDDIR), \
   143  	pushd "$(UFS_SYSTEMD_BUILDDIR)" $(call vl3,>/dev/null); \
   144  	$(call vb,v2,CONFIGURE,systemd) \
   145  	"$(abspath $(UFS_SYSTEMD_SRCDIR))/configure" \
   146  		$(call vl3,--quiet) \
   147  		--disable-dbus \
   148  		--disable-python-devel \
   149  		--disable-kmod \
   150  		--disable-blkid \
   151  		--disable-chkconfig \
   152  		--disable-selinux \
   153  		--disable-pam \
   154  		--disable-acl \
   155  		--disable-smack \
   156  		--disable-gcrypt \
   157  		--disable-elfutils \
   158  		--disable-libcryptsetup \
   159  		--disable-qrencode \
   160  		--disable-microhttpd \
   161  		--disable-gnutls \
   162  		--disable-binfmt \
   163  		--disable-vconsole \
   164  		--disable-bootchart \
   165  		--disable-quotacheck \
   166  		--disable-tmpfiles \
   167  		--disable-sysusers \
   168  		--disable-randomseed \
   169  		--disable-backlight \
   170  		--disable-rfkill \
   171  		--disable-logind \
   172  		--disable-machined \
   173  		--disable-timedated \
   174  		--disable-timesyncd \
   175  		--disable-localed \
   176  		--disable-coredump \
   177  		--disable-polkit \
   178  		--disable-resolved \
   179  		--disable-networkd \
   180  		--disable-efi \
   181  		--disable-myhostname \
   182  		--disable-gudev \
   183  		--disable-manpages \
   184  		--disable-tests \
   185  		--disable-blkid \
   186  		--disable-hibernate \
   187  		--disable-terminal \
   188  		--disable-hwdb \
   189  		--disable-importd \
   190  		--disable-firstboot \
   191  		--enable-seccomp; \
   192  	popd $(call vl3,>/dev/null); \
   193  	$(call vb,v2,BUILD EXT,systemd) \
   194  	$$(MAKE) -C "$(UFS_SYSTEMD_BUILDDIR)" all V=0 $(call vl2,>/dev/null))
   195  
   196  # Generate filelist of a build directory. This can be done only after
   197  # building systemd was finished.
   198  $(UFS_SYSTEMD_BUILDDIR_FILELIST): $(UFS_SYSTEMD_BUILD_STAMP)
   199  $(call generate-deep-filelist,$(UFS_SYSTEMD_BUILDDIR_FILELIST),$(UFS_SYSTEMD_BUILDDIR))
   200  
   201  # Generate clean.mk for cleaning all files created during "make all"
   202  # in systemd.
   203  $(call generate-clean-mk,$(UFS_SYSTEMD_BUILDDIR_CLEAN_STAMP),$(UFS_SYSTEMD_BUILDDIR_CLEANMK),$(UFS_SYSTEMD_BUILDDIR_FILELIST),$(UFS_SYSTEMD_BUILDDIR))
   204  
   205  # this patch makes sure that systemd git repo was cloned and patched
   206  $(call generate-stamp-rule,$(UFS_SYSTEMD_CLONE_AND_PATCH_STAMP),$(UFS_SYSTEMD_CONFIGURE))
   207  
   208  # this patches the git repo and generates the configure script
   209  $(call forward-vars,$(UFS_SYSTEMD_CONFIGURE), \
   210  	UFS_PATCHES_DIR GIT UFS_SYSTEMD_SRCDIR UFS_AG_OUT)
   211  $(UFS_SYSTEMD_CONFIGURE):
   212  	$(VQ) \
   213  	set -e; \
   214  	shopt -s nullglob ; \
   215  	if [ -d "$(UFS_PATCHES_DIR)" ]; then \
   216  		for p in "$(abspath $(UFS_PATCHES_DIR))"/*.patch; do \
   217  			$(call vb,v2,PATCH,$${p#$(MK_TOPLEVEL_ABS_SRCDIR)/}) \
   218  			"$(GIT)" -C "$(UFS_SYSTEMD_SRCDIR)" am $(call vl3,--quiet) "$${p}"; \
   219  		done; \
   220  	fi; \
   221  	pushd "$(UFS_SYSTEMD_SRCDIR)" $(call vl3,>/dev/null); \
   222  	$(call vb,v1,BUILD EXT,systemd) \
   223  	$(call vb,v2,AUTOGEN,systemd) \
   224  	$(call v3,./autogen.sh) \
   225  	$(call vl3, \
   226  		if ! ./autogen.sh 2>$(UFS_AG_OUT) >/dev/null; then \
   227  			cat $(UFS_AG_OUT) >&2; \
   228  		fi); \
   229  	popd $(call vl3,>/dev/null)
   230  
   231  # Generate the filelist of systemd's srcdir. This can be done only
   232  # after it was cloned, patched and configure script was generated.
   233  $(UFS_SYSTEMD_SRCDIR_FILELIST): $(UFS_SYSTEMD_CONFIGURE)
   234  $(call generate-deep-filelist,$(UFS_SYSTEMD_SRCDIR_FILELIST),$(UFS_SYSTEMD_SRCDIR))
   235  
   236  # Generate clean.mk file for cleaning all files in srcdir.
   237  $(call generate-clean-mk,$(UFS_SYSTEMD_SRCDIR_CLEAN_STAMP),$(UFS_SYSTEMD_SRCDIR_CLEANMK),$(UFS_SYSTEMD_SRCDIR_FILELIST),$(UFS_SYSTEMD_SRCDIR))
   238  
   239  # Generate a filelist of patches. Can happen anytime.
   240  $(call generate-patches-filelist,$(UFS_PATCHES_FILELIST),$(UFS_PATCHES_DIR))
   241  
   242  # Generate a dep.mk on those patches, so if patches change, the
   243  # project should be reset and repatched, and configure script
   244  # regenerated.
   245  $(call generate-glob-deps,$(UFS_PATCHES_DEPS_STAMP),$(UFS_SYSTEMD_CONFIGURE_AC),$(UFS_PATCHES_DEPMK),.patch,$(UFS_PATCHES_FILELIST),$(UFS_PATCHES_DIR),normal)
   246  
   247  # parameters for makelib/git.mk
   248  GCL_REPOSITORY := $(RKT_STAGE1_SYSTEMD_SRC)
   249  GCL_DIRECTORY := $(UFS_SYSTEMD_SRCDIR)
   250  GCL_COMMITTISH := $(RKT_STAGE1_SYSTEMD_VER)
   251  GCL_EXPECTED_FILE := $(notdir $(UFS_SYSTEMD_CONFIGURE_AC))
   252  GCL_TARGET := $(UFS_SYSTEMD_CONFIGURE)
   253  
   254  ifneq ($(UFS_SYSTEMD_TAG_MATCH),$(UFS_SYSTEMD_TAG_LENGTH))
   255  
   256  # If the name is not a tag then we try to pull new changes from upstream.
   257  
   258  GCL_DO_CHECK := yes
   259  
   260  else
   261  
   262  # The name is a tag, so we do not refresh the git repository.
   263  
   264  GCL_DO_CHECK :=
   265  
   266  endif
   267  
   268  include makelib/git.mk
   269  
   270  # Remove the build directory if there were some changes in sources
   271  # (like different branch or repository, or a change in patches)
   272  $(UFS_SYSTEMD_RM_BUILDDIR_STAMP): $(UFS_SYSTEMD_CLONE_AND_PATCH_STAMP)
   273  $(generate-rm-dir-rule,$(UFS_SYSTEMD_RM_BUILDDIR_STAMP),$(UFS_SYSTEMD_BUILDDIR))
   274  
   275  # Remove the install/tmp rootfs directory if there were some changes
   276  # in build.
   277  $(UFS_SYSTEMD_RM_ROOTFSDIR_STAMP): $(UFS_SYSTEMD_BUILD_STAMP)
   278  $(generate-rm-dir-rule,$(UFS_SYSTEMD_RM_ROOTFSDIR_STAMP),$(UFS_ROOTFSDIR))
   279  
   280  # Remove the ACI rootfs if something changes in install.
   281  $(UFS_SYSTEMD_RM_ACIROOTFSDIR_STAMP): $(UFS_SYSTEMD_INSTALL_STAMP)
   282  $(generate-rm-dir-rule,$(UFS_SYSTEMD_RM_ACIROOTFSDIR_STAMP),$(S1_RF_ACIROOTFSDIR))
   283  
   284  $(call undefine-namespaces,UFS)