aboutsummaryrefslogtreecommitdiff
path: root/projects/grub
diff options
context:
space:
mode:
Diffstat (limited to 'projects/grub')
-rwxr-xr-xprojects/grub/grub143
1 files changed, 143 insertions, 0 deletions
diff --git a/projects/grub/grub b/projects/grub/grub
new file mode 100755
index 00000000..5dd3435c
--- /dev/null
+++ b/projects/grub/grub
@@ -0,0 +1,143 @@
+#!/usr/bin/env bash
+
+# Copyright (C) 2016 Paul Kocialkowski <contact@paulk.fr>
+#
+# 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/>.
+
+arguments() {
+ project_arguments_targets "${project}" "$@"
+}
+
+usage() {
+ project_usage_actions "${project}"
+ project_usage_arguments "${project}" "$@"
+}
+
+download() {
+ local repository="${project}"
+
+ project_download_git "${project}" "${repository}" 'https://git.savannah.gnu.org/r/grub.git' "$@"
+}
+
+download_check() {
+ local repository="${project}"
+
+ project_download_check_git "${project}" "${repository}" "$@"
+}
+
+extract() {
+ project_extract "${project}" "$@"
+}
+
+extract_check() {
+ project_extract_check "${project}" "$@"
+}
+
+update() {
+ local repository="${project}"
+
+ project_update_git "${project}" "${repository}" "$@"
+}
+
+update_check() {
+ local repository="${project}"
+
+ project_update_check_git "${project}" "${repository}" "$@"
+}
+
+build() {
+ local repository="${project}"
+
+ project_sources_directory_missing_empty_error "${project}" "${repository}" "$@"
+
+ if git_project_check "${repository}"; then
+ git_project_checkout "${project}" "${repository}" "$@"
+ fi
+
+ local project_path="$(project_path "${project}")"
+ local sources_path="$(project_sources_path "${project}" "${repository}" "$@")"
+ local build_path="$(project_build_path "${project}" "$@")"
+
+ local -a grub_keymaps
+
+ mapfile -t grub_install_modules < "${project_path}/${CONFIGS}/grub-install-modules"
+ mapfile -t grub_load_modules < "${project_path}/${CONFIGS}/grub-load-modules"
+
+ for keymap in "${project_path}/${CONFIGS}/keymap"/*; do
+ if [[ -f "${keymap}" ]]; then
+ grub_keymaps+=("/boot/grub/layouts/${keymap##*/}=${keymap}")
+ fi
+ done
+
+ mkdir -p "${build_path}"
+
+ (
+ cd "${sources_path}"
+
+ # Compile GRUB first
+ ./autogen.sh
+ ./configure --with-platform=coreboot
+ make -j"${TASKS}"
+
+ # Now compile GRUB ELF executable
+ ./grub-mkstandalone \
+ --grub-mkimage=./grub-mkimage \
+ --fonts='' \
+ --themes='' \
+ --locales='' \
+ --modules="${grub_load_modules[*]}" \
+ --install-modules="${grub_install_modules[*]}" \
+ --directory=grub-core \
+ -O i386-coreboot \
+ -o grub.elf \
+ /boot/grub/grub.cfg="${project_path}/${CONFIGS}/grub.cfg" \
+ "${grub_keymaps[@]}"
+
+ # Copy the ELF to its build directory
+ cp grub.elf "${build_path}"
+
+ # Tidy up
+ make clean
+ )
+}
+
+build_check() {
+ project_build_check "${project}" "$@"
+}
+
+install() {
+ project_install "${project}" "$@"
+}
+
+install_check() {
+ project_install_check "${project}" "$@"
+}
+
+release() {
+ local repository="${project}"
+
+ project_release_install_archive "${project}" "${IMAGES}" "$@"
+ project_release_sources_git "${project}" "${repository}" "$@"
+}
+
+release_check() {
+ local repository="${project}"
+
+ project_release_install_archive_check "${project}" "${IMAGES}" "$@"
+ project_release_check_sources_git "${project}" "${repository}" "$@"
+}
+
+clean() {
+ project_clean "${project}" "$@"
+}