From 7bde0c80cac320232f667823a83c82b76da357e7 Mon Sep 17 00:00:00 2001 From: mintsuki Date: Fri, 4 Sep 2020 05:21:58 +0200 Subject: [PATCH] Move to clang, no longer ship prebuilt binary, embed bootloader into the installer and provide a way to install the installer --- .gitignore | 3 ++ Makefile | 41 +++++++++++++++++-------- README.md | 49 +++++++++++++----------------- limine-install.c | 38 ++++++++++------------- limine.bin | Bin 32768 -> 0 bytes src/Makefile | 40 ++++++++++++++----------- src/linker.ld | 2 +- src/main.c | 5 +++- toolchain/.gitignore | 3 -- toolchain/make_toolchain.sh | 58 ------------------------------------ 10 files changed, 93 insertions(+), 146 deletions(-) delete mode 100644 limine.bin delete mode 100644 toolchain/.gitignore delete mode 100755 toolchain/make_toolchain.sh diff --git a/.gitignore b/.gitignore index 59833ad8..2841a406 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,8 @@ /**/*.o +/**/*.a +/**/*.bc /**/*.bin +/**/*.elf /**/*.img /bochsout.txt /bx_enh_dbg.ini diff --git a/Makefile b/Makefile index 0eb741ee..5e102cde 100644 --- a/Makefile +++ b/Makefile @@ -1,17 +1,32 @@ +DESTDIR = +PREFIX = /usr/local + OS := $(shell uname) -CC = cc +CC = clang +OBJCOPY = llvm-objcopy +CFLAGS = -O2 -pipe -Wall -Wextra -.PHONY: all clean echfs-test ext2-test test.img +.PHONY: all install clean echfs-test ext2-test test.img -all: - $(MAKE) -C src all - cp src/limine.bin ./ +all: limine-install + +install: all + install -s limine-install $(DESTDIR)$(PREFIX)/bin/ clean: + rm -f limine-install $(MAKE) -C src clean -limine-install: limine-install.c - $(CC) limine-install.c -o limine-install +src/limine.bin: + $(MAKE) -C src all + +limine-install: src/limine.bin limine-install.c + $(CC) $(CFLAGS) -c limine-install.c -o limine-install.o + # FIXME: GNU objcopy supports `-O default` but for some stupid reason + # llvm-objcopy does not. This needs to be worked around. + # For now hardcode elf64-x86-64. + $(OBJCOPY) -I binary -O elf64-x86-64 src/limine.bin limine.o + $(CC) $(CFLAGS) limine.o limine-install.o -o limine-install test.img: rm -f test.img @@ -26,15 +41,15 @@ else ifeq ($(OS), FreeBSD) sudo mdconfig -d -u md9 endif -echfs-test: limine-install test.img all +echfs-test: limine-install test.img $(MAKE) -C test echfs-utils -m -p0 test.img quick-format 32768 echfs-utils -m -p0 test.img import test/test.elf boot/test.elf echfs-utils -m -p0 test.img import test/limine.cfg limine.cfg - ./limine-install src/limine.bin test.img + ./limine-install test.img qemu-system-x86_64 -hda test.img -debugcon stdio -enable-kvm -ext2-test: limine-install test.img all +ext2-test: limine-install test.img $(MAKE) -C test rm -rf test_image/ mkdir test_image @@ -49,10 +64,10 @@ ext2-test: limine-install test.img all sudo umount test_image/ sudo losetup -d `cat loopback_dev` rm -rf test_image loopback_dev - ./limine-install src/limine.bin test.img + ./limine-install test.img qemu-system-x86_64 -hda test.img -debugcon stdio -fat32-test: limine-install test.img all +fat32-test: limine-install test.img $(MAKE) -C test rm -rf test_image/ mkdir test_image @@ -77,5 +92,5 @@ else ifeq ($(OS), FreeBSD) sudo mdconfig -d -u md9 endif rm -rf test_image loopback_dev - ./limine-install src/limine.bin test.img + ./limine-install test.img qemu-system-x86_64 -hda test.img -debugcon stdio diff --git a/README.md b/README.md index 5a5d93c5..8555dbac 100644 --- a/README.md +++ b/README.md @@ -16,23 +16,35 @@ x86/x86_64 BIOS Bootloader * MBR * GPT -## How to use -This repository contains a prebuilt version of Limine so building it won't be necessary. +## Building -In order to install Limine on a MBR device (which can just be a raw image file), build the -`limine-install` program using `make limine-install`, then run the resulting executable as such: +### Dependencies +To build Limine, it is necessary to have an LLVM/Clang toolchain installed. +More specifically, the following programs need to be present: `clang`, `llvm-objcopy`, +`llvm-link`, `opt`, `ld.lld`. +Furthermore, `nasm` also needs to be installed. +`curl`, `tar`, and `zstd` need to be installed for retrieving `libgcc.a` during build. + +### Compiling +A simple `make` and `make install` will suffice. Use the PREFIX variable with +`make install` to specify where to install `limine-install`. It defaults to +`/usr/local`. + +## How to use +In order to install Limine on a MBR device (which can just be a raw image file), +run the `limine-install` as such: ```bash -./limine-install ./limine.bin +limine-install ``` If using a GPT formatted device, it will be necessary to create an extra partition (of at least 32K in size) to store stage 2 code. Then it will be necessary to tell -the install script where this partition is located by specifying the start sector. +`limine-install` where this partition is located by specifying the start sector. ```bash fdisk # Create bootloader partition using your favourite method -./limine-install ./limine.bin +limine-install ``` Then make sure the device/image contains at least 1 partition formatted in @@ -58,33 +70,12 @@ echfs-utils -m -p0 test.img import path/to/limine.cfg limine.cfg echfs-utils -m -p0 test.img import path/to/kernel.elf kernel.elf echfs-utils -m -p0 test.img import ... -./limine-install $THIS_REPO/limine.bin test.img +limine-install test.img ``` One can get `echfs-utils` by installing https://github.com/qword-os/echfs. -## Building from source -In order to hack Limine, one must build the GCC toolchain from source first. - -To do so, run the `make_toolchain.sh` script from within the `toolchain` directory; -keep in mind that the script takes `MAKEFLAGS` as an argument. - -```bash -cd toolchain -./make_toolchain.sh -j4 -``` - -After that is done, simply run `make` in the root of the repo to generate -`limine.bin`. - -### Building from source with Clang -It is also possible to build Limine with Clang, using the following make command: - -```bash -make CC="clang --target=i386-elf" -``` - ## Discord server We have a Discord server if you need support, info, or you just want to hang out: https://discord.gg/QEeZMz4 diff --git a/limine-install.c b/limine-install.c index 6afd3187..b32e895a 100644 --- a/limine-install.c +++ b/limine-install.c @@ -4,53 +4,45 @@ #include #include +extern char _binary_src_limine_bin_start[]; + int main(int argc, char *argv[]) { - if (argc < 3) { - printf("Usage: %s [stage2 start sector]\n", argv[0]); + if (argc < 2) { + printf("Usage: %s [stage2 start sector]\n", argv[0]); return 1; } - FILE *ql2_bin = fopen(argv[1], "rb"); - if (ql2_bin == NULL) { - perror("Error: "); - return 1; - } - - FILE *device = fopen(argv[2], "r+b"); + FILE *device = fopen(argv[1], "r+b"); if (device == NULL) { perror("Error: "); - fclose(ql2_bin); return 1; } uint32_t stage2_sect = 1; - if (argc >= 4) - sscanf(argv[3], "%" SCNu32, &stage2_sect); + if (argc >= 3) + sscanf(argv[2], "%" SCNu32, &stage2_sect); + // Save the original partition table of the device char orig_mbr[64]; fseek(device, 446, SEEK_SET); fread(orig_mbr, 1, 64, device); - char ql2_bootsect[512]; - fseek(ql2_bin, 0, SEEK_SET); - fread(ql2_bootsect, 1, 512, ql2_bin); + // Write the bootsector from the bootloader to the device fseek(device, 0, SEEK_SET); - fwrite(ql2_bootsect, 1, 512, device); + fwrite(&_binary_src_limine_bin_start[0], 1, 512, device); - char *ql2_stage2 = malloc(63 * 512); - fseek(ql2_bin, 512, SEEK_SET); - fread(ql2_stage2, 63, 512, ql2_bin); + // Write the rest of stage 2 to the device fseek(device, stage2_sect * 512, SEEK_SET); - fwrite(ql2_stage2, 63, 512, device); - free(ql2_stage2); + fwrite(&_binary_src_limine_bin_start[512], 63, 512, device); + // Hardcode in the bootsector the location of stage 2 fseek(device, 0x1b0, SEEK_SET); - fwrite(&stage2_sect, 1, 4, device); + fwrite(&stage2_sect, 1, sizeof(uint32_t), device); + // Write back the saved partition table to the device fseek(device, 446, SEEK_SET); fwrite(orig_mbr, 1, 64, device); - fclose(ql2_bin); fclose(device); return 0; diff --git a/limine.bin b/limine.bin deleted file mode 100644 index e5e6b961c92404ceac002c17ce101a6fbe8a8e89..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 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 diff --git a/toolchain/.gitignore b/toolchain/.gitignore deleted file mode 100644 index fd038def..00000000 --- a/toolchain/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -* -!.gitignore -!make_toolchain.sh diff --git a/toolchain/make_toolchain.sh b/toolchain/make_toolchain.sh deleted file mode 100755 index 00eb5230..00000000 --- a/toolchain/make_toolchain.sh +++ /dev/null @@ -1,58 +0,0 @@ -#!/usr/bin/env bash - -set -e -set -x - -PREFIX="$(pwd)" -TARGET=i386-elf -BINUTILSVERSION=2.35 -GCCVERSION=10.2.0 - -if [ -z "$MAKEFLAGS" ]; then - MAKEFLAGS="$1" -fi -export MAKEFLAGS - -export PATH="$PREFIX/bin:$PATH" - -if [ -x "$(command -v gmake)" ]; then - mkdir -p "$PREFIX/bin" - cat <"$PREFIX/bin/make" -#!/usr/bin/env sh -gmake "\$@" -EOF - chmod +x "$PREFIX/bin/make" -fi - -mkdir -p build -cd build - -if [ ! -f binutils-$BINUTILSVERSION.tar.gz ]; then - wget -4 https://ftp.gnu.org/gnu/binutils/binutils-$BINUTILSVERSION.tar.gz # Force IPv4 otherwise wget hangs -fi -if [ ! -f gcc-$GCCVERSION.tar.gz ]; then - wget -4 https://ftp.gnu.org/gnu/gcc/gcc-$GCCVERSION/gcc-$GCCVERSION.tar.gz # Same as above -fi - -tar -xf binutils-$BINUTILSVERSION.tar.gz -tar -xf gcc-$GCCVERSION.tar.gz - -rm -rf build-gcc build-binutils - -mkdir build-binutils -cd build-binutils -../binutils-$BINUTILSVERSION/configure --target=$TARGET --prefix="$PREFIX" --with-sysroot --disable-nls --disable-werror -make -make install -cd .. - -cd gcc-$GCCVERSION -contrib/download_prerequisites -cd .. -mkdir build-gcc -cd build-gcc -../gcc-$GCCVERSION/configure --target=$TARGET --prefix="$PREFIX" --disable-nls --enable-languages=c --without-headers -make all-gcc -make all-target-libgcc -make install-gcc -make install-target-libgcc