Skip to content
Snippets Groups Projects
  • Wolfgang Denk's avatar
    a6862bc1
    Makefile/mkconfig: read simple board configurations from boards.cfg · a6862bc1
    Wolfgang Denk authored
    
    Instead of adding explicit build rules for each and every board to the
    top level Makefile (which makes it grow and grow), we now provide a
    simple default rule and extend the "mkconfig" script to read board
    configurations from a plain text file (table), "boards.cfg".
    
    For simple boards it is now sufficient to add a single line of text to
    the "boards.cfg" file, no changes to the top level Makefile are needed
    any more.
    
    To make the table better readable, change the notation for unused
    fields from "NULL" into "-".
    
    Signed-off-by: default avatarWolfgang Denk <wd@denx.de>
    Cc: Peter Tyser <ptyser@xes-inc.com>
    Cc: Mike Frysinger <vapier@gentoo.org>
    a6862bc1
    History
    Makefile/mkconfig: read simple board configurations from boards.cfg
    Wolfgang Denk authored
    
    Instead of adding explicit build rules for each and every board to the
    top level Makefile (which makes it grow and grow), we now provide a
    simple default rule and extend the "mkconfig" script to read board
    configurations from a plain text file (table), "boards.cfg".
    
    For simple boards it is now sufficient to add a single line of text to
    the "boards.cfg" file, no changes to the top level Makefile are needed
    any more.
    
    To make the table better readable, change the notation for unused
    fields from "NULL" into "-".
    
    Signed-off-by: default avatarWolfgang Denk <wd@denx.de>
    Cc: Peter Tyser <ptyser@xes-inc.com>
    Cc: Mike Frysinger <vapier@gentoo.org>
mkconfig 2.85 KiB
#!/bin/sh -e

# Script to create header files and links to configure
# U-Boot for a specific board.
#
# Parameters:  Target  Architecture  CPU  Board [VENDOR] [SOC]
#
# (C) 2002-2006 DENX Software Engineering, Wolfgang Denk <wd@denx.de>
#

APPEND=no	# Default: Create new config file
BOARD_NAME=""	# Name to print in make output
TARGETS=""

arch=""
cpu=""
board=""
vendor=""
soc=""

if [ \( $# -eq 2 \) -a \( "$1" = "-A" \) ] ; then
	# Automatic mode
	line=`egrep -i "^[[:space:]]*${2}[[:space:]]" boards.cfg` || {
		echo "make: *** No rule to make target \`$2_config'.  Stop." >&2
		exit 1
	}

	set ${line}
	# add default board name if needed
	[ $# = 3 ] && set ${line} ${1}
fi

while [ $# -gt 0 ] ; do
	case "$1" in
	--) shift ; break ;;
	-a) shift ; APPEND=yes ;;
	-n) shift ; BOARD_NAME="${1%_config}" ; shift ;;
	-t) shift ; TARGETS="`echo $1 | sed 's:_: :g'` ${TARGETS}" ; shift ;;
	*)  break ;;
	esac
done

[ $# -lt 4 ] && exit 1
[ $# -gt 6 ] && exit 1

CONFIG_NAME="${1%_config}"

[ "${BOARD_NAME}" ] || BOARD_NAME="${CONFIG_NAME}"

arch="$2"
cpu="$3"
if [ "$4" = "-" ] ; then
	board=${BOARD_NAME}
else
	board="$4"
fi
[ $# -gt 4 ] && [ "$5" != "-" ] && vendor="$5"
[ $# -gt 5 ] && [ "$6" != "-" ] && soc="$6"

if [ "${ARCH}" -a "${ARCH}" != "${arch}" ]; then
	echo "Failed: \$ARCH=${ARCH}, should be '${arch}' for ${BOARD_NAME}" 1>&2
	exit 1
fi

echo "Configuring for ${BOARD_NAME} board..."

#
# Create link to architecture specific headers
#
if [ "$SRCTREE" != "$OBJTREE" ] ; then
	mkdir -p ${OBJTREE}/include
	mkdir -p ${OBJTREE}/include2
	cd ${OBJTREE}/include2
	rm -f asm
	ln -s ${SRCTREE}/arch/${arch}/include/asm asm
	LNPREFIX=${SRCTREE}/arch/${arch}/include/asm/
	cd ../include
	rm -f asm
	ln -s ${SRCTREE}/arch/${arch}/include/asm asm
else
	cd ./include
	rm -f asm
	ln -s ../arch/${arch}/include/asm asm
fi

rm -f asm/arch

if [ -z "${soc}" ] ; then
	ln -s ${LNPREFIX}arch-${cpu} asm/arch
else
	ln -s ${LNPREFIX}arch-${soc} asm/arch
fi

if [ "${arch}" = "arm" ] ; then
	rm -f asm/proc
	ln -s ${LNPREFIX}proc-armv asm/proc
fi

#
# Create include file for Make
#
echo "ARCH   = ${arch}"  >  config.mk
echo "CPU    = ${cpu}"   >> config.mk
echo "BOARD  = ${board}" >> config.mk

[ "${vendor}" ] && echo "VENDOR = ${vendor}" >> config.mk

[ "${soc}"    ] && echo "SOC    = ${soc}"    >> config.mk

# Assign board directory to BOARDIR variable
if [ -z "${vendor}" ] ; then
    BOARDDIR=${board}
else
    BOARDDIR=${vendor}/${board}
fi

#
# Create board specific header file
#
if [ "$APPEND" = "yes" ]	# Append to existing config file
then
	echo >> config.h
else
	> config.h		# Create new config file
fi
echo "/* Automatically generated - do not edit */" >>config.h

for i in ${TARGETS} ; do
	echo "#define CONFIG_MK_${i} 1" >>config.h ;
done

cat << EOF >> config.h
#define CONFIG_BOARDDIR board/$BOARDDIR
#include <config_defaults.h>
#include <configs/${CONFIG_NAME}.h>
#include <asm/config.h>
EOF

exit 0