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