build: Run toolchain-detect at configure time
diff --git a/.gitignore b/.gitignore
index 3f40972a..0d439ae7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,6 +2,7 @@
/bin
/build
/toolchain
+/toolchain-files
/limine-efi
/freestanding_headers
/ovmf*
diff --git a/GNUmakefile.in b/GNUmakefile.in
index cd56e07d..9b093053 100644
--- a/GNUmakefile.in
+++ b/GNUmakefile.in
@@ -205,7 +205,7 @@ dist:
.PHONY: distclean
distclean: clean
- rm -rf toolchain ovmf* config.log config.status GNUmakefile config.h
+ rm -rf toolchain ovmf* config.log config.status GNUmakefile config.h toolchain-files
.PHONY: maintainer-clean
maintainer-clean: distclean
@@ -214,11 +214,8 @@ maintainer-clean: distclean
.PHONY: common-uefi-x86-64
common-uefi-x86-64:
- mkdir -p '$(call SHESCAPE,$(BUILDDIR))/common-uefi-x86-64'
- cd '$(call SHESCAPE,$(BUILDDIR))/common-uefi-x86-64' && \
- TARGET=uefi-x86-64 '$(call SHESCAPE,$(SRCDIR))'/toolchain-detect/configure
$(MAKE) -C '$(call SHESCAPE,$(SRCDIR))/common' all \
- TOOLCHAIN_FILE='$(call SHESCAPE,$(BUILDDIR))/common-uefi-x86-64/toolchain.mk' \
+ TOOLCHAIN_FILE='$(call SHESCAPE,$(BUILDDIR))/toolchain-files/x86_64-toolchain.mk' \
TARGET=uefi-x86-64 \
BUILDDIR='$(call SHESCAPE,$(BUILDDIR))/common-uefi-x86-64'
@@ -228,11 +225,8 @@ common-uefi-x86-64-clean:
.PHONY: common-uefi-ia32
common-uefi-ia32: $(call MKESCAPE,$(SRCDIR))/stivale
- mkdir -p '$(call SHESCAPE,$(BUILDDIR))/common-uefi-ia32'
- cd '$(call SHESCAPE,$(BUILDDIR))/common-uefi-ia32' && \
- TARGET=uefi-ia32 '$(call SHESCAPE,$(SRCDIR))'/toolchain-detect/configure
$(MAKE) -C '$(call SHESCAPE,$(SRCDIR))/common' all \
- TOOLCHAIN_FILE='$(call SHESCAPE,$(BUILDDIR))/common-uefi-ia32/toolchain.mk' \
+ TOOLCHAIN_FILE='$(call SHESCAPE,$(BUILDDIR))/toolchain-files/i686-toolchain.mk' \
TARGET=uefi-ia32 \
BUILDDIR='$(call SHESCAPE,$(BUILDDIR))/common-uefi-ia32'
@@ -242,11 +236,8 @@ common-uefi-ia32-clean:
.PHONY: common-bios
common-bios: $(call MKESCAPE,$(SRCDIR))/stivale
- mkdir -p '$(call SHESCAPE,$(BUILDDIR))/common-bios'
- cd '$(call SHESCAPE,$(BUILDDIR))/common-bios' && \
- TARGET=bios '$(call SHESCAPE,$(SRCDIR))'/toolchain-detect/configure
$(MAKE) -C '$(call SHESCAPE,$(SRCDIR))/common' all \
- TOOLCHAIN_FILE='$(call SHESCAPE,$(BUILDDIR))/common-bios/toolchain.mk' \
+ TOOLCHAIN_FILE='$(call SHESCAPE,$(BUILDDIR))/toolchain-files/i686-toolchain.mk' \
TARGET=bios \
BUILDDIR='$(call SHESCAPE,$(BUILDDIR))/common-bios'
@@ -256,11 +247,8 @@ common-bios-clean:
.PHONY: decompressor
decompressor:
- mkdir -p '$(call SHESCAPE,$(BUILDDIR))/decompressor-build'
- cd '$(call SHESCAPE,$(BUILDDIR))/decompressor-build' && \
- TARGET=bios '$(call SHESCAPE,$(SRCDIR))'/toolchain-detect/configure
$(MAKE) -C '$(call SHESCAPE,$(SRCDIR))/decompressor' all \
- TOOLCHAIN_FILE='$(call SHESCAPE,$(BUILDDIR))/common-bios/toolchain.mk' \
+ TOOLCHAIN_FILE='$(call SHESCAPE,$(BUILDDIR))/toolchain-files/i686-toolchain.mk' \
BUILDDIR='$(call SHESCAPE,$(BUILDDIR))/decompressor-build'
.PHONY: decompressor-clean
diff --git a/configure.ac b/configure.ac
index ffe5c803..8edab0c1 100644
--- a/configure.ac
+++ b/configure.ac
@@ -13,6 +13,8 @@ AC_SUBST(SRCDIR, [$SRCDIR])
AC_SUBST(BUILDDIR, [$BUILDDIR])
AC_SUBST(PATH, [$PATH])
+rm -rf "$BUILDDIR/toolchain-files"
+
test "x$CFLAGS" = "x" && CFLAGS='-g -O2 -pipe -Wall -Wextra'
AC_PROG_CC
@@ -61,6 +63,11 @@ AC_ARG_ENABLE([bios],
if test "x$BUILD_BIOS" = "xno"; then
BUILD_BIOS=""
else
+ (
+ mkdir -p "$BUILDDIR/toolchain-files"
+ cd "$BUILDDIR/toolchain-files"
+ ARCHITECTURE=i686 "$SRCDIR/toolchain-detect/configure" || exit 1
+ )
BUILD_BIOS="limine-bios"
fi
@@ -99,6 +106,11 @@ AC_ARG_ENABLE([uefi-ia32],
if test "x$BUILD_UEFI_IA32" = "xno"; then
BUILD_UEFI_IA32=""
else
+ (
+ mkdir -p "$BUILDDIR/toolchain-files"
+ cd "$BUILDDIR/toolchain-files"
+ ARCHITECTURE=i686 "$SRCDIR/toolchain-detect/configure" || exit 1
+ )
BUILD_UEFI_IA32="limine-uefi-ia32"
fi
@@ -113,6 +125,11 @@ AC_ARG_ENABLE([uefi-x86-64],
if test "x$BUILD_UEFI_X86_64" = "xno"; then
BUILD_UEFI_X86_64=""
else
+ (
+ mkdir -p "$BUILDDIR/toolchain-files"
+ cd "$BUILDDIR/toolchain-files"
+ ARCHITECTURE=x86_64 "$SRCDIR/toolchain-detect/configure" || exit 1
+ )
BUILD_UEFI_X86_64="limine-uefi-x86-64"
fi
diff --git a/toolchain-detect/configure.ac b/toolchain-detect/configure.ac
index 3ff70f26..296ca17e 100644
--- a/toolchain-detect/configure.ac
+++ b/toolchain-detect/configure.ac
@@ -2,21 +2,18 @@ AC_INIT([Limine], m4_esyscmd([../version.sh]), [https://github.com/limine-bootlo
AC_PREREQ(2.69)
-case "$TARGET" in
- uefi-x86-64)
- ARCHITECTURE=x86_64
- ;;
- uefi-ia32|bios)
- ARCHITECTURE=i686
- ;;
- *)
- AC_MSG_ERROR([invalid target])
- ;;
-esac
+BUILDDIR="$(pwd -P)"
+
+if test -f "$BUILDDIR/$ARCHITECTURE-toolchain.mk"; then
+ exit 0
+fi
+
+AC_PROG_GREP
if test "x$TOOLCHAIN" = "x"; then
TOOLCHAIN=$ARCHITECTURE-elf
fi
+
AC_SUBST(TOOLCHAIN, $TOOLCHAIN)
AC_DEFUN([CC_ERROR_MSG], [
@@ -108,5 +105,5 @@ GET_BINUTILS_PROG(OBJCOPY, objcopy, objcopy)
GET_BINUTILS_PROG(OBJDUMP, objdump, objdump)
GET_BINUTILS_PROG(READELF, readelf, readelf)
-AC_CONFIG_FILES(toolchain.mk)
+AC_CONFIG_FILES([$ARCHITECTURE-toolchain.mk:toolchain.mk.in])
AC_OUTPUT
