[U-Boot] [RFC PATCH 03/17] Do not apply: tools: add gendefconfigs

Masahiro Yamada yamada.m at jp.panasonic.com
Mon Mar 17 09:52:58 CET 2014


 ========================================
 Do not apply this patch to the main line
 ========================================

 What is this tool?
 ------------------

defconfig files for all target boards will be added in the next commit.

We already have more than 1000 boards.

Writing all defconfig files by hand is not realistic.

Instead, I wrote this ugly scripts to convert boards.cfg into defconfig.

 How to use?
 -----------

Check out this commit as HEAD.

Open tools/print_allconfigs with an editor.

Adjust cross compilers part for your environment.

  # Specify your favoriate cross tools
  CROSS_COMPILE_ARC=arc-linux-
  CROSS_COMPILE_AARCH64=aarch64-linux-gnu-
  CROSS_COMPILE_ARM=arm-unknown-linux-gnueabi-
   [snip]
  CROSS_COMPILE_X86=i386-linux-

And then, run "tools/gendefconfigs".

  $ tools/gendefconfigs
  generating configs/vexpress_aemv8a_defconfig
  generating configs/axs101_defconfig
  generating configs/arcangel4_defconfig
  generating configs/arcangel4-be_defconfig
  generating configs/integratorcp_cm1136_defconfig
  generating configs/imx31_phycore_defconfig
  generating configs/qong_defconfig
  generating configs/mx31pdk_defconfig
    ...

Every defconfig files under configs/, spl/configs/, tpl/configs/
will be created/updated depending on boards.cfg.

 Why is this patch here?
 -----------------------

The file boards.cfg is touched very frequently.
All the time, new/old boards are being added/removed.

The next commit was generated based on the u-boot/master at the time
I posted it.
It will become out-dated soon.

You can update defconfig files by yourself with this tool.

And We must re-generate defconfig files from the latest boards.cfg
just before applying this series.

I expect Tom will run this tool to make sure up-to-date defconfigs
to be merged.

Signed-off-by: Masahiro Yamada <yamada.m at jp.panasonic.com>
---

 tools/gendefconfigs    | 271 +++++++++++++++++++++++++++++++++++++++++++++++++
 tools/print_allconfigs |  77 ++++++++++++++
 2 files changed, 348 insertions(+)
 create mode 100755 tools/gendefconfigs
 create mode 100755 tools/print_allconfigs

