#!/usr/bin/env bash # # miniconfig - utility to minimize your coreboot config files # # Copyright 2015 Google Inc. # # 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; version 2 of the License. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # CONFIG=$1 NEWCONFIG=$2 CONF=build/util/kconfig/conf KCONFIG=src/Kconfig DOTCONFIG=.config PREVCONFIG=.config.prev TMPCONFIG=.config.mini recreate_config() { $CONF --olddefconfig $KCONFIG &> /dev/null } if [ "$CONFIG" == "" ]; then printf "usage: util/miniconfig/miniconfig [path to config file] <path to new config file>\n" exit 0 fi if [ ! -r "$CONFIG" ]; then printf "Can't read $CONFIG.\n" exit 1 fi if [ "$CONFIG" == .config ]; then printf "Can't use .config, it's overwritten. Make a backup.\n" exit 1 fi if [ ! -x "$CONF" ]; then printf "conf utility at $CONF not available.\n" exit 1 fi # Start out by creating a default config file for a mainboard VENDOR=$( grep ^CONFIG_VENDOR "$CONFIG" ) BOARD=$( grep ^CONFIG_BOARD "$CONFIG" | grep -v ROMSIZE | grep -v SPECIFIC_OPTIONS ) printf "$VENDOR\n$BOARD\n" > "$TMPCONFIG" cp "$TMPCONFIG" "$DOTCONFIG" recreate_config LINES=$( cat "$CONFIG" | wc -l ) CUR=1 # Now go through each line of the existing, large config file, add it to our # new minimal config file, and see if it makes a difference when running "make # olddefconfig". If it does, keep the line, otherwise discard it. cat "$CONFIG" | while read L; do printf "\rProcessing $CONFIG - $CUR / $LINES (%d%%)" $(( $CUR * 100 / $LINES)) mv "$DOTCONFIG" "$PREVCONFIG" cp "$TMPCONFIG" "$DOTCONFIG" echo "$L" >> "$DOTCONFIG" recreate_config if ! diff -q "$DOTCONFIG" "$PREVCONFIG" > /dev/null; then echo "$L" >> "$TMPCONFIG" fi CUR=$(( $CUR + 1 )) done echo if [ "$NEWCONFIG" != "" ]; then printf "Writing new, minimized config to $NEWCONFIG\n" mv "$TMPCONFIG" "$NEWCONFIG" else printf "Overwriting $CONFIG with new, minimized config.\n" mv "$TMPCONFIG" "$CONFIG" fi