Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src Add rumptest command for testing rump linkage.



details:   https://anonhg.NetBSD.org/src/rev/a94c1d0297b1
branches:  trunk
changeset: 749126:a94c1d0297b1
user:      pooka <pooka%NetBSD.org@localhost>
date:      Wed Nov 18 18:05:19 2009 +0000

description:
Add rumptest command for testing rump linkage.

diffstat:

 build.sh |  87 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 85 insertions(+), 2 deletions(-)

diffs (137 lines):

diff -r c0b72084b6d8 -r a94c1d0297b1 build.sh
--- a/build.sh  Wed Nov 18 18:04:26 2009 +0000
+++ b/build.sh  Wed Nov 18 18:05:19 2009 +0000
@@ -1,5 +1,5 @@
 #! /usr/bin/env sh
-#      $NetBSD: build.sh,v 1.218 2009/11/17 20:49:34 apb Exp $
+#      $NetBSD: build.sh,v 1.219 2009/11/18 18:05:19 pooka Exp $
 #
 # Copyright (c) 2001-2009 The NetBSD Foundation, Inc.
 # All rights reserved.
@@ -242,6 +242,7 @@
        do_iso_image=false
        do_iso_image_source=false
        do_params=false
+       do_rump=false
 
        # done_{operation}=true if given operation has been done.
        #
@@ -569,6 +570,7 @@
     kernel=conf         Build kernel with config file \`conf'
     releasekernel=conf  Install kernel built by kernel=conf to RELEASEDIR.
     modules             Build and install kernel modules.
+    rumptest            Do a linktest for rump (for developers).
     sets                Create binary sets in
                         RELEASEDIR/RELEASEMACHINEDIR/binary/sets.
                         DESTDIR should be populated beforehand.
@@ -854,6 +856,10 @@
                            bomb "Must supply a directory with \`install=...'"
                        ;;
 
+               rump|rumptest)
+                       op=${op}
+                       ;;
+
                *)
                        usage "Unknown operation \`${op}'"
                        ;;
@@ -1317,7 +1323,7 @@
        eval cat <<EOF ${makewrapout}
 #! ${HOST_SH}
 # Set proper variables to allow easy "make" building of a NetBSD subtree.
-# Generated from:  \$NetBSD: build.sh,v 1.218 2009/11/17 20:49:34 apb Exp $
+# Generated from:  \$NetBSD: build.sh,v 1.219 2009/11/18 18:05:19 pooka Exp $
 # with these arguments: ${_args}
 #
 
@@ -1488,6 +1494,79 @@
        statusmsg "Successful installworld to ${dir}"
 }
 
+# Run rump build&link tests.
+#
+# To make this feasible for running without having to install includes and
+# libraries into destdir (i.e. quick), we only run ld.  This is possible
+# since the rump kernel is a closed namespace apart from calls to rumpuser.
+# Therefore, if ld complains only about rumpuser symbols, rump kernel
+# linking was successful.
+# 
+# We test that rump links with a number of component configurations.
+# These attempt to mimic what is encountered in the full build.
+# See list below.  The list should probably be either autogenerated
+# or managed elsewhere.  But keep it here until a better idea arises.
+#
+# Above all, note that THIS IS NOT A SUBSTITUTE FOR A FULL BUILD.
+#
+
+RUMP_LIBSETS='
+       -lrump,
+       -lrumpvfs -lrump,
+       -lrumpfs_tmpfs -lrumpvfs -lrump,
+       -lrumpfs_ffs -lrumpfs_msdosfs -lrumpvfs -lrump,
+       -lrumpnet_virtif -lrumpnet_netinet -lrumpnet_net -lrumpnet -lrump,
+       -lrumpnet_sockin -lrumpfs_smbfs -lrumpdev_netsmb
+           -lrumpcrypto -lrumpdev -lrumpnet -lrumpvfs -lrump,
+       -lrumpnet_sockin -lrumpfs_nfs -lrumpnet -lrumpvfs -lrump'
+dorump()
+{
+       local doclean=""
+       local doobjs=""
+
+       # we cannot link libs without building csu, and that leads to lossage
+       [ "${1}" != "rumptest" ] && bomb 'build.sh rump not yet functional. ' \
+           'did you mean "rumptest"?'
+
+       [ "${MKUPDATE}" = "no" ] && doclean="cleandir"
+       [ "${MKOBJDIRS}" = "no" ] || doobjs="obj"
+       ${runcmd} "${makewrapper}" ${parallel} do-distrib-dirs
+
+       targlist="${doclean} ${doobjs} dependall install"
+       setmakeenv NORUMPUSER 1
+       # optimize: for test we build only static libs (3x test speedup)
+       if [ "${1}" = "rumptest" ] ; then
+               setmakeenv NOPIC 1
+               setmakeenv NOPROFILE 1
+       fi
+       for cmd in ${targlist} ; do
+               make_in_dir "${NETBSDSRCDIR}/sys/rump" ${cmd}
+       done
+
+       # if we just wanted to build & install rump, we're done
+       [ "${1}" != "rumptest" ] && return
+
+       tool_ld=`${runcmd} "${makewrapper}" -V '${LD}'`
+       local oIFS="${IFS}"
+       IFS=","
+       for set in ${RUMP_LIBSETS} ; do
+               IFS="${oIFS}"
+               ${runcmd} ${tool_ld} -nostdlib -L${DESTDIR}/usr/lib     \
+                   -static --whole-archive ${set} 2>&1 | awk '
+                       /undefined reference/ &&
+                           !/more undefined references.*follow/{
+                               if (match($NF, "`rumpuser_") == 0)
+                                       fails[NR] = $0
+                               }
+                       END{
+                               for (x in fails)
+                                       print fails[x]
+                               exit x!=0
+                       }'
+               [ $? -ne 0 ] && bomb "Testlink of rump failed: ${set}"
+       done
+       statusmsg "Rump build&link tests successful"
+}
 
 main()
 {
@@ -1568,6 +1647,10 @@
                        installworld "${arg}"
                        ;;
 
+               rump|rumptest)
+                       dorump "${op}"
+                       ;;
+
                *)
                        bomb "Unknown operation \`${op}'"
                        ;;



Home | Main Index | Thread Index | Old Index