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)