summaryrefslogtreecommitdiff
path: root/buildrom-withgrub
blob: 6ff7e2d59e0115bfdbcb24e76edf69f4cf915672 (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
138
139
140
141
142
143
144
145
146
147
148
149
#!/bin/bash

#  buildrom-withgrub script: this generically builds the ROM images.
#  The ROM images built by this script will use the GRUB payload.
#
#	Copyright (C) 2014 Francis Rowe <info@gluglug.org.uk>
#
#    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/>.
#

# DO NOT RUN THIS DIRECTLY!
# Use "build"

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

# Build the ROM images:
# ----------------------------------------------------------------------------------------------------------------------

cd coreboot
rm -rf .config

# cbfstool will be used quite heavily here.
[[ -f cbfstool ]] || mv util/cbfstool/cbfstool .

# prepare libreboot configuration and build it
# it is assumed that these configs use coreboot text-mode
# instead of coreboot framebuffer, by default
cp ../resources/libreboot/config/$1/config .config
# coreboot.rom will appear under ./coreboot/build
make
# move it out (we'll be cleaning the build)
mv build/coreboot.rom libreboot_txtmode.rom
# clean the build
make clean

# Now prepare ROM images that use coreboot vesa framebuffer instead of text mode.
mv .config config_txtmode
# create .config for vesa framebuffer (instead of text mode)
sed 's/# CONFIG_FRAMEBUFFER_KEEP_VESA_MODE is not set/CONFIG_FRAMEBUFFER_KEEP_VESA_MODE=y/' < config_txtmode > .config
# build new ROM
make
mv build/coreboot.rom libreboot_vesafb.rom
# clean coreboot (again)
make clean

# copies no longer needed
rm -rf .config config_txtmode

# Insert files/configurations and perform operations that are common on all images
# ---------------------------------------------------------------------------------------------------------------

for rom in libreboot_vesafb.rom libreboot_txtmode.rom
do
	# Add SeaBIOS and SeaVGABIOS
	./cbfstool $rom add -f ../seabios/out/vgabios.bin -n vgaroms/vgabios.bin -t raw
	./cbfstool $rom add -f ../seabios/out/bios.bin.elf -n bios.bin.elf -t raw
done

# Insert files/configurations and perform operations that are common on libreboot_vesafb.rom (coreboot framebuffer configuration)
# ---------------------------------------------------------------------------------------------------------------

# Add background image and font
./cbfstool libreboot_vesafb.rom add -f ../resources/grub/background/background.jpg -n background.jpg -t raw
# ./cbfstool libreboot_vesafb.rom add -f ../resources/grub/background/gnulove.jpg -n gnulove.jpg -t raw
./cbfstool libreboot_vesafb.rom add -f ../resources/grub/font/dejavusansmono.pf2 -n dejavusansmono.pf2 -t raw

# Insert files/configurations and perform operations that are common on libreboot_txtmode.rom (coreboot text mode)
# ---------------------------------------------------------------------------------------------------------------

# Add memtest86+
./cbfstool libreboot_txtmode.rom add -f ../memtest86+-5.01/memtest -n memtest -t raw

# Add GRUB Invaders
./cbfstool libreboot_txtmode.rom add -f ../grubinvaders/invaders -n invaders -t raw
./cbfstool libreboot_txtmode.rom add -f ../grubinvaders/invaders.exec -n invaders.exec -t raw

# Generate the GRUB configurations and add them to each ROM image as grub.cfg and grubtest.cfg
# ---------------------------------------------------------------------------------------------------------------

for keymap in $(ls ../resources/utilities/grub-assemble/keymap/original)
do
	for romtype in txtmode vesafb
	do
		# copy the images based on the keymap
		cp libreboot_"$romtype".rom libreboot_"$keymap"_"$romtype".rom

		# generate the correct grub config
		touch grub_"$keymap"_"$romtype".cfg
		# generate contents:
		cat ../resources/grub/config/extra/common.cfg >> grub_"$keymap"_"$romtype".cfg
		cat ../resources/grub/config/extra/"$romtype".cfg >> grub_"$keymap"_"$romtype".cfg
		echo "keymap $keymap" >> grub_"$keymap"_"$romtype".cfg
		cat ../resources/grub/config/menuentries/common.cfg >> grub_"$keymap"_"$romtype".cfg
		cat ../resources/grub/config/menuentries/"$romtype".cfg >> grub_"$keymap"_"$romtype".cfg

		# Insert grub config into the image
		./cbfstool libreboot_"$keymap"_"$romtype".rom add -f grub_"$keymap"_"$romtype".cfg -n grub.cfg -t raw

		# grubtest.cfg should be able to switch back to grub.cfg
		sed 's/grubtest.cfg/grub.cfg/' < grub_"$keymap"_"$romtype".cfg > grub_"$keymap"_"$romtype"_test.cfg

		# Insert grub test config into the image (for the user to test modifications to before modifying the main one)
		./cbfstool libreboot_"$keymap"_"$romtype".rom add -f grub_"$keymap"_"$romtype"_test.cfg -n grubtest.cfg -t raw
	done
done

# we don't need the generic rom images anymore
rm -rf libreboot_txtmode.rom
rm -rf libreboot_vesafb.rom

# we don't need the grub configs anymore
rm -rf grub*cfg

# Now we clean up and prepare the bin directory containing all the images
# ----------------------------------------------------------------------------------------------------------------------------

# prepare directory for new ROM images
rm -rf $1
mkdir $1
# move the ROM's into the newly created directory
mv libreboot*rom $1

# delete the old ROM's from ../bin
rm -rf ../bin/$1
# now put the new ROM's in ./bin
mv $1 ../bin

# cbfstool no longer needed here, so put it back
mv cbfstool util/cbfstool/

# go back to main source directory
cd ../