summaryrefslogtreecommitdiffstats
path: root/resources/scripts/helpers/build/roms/withseabios_helper
blob: 28cf079d4c233d5332715f88a7b9aa60aa15f895 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#!/bin/bash

#  helper script: create ROM images for a given system, with SeaBIOS
#
#	Copyright (C) 2014, 2015, 2016 Leah Rowe <info@minifree.org>
#	Copyright (C) 2015 Klemens Nanni <contact@autoboot.org>
#
#    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 3 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/>.
#

# This script assumes that the working directory is the root
# of git or release archive

[ "x${DEBUG+set}" = 'xset' ] && set -v
set -u -e
if [ -z ${NPROC+x} ]; then
    cores="$(nproc)"
else
    case ${NPROC} in
        ''|*[!0-9]*)
            printf "value '%s' for NPROC is invalid. non-numeric. Exiting.\n" "${NPROC}"
            exit 1
            ;;
    esac
    cores="${NPROC}"
fi

if (( $# != 1 )); then
	printf "Usage: ./buildrom-withseabios boardname\n"
	printf "Example: ./buildrom-withseabios x60\n"
	printf "You need to specify exactly 1 argument\n"
	exit 1
fi

boardtarget="${1}"

if [ -f "version" ]; then
	# release archive is being used
	version="$(cat version)"
else
	# git repo is being used
	version="$(git describe --tags HEAD)"
fi

printf "SeaBIOS Helper script: build ROM images for '%s'\n" "${boardtarget}"

(
cbrevision="$(cat resources/libreboot/config/seabios/${boardtarget}/cbrevision)"
vbootrevision="$(cat resources/libreboot/config/seabios/${boardtarget}/vbootrevision)"
branchname="seabios_${boardtarget}"

cd "coreboot/${cbrevision}/${cbrevision}/"
git checkout ${branchname}
(
    cd "3rdparty/vboot/"
    git checkout ${branchname}
)

# Make sure to remove these first
rm -f *{elf,cfg}

printf 'libreboot-%s\n' "${version}" > ".coreboot-version" # needed for reproducible builds in coreboot

# Build ROM images with text-mode and corebootfb modes.

for romtype in txtmode vesafb
do
	if [ "${boardtarget}" = "kgpe-d16" ] || [ "${boardtarget}" = "kcma-d8" ]; then
		if [ "${romtype}" = "vesafb" ]; then
			printf "Only text-mode is reported to work on KGPE-D16, KCMA-D8\n"
			printf "TODO: get tpearson to fix it\n"
			continue
		fi
	fi

    if [ "${boardtarget}" = "qemu_i440fx_piix4" ] || [ "${boardtarget}" = "qemu_q35_ich9" ]
    then
    	# assume that the default config enable framebuffer mode, duplicate and patch for text-mode
    	# necessary, otherwise it will ask you to enter the Y/X resolution of the framebuffer at build time
    	cp "../../../resources/libreboot/config/seabios/${boardtarget}/config" "config_vesafb"
    	sed 's/CONFIG_FRAMEBUFFER_KEEP_VESA_MODE=y/# CONFIG_FRAMEBUFFER_KEEP_VESA_MODE is not set/' < "config_vesafb" > "config_txtmode"
    else
    	# assume that the default config enables text-mode, duplicate and patch for framebuffer mode
    	cp "../../../resources/libreboot/config/seabios/${boardtarget}/config" "config_txtmode"
    	sed 's/# CONFIG_FRAMEBUFFER_KEEP_VESA_MODE is not set/CONFIG_FRAMEBUFFER_KEEP_VESA_MODE=y/' < "config_txtmode" > "config_vesafb"
    fi

	# Build coreboot ROM image
	make clean
	cp "../../../seabios/out/bios.bin.vga.elf" "payload.elf"
    mv "config_${romtype}" .config
    make -j${cores}
	rm -f "payload.elf"
	mv "build/coreboot.rom" "${boardtarget}_${romtype}.rom"

    # Now add SeaVGABIOS (SeaBIOS wrapper for coreboot native video init)
    ./util/cbfstool/cbfstool "${boardtarget}_${romtype}.rom" add -f ../../../seabios/out/vgabios.bin -n vgaroms/vgabios.bin -t raw 

	# .config no longer needed
	rm -f ".config"
done

# Clean up and prepare bin/ containing all ROM images

# move ROM images into the newly created directory
rm -Rf "${boardtarget:?}/"
mkdir "${boardtarget}/"
mv "${boardtarget}"*.rom "${boardtarget}/"

# delete old ROM images
rm -Rf "../../../bin/seabios/${boardtarget}/"
# put new ROM images in ../bin/grub/
[ -d "../../../bin/seabios/" ] || mkdir -p "../../../bin/seabios/"
mv "${boardtarget}/" "../../../bin/seabios/"

# version info file no longer needed
rm -f ".coreboot-version"

git checkout master
(
    cd "3rdparty/vboot/"
    git checkout master
)
)

printf "\n\n"