fighting w/ 'make bootstrap' on CentOS7 w/ CLFS GIT-20170803 updates
Michael D Labriola [Fri, 11 Jan 2019 20:13:17 +0000 (15:13 -0500)]
- Changed kernel out-of-tree building technique.  Using KBUILD_SRC to build
  from an alternate build dir worked as of v4.0, but now it doesn't.
  Comments in the kernel Makefile state that this variable isn't really for
  user use...  oops.  a436bb7b806383ae0593cab53d17fc9676270cd3 (prior to
  v4.0-rc1) intentionally broke this bu removing $sourcedir from Makefile
  include statements.  Keeping the source tree pristine has always been
  handled by Kbuild via O=path/to/outputdir and the Makefiles now require
  PWD to be the kernel source tree (which is the opposite of how autotools
  does it).  Not sure how that works with out-of-tree kernel modules... but
  I'll cross that bridge later.

utils/bootstrap-cross/go
utils/bootstrap-stage1/go

index d99db4f..2a0a09d 100755 (executable)
@@ -38,13 +38,26 @@ build()
                 setup_generic kernel || exit 1
 
             # get ready
-           MAKE="make KBUILD_SRC=$source -f $source/Makefile"
+            #
+            # NOTE: Kbuild requires PWD to be $source, but will put all build
+            #       files in an output dir via O=/path/to/outputdir.  Gives us
+            #       the same result as the PWD=builddir -f
+            #       /path/to/sourc/Makefile way of doing things, but does
+            #       require some faith in the Makefile to respect outputdir
+            #       100% of the time.  (FYI, I have never noticed KBuild
+            #       writing into $source w/ outputdir set...).
+            #
+            # NOTE: Also, the make mrproper SHOULD be pointless.  We just
+            #       created the directory fresh.  Unless this is a subsequent
+            #       run w/ a dirty source tree... so we do it anyways.
+            #
+            MAKE="make O=$builddir"
             MAKE+=" ARCH=$CLFS_ARCH"
 
             # NOTE: We use $PREFIX_TOOLS as apposed to $PREFIX_CROSS here (just
             #       like the CLFS book).  There's nothing to cross-compile
             #       here, but it's needed now.
-            pushd $builddir &&
+            pushd $source &&
             $MAKE mrproper &&
             $MAKE headers_check &&
             $MAKE INSTALL_HDR_PATH=$PREFIX_TOOLS headers_install &&
index 8632605..603887a 100755 (executable)
@@ -654,15 +654,28 @@ EOF
            fi
 
            # get ready
-           MAKE="make KBUILD_SRC=$source -f $source/Makefile"
+            #
+            # NOTE: Kbuild requires PWD to be $source, but will put all build
+            #       files in an output dir via O=/path/to/outputdir.  Gives us
+            #       the same result as the PWD=builddir -f
+            #       /path/to/sourc/Makefile way of doing things, but does
+            #       require some faith in the Makefile to respect outputdir
+            #       100% of the time.  (FYI, I have never noticed KBuild
+            #       writing into $source w/ outputdir set...).
+            #
+            # NOTE: Also, the make mrproper SHOULD be pointless.  We just
+            #       created the directory fresh.  Unless this is a subsequent
+            #       run w/ a dirty source tree... so we do it anyways.
+            #
+           MAKE="make O=$builddir"
            MAKE+=" ARCH=$CLFS_ARCH CROSS_COMPILE=$CLFS_TARGET-"
-           pushd $builddir &&
+           pushd $source &&
            $MAKE mrproper &&
            popd || exit 1
 
            # get set
            cp -v $ruckus_confdir/$kernel_config $builddir/.config &&
-           pushd $builddir &&
+           pushd $source &&
            $MAKE olddefconfig &&
            popd || exit 1
 
@@ -678,7 +691,7 @@ EOF
             # FIXME: i guess it must work, because i don't remember having any
             #        problems w/ modules last time i tried building...
             #
-           pushd $builddir &&
+           pushd $source &&
            $MAKE -j$JOBCOUNT_KBUILD &&
             $MAKE INSTALL_MOD_PATH=$PREFIX_TOOLS modules_install &&
            popd || exit 1