build: Move to using autoconf
This commit is contained in:
parent
88e7bcc13a
commit
3bb70dcbee
|
@ -15,4 +15,4 @@ jobs:
|
||||||
run: sudo apt-get update && sudo apt-get install git build-essential nasm curl mtools -y
|
run: sudo apt-get update && sudo apt-get install git build-essential nasm curl mtools -y
|
||||||
|
|
||||||
- name: Build the bootloader
|
- name: Build the bootloader
|
||||||
run: make all
|
run: ./autogen.sh && make all
|
||||||
|
|
|
@ -25,17 +25,26 @@ jobs:
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: sudo apt-get update && sudo apt-get install git build-essential nasm gcc-mingw-w64 gcc-multilib curl mtools -y
|
run: sudo apt-get update && sudo apt-get install git build-essential nasm gcc-mingw-w64 gcc-multilib curl mtools -y
|
||||||
|
|
||||||
|
- name: Regenerate
|
||||||
|
run: NOCONFIGURE=yes ./autogen.sh
|
||||||
|
|
||||||
|
- name: Create build dir
|
||||||
|
run: mkdir -p build
|
||||||
|
|
||||||
|
- name: Configure
|
||||||
|
run: cd build && ../configure
|
||||||
|
|
||||||
- name: Build the toolchain
|
- name: Build the toolchain
|
||||||
run: make toolchain
|
run: make -C build toolchain
|
||||||
|
|
||||||
- name: Build the bootloader
|
- name: Build the bootloader
|
||||||
run: make
|
run: make -C build
|
||||||
|
|
||||||
- name: Clean limine-install
|
- name: Clean limine-install
|
||||||
run: make -C limine-install clean
|
run: rm build/bin/limine-install
|
||||||
|
|
||||||
- name: Build limine-install-linux-x86_64
|
- name: Build limine-install-linux-x86_64
|
||||||
run: make CFLAGS="-O2 -pipe -static" limine-install
|
run: make -C build CFLAGS="-O2 -pipe -static" limine-install
|
||||||
|
|
||||||
- name: Strip limine-install-linux-x86_64
|
- name: Strip limine-install-linux-x86_64
|
||||||
run: strip build/bin/limine-install
|
run: strip build/bin/limine-install
|
||||||
|
@ -43,11 +52,8 @@ jobs:
|
||||||
- name: Rename limine-install-linux-x86_64
|
- name: Rename limine-install-linux-x86_64
|
||||||
run: mv build/bin/limine-install build/bin/limine-install-linux-x86_64
|
run: mv build/bin/limine-install build/bin/limine-install-linux-x86_64
|
||||||
|
|
||||||
- name: Clean limine-install
|
|
||||||
run: make -C limine-install clean
|
|
||||||
|
|
||||||
- name: Build limine-install-linux-x86_32
|
- name: Build limine-install-linux-x86_32
|
||||||
run: make CC="gcc -m32" CFLAGS="-O2 -pipe -static" limine-install
|
run: make -C build CC="gcc -m32" CFLAGS="-O2 -pipe -static" limine-install
|
||||||
|
|
||||||
- name: Strip limine-install-linux-x86_32
|
- name: Strip limine-install-linux-x86_32
|
||||||
run: strip build/bin/limine-install
|
run: strip build/bin/limine-install
|
||||||
|
@ -55,11 +61,8 @@ jobs:
|
||||||
- name: Rename limine-install-linux-x86_32
|
- name: Rename limine-install-linux-x86_32
|
||||||
run: mv build/bin/limine-install build/bin/limine-install-linux-x86_32
|
run: mv build/bin/limine-install build/bin/limine-install-linux-x86_32
|
||||||
|
|
||||||
- name: Clean limine-install
|
|
||||||
run: make -C limine-install clean
|
|
||||||
|
|
||||||
- name: Build limine-install-win32
|
- name: Build limine-install-win32
|
||||||
run: make CC="i686-w64-mingw32-gcc" CFLAGS="-O2 -pipe" limine-install
|
run: make -C build CC="i686-w64-mingw32-gcc" CFLAGS="-O2 -pipe" limine-install
|
||||||
|
|
||||||
- name: Strip limine-install-win32
|
- name: Strip limine-install-win32
|
||||||
run: i686-w64-mingw32-strip build/bin/limine-install.exe
|
run: i686-w64-mingw32-strip build/bin/limine-install.exe
|
||||||
|
@ -67,9 +70,6 @@ jobs:
|
||||||
- name: Rename limine-install-win32
|
- name: Rename limine-install-win32
|
||||||
run: mv build/bin/limine-install.exe build/bin/limine-install-win32.exe
|
run: mv build/bin/limine-install.exe build/bin/limine-install-win32.exe
|
||||||
|
|
||||||
- name: Clean limine-install
|
|
||||||
run: make -C limine-install clean
|
|
||||||
|
|
||||||
- name: Copy LICENSE to bin
|
- name: Copy LICENSE to bin
|
||||||
run: cp LICENSE.md build/bin/
|
run: cp LICENSE.md build/bin/
|
||||||
|
|
||||||
|
@ -94,7 +94,7 @@ jobs:
|
||||||
run: git checkout $TAG_NAME && rm -rf * && git checkout .
|
run: git checkout $TAG_NAME && rm -rf * && git checkout .
|
||||||
|
|
||||||
- name: Package release tarball
|
- name: Package release tarball
|
||||||
run: make dist
|
run: ./autogen.sh && make dist
|
||||||
|
|
||||||
- name: Create release notes
|
- name: Create release notes
|
||||||
run: echo "Binary release can be found at https://github.com/limine-bootloader/limine/tree/$TAG_NAME-binary" > rel_notes.txt
|
run: echo "Binary release can be found at https://github.com/limine-bootloader/limine/tree/$TAG_NAME-binary" > rel_notes.txt
|
||||||
|
|
|
@ -21,3 +21,14 @@ bx_enh_dbg.ini
|
||||||
stivale
|
stivale
|
||||||
test_image
|
test_image
|
||||||
!stage23/font.bin
|
!stage23/font.bin
|
||||||
|
configure
|
||||||
|
configure~
|
||||||
|
config.status
|
||||||
|
config.log
|
||||||
|
autom4te.cache
|
||||||
|
GNUmakefile
|
||||||
|
stage23-bios
|
||||||
|
stage23-uefi32
|
||||||
|
stage23-uefi64
|
||||||
|
decompressor-build
|
||||||
|
stage1.stamp
|
||||||
|
|
|
@ -1,9 +1,11 @@
|
||||||
PREFIX ?= /usr/local
|
PREFIX ?= @prefix@
|
||||||
DESTDIR ?=
|
DESTDIR ?=
|
||||||
|
|
||||||
BUILDDIR ?= $(shell pwd)/build
|
BUILDDIR ?= @abs_builddir@
|
||||||
override BINDIR := $(BUILDDIR)/bin
|
override BINDIR := $(BUILDDIR)/bin
|
||||||
|
|
||||||
|
SRCDIR ?= @abs_srcdir@
|
||||||
|
|
||||||
override SPACE := $(subst ,, )
|
override SPACE := $(subst ,, )
|
||||||
override COMMA := ,
|
override COMMA := ,
|
||||||
|
|
||||||
|
@ -11,24 +13,55 @@ MKESCAPE = $(subst $(SPACE),\ ,$(1))
|
||||||
SHESCAPE = $(subst ','\'',$(1))
|
SHESCAPE = $(subst ','\'',$(1))
|
||||||
NASMESCAPE = $(subst ','"'$(COMMA) \"'\"$(COMMA) '"',$(1))
|
NASMESCAPE = $(subst ','"'$(COMMA) \"'\"$(COMMA) '"',$(1))
|
||||||
|
|
||||||
override PATH := $(shell pwd)/toolchain/bin:$(PATH)
|
override PATH := $(BUILDDIR)/toolchain/bin:$(PATH)
|
||||||
export PATH
|
export PATH
|
||||||
|
|
||||||
override NCPUS := $(shell nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null || echo 1)
|
override NCPUS := $(shell nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null || echo 1)
|
||||||
|
|
||||||
override LIMINE_VERSION := $(shell cat version 2>/dev/null || ( git describe --exact-match --tags `git log -n1 --pretty='%h'` 2>/dev/null || git log -n1 --pretty='%h' ) )
|
override LIMINE_VERSION := @limine_version@
|
||||||
export LIMINE_VERSION
|
export LIMINE_VERSION
|
||||||
|
|
||||||
override LIMINE_COPYRIGHT := $(shell grep Copyright LICENSE.md)
|
override LIMINE_COPYRIGHT := $(shell grep Copyright '$(call SHESCAPE,$(SRCDIR))/LICENSE.md')
|
||||||
export LIMINE_COPYRIGHT
|
export LIMINE_COPYRIGHT
|
||||||
|
|
||||||
TOOLCHAIN ?= limine
|
ifeq ($(origin CC), default)
|
||||||
|
CC := @CC@
|
||||||
|
endif
|
||||||
|
|
||||||
TOOLCHAIN_CC ?= $(TOOLCHAIN)-gcc
|
TOOLCHAIN ?= @TOOLCHAIN@
|
||||||
|
TOOLCHAIN_CC ?= @TOOLCHAIN_CC@
|
||||||
|
TOOLCHAIN_LD ?= @TOOLCHAIN_LD@
|
||||||
|
TOOLCHAIN_AR ?= @TOOLCHAIN_AR@
|
||||||
|
TOOLCHAIN_OBJCOPY ?= @TOOLCHAIN_OBJCOPY@
|
||||||
|
TOOLCHAIN_OBJDUMP ?= @TOOLCHAIN_OBJDUMP@
|
||||||
|
TOOLCHAIN_READELF ?= @TOOLCHAIN_READELF@
|
||||||
|
|
||||||
ifeq ($(shell PATH='$(call SHESCAPE,$(PATH))' command -v $(TOOLCHAIN_CC) ; ), )
|
ifeq ($(shell PATH='$(call SHESCAPE,$(PATH))' command -v $(TOOLCHAIN_CC) ; ), )
|
||||||
override TOOLCHAIN_CC := cc
|
override TOOLCHAIN_CC := $(CC)
|
||||||
endif
|
endif
|
||||||
|
ifeq ($(shell PATH='$(call SHESCAPE,$(PATH))' command -v $(TOOLCHAIN_LD) ; ), )
|
||||||
|
override TOOLCHAIN_LD := ld
|
||||||
|
endif
|
||||||
|
ifeq ($(shell PATH='$(call SHESCAPE,$(PATH))' command -v $(TOOLCHAIN_AR) ; ), )
|
||||||
|
override TOOLCHAIN_AR := ar
|
||||||
|
endif
|
||||||
|
ifeq ($(shell PATH='$(call SHESCAPE,$(PATH))' command -v $(TOOLCHAIN_OBJCOPY) ; ), )
|
||||||
|
override TOOLCHAIN_OBJCOPY := objcopy
|
||||||
|
endif
|
||||||
|
ifeq ($(shell PATH='$(call SHESCAPE,$(PATH))' command -v $(TOOLCHAIN_OBJDUMP) ; ), )
|
||||||
|
override TOOLCHAIN_OBJDUMP := objdump
|
||||||
|
endif
|
||||||
|
ifeq ($(shell PATH='$(call SHESCAPE,$(PATH))' command -v $(TOOLCHAIN_READELF) ; ), )
|
||||||
|
override TOOLCHAIN_READELF := readelf
|
||||||
|
endif
|
||||||
|
|
||||||
|
export TOOLCHAIN
|
||||||
|
export TOOLCHAIN_CC
|
||||||
|
export TOOLCHAIN_LD
|
||||||
|
export TOOLCHAIN_AR
|
||||||
|
export TOOLCHAIN_OBJCOPY
|
||||||
|
export TOOLCHAIN_OBJDUMP
|
||||||
|
export TOOLCHAIN_READELF
|
||||||
|
|
||||||
override USING_CLANG := $(shell $(TOOLCHAIN_CC) --version | grep clang >/dev/null && echo 1)
|
override USING_CLANG := $(shell $(TOOLCHAIN_CC) --version | grep clang >/dev/null && echo 1)
|
||||||
export USING_CLANG
|
export USING_CLANG
|
||||||
|
@ -56,7 +89,7 @@ ifeq ($(USING_CLANG), 1)
|
||||||
override TOOLCHAIN_CC := $(ORIG_TOOLCHAIN_CC)
|
override TOOLCHAIN_CC := $(ORIG_TOOLCHAIN_CC)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
override STAGE1_FILES := $(shell find -L ./stage1 -type f -name '*.asm')
|
override STAGE1_FILES := $(shell find -L '$(call SHESCAPE,$(SRCDIR))/stage1' -type f -name '*.asm')
|
||||||
|
|
||||||
.PHONY: all
|
.PHONY: all
|
||||||
all: limine-uefi limine-bios
|
all: limine-uefi limine-bios
|
||||||
|
@ -64,12 +97,12 @@ all: limine-uefi limine-bios
|
||||||
.PHONY: limine-install
|
.PHONY: limine-install
|
||||||
limine-install:
|
limine-install:
|
||||||
mkdir -p '$(call SHESCAPE,$(BINDIR))'
|
mkdir -p '$(call SHESCAPE,$(BINDIR))'
|
||||||
cp limine-install/* limine-install/.gitignore '$(call SHESCAPE,$(BINDIR))/'
|
cp '$(call SHESCAPE,$(SRCDIR))/limine-install/'* '$(call SHESCAPE,$(SRCDIR))/limine-install/.gitignore' '$(call SHESCAPE,$(BINDIR))/'
|
||||||
$(MAKE) -C '$(call SHESCAPE,$(BINDIR))'
|
$(MAKE) -C '$(call SHESCAPE,$(BINDIR))' CC=$(CC)
|
||||||
|
|
||||||
.PHONY: clean
|
.PHONY: clean
|
||||||
clean: limine-bios-clean limine-uefi32-clean limine-uefi64-clean
|
clean: limine-bios-clean limine-uefi32-clean limine-uefi64-clean
|
||||||
rm -rf '$(call SHESCAPE,$(BINDIR))' '$(call SHESCAPE,$(BUILDDIR))/stage1'
|
rm -rf '$(call SHESCAPE,$(BINDIR))' '$(call SHESCAPE,$(BUILDDIR))/stage1.stamp'
|
||||||
|
|
||||||
.PHONY: install
|
.PHONY: install
|
||||||
install:
|
install:
|
||||||
|
@ -84,17 +117,17 @@ install:
|
||||||
install -m 644 '$(call SHESCAPE,$(BINDIR))/BOOTX64.EFI' '$(DESTDIR)$(PREFIX)/share/limine/' || true
|
install -m 644 '$(call SHESCAPE,$(BINDIR))/BOOTX64.EFI' '$(DESTDIR)$(PREFIX)/share/limine/' || true
|
||||||
install -m 644 '$(call SHESCAPE,$(BINDIR))/BOOTIA32.EFI' '$(DESTDIR)$(PREFIX)/share/limine/' || true
|
install -m 644 '$(call SHESCAPE,$(BINDIR))/BOOTIA32.EFI' '$(DESTDIR)$(PREFIX)/share/limine/' || true
|
||||||
|
|
||||||
$(call MKESCAPE,$(BUILDDIR))/stage1: $(STAGE1_FILES) $(call MKESCAPE,$(BUILDDIR))/decompressor/decompressor.bin $(call MKESCAPE,$(BUILDDIR))/stage23-bios/stage2.bin.gz
|
$(call MKESCAPE,$(BUILDDIR))/stage1.stamp: $(STAGE1_FILES) $(call MKESCAPE,$(BUILDDIR))/decompressor-build/decompressor.bin $(call MKESCAPE,$(BUILDDIR))/stage23-bios/stage2.bin.gz
|
||||||
mkdir -p '$(call SHESCAPE,$(BINDIR))'
|
mkdir -p '$(call SHESCAPE,$(BINDIR))'
|
||||||
cd stage1/hdd && nasm bootsect.asm -Werror -fbin -DBUILDDIR="'"'$(call NASMESCAPE,$(BUILDDIR))'"'" -o '$(call SHESCAPE,$(BINDIR))/limine-hdd.bin'
|
cd '$(call SHESCAPE,$(SRCDIR))/stage1/hdd' && nasm bootsect.asm -Werror -fbin -DBUILDDIR="'"'$(call NASMESCAPE,$(BUILDDIR))'"'" -o '$(call SHESCAPE,$(BINDIR))/limine-hdd.bin'
|
||||||
cd stage1/cd && nasm bootsect.asm -Werror -fbin -DBUILDDIR="'"'$(call NASMESCAPE,$(BUILDDIR))'"'" -o '$(call SHESCAPE,$(BINDIR))/limine-cd.bin'
|
cd '$(call SHESCAPE,$(SRCDIR))/stage1/cd' && nasm bootsect.asm -Werror -fbin -DBUILDDIR="'"'$(call NASMESCAPE,$(BUILDDIR))'"'" -o '$(call SHESCAPE,$(BINDIR))/limine-cd.bin'
|
||||||
cd stage1/pxe && nasm bootsect.asm -Werror -fbin -DBUILDDIR="'"'$(call NASMESCAPE,$(BUILDDIR))'"'" -o '$(call SHESCAPE,$(BINDIR))/limine-pxe.bin'
|
cd '$(call SHESCAPE,$(SRCDIR))/stage1/pxe' && nasm bootsect.asm -Werror -fbin -DBUILDDIR="'"'$(call NASMESCAPE,$(BUILDDIR))'"'" -o '$(call SHESCAPE,$(BINDIR))/limine-pxe.bin'
|
||||||
cp '$(call SHESCAPE,$(BUILDDIR))/stage23-bios/limine.sys' '$(call SHESCAPE,$(BINDIR))/'
|
cp '$(call SHESCAPE,$(BUILDDIR))/stage23-bios/limine.sys' '$(call SHESCAPE,$(BINDIR))/'
|
||||||
touch '$(call SHESCAPE,$(BUILDDIR))/stage1'
|
touch '$(call SHESCAPE,$(BUILDDIR))/stage1.stamp'
|
||||||
|
|
||||||
.PHONY: limine-bios
|
.PHONY: limine-bios
|
||||||
limine-bios: stage23-bios decompressor
|
limine-bios: stage23-bios decompressor
|
||||||
$(MAKE) '$(call SHESCAPE,$(BUILDDIR))/stage1'
|
$(MAKE) '$(call SHESCAPE,$(BUILDDIR))/stage1.stamp'
|
||||||
$(MAKE) limine-install
|
$(MAKE) limine-install
|
||||||
|
|
||||||
.PHONY: limine-eltorito-efi
|
.PHONY: limine-eltorito-efi
|
||||||
|
@ -115,13 +148,13 @@ limine-uefi: limine-uefi32 limine-uefi64
|
||||||
$(MAKE) limine-eltorito-efi
|
$(MAKE) limine-eltorito-efi
|
||||||
|
|
||||||
.PHONY: limine-uefi64
|
.PHONY: limine-uefi64
|
||||||
limine-uefi64: reduced-gnu-efi
|
limine-uefi64: $(call MKESCAPE,$(SRCDIR))/reduced-gnu-efi
|
||||||
$(MAKE) stage23-uefi64
|
$(MAKE) stage23-uefi64
|
||||||
mkdir -p '$(call SHESCAPE,$(BINDIR))'
|
mkdir -p '$(call SHESCAPE,$(BINDIR))'
|
||||||
cp '$(call SHESCAPE,$(BUILDDIR))/stage23-uefi64/BOOTX64.EFI' '$(call SHESCAPE,$(BINDIR))/'
|
cp '$(call SHESCAPE,$(BUILDDIR))/stage23-uefi64/BOOTX64.EFI' '$(call SHESCAPE,$(BINDIR))/'
|
||||||
|
|
||||||
.PHONY: limine-uefi32
|
.PHONY: limine-uefi32
|
||||||
limine-uefi32: reduced-gnu-efi
|
limine-uefi32: $(call MKESCAPE,$(SRCDIR))/reduced-gnu-efi
|
||||||
$(MAKE) stage23-uefi32
|
$(MAKE) stage23-uefi32
|
||||||
mkdir -p '$(call SHESCAPE,$(BINDIR))'
|
mkdir -p '$(call SHESCAPE,$(BINDIR))'
|
||||||
cp '$(call SHESCAPE,$(BUILDDIR))/stage23-uefi32/BOOTIA32.EFI' '$(call SHESCAPE,$(BINDIR))/'
|
cp '$(call SHESCAPE,$(BUILDDIR))/stage23-uefi32/BOOTIA32.EFI' '$(call SHESCAPE,$(BINDIR))/'
|
||||||
|
@ -135,68 +168,60 @@ limine-uefi64-clean: stage23-uefi64-clean
|
||||||
.PHONY: limine-uefi32-clean
|
.PHONY: limine-uefi32-clean
|
||||||
limine-uefi32-clean: stage23-uefi32-clean
|
limine-uefi32-clean: stage23-uefi32-clean
|
||||||
|
|
||||||
.PHONY: regenerate
|
|
||||||
regenerate: reduced-gnu-efi stivale
|
|
||||||
|
|
||||||
.PHONY: dist
|
.PHONY: dist
|
||||||
dist:
|
dist:
|
||||||
rm -rf "limine-$(LIMINE_VERSION)"
|
rm -rf '$(call SHESCAPE,$(BUILDDIR))'/"limine-$(LIMINE_VERSION)"
|
||||||
LIST="$$(ls -A)"; mkdir "limine-$(LIMINE_VERSION)" && cp -r $$LIST "limine-$(LIMINE_VERSION)/"
|
mkdir -p '$(call SHESCAPE,$(BUILDDIR))'/"limine-$(LIMINE_VERSION)"
|
||||||
rm -rf "limine-$(LIMINE_VERSION)/"*.tar*
|
cp -r '$(call SHESCAPE,$(SRCDIR))'/.git '$(call SHESCAPE,$(BUILDDIR))'/"limine-$(LIMINE_VERSION)"/
|
||||||
$(MAKE) -C "limine-$(LIMINE_VERSION)" repoclean
|
cd '$(call SHESCAPE,$(BUILDDIR))'/"limine-$(LIMINE_VERSION)" && git checkout .
|
||||||
$(MAKE) -C "limine-$(LIMINE_VERSION)" regenerate
|
cd '$(call SHESCAPE,$(BUILDDIR))'/"limine-$(LIMINE_VERSION)" && NOCONFIGURE=yes && ./autogen.sh
|
||||||
rm -rf "limine-$(LIMINE_VERSION)/reduced-gnu-efi/.git"
|
rm -rf '$(call SHESCAPE,$(BUILDDIR))'/"limine-$(LIMINE_VERSION)/reduced-gnu-efi/.git"
|
||||||
rm -rf "limine-$(LIMINE_VERSION)/stivale/.git"
|
rm -rf '$(call SHESCAPE,$(BUILDDIR))'/"limine-$(LIMINE_VERSION)/stivale/.git"
|
||||||
rm -rf "limine-$(LIMINE_VERSION)/.git"
|
rm -rf '$(call SHESCAPE,$(BUILDDIR))'/"limine-$(LIMINE_VERSION)/.git"
|
||||||
echo "$(LIMINE_VERSION)" > "limine-$(LIMINE_VERSION)/version"
|
rm -rf '$(call SHESCAPE,$(BUILDDIR))'/"limine-$(LIMINE_VERSION)/autom4te.cache"
|
||||||
tar -Jcf "limine-$(LIMINE_VERSION).tar.xz" "limine-$(LIMINE_VERSION)"
|
echo "$(LIMINE_VERSION)" > '$(call SHESCAPE,$(BUILDDIR))'/"limine-$(LIMINE_VERSION)/version"
|
||||||
rm -rf "limine-$(LIMINE_VERSION)"
|
cd '$(call SHESCAPE,$(BUILDDIR))' && tar -Jcf "limine-$(LIMINE_VERSION).tar.xz" "limine-$(LIMINE_VERSION)"
|
||||||
|
rm -rf '$(call SHESCAPE,$(BUILDDIR))'/"limine-$(LIMINE_VERSION)"
|
||||||
|
|
||||||
.PHONY: distclean
|
.PHONY: distclean
|
||||||
distclean: clean test-clean
|
distclean: clean
|
||||||
rm -rf build toolchain ovmf*
|
rm -rf toolchain ovmf* config.log config.status GNUmakefile
|
||||||
|
|
||||||
.PHONY: repoclean
|
.PHONY: maintainer-clean
|
||||||
repoclean: distclean
|
maintainer-clean: distclean
|
||||||
rm -rf stivale reduced-gnu-efi *.tar.xz
|
cd '$(call SHESCAPE,$(SRCDIR))' && rm -rf stivale reduced-gnu-efi configure 'configure~' autom4te.cache *.tar.xz
|
||||||
|
|
||||||
stivale:
|
|
||||||
git clone https://github.com/stivale/stivale.git
|
|
||||||
|
|
||||||
reduced-gnu-efi:
|
|
||||||
git clone https://github.com/limine-bootloader/reduced-gnu-efi.git
|
|
||||||
|
|
||||||
.PHONY: stage23-uefi64
|
.PHONY: stage23-uefi64
|
||||||
stage23-uefi64: stivale
|
stage23-uefi64: $(call MKESCAPE,$(SRCDIR))/stivale
|
||||||
$(MAKE) -C stage23 all TARGET=uefi64 BUILDDIR='$(call SHESCAPE,$(BUILDDIR))/stage23-uefi64'
|
$(MAKE) -C '$(call SHESCAPE,$(SRCDIR))/stage23' all TARGET=uefi64 BUILDDIR='$(call SHESCAPE,$(BUILDDIR))/stage23-uefi64'
|
||||||
|
|
||||||
.PHONY: stage23-uefi64-clean
|
.PHONY: stage23-uefi64-clean
|
||||||
stage23-uefi64-clean:
|
stage23-uefi64-clean:
|
||||||
$(MAKE) -C stage23 clean TARGET=uefi64 BUILDDIR='$(call SHESCAPE,$(BUILDDIR))/stage23-uefi64'
|
$(MAKE) -C '$(call SHESCAPE,$(SRCDIR))/stage23' clean TARGET=uefi64 BUILDDIR='$(call SHESCAPE,$(BUILDDIR))/stage23-uefi64'
|
||||||
|
|
||||||
.PHONY: stage23-uefi32
|
.PHONY: stage23-uefi32
|
||||||
stage23-uefi32: stivale
|
stage23-uefi32: $(call MKESCAPE,$(SRCDIR))/stivale
|
||||||
$(MAKE) -C stage23 all TARGET=uefi32 BUILDDIR='$(call SHESCAPE,$(BUILDDIR))/stage23-uefi32'
|
$(MAKE) -C '$(call SHESCAPE,$(SRCDIR))/stage23' all TARGET=uefi32 BUILDDIR='$(call SHESCAPE,$(BUILDDIR))/stage23-uefi32'
|
||||||
|
|
||||||
.PHONY: stage23-uefi32-clean
|
.PHONY: stage23-uefi32-clean
|
||||||
stage23-uefi32-clean:
|
stage23-uefi32-clean:
|
||||||
$(MAKE) -C stage23 clean TARGET=uefi32 BUILDDIR='$(call SHESCAPE,$(BUILDDIR))/stage23-uefi32'
|
$(MAKE) -C '$(call SHESCAPE,$(SRCDIR))/stage23' clean TARGET=uefi32 BUILDDIR='$(call SHESCAPE,$(BUILDDIR))/stage23-uefi32'
|
||||||
|
|
||||||
.PHONY: stage23-bios
|
.PHONY: stage23-bios
|
||||||
stage23-bios: stivale
|
stage23-bios: $(call MKESCAPE,$(SRCDIR))/stivale
|
||||||
$(MAKE) -C stage23 all TARGET=bios BUILDDIR='$(call SHESCAPE,$(BUILDDIR))/stage23-bios'
|
$(MAKE) -C '$(call SHESCAPE,$(SRCDIR))/stage23' all TARGET=bios BUILDDIR='$(call SHESCAPE,$(BUILDDIR))/stage23-bios'
|
||||||
|
|
||||||
.PHONY: stage23-bios-clean
|
.PHONY: stage23-bios-clean
|
||||||
stage23-bios-clean:
|
stage23-bios-clean:
|
||||||
$(MAKE) -C stage23 clean TARGET=bios BUILDDIR='$(call SHESCAPE,$(BUILDDIR))/stage23-bios'
|
$(MAKE) -C '$(call SHESCAPE,$(SRCDIR))/stage23' clean TARGET=bios BUILDDIR='$(call SHESCAPE,$(BUILDDIR))/stage23-bios'
|
||||||
|
|
||||||
.PHONY: decompressor
|
.PHONY: decompressor
|
||||||
decompressor:
|
decompressor:
|
||||||
$(MAKE) -C decompressor all BUILDDIR='$(call SHESCAPE,$(BUILDDIR))/decompressor'
|
$(MAKE) -C '$(call SHESCAPE,$(SRCDIR))/decompressor' all BUILDDIR='$(call SHESCAPE,$(BUILDDIR))/decompressor-build'
|
||||||
|
|
||||||
.PHONY: decompressor-clean
|
.PHONY: decompressor-clean
|
||||||
decompressor-clean:
|
decompressor-clean:
|
||||||
$(MAKE) -C decompressor clean BUILDDIR='$(call SHESCAPE,$(BUILDDIR))/decompressor'
|
$(MAKE) -C '$(call SHESCAPE,$(SRCDIR))/decompressor' clean BUILDDIR='$(call SHESCAPE,$(BUILDDIR))/decompressor-build'
|
||||||
|
|
||||||
.PHONY: test-clean
|
.PHONY: test-clean
|
||||||
test-clean:
|
test-clean:
|
||||||
|
@ -205,7 +230,7 @@ test-clean:
|
||||||
|
|
||||||
.PHONY: toolchain
|
.PHONY: toolchain
|
||||||
toolchain:
|
toolchain:
|
||||||
MAKE="$(MAKE)" build-aux/make_toolchain.sh "`pwd`/toolchain" -j$(NCPUS)
|
MAKE="$(MAKE)" '$(call SHESCAPE,$(SRCDIR))'/build-aux/make_toolchain.sh '$(call SHESCAPE,$(BUILDDIR))'/toolchain -j$(NCPUS)
|
||||||
|
|
||||||
ovmf-x64:
|
ovmf-x64:
|
||||||
mkdir -p ovmf-x64
|
mkdir -p ovmf-x64
|
61
README.md
61
README.md
|
@ -45,9 +45,9 @@ For example, to clone the latest binary release of the `v2.x` branch one can do
|
||||||
```bash
|
```bash
|
||||||
git clone https://github.com/limine-bootloader/limine.git --branch=v2.0-branch-binary --depth=1
|
git clone https://github.com/limine-bootloader/limine.git --branch=v2.0-branch-binary --depth=1
|
||||||
```
|
```
|
||||||
or, to clone a specific binary point release (for example v2.65)
|
or, to clone a specific binary point release (for example v2.75)
|
||||||
```bash
|
```bash
|
||||||
git clone https://github.com/limine-bootloader/limine.git --branch=v2.65-binary --depth=1
|
git clone https://github.com/limine-bootloader/limine.git --branch=v2.75-binary --depth=1
|
||||||
```
|
```
|
||||||
|
|
||||||
Additionally, the absolute latest Limine binary release can be obtained by
|
Additionally, the absolute latest Limine binary release can be obtained by
|
||||||
|
@ -66,6 +66,18 @@ release.
|
||||||
*These steps are not necessary if cloning a binary release. If so, skip to*
|
*These steps are not necessary if cloning a binary release. If so, skip to*
|
||||||
*"Installing Limine binaries".*
|
*"Installing Limine binaries".*
|
||||||
|
|
||||||
|
### Configure
|
||||||
|
|
||||||
|
If checking out from the repository, run `./autogen.sh`, else, if using a
|
||||||
|
release tarball, run `./configure` directly.
|
||||||
|
|
||||||
|
Both `./autogen.sh` and `./configure` take arguments and environment variables;
|
||||||
|
for more information on these, run `./configure --help`.
|
||||||
|
|
||||||
|
Limine supports both in-tree and out-of-tree builds. Simply run the configure
|
||||||
|
script from the directory you wish to execute the build in. The following `make`
|
||||||
|
commands are supposed to be ran inside the build directory.
|
||||||
|
|
||||||
### Building the toolchain
|
### Building the toolchain
|
||||||
|
|
||||||
This step can take a long time, but it will ensure that the toolchain will work
|
This step can take a long time, but it will ensure that the toolchain will work
|
||||||
|
@ -86,52 +98,27 @@ In order to build Limine, the following packages have to be installed:
|
||||||
`GNU make`, `nasm`, `mtools` (optional, necessary to build
|
`GNU make`, `nasm`, `mtools` (optional, necessary to build
|
||||||
`limine-eltorito-efi.bin`).
|
`limine-eltorito-efi.bin`).
|
||||||
Furthermore, either the toolchain must have been built in the previous
|
Furthermore, either the toolchain must have been built in the previous
|
||||||
paragraph, or `gcc` or `llvm/clang` must also be installed.
|
paragraph, or `gcc` or `llvm/clang` must also be installed, alongside
|
||||||
`GNU binutils` is necessary in order to build the UEFI ports of Limine. A full
|
`GNU binutils`.
|
||||||
LLVM toolchain without `GNU binutils` can be used to build just the BIOS port
|
|
||||||
instead.
|
|
||||||
|
|
||||||
Both the UEFI and BIOS ports of the bootloader can be built, using
|
Then, to build Limine, run:
|
||||||
`GCC/GNU binutils` (which includes the shipped toolchain), with:
|
|
||||||
```bash
|
```bash
|
||||||
make # (or gmake where applicable)
|
make # (or gmake where applicable)
|
||||||
```
|
```
|
||||||
|
|
||||||
It is possible to pass `make` additional flags, most relevantly,
|
The generated bootloader files are going to be in `$BUILDDIR/bin`.
|
||||||
`TOOLCHAIN=`, which allows one to specify an alternative toolchain for the build
|
|
||||||
system to use (the default is `limine`, resulting in program names like `limine-gcc`,
|
|
||||||
falling back to no-prefix, or host, toolchain), and `BUILDDIR=`, which specifies an
|
|
||||||
alternative build directory (for example, out of tree - the default is `./build`).
|
|
||||||
|
|
||||||
The generated bootloader files are going to be in `$BUILDDIR/bin` (by default that
|
|
||||||
is `./build/bin`).
|
|
||||||
|
|
||||||
#### Using clang/LLVM
|
|
||||||
|
|
||||||
In order to build the BIOS port fully using clang/LLVM, run `make` as such:
|
|
||||||
```bash
|
|
||||||
# (or gmake where applicable)
|
|
||||||
make limine-bios CC="clang" TOOLCHAIN="llvm" TOOLCHAIN_CC="clang" TOOLCHAIN_LD="ld.lld"
|
|
||||||
```
|
|
||||||
|
|
||||||
And in order to build the UEFI port using clang/LLVM + `GNU binutils`, run
|
|
||||||
`make` as such:
|
|
||||||
```bash
|
|
||||||
# (or gmake where applicable)
|
|
||||||
make limine-uefi TOOLCHAIN="llvm" TOOLCHAIN_CC="clang" TOOLCHAIN_LD="ld.bfd" TOOLCHAIN_OBJCOPY="objcopy"
|
|
||||||
```
|
|
||||||
|
|
||||||
Where `ld.bfd` and `objcopy` refer to GNU binutils versions of them. Specify their
|
|
||||||
full path if necessary.
|
|
||||||
|
|
||||||
## Installing Limine binaries
|
## Installing Limine binaries
|
||||||
|
|
||||||
This step is optional as the bootloader binaries can be used from the `bin` or
|
This step is optional as the bootloader binaries can be used from the `bin` or
|
||||||
release directory just fine. This step will only install them to a `share` and
|
release directory just fine. This step will only install them to a `share` and
|
||||||
`bin` directories in the specified `PREFIX` (default is `/usr/local`).
|
`bin` directories in the specified prefix (default is `/usr/local`, see
|
||||||
|
`.configure --help`).
|
||||||
|
|
||||||
Use `make install` to install the Limine binaries, optionally specifying a
|
To install Limine, run:
|
||||||
different prefix with `make install PREFIX=/myprefix`.
|
```bash
|
||||||
|
make install
|
||||||
|
```
|
||||||
|
|
||||||
## How to use
|
## How to use
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -ex
|
||||||
|
|
||||||
|
srcdir="$(realpath $(dirname "$0"))"
|
||||||
|
test -z "$srcdir" && srcdir=.
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
autoconf
|
||||||
|
|
||||||
|
if test -z "$NOCONFIGURE"; then
|
||||||
|
exec "$srcdir"/configure "$@"
|
||||||
|
fi
|
|
@ -0,0 +1,36 @@
|
||||||
|
AC_INIT([Limine], m4_esyscmd([./version.sh]), [https://github.com/limine-bootloader/limine/issues], [limine])
|
||||||
|
|
||||||
|
AC_PREREQ(2.69)
|
||||||
|
|
||||||
|
AC_PROG_CC
|
||||||
|
|
||||||
|
AC_SUBST(limine_version, m4_esyscmd([./version.sh]))
|
||||||
|
|
||||||
|
AC_ARG_VAR(CC, [C compiler command [cc]])
|
||||||
|
test -z "$CC" && CC='cc'
|
||||||
|
|
||||||
|
AC_ARG_VAR(TOOLCHAIN, [Alternative toolchain prefix [limine]])
|
||||||
|
test -z "$TOOLCHAIN" && TOOLCHAIN='limine'
|
||||||
|
|
||||||
|
AC_ARG_VAR(TOOLCHAIN_CC, [Toolchain C compiler command [$(TOOLCHAIN)-gcc]])
|
||||||
|
test -z "$TOOLCHAIN_CC" && TOOLCHAIN_CC='$(TOOLCHAIN)-gcc'
|
||||||
|
|
||||||
|
AC_ARG_VAR(TOOLCHAIN_LD, [Toolchain linker command [$(TOOLCHAIN)-ld]])
|
||||||
|
test -z "$TOOLCHAIN_LD" && TOOLCHAIN_LD='$(TOOLCHAIN)-ld'
|
||||||
|
|
||||||
|
AC_ARG_VAR(TOOLCHAIN_AR, [Toolchain archiver command [$(TOOLCHAIN)-ar]])
|
||||||
|
test -z "$TOOLCHAIN_AR" && TOOLCHAIN_AR='$(TOOLCHAIN)-ar'
|
||||||
|
|
||||||
|
AC_ARG_VAR(TOOLCHAIN_OBJCOPY, [Toolchain objcopy command [$(TOOLCHAIN)-objcopy]])
|
||||||
|
test -z "$TOOLCHAIN_OBJCOPY" && TOOLCHAIN_OBJCOPY='$(TOOLCHAIN)-objcopy'
|
||||||
|
|
||||||
|
AC_ARG_VAR(TOOLCHAIN_OBJDUMP, [Toolchain objdump command [$(TOOLCHAIN)-objdump]])
|
||||||
|
test -z "$TOOLCHAIN_OBJDUMP" && TOOLCHAIN_OBJDUMP='$(TOOLCHAIN)-objdump'
|
||||||
|
|
||||||
|
AC_ARG_VAR(TOOLCHAIN_READELF, [Toolchain readelf command [$(TOOLCHAIN)-readelf]])
|
||||||
|
test -z "$TOOLCHAIN_READELF" && TOOLCHAIN_READELF='$(TOOLCHAIN)-readelf'
|
||||||
|
|
||||||
|
AC_PREFIX_DEFAULT(/usr/local)
|
||||||
|
|
||||||
|
AC_CONFIG_FILES(GNUmakefile)
|
||||||
|
AC_OUTPUT
|
|
@ -11,22 +11,6 @@ ifeq ($(call MKESCAPE,$(BUILDDIR)), )
|
||||||
$(error BUILDDIR not specified)
|
$(error BUILDDIR not specified)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
TOOLCHAIN ?= limine
|
|
||||||
|
|
||||||
TOOLCHAIN_CC ?= $(TOOLCHAIN)-gcc
|
|
||||||
TOOLCHAIN_LD ?= $(TOOLCHAIN)-ld
|
|
||||||
TOOLCHAIN_OBJCOPY ?= $(TOOLCHAIN)-objcopy
|
|
||||||
|
|
||||||
ifeq ($(shell command -v $(TOOLCHAIN_CC) ; ), )
|
|
||||||
override TOOLCHAIN_CC := cc
|
|
||||||
endif
|
|
||||||
ifeq ($(shell command -v $(TOOLCHAIN_LD) ; ), )
|
|
||||||
override TOOLCHAIN_LD := ld
|
|
||||||
endif
|
|
||||||
ifeq ($(shell command -v $(TOOLCHAIN_OBJCOPY) ; ), )
|
|
||||||
override TOOLCHAIN_OBJCOPY := objcopy
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(USING_CLANG), 1)
|
ifeq ($(USING_CLANG), 1)
|
||||||
override TOOLCHAIN_CC += --target=i686-elf
|
override TOOLCHAIN_CC += --target=i686-elf
|
||||||
endif
|
endif
|
||||||
|
|
|
@ -95,7 +95,7 @@ pmode:
|
||||||
; Align stage2 to 2K ON DISK
|
; Align stage2 to 2K ON DISK
|
||||||
times 2048-($-$$) db 0
|
times 2048-($-$$) db 0
|
||||||
decompressor:
|
decompressor:
|
||||||
%strcat DECOMPRESSOR_PATH BUILDDIR, '/decompressor/decompressor.bin'
|
%strcat DECOMPRESSOR_PATH BUILDDIR, '/decompressor-build/decompressor.bin'
|
||||||
incbin DECOMPRESSOR_PATH
|
incbin DECOMPRESSOR_PATH
|
||||||
|
|
||||||
align 16
|
align 16
|
||||||
|
|
|
@ -132,7 +132,7 @@ dw 0xaa55
|
||||||
; ********************* Stage 2 *********************
|
; ********************* Stage 2 *********************
|
||||||
|
|
||||||
decompressor:
|
decompressor:
|
||||||
%strcat DECOMPRESSOR_PATH BUILDDIR, '/decompressor/decompressor.bin'
|
%strcat DECOMPRESSOR_PATH BUILDDIR, '/decompressor-build/decompressor.bin'
|
||||||
incbin DECOMPRESSOR_PATH
|
incbin DECOMPRESSOR_PATH
|
||||||
|
|
||||||
align 16
|
align 16
|
||||||
|
|
|
@ -49,7 +49,7 @@ start:
|
||||||
; ********************* Stage 2 *********************
|
; ********************* Stage 2 *********************
|
||||||
|
|
||||||
decompressor:
|
decompressor:
|
||||||
%strcat DECOMPRESSOR_PATH BUILDDIR, '/decompressor/decompressor.bin'
|
%strcat DECOMPRESSOR_PATH BUILDDIR, '/decompressor-build/decompressor.bin'
|
||||||
incbin DECOMPRESSOR_PATH
|
incbin DECOMPRESSOR_PATH
|
||||||
|
|
||||||
align 16
|
align 16
|
||||||
|
|
|
@ -24,34 +24,6 @@ else
|
||||||
$(error Invalid target)
|
$(error Invalid target)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
TOOLCHAIN ?= limine
|
|
||||||
|
|
||||||
TOOLCHAIN_CC ?= $(TOOLCHAIN)-gcc
|
|
||||||
TOOLCHAIN_LD ?= $(TOOLCHAIN)-ld
|
|
||||||
TOOLCHAIN_AR ?= $(TOOLCHAIN)-ar
|
|
||||||
TOOLCHAIN_OBJCOPY ?= $(TOOLCHAIN)-objcopy
|
|
||||||
TOOLCHAIN_OBJDUMP ?= $(TOOLCHAIN)-objdump
|
|
||||||
TOOLCHAIN_READELF ?= $(TOOLCHAIN)-readelf
|
|
||||||
|
|
||||||
ifeq ($(shell command -v $(TOOLCHAIN_CC) ; ), )
|
|
||||||
override TOOLCHAIN_CC := cc
|
|
||||||
endif
|
|
||||||
ifeq ($(shell command -v $(TOOLCHAIN_LD) ; ), )
|
|
||||||
override TOOLCHAIN_LD := ld
|
|
||||||
endif
|
|
||||||
ifeq ($(shell command -v $(TOOLCHAIN_AR) ; ), )
|
|
||||||
override TOOLCHAIN_AR := ar
|
|
||||||
endif
|
|
||||||
ifeq ($(shell command -v $(TOOLCHAIN_OBJCOPY) ; ), )
|
|
||||||
override TOOLCHAIN_OBJCOPY := objcopy
|
|
||||||
endif
|
|
||||||
ifeq ($(shell command -v $(TOOLCHAIN_OBJDUMP) ; ), )
|
|
||||||
override TOOLCHAIN_OBJDUMP := objdump
|
|
||||||
endif
|
|
||||||
ifeq ($(shell command -v $(TOOLCHAIN_READELF) ; ), )
|
|
||||||
override TOOLCHAIN_READELF := readelf
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(USING_CLANG), 1)
|
ifeq ($(USING_CLANG), 1)
|
||||||
ifeq ($(TARGET), bios)
|
ifeq ($(TARGET), bios)
|
||||||
override TOOLCHAIN_CC += --target=i686-elf
|
override TOOLCHAIN_CC += --target=i686-elf
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
cat version 2>/dev/null || ( git describe --exact-match --tags `git log -n1 --pretty='%h'` 2>/dev/null || git log -n1 --pretty='%h' )
|
Loading…
Reference in New Issue