--- /dev/null
+#!/bin/bash
+
+ARCH=i386
+MINIX_MODULES_MAPFILE=${MINIX_ROOT}/minix.mods.map
+MINIX_LLVM_BIN_DIR=${MINIX_LLVM_DIR}/bin
+
+[ -f ${MINIX_LLVM_DIR}/common.inc ] || cp ${MINIX_LLVM_DIR}/common.inc.default ${MINIX_LLVM_DIR}/common.inc
+. ${MINIX_LLVM_DIR}/common.inc
+
+# generate_modules_map()
+#
+# Generates the ${MINIX_MODULES_MAPFILE} file
+
+function generate_modules_map()
+{
+ local TMPFILE="/tmp/.modules.map.tmp"
+ local OUTFILE="${MINIX_MODULES_MAPFILE}"
+ local currdir=`pwd`
+
+ echo "Generating Minix modules map..." 1>&2
+ cd ${MINIX_ROOT}
+ grep -r "^PROG=" . --include=Makefile | sed -e "s/\s*//g" | sed -e "s/PROG=//g" > ${TMPFILE}
+
+ cat ${TMPFILE} | sed -e "s/\.\///g" > ${TMPFILE}.1
+
+ for l in `cat ${TMPFILE}.1`; do echo "`echo $l | cut -d: -f2`=`echo $l | cut -d: -f1`" | sed -e "s/\/Makefile//g"; done > ${TMPFILE}.2
+ GREP_FILTER=$( cat drivers/Makefile | awk "\$1 ~ /endif/ {N=0}; N==1 {print}; \$4 ~ /earm/ {N=1}" | sed "s/^\t//g" | sed "s/SUBDIR[^ ]* *//g" | sed "s/ \\\//g" | xargs | sed "s/ /= -e ^/g")
+ grep -v -e ^${GREP_FILTER}= ${TMPFILE}.2 > ${OUTFILE}
+
+ rm -rf ${TMPFILE} ${TMPFILE}.1 ${TMPFILE}.2
+
+ cd ${currdir}
+}
+
+# get_modules_path
+#
+# Searches through the modules map and gets all the locations
+# pertaining to the module(s) being searched.
+
+function get_modules_path()
+{
+ local MODULE_NAME=$1
+ if [ ! -f "${MINIX_MODULES_MAPFILE}" ]; then
+ generate_modules_map
+ fi
+ if [ $MODULE_NAME == "servers" ] || [ $MODULE_NAME == "drivers" ]; then
+ MODULE_NAME="=${MODULE_NAME}/"
+ else
+ MODULE_NAME="^${MODULE_NAME}="
+ fi
+
+ echo `grep "${MODULE_NAME}" ${MINIX_MODULES_MAPFILE} | cut -d= -f2`
+}
+
+# get_module_name
+#
+# Given a module path, it gives its corresponding module name
+
+function get_module_name()
+{
+ local MODULE_PATH=$1
+ if [ ! -f "${MINIX_MODULES_MAPFILE}" ]; then
+ generate_modules_map
+ fi
+
+ echo `grep "${MODULE_PATH}$" ${MINIX_MODULES_MAPFILE} | cut -d= -f1`
+}
+
+# clean_module()
+#
+# Cleans up the DESTDIR directory for the specified module
+
+function clean_module()
+{
+ local MODULE_NAME=$1
+ local MODULE_PATH=$2
+ local MODE=$3 # MODE can either be "relink" or "build"
+ local currdir=`pwd`
+
+ # By default, clean only the potentially instrumented files
+ local TARGETS="${MODULE_NAME} *.opt.bcl *.bcl.o"
+
+ if [ "${MODE}" == "relink" ]; then
+ TARGETS="${TARGETS} *.bcl"
+ fi
+
+ if [ -d ${DESTDIR}/${MODULE_PATH} ]; then
+ cd ${DESTDIR}/${MODULE_PATH}
+ rm -rf ${TARGETS} 2> /dev/null || true
+ fi
+
+ cd ${currdir}
+}
+