finished --stage1-xen rethink
Michael D Labriola [Tue, 15 Jan 2019 00:15:02 +0000 (19:15 -0500)]
So, while I was pushing through that last bootstrap test build, I made some
tweaks to how the STAGE1_XEN and STAGE1_XEN_ONLY variables get set.  This
commit finishes that up, now that I can test my configure.ac changes w/out
interrupting my test build.

- no longer warn about xen detour when building on x86_64
- split bootstrap-stage1/go's xen scriptlet into very obvious xen-detour
  and xen-slurp scriptlets to avoid further confusion
- removed --without-stage1-xen from configure now that we're being smarter
  about things

README.building
configure.ac
utils/bootstrap-stage1/go

index 05684ee..8c8d22a 100644 (file)
@@ -81,8 +81,9 @@ mkdir /scrap/baby/ruckus-build
 cd /scrap/baby/ruckus-build
 
 *NOTE*: The --prefix needs to continue to match in all of these, because
-        bootstrap-install installs domU config files into
-        $PREFIX_HOSTPREP/boot.
+        bootstrap for 32bit slurps hostprep's Xen hypervisor files from
+        $PREFIX_HOSTPREP/boot into $PREFIX_TOOLS/boot and bootstrap-install
+        installs domU config files into $PREFIX_HOSTPREP/boot.
 
 *NOTE*: Eventually, we'll want --enabled-stage2-auto in all of these... but for
         now, I keep copy-n-pasting these commands and then removing that.  At
@@ -98,11 +99,6 @@ cd /scrap/baby/ruckus-build
 
 *** 32bit
 
-*NOTE*: We *could* specify --without-stage1-xen here to explicitly skip
-        building the Xen hypervisor.  We've already built one via hostprep, but
-        building it again here will install it in $PREFIX_TOOLS/boot, which is
-        available from the bootstrap system.
-
 /scrap/ruckus/configure \
     --prefix=/scrap/ruckus-hostprep \
     --with-arch=i686 \
index 5baeaca..abcd91e 100644 (file)
@@ -360,12 +360,12 @@ AC_ARG_ENABLE(xen,
    AS_IF([test "$xen_enabled" != "yes"], [stage2_xen=no])
   ],
   [xen_enabled=yes
-   AS_IF([test "$build_arch" != x86_64],
+   AS_IF([test "$build_arch" != x86_64 -a "$build_cpu" != "x86_64"],
      [AC_MSG_WARN([
                *************************************************************
-               Xen requires a 64bit hypervisor.  The build will go on a
-               detour to cross-compile the hypervisor automatically.  This
-               entails reconfiguring, building the cross-compilation
+               Xen requires a 64bit hypervisor.  Building hostprep will go
+               on a detour to cross-compile the hypervisor automatically.
+               This entails reconfiguring, building the cross-compilation
                toolchain, cross-compiling xen, removing the
                cross-compilation toolchain, reconfiguring back to the
                original config, and carrying on with the build.  Log files
@@ -373,13 +373,8 @@ AC_ARG_ENABLE(xen,
                but it does work.
 
                 If you don't really care about Xen, you can disable it in
-                both the bootstrap and final systems w/ the --disable-xen
+                hostprep, bootstrap, and final system w/ the --disable-xen
                 flag.
-
-                Alternatively, you can bypass the Xen detour but still
-                enable Xen support w/ the --without-stage1-xen flag, but
-                Xen will not be usable unless you've already built and
-                installed the Xen hypervisor in PREFIX_HOSTPREP/boot.
                 *************************************************************])
      ])
   ])
@@ -395,14 +390,6 @@ AM_CONDITIONAL([STAGE2_XEN], [test x$stage2_xen = xyes])
 AM_CONDITIONAL([XEN_ENABLED], [test x$xen_enabled = xyes])
 
 
-# don't bother building xen if we already have it
-#
-# NOTE: This is to avoid rebuilding the xen hypervisor when bootstrapping
-#       multiple architectures sharing a common hostprep area.
-#
-# FIXME: This could also be used to detect wether we should go on the xen
-#        detour, instead of the nested if ugliness above...
-#
 # Build Xen in stage1 if we're building 32bit (and install in
 # PREFIX_TOOLS) or if we're building ON A 32BIT HOST (will trigger xen
 # detour, WITH_STAGE1_XEN_ONLY, and eventual installation of xen.gz
@@ -414,14 +401,6 @@ AS_IF([test "$xen_enabled" = "yes"],
     [stage1_xen=no])],
   [stage1_xen=no])
 
