view scripts/mk-component.sh @ 4:7ed24ddc5c2a

scripts/mk-component.sh: adapted from Selenite
author Mychaela Falconia <falcon@freecalypso.org>
date Fri, 15 May 2020 02:06:09 +0000
parents
children
line wrap: on
line source

#!/bin/sh

if [ $# != 1 ]
then
	echo "usage: $0 component-lib" 1>&2
	exit 1
fi

LIBNAME="$1"
recipe_file="components/$1"

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.a" > $BUILD_DIR/$LIBNAME/Makefile
echo >> $BUILD_DIR/$LIBNAME/Makefile

# shell functions to be used in the recipes

asm_file() {
	if [ $# != 1 ]
	then
		echo "Error: asm_file takes 1 argument" 1>&2
		exit 1
	fi
	objname=`basename "$1" .S`.o
	helpers/makeline dep $objname "$1" >> $BUILD_DIR/$LIBNAME/Makefile
	helpers/makeline cmd arm-elf-gcc -c ${ASMFLAGS} ${CPPFLAGS} "$1" \
		>> $BUILD_DIR/$LIBNAME/Makefile
	echo >> $BUILD_DIR/$LIBNAME/Makefile
	OBJS="$OBJS $objname"
}

c_file() {
	if [ $# != 1 ]
	then
		echo "Error: c_file takes 1 argument" 1>&2
		exit 1
	fi
	objname=`basename "$1" .c`.o
	helpers/makeline dep $objname "$1" >> $BUILD_DIR/$LIBNAME/Makefile
	helpers/makeline cmd arm-elf-gcc -c ${CFLAGS_gcc} ${CPPFLAGS} "$1" \
		>> $BUILD_DIR/$LIBNAME/Makefile
	echo >> $BUILD_DIR/$LIBNAME/Makefile
	OBJS="$OBJS $objname"
}

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
	c_file $localcopy
}

# invoke the recipe

COMPILER=gcc
SRC=../../src
OBJS=
MMI=0
. "$recipe_file"

# finish the Makefile

helpers/makeline dep $LIBNAME.a ${OBJS} >> $BUILD_DIR/$LIBNAME/Makefile
echo '	arm-elf-ar rcu $@ $^' >> $BUILD_DIR/$LIBNAME/Makefile
echo '	arm-elf-ranlib $@' >> $BUILD_DIR/$LIBNAME/Makefile
echo >> $BUILD_DIR/$LIBNAME/Makefile
echo 'clean:' >> $BUILD_DIR/$LIBNAME/Makefile
echo '	rm -f *.[oa] *.c' >> $BUILD_DIR/$LIBNAME/Makefile