limine-install: More macOS friendliness
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index 1efd9e2f..64eb43ec 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -47,7 +47,7 @@ jobs:
run: make -C limine-install clean
- name: Build limine-install-linux-x86_32
- run: make OBJCOPY_ARCH="elf32-i386" CC="gcc -m32" CFLAGS="-O2 -pipe -static" bin/limine-install
+ run: make CC="gcc -m32" CFLAGS="-O2 -pipe -static" bin/limine-install
- name: Strip limine-install-linux-x86_32
run: strip bin/limine-install
@@ -59,7 +59,7 @@ jobs:
run: make -C limine-install clean
- name: Build limine-install-win32
- run: make CC="i686-w64-mingw32-gcc" OBJCOPY="i686-w64-mingw32-objcopy" CFLAGS="-O2 -pipe" bin/limine-install
+ run: make CC="i686-w64-mingw32-gcc" CFLAGS="-O2 -pipe" bin/limine-install
- name: Strip limine-install-win32
run: i686-w64-mingw32-strip bin/limine-install.exe
diff --git a/.gitignore b/.gitignore
index fabd02f4..33913d4a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,6 +7,7 @@
/**/*.o
/**/*.d
/**/*.a
+/**/*.exe
/**/*.EFI
/**/*.bin
/**/*.bin.gz
diff --git a/limine-install/Makefile b/limine-install/Makefile
index 1e21cada..fa462ca4 100644
--- a/limine-install/Makefile
+++ b/limine-install/Makefile
@@ -4,7 +4,6 @@ OBJCOPY = objcopy
PREFIX = /usr/local
DESTDIR =
-OBJCOPY_ARCH = default
LIMINE_HDD_BIN = limine-hdd.bin
BUILD_DIR = $(shell realpath .)
@@ -26,11 +25,7 @@ install: all
install -m 644 BOOTX64.EFI "$(DESTDIR)$(PREFIX)/share/limine/"
clean:
- rm -f limine-hdd.o limine-install limine-install.exe
+ rm -f limine-install limine-install.exe
-limine-install: limine-install.c limine-hdd.o
- $(CC) $(CFLAGS) -std=c11 $^ -o $@
-
-limine-hdd.o: $(shell echo "$(LIMINE_HDD_BIN)" | sed 's/ /\\ /g')
- cd "`dirname $^`" && \
- $(OBJCOPY) -B i8086 -I binary -O $(OBJCOPY_ARCH) "`basename $^`" "$(BUILD_DIR)/$@"
+limine-install: limine-install.c inc.S $(LIMINE_HDD_BIN)
+ $(CC) $(CFLAGS) -std=c11 -DLIMINE_HDD_BIN='"$(LIMINE_HDD_BIN)"' limine-install.c inc.S -o $@
diff --git a/limine-install/inc.S b/limine-install/inc.S
new file mode 100644
index 00000000..a431be17
--- /dev/null
+++ b/limine-install/inc.S
@@ -0,0 +1,29 @@
+
+#if defined (__APPLE__)
+
+.data
+.global __binary_limine_hdd_bin_start
+__binary_limine_hdd_bin_start:
+ .incbin LIMINE_HDD_BIN
+.global __binary_limine_hdd_bin_end
+__binary_limine_hdd_bin_end:
+
+#elif defined (__MINGW32__)
+
+.section .data
+.global __binary_limine_hdd_bin_start
+__binary_limine_hdd_bin_start:
+ .incbin LIMINE_HDD_BIN
+.global __binary_limine_hdd_bin_end
+__binary_limine_hdd_bin_end:
+
+#elif defined (__linux__) || defined (__unix__)
+
+.section .data
+.global _binary_limine_hdd_bin_start
+_binary_limine_hdd_bin_start:
+ .incbin LIMINE_HDD_BIN
+.global _binary_limine_hdd_bin_end
+_binary_limine_hdd_bin_end:
+
+#endif
diff --git a/limine-install/limine-install.c b/limine-install/limine-install.c
index 022dc7f9..32cf720e 100644
--- a/limine-install/limine-install.c
+++ b/limine-install/limine-install.c
@@ -261,23 +261,13 @@ static bool _device_write(const void *buffer, uint64_t loc, size_t count) {
goto cleanup; \
} while (0)
-#ifdef __MINGW32__
-extern uint8_t binary_limine_hdd_bin_start[], binary_limine_hdd_bin_end[];
-#else
extern uint8_t _binary_limine_hdd_bin_start[], _binary_limine_hdd_bin_end[];
-#endif
int main(int argc, char *argv[]) {
int ok = 1;
-#ifdef __MINGW32__
- uint8_t *bootloader_img = binary_limine_hdd_bin_start;
- size_t bootloader_file_size =
- (size_t)binary_limine_hdd_bin_end - (size_t)binary_limine_hdd_bin_start;
-#else
uint8_t *bootloader_img = _binary_limine_hdd_bin_start;
size_t bootloader_file_size =
(size_t)_binary_limine_hdd_bin_end - (size_t)_binary_limine_hdd_bin_start;
-#endif
uint8_t orig_mbr[70], timestamp[6];
if (sizeof(off_t) != 8) {
@@ -421,7 +411,7 @@ int main(int argc, char *argv[]) {
fprintf(stderr, "GPT partition NOT specified. Attempting GPT embedding.\n");
ssize_t max_partition_entry_used = -1;
- for (ssize_t i = 0; i < gpt_header.number_of_partition_entries; i++) {
+ for (ssize_t i = 0; i < (ssize_t)gpt_header.number_of_partition_entries; i++) {
struct gpt_entry gpt_entry;
device_read(&gpt_entry,
(gpt_header.partition_entry_lba * lb_size)
