diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 40bc3396..b2659e30 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -15,4 +15,4 @@ jobs: run: sudo apt-get update && sudo apt-get install git build-essential nasm curl mtools -y - name: Build the bootloader - run: make all + run: ./autogen.sh && make all diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 38fa9f4e..43edb7a1 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -25,17 +25,26 @@ jobs: - name: Install dependencies 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 - run: make toolchain + run: make -C build toolchain - name: Build the bootloader - run: make + run: make -C build - name: Clean limine-install - run: make -C limine-install clean + run: rm build/bin/limine-install - 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 run: strip build/bin/limine-install @@ -43,11 +52,8 @@ jobs: - name: Rename 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 - 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 run: strip build/bin/limine-install @@ -55,11 +61,8 @@ jobs: - name: Rename 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 - 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 run: i686-w64-mingw32-strip build/bin/limine-install.exe @@ -67,9 +70,6 @@ jobs: - name: Rename limine-install-win32 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 run: cp LICENSE.md build/bin/ @@ -94,7 +94,7 @@ jobs: run: git checkout $TAG_NAME && rm -rf * && git checkout . - name: Package release tarball - run: make dist + run: ./autogen.sh && make dist - 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 diff --git a/.gitignore b/.gitignore index 1fd49086..87417fd4 100644 --- a/.gitignore +++ b/.gitignore @@ -21,3 +21,14 @@ bx_enh_dbg.ini stivale test_image !stage23/font.bin +configure +configure~ +config.status +config.log +autom4te.cache +GNUmakefile +stage23-bios +stage23-uefi32 +stage23-uefi64 +decompressor-build +stage1.stamp diff --git a/GNUmakefile b/GNUmakefile.in similarity index 73% rename from GNUmakefile rename to GNUmakefile.in index 76648a94..8dec64df 100644 --- a/GNUmakefile +++ b/GNUmakefile.in @@ -1,9 +1,11 @@ -PREFIX ?= /usr/local +PREFIX ?= @prefix@ DESTDIR ?= -BUILDDIR ?= $(shell pwd)/build +BUILDDIR ?= @abs_builddir@ override BINDIR := $(BUILDDIR)/bin +SRCDIR ?= @abs_srcdir@ + override SPACE := $(subst ,, ) override COMMA := , @@ -11,24 +13,55 @@ MKESCAPE = $(subst $(SPACE),\ ,$(1)) SHESCAPE = $(subst ','\'',$(1)) NASMESCAPE = $(subst ','"'$(COMMA) \"'\"$(COMMA) '"',$(1)) -override PATH := $(shell pwd)/toolchain/bin:$(PATH) +override PATH := $(BUILDDIR)/toolchain/bin:$(PATH) export PATH 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 -override LIMINE_COPYRIGHT := $(shell grep Copyright LICENSE.md) +override LIMINE_COPYRIGHT := $(shell grep Copyright '$(call SHESCAPE,$(SRCDIR))/LICENSE.md') 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) ; ), ) -override TOOLCHAIN_CC := cc +override TOOLCHAIN_CC := $(CC) 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) export USING_CLANG @@ -56,7 +89,7 @@ ifeq ($(USING_CLANG), 1) override TOOLCHAIN_CC := $(ORIG_TOOLCHAIN_CC) 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 all: limine-uefi limine-bios @@ -64,12 +97,12 @@ all: limine-uefi limine-bios .PHONY: limine-install limine-install: mkdir -p '$(call SHESCAPE,$(BINDIR))' - cp limine-install/* limine-install/.gitignore '$(call SHESCAPE,$(BINDIR))/' - $(MAKE) -C '$(call SHESCAPE,$(BINDIR))' + cp '$(call SHESCAPE,$(SRCDIR))/limine-install/'* '$(call SHESCAPE,$(SRCDIR))/limine-install/.gitignore' '$(call SHESCAPE,$(BINDIR))/' + $(MAKE) -C '$(call SHESCAPE,$(BINDIR))' CC=$(CC) .PHONY: 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 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))/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))' - cd 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 stage1/pxe && nasm bootsect.asm -Werror -fbin -DBUILDDIR="'"'$(call NASMESCAPE,$(BUILDDIR))'"'" -o '$(call SHESCAPE,$(BINDIR))/limine-pxe.bin' + cd '$(call SHESCAPE,$(SRCDIR))/stage1/hdd' && nasm bootsect.asm -Werror -fbin -DBUILDDIR="'"'$(call NASMESCAPE,$(BUILDDIR))'"'" -o '$(call SHESCAPE,$(BINDIR))/limine-hdd.bin' + cd '$(call SHESCAPE,$(SRCDIR))/stage1/cd' && nasm bootsect.asm -Werror -fbin -DBUILDDIR="'"'$(call NASMESCAPE,$(BUILDDIR))'"'" -o '$(call SHESCAPE,$(BINDIR))/limine-cd.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))/' - touch '$(call SHESCAPE,$(BUILDDIR))/stage1' + touch '$(call SHESCAPE,$(BUILDDIR))/stage1.stamp' .PHONY: limine-bios limine-bios: stage23-bios decompressor - $(MAKE) '$(call SHESCAPE,$(BUILDDIR))/stage1' + $(MAKE) '$(call SHESCAPE,$(BUILDDIR))/stage1.stamp' $(MAKE) limine-install .PHONY: limine-eltorito-efi @@ -115,13 +148,13 @@ limine-uefi: limine-uefi32 limine-uefi64 $(MAKE) limine-eltorito-efi .PHONY: limine-uefi64 -limine-uefi64: reduced-gnu-efi +limine-uefi64: $(call MKESCAPE,$(SRCDIR))/reduced-gnu-efi $(MAKE) stage23-uefi64 mkdir -p '$(call SHESCAPE,$(BINDIR))' cp '$(call SHESCAPE,$(BUILDDIR))/stage23-uefi64/BOOTX64.EFI' '$(call SHESCAPE,$(BINDIR))/' .PHONY: limine-uefi32 -limine-uefi32: reduced-gnu-efi +limine-uefi32: $(call MKESCAPE,$(SRCDIR))/reduced-gnu-efi $(MAKE) stage23-uefi32 mkdir -p '$(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 limine-uefi32-clean: stage23-uefi32-clean -.PHONY: regenerate -regenerate: reduced-gnu-efi stivale - .PHONY: dist dist: - rm -rf "limine-$(LIMINE_VERSION)" - LIST="$$(ls -A)"; mkdir "limine-$(LIMINE_VERSION)" && cp -r $$LIST "limine-$(LIMINE_VERSION)/" - rm -rf "limine-$(LIMINE_VERSION)/"*.tar* - $(MAKE) -C "limine-$(LIMINE_VERSION)" repoclean - $(MAKE) -C "limine-$(LIMINE_VERSION)" regenerate - rm -rf "limine-$(LIMINE_VERSION)/reduced-gnu-efi/.git" - rm -rf "limine-$(LIMINE_VERSION)/stivale/.git" - rm -rf "limine-$(LIMINE_VERSION)/.git" - echo "$(LIMINE_VERSION)" > "limine-$(LIMINE_VERSION)/version" - tar -Jcf "limine-$(LIMINE_VERSION).tar.xz" "limine-$(LIMINE_VERSION)" - rm -rf "limine-$(LIMINE_VERSION)" + rm -rf '$(call SHESCAPE,$(BUILDDIR))'/"limine-$(LIMINE_VERSION)" + mkdir -p '$(call SHESCAPE,$(BUILDDIR))'/"limine-$(LIMINE_VERSION)" + cp -r '$(call SHESCAPE,$(SRCDIR))'/.git '$(call SHESCAPE,$(BUILDDIR))'/"limine-$(LIMINE_VERSION)"/ + cd '$(call SHESCAPE,$(BUILDDIR))'/"limine-$(LIMINE_VERSION)" && git checkout . + cd '$(call SHESCAPE,$(BUILDDIR))'/"limine-$(LIMINE_VERSION)" && NOCONFIGURE=yes && ./autogen.sh + 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)/.git" + rm -rf '$(call SHESCAPE,$(BUILDDIR))'/"limine-$(LIMINE_VERSION)/autom4te.cache" + echo "$(LIMINE_VERSION)" > '$(call SHESCAPE,$(BUILDDIR))'/"limine-$(LIMINE_VERSION)/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 -distclean: clean test-clean - rm -rf build toolchain ovmf* +distclean: clean + rm -rf toolchain ovmf* config.log config.status GNUmakefile -.PHONY: repoclean -repoclean: distclean - rm -rf stivale reduced-gnu-efi *.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: maintainer-clean +maintainer-clean: distclean + cd '$(call SHESCAPE,$(SRCDIR))' && rm -rf stivale reduced-gnu-efi configure 'configure~' autom4te.cache *.tar.xz .PHONY: stage23-uefi64 -stage23-uefi64: stivale - $(MAKE) -C stage23 all TARGET=uefi64 BUILDDIR='$(call SHESCAPE,$(BUILDDIR))/stage23-uefi64' +stage23-uefi64: $(call MKESCAPE,$(SRCDIR))/stivale + $(MAKE) -C '$(call SHESCAPE,$(SRCDIR))/stage23' all TARGET=uefi64 BUILDDIR='$(call SHESCAPE,$(BUILDDIR))/stage23-uefi64' .PHONY: 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 -stage23-uefi32: stivale - $(MAKE) -C stage23 all TARGET=uefi32 BUILDDIR='$(call SHESCAPE,$(BUILDDIR))/stage23-uefi32' +stage23-uefi32: $(call MKESCAPE,$(SRCDIR))/stivale + $(MAKE) -C '$(call SHESCAPE,$(SRCDIR))/stage23' all TARGET=uefi32 BUILDDIR='$(call SHESCAPE,$(BUILDDIR))/stage23-uefi32' .PHONY: 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 -stage23-bios: stivale - $(MAKE) -C stage23 all TARGET=bios BUILDDIR='$(call SHESCAPE,$(BUILDDIR))/stage23-bios' +stage23-bios: $(call MKESCAPE,$(SRCDIR))/stivale + $(MAKE) -C '$(call SHESCAPE,$(SRCDIR))/stage23' all TARGET=bios BUILDDIR='$(call SHESCAPE,$(BUILDDIR))/stage23-bios' .PHONY: 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 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 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 test-clean: @@ -205,7 +230,7 @@ test-clean: .PHONY: 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: mkdir -p ovmf-x64 diff --git a/README.md b/README.md index 158fffb3..c5d41f89 100644 --- a/README.md +++ b/README.md @@ -45,9 +45,9 @@ For example, to clone the latest binary release of the `v2.x` branch one can do ```bash 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 -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 @@ -66,6 +66,18 @@ release. *These steps are not necessary if cloning a binary release. If so, skip to* *"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 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 `limine-eltorito-efi.bin`). Furthermore, either the toolchain must have been built in the previous -paragraph, or `gcc` or `llvm/clang` must also be installed. -`GNU binutils` is necessary in order to build the UEFI ports of Limine. A full -LLVM toolchain without `GNU binutils` can be used to build just the BIOS port -instead. +paragraph, or `gcc` or `llvm/clang` must also be installed, alongside +`GNU binutils`. -Both the UEFI and BIOS ports of the bootloader can be built, using -`GCC/GNU binutils` (which includes the shipped toolchain), with: +Then, to build Limine, run: ```bash make # (or gmake where applicable) ``` -It is possible to pass `make` additional flags, most relevantly, -`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. +The generated bootloader files are going to be in `$BUILDDIR/bin`. ## Installing Limine binaries 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 -`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 -different prefix with `make install PREFIX=/myprefix`. +To install Limine, run: +```bash +make install +``` ## How to use diff --git a/autogen.sh b/autogen.sh new file mode 100755 index 00000000..8a619cf1 --- /dev/null +++ b/autogen.sh @@ -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 diff --git a/configure.ac b/configure.ac new file mode 100644 index 00000000..b7f0c09a --- /dev/null +++ b/configure.ac @@ -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 diff --git a/decompressor/GNUmakefile b/decompressor/GNUmakefile index ef193ffe..8852aa51 100644 --- a/decompressor/GNUmakefile +++ b/decompressor/GNUmakefile @@ -11,22 +11,6 @@ ifeq ($(call MKESCAPE,$(BUILDDIR)), ) $(error BUILDDIR not specified) 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) override TOOLCHAIN_CC += --target=i686-elf endif diff --git a/stage1/cd/bootsect.asm b/stage1/cd/bootsect.asm index 8ebf6600..d09562b2 100644 --- a/stage1/cd/bootsect.asm +++ b/stage1/cd/bootsect.asm @@ -95,7 +95,7 @@ pmode: ; Align stage2 to 2K ON DISK times 2048-($-$$) db 0 decompressor: -%strcat DECOMPRESSOR_PATH BUILDDIR, '/decompressor/decompressor.bin' +%strcat DECOMPRESSOR_PATH BUILDDIR, '/decompressor-build/decompressor.bin' incbin DECOMPRESSOR_PATH align 16 diff --git a/stage1/hdd/bootsect.asm b/stage1/hdd/bootsect.asm index d9d55d72..cf451e1a 100644 --- a/stage1/hdd/bootsect.asm +++ b/stage1/hdd/bootsect.asm @@ -132,7 +132,7 @@ dw 0xaa55 ; ********************* Stage 2 ********************* decompressor: -%strcat DECOMPRESSOR_PATH BUILDDIR, '/decompressor/decompressor.bin' +%strcat DECOMPRESSOR_PATH BUILDDIR, '/decompressor-build/decompressor.bin' incbin DECOMPRESSOR_PATH align 16 diff --git a/stage1/pxe/bootsect.asm b/stage1/pxe/bootsect.asm index db896b58..ad66d97b 100644 --- a/stage1/pxe/bootsect.asm +++ b/stage1/pxe/bootsect.asm @@ -49,7 +49,7 @@ start: ; ********************* Stage 2 ********************* decompressor: -%strcat DECOMPRESSOR_PATH BUILDDIR, '/decompressor/decompressor.bin' +%strcat DECOMPRESSOR_PATH BUILDDIR, '/decompressor-build/decompressor.bin' incbin DECOMPRESSOR_PATH align 16 diff --git a/stage23/GNUmakefile b/stage23/GNUmakefile index c77d62aa..f802c4c9 100644 --- a/stage23/GNUmakefile +++ b/stage23/GNUmakefile @@ -24,34 +24,6 @@ else $(error Invalid target) 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 ($(TARGET), bios) override TOOLCHAIN_CC += --target=i686-elf diff --git a/version.sh b/version.sh new file mode 100755 index 00000000..5325cbc3 --- /dev/null +++ b/version.sh @@ -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' )