| #!/bin/sh |
| # |
| # Copyright (C) 2017 Imagination Technologies |
| # Author: Paul Burton <paul.burton@mips.com> |
| # |
| # This program is free software; you can redistribute it and/or modify it |
| # under the terms of the GNU General Public License as published by the |
| # Free Software Foundation; either version 2 of the License, or (at your |
| # option) any later version. |
| # |
| # This script merges configuration fragments for boards supported by the |
| # generic MIPS kernel. It checks each for requirements specified using |
| # formatted comments, and then calls merge_config.sh to merge those |
| # fragments which have no unmet requirements. |
| # |
| # An example of requirements in your board config fragment might be: |
| # |
| # # require CONFIG_CPU_MIPS32_R2=y |
| # # require CONFIG_CPU_LITTLE_ENDIAN=y |
| # |
| # This would mean that your board is only included in kernels which are |
| # configured for little endian MIPS32r2 CPUs, and not for example in kernels |
| # configured for 64 bit or big endian systems. |
| # |
| |
| srctree="$1" |
| objtree="$2" |
| ref_cfg="$3" |
| cfg="$4" |
| boards_origin="$5" |
| shift 5 |
| |
| # Only print Skipping... lines if the user explicitly specified BOARDS=. In the |
| # general case it only serves to obscure the useful output about what actually |
| # was included. |
| case ${boards_origin} in |
| "command line") |
| print_skipped=1 |
| ;; |
| environment*) |
| print_skipped=1 |
| ;; |
| *) |
| print_skipped=0 |
| ;; |
| esac |
| |
| for board in $@; do |
| board_cfg="${srctree}/arch/mips/configs/generic/board-${board}.config" |
| if [ ! -f "${board_cfg}" ]; then |
| echo "WARNING: Board config '${board_cfg}' not found" |
| continue |
| fi |
| |
| # For each line beginning with # require, cut out the field following |
| # it & search for that in the reference config file. If the requirement |
| # is not found then the subshell will exit with code 1, and we'll |
| # continue on to the next board. |
| grep -E '^# require ' "${board_cfg}" | \ |
| cut -d' ' -f 3- | \ |
| while read req; do |
| case ${req} in |
| *=y) |
| # If we require something =y then we check that a line |
| # containing it is present in the reference config. |
| grep -Eq "^${req}\$" "${ref_cfg}" && continue |
| ;; |
| *=n) |
| # If we require something =n then we just invert that |
| # check, considering the requirement met if there isn't |
| # a line containing the value =y in the reference |
| # config. |
| grep -Eq "^${req/%=n/=y}\$" "${ref_cfg}" || continue |
| ;; |
| *) |
| echo "WARNING: Unhandled requirement '${req}'" |
| ;; |
| esac |
| |
| [ ${print_skipped} -eq 1 ] && echo "Skipping ${board_cfg}" |
| exit 1 |
| done || continue |
| |
| # Merge this board config fragment into our final config file |
| ${srctree}/scripts/kconfig/merge_config.sh \ |
| -m -O ${objtree} ${cfg} ${board_cfg} \ |
| | grep -Ev '^(#|Using)' |
| done |