|
| 1 | +class X8664ElfGrub < Formula |
| 2 | + desc "GNU GRUB bootloader for x86_64-elf" |
| 3 | + homepage "https://savannah.gnu.org/projects/grub" |
| 4 | + url "https://ftp.gnu.org/gnu/grub/grub-2.06.tar.xz" |
| 5 | + mirror "https://mirrors.ocf.berkeley.edu/gnu/grub/grub-2.06.tar.xz" |
| 6 | + sha256 "b79ea44af91b93d17cd3fe80bdae6ed43770678a9a5ae192ccea803ebb657ee1" |
| 7 | + license "GPL-3.0-or-later" |
| 8 | + |
| 9 | + bottle do |
| 10 | + sha256 arm64_sequoia: "b76374ca36987f1bfef95216c14af606d263e17863df4d7b1a33b3cf65d953a3" |
| 11 | + sha256 arm64_sonoma: "b5687ab4349a959b3bae9afb76103ab55bb5f0902eb199ab4aba00d974fc6c49" |
| 12 | + sha256 arm64_ventura: "406969f44c862754472dac117737965cf4c1ba427eba3ff478f0ce0bbfa75cc7" |
| 13 | + sha256 sonoma: "a9e8fd25bd063a89080bee2e33d88e70fcd0227a2a8fb20e43e270d59062da95" |
| 14 | + sha256 ventura: "e1770bd69fae7db684989eee7416337abb4f301a53a1034ab39efee73547cda9" |
| 15 | + sha256 x86_64_linux: "c578c06b175f785718eafaa9e54c45bd767ba73a041cf1db73a72a6103573375" |
| 16 | + end |
| 17 | + |
| 18 | + depends_on "help2man" => :build |
| 19 | + depends_on "objconv" => :build |
| 20 | + depends_on "pkgconf" => :build |
| 21 | + depends_on "texinfo" => :build |
| 22 | + depends_on "x86_64-elf-binutils" => :build |
| 23 | + depends_on "x86_64-elf-gcc" => [:build, :test] |
| 24 | + depends_on "freetype" |
| 25 | + depends_on "gettext" |
| 26 | + depends_on "mtools" |
| 27 | + depends_on "xorriso" |
| 28 | + depends_on "xz" |
| 29 | + uses_from_macos "bison" => :build |
| 30 | + uses_from_macos "flex" => :build |
| 31 | + uses_from_macos "python" => :build |
| 32 | + |
| 33 | + resource "unifont" do |
| 34 | + url "https://ftp.gnu.org/gnu/unifont/unifont-16.0.02/unifont-16.0.02.pcf.gz", using: :nounzip |
| 35 | + mirror "https://mirrors.ocf.berkeley.edu/gnu/unifont/unifont-16.0.02/unifont-16.0.02.pcf.gz" |
| 36 | + sha256 "02a3fe11994d3cdaf1d4bd5d2b6b609735e6823e01764ae83b704e02ec2f640d" |
| 37 | + end |
| 38 | + |
| 39 | + def install |
| 40 | + target = "x86_64-elf" |
| 41 | + ENV["CFLAGS"] = "-Os -Wno-error=incompatible-pointer-types" |
| 42 | + |
| 43 | + resource("unifont").stage do |
| 44 | + cp "unifont-16.0.02.pcf.gz", buildpath/"unifont.pcf.gz" |
| 45 | + end |
| 46 | + ENV["UNIFONT"] = buildpath/"unifont.pcf.gz" |
| 47 | + |
| 48 | + mkdir "build" do |
| 49 | + args = %W[ |
| 50 | + --disable-werror |
| 51 | + --enable-grub-mkfont |
| 52 | + --target=#{target} |
| 53 | + --prefix=#{prefix}/#{target} |
| 54 | + --bindir=#{bin} |
| 55 | + --libdir=#{lib}/#{target} |
| 56 | + --with-platform=efi |
| 57 | + --program-prefix=#{target}- |
| 58 | + ] |
| 59 | + |
| 60 | + system "../configure", *args |
| 61 | + system "make" |
| 62 | + system "make", "install" |
| 63 | + |
| 64 | + mkdir_p "#{prefix}/#{target}/share/grub" |
| 65 | + |
| 66 | + system "./grub-mkfont", |
| 67 | + "--output=#{prefix}/#{target}/share/grub/unicode.pf2", |
| 68 | + ENV["UNIFONT"].to_s |
| 69 | + end |
| 70 | + end |
| 71 | + |
| 72 | + test do |
| 73 | + target = "x86_64-elf" |
| 74 | + (testpath/"boot.c").write <<~C |
| 75 | + __asm__( |
| 76 | + ".align 4\\n" |
| 77 | + ".long 0x1BADB002\\n" |
| 78 | + ".long 0x0\\n" |
| 79 | + ".long -(0x1BADB002 + 0x0)\\n" |
| 80 | + ); |
| 81 | + C |
| 82 | + system Formula["#{target}-gcc"].bin/"#{target}-gcc", "-c", "-o", "boot", "boot.c" |
| 83 | + assert_match "0", |
| 84 | + shell_output("#{bin}/#{target}-grub-file --is-x86-multiboot boot; echo -n $?") |
| 85 | + end |
| 86 | +end |
0 commit comments