3 # Copyright (c) 2016 Jiri Svoboda
6 # Redistribution and use in source and binary forms, with or without
7 # modification, are permitted provided that the following conditions
10 # - Redistributions of source code must retain the above copyright
11 # notice, this list of conditions and the following disclaimer.
12 # - Redistributions in binary form must reproduce the above copyright
13 # notice, this list of conditions and the following disclaimer in the
14 # documentation and/or other materials provided with the distribution.
15 # - The name of the author may not be used to endorse or promote products
16 # derived from this software without specific prior written permission.
18 # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
19 # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
20 # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21 # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
22 # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
23 # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27 # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 # Script to generate/update prebuilt Grub2 in HelenOS source tree
32 # Be sure you know what you are doing!
35 origdir
="$(cd "$
(dirname "$0")" && pwd)"
36 helenosdir
="$origdir/../.."
37 workdir
="$origdir/grub-src"
38 builddir
="$origdir/grub-build"
39 git_repo
="git://git.savannah.gnu.org/grub.git"
40 grub_rev
="bc220962e366b1b46769ed6f9fa5be603ba58ab5"
42 build_ia32amd64_pc
=false
43 build_ia32amd64_efi
=false
52 .
/configure
--prefix="$builddir/$platform" --target="$conf_target" --with-platform="$conf_platform" --disable-werror ||
exit 1
54 make install ||
exit 1
57 function grub_files_update
()
62 echo "$grub_rev" > "$helenosdir"/boot
/grub
/"$gdir"/REVISION ||
exit 1
63 rm -rf "$helenosdir"/boot
/grub
/"$gdir"/"$platform" ||
exit 1
64 cp -R "$builddir"/"$platform"/lib
*/grub
/"$platform" "$helenosdir"/boot
/grub
/"$gdir" ||
exit 1
65 rm -f "$helenosdir"/boot
/grub
/"$gdir"/"$platform"/*.image ||
exit 1
66 rm -f "$helenosdir"/boot
/grub
/"$gdir"/"$platform"/*.module ||
exit 1
67 git add
"$helenosdir"/boot
/grub
/"$gdir"/"$platform" ||
exit 1
72 echo "Script to generate/update prebuild Grub2 in HelenOS source tree"
77 echo "Possible targets are:"
79 echo " ia32+amd64-efi"
81 echo " all build all targets"
87 if [ "$#" -ne "1" ] ; then
93 build_ia32amd64_pc
=true
96 build_ia32amd64_efi
=true
102 build_ia32amd64_pc
=true
103 build_ia32amd64_efi
=true
111 # Prepare a clone of Grub2 repo
112 if [ ! -d "$workdir" ] ; then
113 rm -rf "$workdir" "$builddir" ||
exit 1
114 git clone
"$git_repo" "$workdir" ||
exit 1
117 cd "$workdir" ||
exit 1
119 git
reset --hard "$grub_rev" ||
exit 1
121 .
/autogen.sh ||
exit 1
123 if $build_ia32amd64_pc ; then
124 cd "$workdir" ||
exit 1
125 grub_build i386-pc i386 pc
127 # Extract El Torrito boot image for i386-pc
128 cd "$helenosdir"/boot
/grub
/ia32-pc ||
exit 1
129 rm -f pc.img ||
exit 1
130 "$builddir"/i386-pc
/bin
/grub-mkrescue
-o phony
--xorriso="$origdir/getimage.sh" ||
exit 1
132 grub_files_update ia32-pc i386-pc
135 if $build_ia32amd64_efi ; then
136 cd "$workdir" ||
exit 1
138 # Build each platform to a different directory
139 grub_build i386-efi i386 efi
140 grub_build x86_64-efi x86_64 efi
142 # Extract El Torrito boot image for i386-efi
143 cd "$helenosdir"/boot
/grub
/ia32-efi ||
exit 1
144 rm -f efi.img.gz ||
exit 1
145 "$builddir"/i386-efi
/bin
/grub-mkrescue
-o phony
--xorriso="$origdir/getimage.sh" ||
exit 1
146 mv efi.img i386-efi.img
148 # Extract El Torrito boot image for x86_64-efi
149 cd "$helenosdir"/boot
/grub
/ia32-efi ||
exit 1
150 rm -f efi.img.gz ||
exit 1
151 "$builddir"/x86_64-efi
/bin
/grub-mkrescue
-o phony
--xorriso="$origdir/getimage.sh" ||
exit 1
153 # Combine El Torrito boot images for x86_64-efi and i386-efi
155 mcopy
-ns -i i386-efi.img
::efi tmp ||
exit 1
156 mcopy
-s -i efi.img tmp
/* :: ||
exit 1
157 gzip efi.img ||
exit 1
159 rm -f i386-efi.img ||
exit 1
161 # Update Grub files for all platforms
162 grub_files_update ia32-efi i386-efi
163 grub_files_update ia32-efi x86_64-efi
166 if $build_arm64_efi ; then
167 cd "$workdir" ||
exit 1
169 # Check that the expected compiler is present on PATH
170 if ! [ -x "$(command -v aarch64-linux-gnu-gcc)" ] ; then
171 echo "Error: aarch64-linux-gnu-gcc is missing" >&2
175 grub_build arm64-efi aarch64-linux-gnu efi
177 # Extract El Torrito boot image for arm64-efi
178 cd "$helenosdir"/boot
/grub
/arm64-efi ||
exit 1
179 rm -f efi.img.gz ||
exit 1
180 "$builddir"/arm64-efi
/bin
/grub-mkrescue
-o phony
--xorriso="$origdir/getimage.sh" ||
exit 1
181 gzip efi.img ||
exit 1
183 grub_files_update arm64-efi arm64-efi
186 echo "GRUB update successful."