# HG changeset patch # User Mychaela Falconia # Date 1602832778 0 # Node ID 08ecd0bd517dfc168c28a4f4da103cd8bd64c039 # Parent 35f7a1dc9f7d6648761b477e90db99ea98f9b04d scripts/mk-component.sh: import from Magnetite diff -r 35f7a1dc9f7d -r 08ecd0bd517d scripts/mk-component.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/scripts/mk-component.sh Fri Oct 16 07:19:38 2020 +0000 @@ -0,0 +1,170 @@ +#!/bin/sh + +if [ $# -lt 1 -o $# -gt 2 ] +then + echo "usage: $0 component-lib [flavor]" 1>&2 + exit 1 +fi + +LIBNAME="$1" + +if [ -n "$2" ] +then + recipe_file="components/$1-$2" +else + recipe_file="components/$1" +fi + +if [ ! -f "$recipe_file" ] +then + echo "Error: $recipe_file not found" 1>&2 + exit 1 +fi + +if [ -z "$BUILD_DIR" ] +then + echo "Error: BUILD_DIR= must be passed via environment" 1>&2 + exit 1 +fi + +set -e + +mkdir -p $BUILD_DIR/$LIBNAME + +# beginning of the Makefile +echo "all: $LIBNAME.lib" > $BUILD_DIR/$LIBNAME/Makefile +echo >> $BUILD_DIR/$LIBNAME/Makefile + +# shell functions to be used in the recipes + +make_version() { + case $# in + 1) + echo "$1_version.c:" >> $BUILD_DIR/$LIBNAME/Makefile + echo " ../../scripts/make-version.sh $1 > $1_version.c" \ + >> $BUILD_DIR/$LIBNAME/Makefile + ;; + 2) + echo "$2_version.c:" >> $BUILD_DIR/$LIBNAME/Makefile + echo " ../../scripts/make-version.sh $1 > $2_version.c" \ + >> $BUILD_DIR/$LIBNAME/Makefile + ;; + *) + echo "Error: make_version takes 1 or 2 arguments" 1>&2 + exit 1 + ;; + esac + echo >> $BUILD_DIR/$LIBNAME/Makefile +} + +asm_file() { + if [ $# != 1 ] + then + echo "Error: asm_file takes 1 argument" 1>&2 + exit 1 + fi + objname=`basename "$1" .s`.obj + helpers/makeline dep $objname "$1" >> $BUILD_DIR/$LIBNAME/Makefile + helpers/makeline cmd ../../toolwrap/asm470 ${ASMFLAGS} "$1" '$@' \ + >> $BUILD_DIR/$LIBNAME/Makefile + echo >> $BUILD_DIR/$LIBNAME/Makefile + OBJS="$OBJS $objname" +} + +cfile_plain() { + if [ $# != 1 ] + then + echo "Error: cfile_plain takes 1 argument" 1>&2 + exit 1 + fi + objname=`basename "$1" .c`.obj + helpers/makeline dep $objname "$1" >> $BUILD_DIR/$LIBNAME/Makefile + case "$objname" in + *[A-Z]*) + helpers/makeline cmd rm -f '$@' \ + >> $BUILD_DIR/$LIBNAME/Makefile + ;; + esac + helpers/makeline cmd ../../toolwrap/cl470 -q -c ${CFLAGS} ${CPPFLAGS} \ + "$1" >> $BUILD_DIR/$LIBNAME/Makefile + case "$objname" in + *[A-Z]*) + objname_lc=`echo $objname | tr A-Z a-z` + helpers/makeline cmd mv $objname_lc $objname \ + >> $BUILD_DIR/$LIBNAME/Makefile + ;; + esac + echo >> $BUILD_DIR/$LIBNAME/Makefile + OBJS="$OBJS $objname" +} + +cfile_str2ind() { + if [ $# != 1 ] + then + echo "Error: cfile_str2ind takes 1 argument" 1>&2 + exit 1 + fi + if [ "$USE_STR2IND" = 1 ] + then + objname=`basename "$1" .c`.obj + pp_name=`echo $1 | sed -e 's/\.c$/.pp/' | tr A-Z a-z` + pp__name=`echo $1 | sed -e 's/\.c$/.pp_/' | tr A-Z a-z` + helpers/makeline dep $objname "$1" \ + >> $BUILD_DIR/$LIBNAME/Makefile + case "$objname" in + *[A-Z]*) + helpers/makeline cmd rm -f '$@' \ + >> $BUILD_DIR/$LIBNAME/Makefile + ;; + esac + helpers/makeline cmd ../../toolwrap/cl470 -q -po -p? -x \ + ${CPPFLAGS} "$1" >> $BUILD_DIR/$LIBNAME/Makefile + helpers/makeline cmd ../../toolwrap/str2ind -a \ + -t ../str2ind.tab -l ../str2ind.log \ + -f "$pp_name" >> $BUILD_DIR/$LIBNAME/Makefile + helpers/makeline cmd ../../toolwrap/cl470 -q -c ${CFLAGS} \ + "$pp__name" >> $BUILD_DIR/$LIBNAME/Makefile + helpers/makeline cmd @rm -f "$pp_name" \ + >> $BUILD_DIR/$LIBNAME/Makefile + helpers/makeline cmd @rm -f "$pp__name" \ + >> $BUILD_DIR/$LIBNAME/Makefile + case "$objname" in + *[A-Z]*) + objname_lc=`echo $objname | tr A-Z a-z` + helpers/makeline cmd mv $objname_lc $objname \ + >> $BUILD_DIR/$LIBNAME/Makefile + ;; + esac + echo >> $BUILD_DIR/$LIBNAME/Makefile + OBJS="$OBJS $objname" + else + cfile_plain "$1" + fi +} + +cfile_symlink() { + if [ $# != 1 ] + then + echo "Error: cfile_symlink takes 1 argument" 1>&2 + exit 1 + fi + localcopy=`basename "$1"` + echo "$localcopy:" >> $BUILD_DIR/$LIBNAME/Makefile + echo " ln -s $1 ." >> $BUILD_DIR/$LIBNAME/Makefile + echo >> $BUILD_DIR/$LIBNAME/Makefile + cfile_plain $localcopy +} + +# invoke the recipe + +SRC=../../src +OBJS= +. "$recipe_file" + +# finish the Makefile + +helpers/makeline dep $LIBNAME.lib ${OBJS} >> $BUILD_DIR/$LIBNAME/Makefile +echo ' ../../toolwrap/ar470 r $@ $^' >> $BUILD_DIR/$LIBNAME/Makefile +echo >> $BUILD_DIR/$LIBNAME/Makefile +echo 'clean:' >> $BUILD_DIR/$LIBNAME/Makefile +echo ' rm -f *.obj *.lib *.c' >> $BUILD_DIR/$LIBNAME/Makefile