diff --git a/tools/gendefconfigs b/tools/gendefconfigs
new file mode 100755
index 0000000..757ff92
--- /dev/null
+++ b/tools/gendefconfigs
@@ -0,0 +1,271 @@
+#!/bin/sh
+# Generate configs/*_defconfig from boards.cfg
+# Usage: run "tools/genconfigs at the top directory
+
+set -e
+
+rm -rf configs spl/configs tpl/configs
+mkdir -p configs spl/configs tpl/configs
+
+if [ ! -r boards.cfg ]; then
+	echo >&2 "boards.cfg: not found"
+	echo >&2 "Run \"tools/genconfigs\" at the top directory"
+	echo >&2 "Exit."
+	exit 1
+fi
+
+get_config_arch () {
+	case $1 in
+		arc)        echo ARC;;
+		aarch64)    echo ARM;;
+		arm)        echo ARM;;
+		avr32)      echo AVR32;;
+		blackfin)   echo BLACKFIN;;
+		m68k)       echo M68K;;
+		microblaze) echo MICROBLAZE;;
+		mips)       echo MIPS;;
+		nds32)      echo NDS32;;
+		nios2)      echo NIOS2;;
+		openrisc)   echo OPENRISC;;
+		powerpc)    echo PPC;;
+		sandbox)    echo ;; # sandbox is default so return nothing
+		sh)         echo SH;;
+		sparc)      echo SPARC;;
+		x86)        echo X86;;
+		*)          echo >&2 "Unknow arch $1. Exit."; exit 1;;
+	esac
+}
+
+get_config_cpu () {
+	case $1 in
+		mcf5227x)  echo ;; # MCF5227x is default for M68K
+		mcf523x)   echo MCF523x;;
+		mcf52x2)
+			if echo $all_configs | grep -q "CONFIG_MCF52x2=y"; then
+				echo MCF52x2;
+			elif echo $all_configs | grep -q "CONFIG_MCF520x=y"; then
+				echo MCF520x;
+			else
+				echo >%2 "Unknown cpu $1. Exit." exit 1;
+			fi
+			;;
+		mcf532x)
+			if echo $all_configs | grep -q "CONFIG_MCF532x=y"; then
+				echo MCF532x;
+			elif echo $all_configs | grep -q "CONFIG_MCF5301x=y"; then
+				echo MCF5301x;
+			else
+				echo >%2 "Unknown cpu $1. Exit." exit 1;
+			fi
+			;;
+		mcf5445x)
+			if echo $all_configs | grep -q "CONFIG_MCF5445x=y"; then
+				echo MCF5445x;
+			elif echo $all_configs | grep -q "CONFIG_MCF5441x=y"; then
+				echo MCF5441x;
+			else
+				echo >%2 "Unknown cpu $1. Exit." exit 1;
+			fi
+			;;
+		mcf547x_8x) echo MCF547x_8x;;
+		mips32)    echo ;; # MIPS32 is default for MIPS
+		mips64)    echo MIPS64;;
+		ppc4xx)    echo 4xx;;
+		74xx_7xx)  echo 74xx_7xx;;
+		mpc512x)   echo MPC512X;;
+		mpc5xx)    echo 5xx;;
+		mpc5xxx)   echo MPC5xxx;;
+		mpc824x)   echo MPC824X;;
+		mpc8260)   echo MPC8260;;
+		mpc83xx)   echo MPC83xx;;
+		mpc85xx)   echo MPC85xx;;
+		mpc86xx)   echo MPC86xx;;
+		mpc8xx)    echo ;; # 8xx is default for PPC
+		ppc4xx)    echo 4xx;;
+		sh2)       echo ;; # SH2 is default for SH
+		sh3)       echo SH3;;
+		sh4)       echo SH4;;
+		leon2)     echo ;; # LEN2 is default for Sparc
+		leon3)     echo LEON3;;
+		*) ;;
+	esac
+}
+
+create_main_defconfig () {
+	outfile=configs/${target}_defconfig
+
+	echo "generating $outfile"
+
+	if [ "$spl_enable" = "y" ]; then
+		echo "CONFIG_SPL=y" >> $outfile
+	fi
+
+	if [ "$tpl_enable" = "y" ]; then
+		echo "CONFIG_TPL=y" >> $outfile
+	fi
+
+	ARCH=$(get_config_arch $arch)
+
+	if [ -n "$ARCH" ]; then
+		echo "CONFIG_$ARCH=y" >> $outfile
+	fi
+
+	CPU=$(get_config_cpu $cpu)
+
+	if [ -n "$CPU" ]; then
+		echo "CONFIG_$CPU=y" >> $outfile
+	fi
+
+	if [ "$ARCH" = "ARM" ]; then
+		echo "CONFIG_SYS_CPU=\"$cpu\"" >> $outfile
+	fi
+
+	if [ "$soc" != "-" ]; then
+		echo "CONFIG_SOC_DIR=y" >> $outfile
+		echo "CONFIG_SYS_SOC=\"$soc\"" >> $outfile
+	fi
+
+	if [ "$board" != "<none>" ]; then
+		echo "CONFIG_SYS_BOARD=\"$board\"" >> $outfile
+	fi
+
+	if [ "$vendor" != "-" ]; then
+		echo "CONFIG_VENDOR_DIR=y" >> $outfile
+		echo "CONFIG_SYS_VENDOR=\"$vendor\"" >> $outfile
+	fi
+
+	echo "CONFIG_SYS_CONFIG_NAME=\"$config_name\"" >> $outfile
+
+	if [ -n "$extra_options" ]; then
+		# O2MNT_O2M110, O2MNT_O2M112, O2MNT_O2M113 boards include
+		# double-quotations in the extra option field.
+		# We must escape them.
+		echo "CONFIG_SYS_EXTRA_OPTIONS=\"$(echo "$extra_options" | sed -e 's/"/\\"/g')\"" >> $outfile
+	fi
+
+	if [ "$maintainer" != "-" ]; then
+		echo "CONFIG_BOARD_MAINTAINER=\"$maintainer\"" >> $outfile
+	fi
+
+	if [ "$status" = "Orphan" ]; then
+		echo "CONFIG_ORPHAN_BOARD=y" >> $outfile
+	fi
+}
+
+create_spl_tpl_defconfig () {
+	echo "generating $outfile"
+
+	ARCH=$(get_config_arch $arch)
+
+	if [ -n "$ARCH" ]; then
+		echo "CONFIG_$ARCH=y" >> $outfile
+	fi
+
+	CPU=$(get_config_cpu $spl_cpu)
+
+	if [ -n "$CPU" ]; then
+		echo "CONFIG_$CPU=y" >> $outfile
+	fi
+
+	if [ "$ARCH" = "ARM" ]; then
+		echo "CONFIG_SYS_CPU=\"$spl_cpu\"" >> $outfile
+	fi
+
+	if [ "$soc" != "-" ]; then
+		echo "CONFIG_SOC_DIR=y" >> $outfile
+		echo "CONFIG_SYS_SOC=\"$soc\"" >> $outfile
+	fi
+
+	if [ "$board" != "<none>" ]; then
+		echo "CONFIG_SYS_BOARD=\"$board\"" >> $outfile
+	fi
+
+	if [ "$vendor" != "-" ]; then
+		echo "CONFIG_VENDOR_DIR=y" >> $outfile
+		echo "CONFIG_SYS_VENDOR=\"$vendor\"" >> $outfile
+	fi
+
+	echo "CONFIG_SYS_CONFIG_NAME=\"$config_name\"" >> $outfile
+}
+
+create_spl_defconfig () {
+	outfile=spl/configs/${target}_defconfig
+	create_spl_tpl_defconfig
+}
+
+create_tpl_defconfig () {
+	outfile=tpl/configs/${target}_defconfig
+	create_spl_tpl_defconfig
+}
+
+while read line
+do
+	# skip comments
+	if echo $line | grep -q '^#'; then
+		continue
+	fi
+
+	# skip empty lines
+	if [ -z "$line" ]; then
+		continue
+	fi
+
+	set $line
+
+	status=$1
+
+	arch=$2
+	# Tegra SoCs have different "cpu" and "spl_cpu"
+	cpu=${3%:*}
+	spl_cpu=${3#*:}
+
+	soc=$4
+	vendor=$5
+	if [ "$6" = "-" ]; then
+		board=$7
+	else
+		board=$6
+	fi
+	target=$7
+	config_name=$7
+	extra_options=
+	defconfig_file="${target}_defconfig"
+	[ $# -gt 7 ] && [ "$8" != "-" ] && {
+		tmp="${8%:*}"
+		if [ "$tmp" ] ; then
+			config_name="$tmp"
+		fi
+
+		if [ "${tmp}" != "$8" ] ; then
+			extra_options=${8#*:}
+		fi
+	}
+
+	shift; shift; shift; shift; shift; shift; shift; shift;
+	maintainer="$@"
+
+	all_configs=$(tools/print_allconfigs $target)
+
+	if echo $all_configs | grep -q "CONFIG_SPL=y"; then
+		spl_enable=y
+	else
+		spl_enable=
+	fi
+
+	if echo $all_configs | grep -q "CONFIG_TPL=y"; then
+		tpl_enable=y
+	else
+		tpl_enable=
+	fi
+
+	create_main_defconfig
+
+	if [ "$spl_enable" = "y" ]; then
+		create_spl_defconfig
+	fi
+
+	if [ "$tpl_enable" = "y" ]; then
+		create_tpl_defconfig
+	fi
+
+done < boards.cfg
diff --git a/tools/print_allconfigs b/tools/print_allconfigs
new file mode 100755
index 0000000..e00c333
--- /dev/null
+++ b/tools/print_allconfigs
@@ -0,0 +1,77 @@
+#!/bin/sh
+# Print all config macros for specified board
+#
+# Usage: tools/getconfigs <board>
+
+# Specify your favoriate cross tools
+CROSS_COMPILE_ARC=arc-linux-
+CROSS_COMPILE_AARCH64=aarch64-linux-gnu-
+CROSS_COMPILE_ARM=arm-unknown-linux-gnueabi-
+CROSS_COMPILE_AVR32=avr32-linux-
+CROSS_COMPILE_BLACKFIN=bfin-elf-
+CROSS_COMPILE_M68K=m68k-linux-
+CROSS_COMPILE_MICROBLAZE=microblaze-linux-
+CROSS_COMPILE_MIPS=mips-linux-
+CROSS_COMPILE_NDS32=nds32le-linux-
+CROSS_COMPILE_NIOS2=nios2-linux-
+CROSS_COMPILE_OPENRISC=or32-linux-
+CROSS_COMPILE_POWERPC=powerpc-linux-
+CROSS_COMPILE_SH=sh4-gentoo-linux-gnu-
+CROSS_COMPILE_SPARC=sparc-elf-
+CROSS_COMPILE_X86=i386-linux-
+
+if [ ! -r boards.cfg ]; then
+	echo >&2 "boards.cfg: not found"
+	echo >&2 "Run \"tools/print_allconfigs <target_board>\" at the top directory"
+	echo >&2 "Exit."
+	exit 1
+fi
+
+if [ $# != 1 ]; then
+	echo >&2 "Usage: tools/print_allconfigs <target_board>"
+	echo >&2 "Exit."
+	exit 2
+fi
+
+target=$1
+
+
+get_arch() {
+	local target=$1
+
+	awk '$7 == "'$target'" { print $2 }' boards.cfg
+}
+
+arch=$(get_arch $target)
+
+if [ -z "$arch" ]; then
+	echo >&2 "$target: target board not found in boards.cfg"
+	echo >&2 "Exit."
+	exit 3
+fi
+
+ARCH=$(echo $arch | tr '[:lower:]' '[:upper:]')
+
+eval CROSS_COMPILE=\$CROSS_COMPILE_$ARCH
+
+export CROSS_COMPILE
+
+rm -f include/autoconf.mk
+
+make ${target}_config include/autoconf.mk >/dev/null || { \
+	echo >&2 "make failed."
+	echo >&2 "Please check if CROSS_COMPILE_<ARCH> is correctly set."
+	echo >&2 "Exit."
+	exit 4
+}
+
+if [ ! -f include/autoconf.mk ]; then
+	echo >&2 "include/autoconf.mk: not found."
+	echo >&2 "Internal error."
+	echo >&2 "Exit."
+	exit 5
+fi
+
+cat include/autoconf.mk
+
+exit 0
-- 
1.8.3.2



More information about the U-Boot mailing list