mirror of
https://github.com/brain-hackers/u-boot-brain
synced 2024-08-27 20:38:52 +09:00
![Loïc Minier](/assets/img/avatar_default.png)
When building with srctree != objtree, the build creates arch/soc/cpu specific symlinks in the source tree. This means that the same source tree can't be used for multiple builds at the same time. Also, these symlinks in the source tree are only cleaned up if one passes the same O= to distclean. When srctree != objtree, mkconfig creates an $objtree/include2 directory in the objtree to host the asm -> arch/$arch/include/asm symlink so that "#include <asm>" can be used. But it also creates another identical symlink in $objtree/include. Then, mkconfig creates two symlinks: $objtree/include/asm/arch -> arch/$arch/include/asm/arch-$cpu (or $soc) $objtree/include/asm/proc -> arch/$arch/include/asm/proc-armv (on arm) but because $objtree/include/asm points at $srctree already, the two symlinks are created under $srctree. To fix this, create a real $objtree/include/asm directory, instead of a symlink. Update cleanup code accordingly. Signed-off-by: Loc Minier <loic.minier@linaro.org>
164 lines
3.5 KiB
Bash
Executable File
164 lines
3.5 KiB
Bash
Executable File
#!/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-2010 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=""
|
|
options=""
|
|
|
|
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 7 ] && exit 1
|
|
|
|
# Strip all options and/or _config suffixes
|
|
CONFIG_NAME="${1%_config}"
|
|
|
|
[ "${BOARD_NAME}" ] || BOARD_NAME="${1%_config}"
|
|
|
|
arch="$2"
|
|
cpu="$3"
|
|
if [ "$4" = "-" ] ; then
|
|
board=${BOARD_NAME}
|
|
else
|
|
board="$4"
|
|
fi
|
|
[ $# -gt 4 ] && [ "$5" != "-" ] && vendor="$5"
|
|
[ $# -gt 5 ] && [ "$6" != "-" ] && soc="$6"
|
|
[ $# -gt 6 ] && [ "$7" != "-" ] && {
|
|
# check if we have a board config name in the options field
|
|
# the options field mave have a board config name and a list
|
|
# of options, both separated by a colon (':'); the options are
|
|
# separated by commas (',').
|
|
#
|
|
# Check for board name
|
|
tmp="${7%:*}"
|
|
if [ "$tmp" ] ; then
|
|
CONFIG_NAME="$tmp"
|
|
fi
|
|
# Check if we only have a colon...
|
|
if [ "${tmp}" != "$7" ] ; then
|
|
options=${7#*:}
|
|
TARGETS="`echo ${options} | sed 's:,: :g'` ${TARGETS}"
|
|
fi
|
|
}
|
|
|
|
if [ "${ARCH}" -a "${ARCH}" != "${arch}" ]; then
|
|
echo "Failed: \$ARCH=${ARCH}, should be '${arch}' for ${BOARD_NAME}" 1>&2
|
|
exit 1
|
|
fi
|
|
|
|
if [ "$options" ] ; then
|
|
echo "Configuring for ${BOARD_NAME} - Board: ${CONFIG_NAME}, Options: ${options}"
|
|
else
|
|
echo "Configuring for ${BOARD_NAME} board..."
|
|
fi
|
|
|
|
#
|
|
# 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
|
|
mkdir -p 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
|
|
i="`echo ${i} | sed '/=/ {s/=/\t/;q } ; { s/$/\t1/ }'`"
|
|
echo "#define CONFIG_${i}" >>config.h ;
|
|
done
|
|
|
|
cat << EOF >> config.h
|
|
#define CONFIG_BOARDDIR board/$BOARDDIR
|
|
#include <config_cmd_defaults.h>
|
|
#include <config_defaults.h>
|
|
#include <configs/${CONFIG_NAME}.h>
|
|
#include <asm/config.h>
|
|
EOF
|
|
|
|
exit 0
|