-# we might want to disable building the xen hypervisor in stage1, for
-# example if we've got two builds going in parallel (both would autodetect
-# to build the hypervisor).
-AC_ARG_WITH(stage1-xen,
-  AS_HELP_STRING([--with-stage1-xen], [Build the Xen hypervisor in bootstrap-stage1.  This is autodetected if building on 32bit host (for hostprep xen detour) or if building x86 final system (which can't compile hypervisor), but can be overriden here.]),
-  stage1_xen=$withval)
-#  stage1_xen=no)
-
 AC_SUBST(STAGE1_XEN, $stage1_xen)
 AM_CONDITIONAL([STAGE1_XEN], [test x$stage1_xen = xyes])
 
index 722ea93..9af1b9e 100755 (executable)
@@ -724,7 +724,7 @@ EOF
            popd || exit 1
            ;;
 
-        xen)
+        xen-detour)
            # NOTE: Just build the hypervisor.  This step is generally just
            #       done to augment the bootstrap-early xen build on 32bit
            #       systems with a cross-compiled 64bit hypervisor.
@@ -758,32 +758,25 @@ EOF
            MAKE+=" CROSS_COMPILE=$CLFS_TARGET-"
            pushd $builddir &&
            $MAKE -j$JOBCOUNT dist &&
+            $MAKE DESTDIR=$PREFIX_HOSTPREP install &&
            popd || exit 1
+            ;;
 
-            # install in PREFIX_HOSTPREP if we're on the Xen detour
-            if [ "$STAGE1_XEN_ONLY" = "yes" ]; then
-                pushd $builddir &&
-                $MAKE DESTDIR=$PREFIX_HOSTPREP install &&
-                popd || exit 1
-            fi
-
-            # install in PREFIX_TOOLS if needed
+        xen-slurp)
+            # install hostprep's hypervisor in PREFIX_TOOLS if needed
             #
             # NOTE: If we're building a 32bit system, we won't be able to
             #       compile the hypervisor during the final build phase.
             #       Instead of building a new cross-compilation toolchain
-            #       later, we just pre-install the hypervisor on the final
-            #       system here.
+            #       later, we just pre-install the hypervisor we built during
+            #       hostprep onto the final system here.
             #
             # FIXME: Don't forget to make the xen final system build script
             #        slurp up the pre-existing hypervisor into it's package
             #        contents...
             #
-            if [ -z "$BUILD64" ]; then
-                pushd $builddir &&
-                $MAKE DESTDIR=$PREFIX_TOOLS install &&
-               popd || exit 1
-            fi
+            mkdir -p $PREFIX_TOOLS/boot &&
+            cp -va $PREFIX_HOSTPREP/boot/xen* $PREFIX_TOOLS/boot/ || exit 1
            ;;
 
        *)
@@ -1026,13 +1019,12 @@ packages+=" rsync"
 
 
 # If we have STAGE1_XEN_ONLY set, replace the entire pacakges list with just
-# xen.  Otherwise, if we're building for 64bit, but building on 32bit, and
-# want to use Xen for stage2, we need to cross-compile the hypervisor here in
-# addition to the other packages.
+# xen-detour.  Otherwise, if STAGE1_XEN is set, add xen-slurp to the package
+# list.
 if [ "$STAGE1_XEN_ONLY" = "yes" ]; then
-    packages=xen
+    packages=xen-detour
 elif [ "$STAGE1_XEN" = "yes" ]; then
-    packages+=" xen"
+    packages+=" xen-slurp"
 fi