misc: incbin -> hgen

This commit is contained in:
mintsuki 2022-01-28 09:35:48 +01:00
parent 8670057e40
commit 3ea53247c2
5 changed files with 52 additions and 24 deletions

2
.gitignore vendored
View File

@ -33,4 +33,4 @@ stage23-uefi32
stage23-uefi64
decompressor-build
stage1.stamp
incbin
hgen

View File

@ -196,19 +196,15 @@ override STAGE1_FILES := $(shell find '$(call SHESCAPE,$(SRCDIR))/stage1' -type
.PHONY: all
all: limine-uefi limine-bios
$(call MKESCAPE,$(BUILDDIR))/incbin-build/incbin: $(call MKESCAPE,$(SRCDIR))/incbin/incbin.c
mkdir -p '$(call SHESCAPE,$(BUILDDIR))/incbin-build'
$(CC) $(CFLAGS) '$(call SHESCAPE,$(SRCDIR))/incbin/incbin.c' -o '$(call SHESCAPE,$(BUILDDIR))/incbin-build/incbin'
$(call MKESCAPE,$(BUILDDIR))/hgen: $(call MKESCAPE,$(SRCDIR))/limine-install/hgen.c
mkdir -p '$(call SHESCAPE,$(BUILDDIR))'
$(CC) $(CFLAGS) -std=c11 '$(call SHESCAPE,$(SRCDIR))/limine-install/hgen.c' -o '$(call SHESCAPE,$(BUILDDIR))/hgen'
.PHONY: limine-hdd.h
limine-hdd.h: $(call MKESCAPE,$(BINDIR))/limine-hdd.h
$(call MKESCAPE,$(BINDIR))/incbin.h: $(call MKESCAPE,$(SRCDIR))/incbin/incbin.h
cp '$(call SHESCAPE,$(SRCDIR))/incbin/incbin.h' '$(call SHESCAPE,$(BINDIR))/incbin.h'
$(call MKESCAPE,$(BINDIR))/limine-hdd.h: $(call MKESCAPE,$(BINDIR))/incbin.h $(call MKESCAPE,$(BUILDDIR))/incbin-build/incbin $(call MKESCAPE,$(BINDIR))/limine-hdd.bin
cd '$(call SHESCAPE,$(BINDIR))' && \
'$(call SHESCAPE,$(BUILDDIR))/incbin-build/incbin' -p _binary_ -Ssnake limine-install.c -o limine-hdd.h
$(call MKESCAPE,$(BINDIR))/limine-hdd.h: $(call MKESCAPE,$(BUILDDIR))/hgen $(call MKESCAPE,$(BINDIR))/limine-hdd.bin
cd '$(call SHESCAPE,$(BINDIR))' && '$(call SHESCAPE,$(BUILDDIR))/hgen' >limine-hdd.h
.PHONY: limine-install
limine-install:
@ -219,7 +215,7 @@ limine-install:
.PHONY: clean
clean: limine-bios-clean limine-uefi32-clean limine-uefi64-clean
rm -rf '$(call SHESCAPE,$(BINDIR))' '$(call SHESCAPE,$(BUILDDIR))/stage1.stamp' '$(call SHESCAPE,$(BUILDDIR))/incbin-build'
rm -rf '$(call SHESCAPE,$(BINDIR))' '$(call SHESCAPE,$(BUILDDIR))/stage1.stamp' '$(call SHESCAPE,$(BUILDDIR))/hgen'
.PHONY: install-data
install-data:
@ -308,7 +304,6 @@ dist:
cp '$(call SHESCAPE,$(SRCDIR))'/install-sh '$(call SHESCAPE,$(BUILDDIR))'/"limine-$(LIMINE_VERSION)"/
rm -rf '$(call SHESCAPE,$(BUILDDIR))'/"limine-$(LIMINE_VERSION)/reduced-gnu-efi/.git"
rm -rf '$(call SHESCAPE,$(BUILDDIR))'/"limine-$(LIMINE_VERSION)/stivale/.git"
rm -rf '$(call SHESCAPE,$(BUILDDIR))'/"limine-$(LIMINE_VERSION)/incbin/.git"
rm -rf '$(call SHESCAPE,$(BUILDDIR))'/"limine-$(LIMINE_VERSION)/.git"
rm -rf '$(call SHESCAPE,$(BUILDDIR))'/"limine-$(LIMINE_VERSION)/autom4te.cache"
echo "$(LIMINE_VERSION)" > '$(call SHESCAPE,$(BUILDDIR))'/"limine-$(LIMINE_VERSION)/version"

View File

@ -11,11 +11,6 @@ cd "$srcdir"
[ -d stivale ] || git clone https://github.com/stivale/stivale.git
[ -d reduced-gnu-efi ] || git clone https://github.com/limine-bootloader/reduced-gnu-efi.git
[ -d incbin ] || (
git clone https://github.com/graphitemaster/incbin.git
cd incbin
git checkout 6e576cae5ab5810f25e2631f2e0b80cbe7dc8cbf
)
automake --add-missing --copy || true
autoconf

42
limine-install/hgen.c Normal file
View File

@ -0,0 +1,42 @@
#include <stdio.h>
int main(void) {
int ok = 0;
FILE *limine_hdd = fopen("limine-hdd.bin", "r+b");
if (limine_hdd == NULL) {
goto err;
}
printf("const uint8_t _binary_limine_hdd_bin_data[] = {\n\t");
int c = fgetc(limine_hdd);
for (size_t i = 0; ; i++) {
printf("0x%02x", c);
c = fgetc(limine_hdd);
if (c == EOF) {
break;
}
printf(", ");
if (i % 12 == 11) {
printf("\n\t");
}
}
printf("\n};\n");
goto cleanup;
err:
perror("ERROR");
ok = 1;
cleanup:
if (limine_hdd != NULL) {
fclose(limine_hdd);
}
return ok;
}

View File

@ -7,6 +7,8 @@
#include <inttypes.h>
#include <limits.h>
#include "limine-hdd.h"
static int set_pos(FILE *stream, uint64_t pos) {
if (sizeof(long) >= 8) {
return fseek(stream, (long)pos, SEEK_SET);
@ -271,17 +273,11 @@ static bool _device_write(const void *_buffer, uint64_t loc, size_t count) {
goto cleanup; \
} while (0)
/* dummy incbin call so incbin generates the header
INCBIN(limine_hdd_bin, "limine-hdd.bin");
*/
#include "limine-hdd.h"
int main(int argc, char *argv[]) {
int ok = 1;
int force_mbr = 0;
uint8_t *bootloader_img = (uint8_t *)_binary_limine_hdd_bin_data;
size_t bootloader_file_size = (size_t)_binary_limine_hdd_bin_size;
size_t bootloader_file_size = sizeof(_binary_limine_hdd_bin_data);
uint8_t orig_mbr[70], timestamp[6];
if (argc < 2) {