diff options
Diffstat (limited to 'projects/grub')
-rwxr-xr-x | projects/grub/grub | 143 |
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}" "$@" +} |