summaryrefslogtreecommitdiff
path: root/buildrom-withgrub
blob: 1f060381707279e1c1396cac72a61033374b4a08 (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
#!/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/>.
#

set -u -e -v

# 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

# 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 "$1"_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 "$1"_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 "$1"_vesafb.rom "$1"_txtmode.rom
# do
	# Nothing to do here
# done

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

# Add background image and font
./util/cbfstool/cbfstool "$1"_vesafb.rom add -f ../resources/grub/background/background.jpg -n background.jpg -t raw
# ./util/cbfstool/cbfstool "$1"_vesafb.rom add -f ../resources/grub/background/gnulove.jpg -n gnulove.jpg -t raw
./util/cbfstool/cbfstool "$1"_vesafb.rom add -f ../resources/grub/font/dejavusansmono.pf2 -n dejavusansmono.pf2 -t raw

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

# Add memtest86+
./util/cbfstool/cbfstool "$1"_txtmode.rom add -f ../memtest86+-5.01/memtest -n memtest -t raw

# Add GRUB Invaders
./util/cbfstool/cbfstool "$1"_txtmode.rom add -f ../grubinvaders/invaders -n invaders -t raw
./util/cbfstool/cbfstool "$1"_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 "$1"_"$romtype".rom "$1"_"$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
		./util/cbfstool/cbfstool "$1"_"$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)
		./util/cbfstool/cbfstool "$1"_"$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 "$1"_txtmode.rom
rm -rf "$1"_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 "$1"*rom "$1"

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

# go back to main source directory
cd ../