|  | #!/bin/bash | 
|  |  | 
|  | # PXE ROM build script | 
|  | # | 
|  | # 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 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. | 
|  | # | 
|  | # You should have received a copy of the GNU General Public License | 
|  | # along with this program; if not, see <http://www.gnu.org/licenses/>. | 
|  | # | 
|  | # Copyright (C) 2011 Red Hat, Inc. | 
|  | #   Authors: Alex Williamson <alex.williamson@redhat.com> | 
|  | # | 
|  | # Usage: Run from root of qemu tree | 
|  | # ./scripts/refresh-pxe-roms.sh | 
|  |  | 
|  | QEMU_DIR=$PWD | 
|  | ROM_DIR="pc-bios" | 
|  | BUILD_DIR="roms/ipxe" | 
|  | LOCAL_CONFIG="src/config/local/general.h" | 
|  |  | 
|  | function cleanup () | 
|  | { | 
|  | if [ -n "$SAVED_CONFIG" ]; then | 
|  | cp "$SAVED_CONFIG" "$BUILD_DIR"/"$LOCAL_CONFIG" | 
|  | rm "$SAVED_CONFIG" | 
|  | fi | 
|  | cd "$QEMU_DIR" | 
|  | } | 
|  |  | 
|  | function make_rom () | 
|  | { | 
|  | cd "$BUILD_DIR"/src | 
|  |  | 
|  | BUILD_LOG=$(mktemp) | 
|  |  | 
|  | echo Building "$2"... | 
|  | make bin/"$1".rom > "$BUILD_LOG" 2>&1 | 
|  | if [ $? -ne 0 ]; then | 
|  | echo Build failed | 
|  | tail --lines=100 "$BUILD_LOG" | 
|  | rm "$BUILD_LOG" | 
|  | cleanup | 
|  | exit 1 | 
|  | fi | 
|  | rm "$BUILD_LOG" | 
|  |  | 
|  | cp bin/"$1".rom "$QEMU_DIR"/"$ROM_DIR"/"$2" | 
|  |  | 
|  | cd "$QEMU_DIR" | 
|  | } | 
|  |  | 
|  | if [ ! -d "$QEMU_DIR"/"$ROM_DIR" ]; then | 
|  | echo "error: can't find $ROM_DIR directory," \ | 
|  | "run me from the root of the qemu tree" | 
|  | exit 1 | 
|  | fi | 
|  |  | 
|  | if [ ! -d "$BUILD_DIR"/src ]; then | 
|  | echo "error: $BUILD_DIR not populated, try:" | 
|  | echo "  git submodule init $BUILD_DIR" | 
|  | echo "  git submodule update $BUILD_DIR" | 
|  | exit 1 | 
|  | fi | 
|  |  | 
|  | if [ -e "$BUILD_DIR"/"$LOCAL_CONFIG" ]; then | 
|  | SAVED_CONFIG=$(mktemp) | 
|  | cp "$BUILD_DIR"/"$LOCAL_CONFIG" "$SAVED_CONFIG" | 
|  | fi | 
|  |  | 
|  | echo "#undef BANNER_TIMEOUT" > "$BUILD_DIR"/"$LOCAL_CONFIG" | 
|  | echo "#define BANNER_TIMEOUT 0" >> "$BUILD_DIR"/"$LOCAL_CONFIG" | 
|  |  | 
|  | IPXE_VERSION=$(cd "$BUILD_DIR" && git describe --tags) | 
|  | if [ -z "$IPXE_VERSION" ]; then | 
|  | echo "error: unable to retrieve git version" | 
|  | cleanup | 
|  | exit 1 | 
|  | fi | 
|  |  | 
|  | echo "#undef PRODUCT_NAME" >> "$BUILD_DIR"/"$LOCAL_CONFIG" | 
|  | echo "#define PRODUCT_NAME \"iPXE $IPXE_VERSION\"" >> "$BUILD_DIR"/"$LOCAL_CONFIG" | 
|  |  | 
|  | make_rom 8086100e pxe-e1000.rom | 
|  | make_rom 80861209 pxe-eepro100.rom | 
|  | make_rom 10500940 pxe-ne2k_pci.rom | 
|  | make_rom 10222000 pxe-pcnet.rom | 
|  | make_rom 10ec8139 pxe-rtl8139.rom | 
|  | make_rom 1af41000 pxe-virtio.rom | 
|  |  | 
|  | echo done | 
|  | cleanup |