build: Misc portability improvements
This commit is contained in:
parent
b1a7c0d19f
commit
c28e3a6f7f
|
@ -51,26 +51,62 @@ ifeq ($(shell PATH='$(call SHESCAPE,$(PATH))' command -v $(LIMINE_CC) ; ), )
|
||||||
override LIMINE_CC := $(CC)
|
override LIMINE_CC := $(CC)
|
||||||
endif
|
endif
|
||||||
ifeq ($(shell PATH='$(call SHESCAPE,$(PATH))' command -v $(LIMINE_LD) ; ), )
|
ifeq ($(shell PATH='$(call SHESCAPE,$(PATH))' command -v $(LIMINE_LD) ; ), )
|
||||||
|
override LIMINE_LD := gld
|
||||||
|
ifeq ($(shell PATH='$(call SHESCAPE,$(PATH))' command -v $(LIMINE_LD) ; ), )
|
||||||
override LIMINE_LD := ld.bfd
|
override LIMINE_LD := ld.bfd
|
||||||
ifeq ($(shell PATH='$(call SHESCAPE,$(PATH))' command -v $(LIMINE_LD) ; ), )
|
ifeq ($(shell PATH='$(call SHESCAPE,$(PATH))' command -v $(LIMINE_LD) ; ), )
|
||||||
|
override LIMINE_LD := /usr/local/bin/ld
|
||||||
|
ifeq ($(shell PATH='$(call SHESCAPE,$(PATH))' command -v $(LIMINE_LD) ; ), )
|
||||||
override LIMINE_LD := ld
|
override LIMINE_LD := ld
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
ifeq ($(shell PATH='$(call SHESCAPE,$(PATH))' command -v $(LIMINE_AR) ; ), )
|
||||||
|
override LIMINE_AR := gar
|
||||||
|
ifeq ($(shell PATH='$(call SHESCAPE,$(PATH))' command -v $(LIMINE_AR) ; ), )
|
||||||
|
override LIMINE_AR := /usr/local/bin/ar
|
||||||
ifeq ($(shell PATH='$(call SHESCAPE,$(PATH))' command -v $(LIMINE_AR) ; ), )
|
ifeq ($(shell PATH='$(call SHESCAPE,$(PATH))' command -v $(LIMINE_AR) ; ), )
|
||||||
override LIMINE_AR := ar
|
override LIMINE_AR := ar
|
||||||
endif
|
endif
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
ifeq ($(shell PATH='$(call SHESCAPE,$(PATH))' command -v $(LIMINE_AS) ; ), )
|
||||||
|
override LIMINE_AS := gas
|
||||||
|
ifeq ($(shell PATH='$(call SHESCAPE,$(PATH))' command -v $(LIMINE_AS) ; ), )
|
||||||
|
override LIMINE_AS := /usr/local/bin/as
|
||||||
ifeq ($(shell PATH='$(call SHESCAPE,$(PATH))' command -v $(LIMINE_AS) ; ), )
|
ifeq ($(shell PATH='$(call SHESCAPE,$(PATH))' command -v $(LIMINE_AS) ; ), )
|
||||||
override LIMINE_AS := as
|
override LIMINE_AS := as
|
||||||
endif
|
endif
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
ifeq ($(shell PATH='$(call SHESCAPE,$(PATH))' command -v $(LIMINE_OBJCOPY) ; ), )
|
||||||
|
override LIMINE_OBJCOPY := gobjcopy
|
||||||
|
ifeq ($(shell PATH='$(call SHESCAPE,$(PATH))' command -v $(LIMINE_OBJCOPY) ; ), )
|
||||||
|
override LIMINE_OBJCOPY := /usr/local/bin/objcopy
|
||||||
ifeq ($(shell PATH='$(call SHESCAPE,$(PATH))' command -v $(LIMINE_OBJCOPY) ; ), )
|
ifeq ($(shell PATH='$(call SHESCAPE,$(PATH))' command -v $(LIMINE_OBJCOPY) ; ), )
|
||||||
override LIMINE_OBJCOPY := objcopy
|
override LIMINE_OBJCOPY := objcopy
|
||||||
endif
|
endif
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
ifeq ($(shell PATH='$(call SHESCAPE,$(PATH))' command -v $(LIMINE_OBJDUMP) ; ), )
|
||||||
|
override LIMINE_OBJDUMP := gobjdump
|
||||||
|
ifeq ($(shell PATH='$(call SHESCAPE,$(PATH))' command -v $(LIMINE_OBJDUMP) ; ), )
|
||||||
|
override LIMINE_OBJDUMP := /usr/local/bin/objdump
|
||||||
ifeq ($(shell PATH='$(call SHESCAPE,$(PATH))' command -v $(LIMINE_OBJDUMP) ; ), )
|
ifeq ($(shell PATH='$(call SHESCAPE,$(PATH))' command -v $(LIMINE_OBJDUMP) ; ), )
|
||||||
override LIMINE_OBJDUMP := objdump
|
override LIMINE_OBJDUMP := objdump
|
||||||
endif
|
endif
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
ifeq ($(shell PATH='$(call SHESCAPE,$(PATH))' command -v $(LIMINE_READELF) ; ), )
|
||||||
|
override LIMINE_READELF := greadelf
|
||||||
|
ifeq ($(shell PATH='$(call SHESCAPE,$(PATH))' command -v $(LIMINE_READELF) ; ), )
|
||||||
|
override LIMINE_READELF := /usr/local/bin/readelf
|
||||||
ifeq ($(shell PATH='$(call SHESCAPE,$(PATH))' command -v $(LIMINE_READELF) ; ), )
|
ifeq ($(shell PATH='$(call SHESCAPE,$(PATH))' command -v $(LIMINE_READELF) ; ), )
|
||||||
override LIMINE_READELF := readelf
|
override LIMINE_READELF := readelf
|
||||||
endif
|
endif
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
export LIMINE_CC
|
export LIMINE_CC
|
||||||
export LIMINE_LD
|
export LIMINE_LD
|
||||||
|
@ -101,16 +137,36 @@ ifneq ($(MAKECMDGOALS), install)
|
||||||
ifneq ($(MAKECMDGOALS), install-data)
|
ifneq ($(MAKECMDGOALS), install-data)
|
||||||
ifneq ($(MAKECMDGOALS), install-strip)
|
ifneq ($(MAKECMDGOALS), install-strip)
|
||||||
|
|
||||||
override USING_GNU_LD := $(shell PATH='$(call SHESCAPE,$(PATH))' $(LIMINE_LD) --version | grep Binutils >/dev/null && echo 1)
|
override USING_GNU_LD := $(shell PATH='$(call SHESCAPE,$(PATH))' $(LIMINE_LD) --version | grep 'GNU Binutils' >/dev/null && echo 1)
|
||||||
ifneq ($(USING_GNU_LD), 1)
|
ifneq ($(USING_GNU_LD), 1)
|
||||||
$(error The specified LIMINE_LD linker ($(LIMINE_LD)) is not the GNU linker)
|
$(error The specified LIMINE_LD linker ($(LIMINE_LD)) is not the GNU linker)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
override USING_GNU_OBJCOPY := $(shell PATH='$(call SHESCAPE,$(PATH))' $(LIMINE_OBJCOPY) --version | grep Binutils >/dev/null && echo 1)
|
override USING_GNU_AR := $(shell PATH='$(call SHESCAPE,$(PATH))' $(LIMINE_AR) --version | grep 'GNU Binutils' >/dev/null && echo 1)
|
||||||
|
ifneq ($(USING_GNU_AR), 1)
|
||||||
|
$(error The specified LIMINE_AR archiver ($(LIMINE_AR)) is not the GNU archiver)
|
||||||
|
endif
|
||||||
|
|
||||||
|
override USING_GNU_AS := $(shell PATH='$(call SHESCAPE,$(PATH))' $(LIMINE_AS) --version | grep 'GNU Binutils' >/dev/null && echo 1)
|
||||||
|
ifneq ($(USING_GNU_AS), 1)
|
||||||
|
$(error The specified LIMINE_AS assembler ($(LIMINE_AS)) is not the GNU assembler)
|
||||||
|
endif
|
||||||
|
|
||||||
|
override USING_GNU_OBJCOPY := $(shell PATH='$(call SHESCAPE,$(PATH))' $(LIMINE_OBJCOPY) --version | grep 'GNU Binutils' >/dev/null && echo 1)
|
||||||
ifneq ($(USING_GNU_OBJCOPY), 1)
|
ifneq ($(USING_GNU_OBJCOPY), 1)
|
||||||
$(error The specified LIMINE_OBJCOPY ($(LIMINE_OBJCOPY)) is not GNU objcopy)
|
$(error The specified LIMINE_OBJCOPY ($(LIMINE_OBJCOPY)) is not GNU objcopy)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
override USING_GNU_OBJDUMP := $(shell PATH='$(call SHESCAPE,$(PATH))' $(LIMINE_OBJDUMP) --version | grep 'GNU Binutils' >/dev/null && echo 1)
|
||||||
|
ifneq ($(USING_GNU_OBJDUMP), 1)
|
||||||
|
$(error The specified LIMINE_OBJDUMP ($(LIMINE_OBJDUMP)) is not GNU objdump)
|
||||||
|
endif
|
||||||
|
|
||||||
|
override USING_GNU_READELF := $(shell PATH='$(call SHESCAPE,$(PATH))' $(LIMINE_READELF) --version | grep 'GNU Binutils' >/dev/null && echo 1)
|
||||||
|
ifneq ($(USING_GNU_READELF), 1)
|
||||||
|
$(error The specified LIMINE_READELF ($(LIMINE_READELF)) is not GNU readelf)
|
||||||
|
endif
|
||||||
|
|
||||||
ifneq ($(CC_MACHINE), x86_64)
|
ifneq ($(CC_MACHINE), x86_64)
|
||||||
ifneq ($(CC_MACHINE), amd64-)
|
ifneq ($(CC_MACHINE), amd64-)
|
||||||
$(error No suitable x86_64 C compiler found, please install an x86_64 C toolchain or run "./make_toolchain.sh")
|
$(error No suitable x86_64 C compiler found, please install an x86_64 C toolchain or run "./make_toolchain.sh")
|
||||||
|
@ -132,7 +188,7 @@ ifeq ($(USING_CLANG), 1)
|
||||||
override LIMINE_CC := $(ORIG_LIMINE_CC)
|
override LIMINE_CC := $(ORIG_LIMINE_CC)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
override STAGE1_FILES := $(shell find -L '$(call SHESCAPE,$(SRCDIR))/stage1' -type f -name '*.asm')
|
override STAGE1_FILES := $(shell find '$(call SHESCAPE,$(SRCDIR))/stage1' -type f -name '*.asm')
|
||||||
|
|
||||||
.PHONY: all
|
.PHONY: all
|
||||||
all: limine-uefi limine-bios
|
all: limine-uefi limine-bios
|
||||||
|
|
|
@ -72,7 +72,7 @@ This step can take a long time, but it will ensure that the toolchain will work
|
||||||
with Limine. If on an x86_64 host, with GCC or Clang installed, you can skip to
|
with Limine. If on an x86_64 host, with GCC or Clang installed, you can skip to
|
||||||
the next paragraph in order to use the system's toolchain instead.
|
the next paragraph in order to use the system's toolchain instead.
|
||||||
|
|
||||||
The toolchain's build process depends on the following packages: `GNU make`,
|
The toolchain's build process depends on the following packages: `GNU make`, `GNU tar`,
|
||||||
`curl`, `gzip`, `bzip2`, `gcc/clang`, `g++/clang++`.
|
`curl`, `gzip`, `bzip2`, `gcc/clang`, `g++/clang++`.
|
||||||
|
|
||||||
Building the toolchain can be accomplished by running:
|
Building the toolchain can be accomplished by running:
|
||||||
|
@ -91,8 +91,8 @@ paragraph, or `gcc` or `llvm/clang` must also be installed, alongside
|
||||||
|
|
||||||
### Configure
|
### Configure
|
||||||
|
|
||||||
If checking out from the repository, run `./autogen.sh`, else, if using a
|
If checking out from the repository, run `./autogen.sh` (GNU autoconf required),
|
||||||
release tarball, run `./configure` directly.
|
else, if using a release tarball, run `./configure` directly.
|
||||||
|
|
||||||
Both `./autogen.sh` and `./configure` take arguments and environment variables;
|
Both `./autogen.sh` and `./configure` take arguments and environment variables;
|
||||||
for more information on these, run `./configure --help`.
|
for more information on these, run `./configure --help`.
|
||||||
|
@ -119,7 +119,7 @@ release directory just fine. This step will only install them to a `share` and
|
||||||
|
|
||||||
To install Limine, run:
|
To install Limine, run:
|
||||||
```bash
|
```bash
|
||||||
make install
|
make install # (or gmake where applicable)
|
||||||
```
|
```
|
||||||
|
|
||||||
## How to use
|
## How to use
|
||||||
|
|
|
@ -2,7 +2,9 @@
|
||||||
|
|
||||||
set -ex
|
set -ex
|
||||||
|
|
||||||
srcdir="$(realpath $(dirname "$0"))"
|
origdir="$(pwd -P)"
|
||||||
|
|
||||||
|
srcdir="$(dirname "$0")"
|
||||||
test -z "$srcdir" && srcdir=.
|
test -z "$srcdir" && srcdir=.
|
||||||
|
|
||||||
cd "$srcdir"
|
cd "$srcdir"
|
||||||
|
@ -12,6 +14,8 @@ cd "$srcdir"
|
||||||
|
|
||||||
autoconf
|
autoconf
|
||||||
|
|
||||||
|
cd "$origdir"
|
||||||
|
|
||||||
if test -z "$NOCONFIGURE"; then
|
if test -z "$NOCONFIGURE"; then
|
||||||
exec "$srcdir"/configure "$@"
|
exec "$srcdir"/configure "$@"
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -47,8 +47,8 @@ override INTERNAL_LDFLAGS := \
|
||||||
-static \
|
-static \
|
||||||
-Tlinker.ld
|
-Tlinker.ld
|
||||||
|
|
||||||
override C_FILES := $(shell find -L ./ -type f -name '*.c')
|
override C_FILES := $(shell find ./ -type f -name '*.c')
|
||||||
override ASM_FILES := $(shell find -L ./ -type f -name '*.asm')
|
override ASM_FILES := $(shell find ./ -type f -name '*.asm')
|
||||||
override OBJ := $(addprefix $(call MKESCAPE,$(BUILDDIR))/, $(ASM_FILES:.asm=.o) $(C_FILES:.c=.o))
|
override OBJ := $(addprefix $(call MKESCAPE,$(BUILDDIR))/, $(ASM_FILES:.asm=.o) $(C_FILES:.c=.o))
|
||||||
override HEADER_DEPS := $(addprefix $(call MKESCAPE,$(BUILDDIR))/, $(C_FILES:.c=.d))
|
override HEADER_DEPS := $(addprefix $(call MKESCAPE,$(BUILDDIR))/, $(C_FILES:.c=.d))
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
set -ex
|
set -ex
|
||||||
|
|
||||||
srcdir="$(realpath $(dirname "$0"))"
|
srcdir="$(dirname "$0")"
|
||||||
test -z "$srcdir" && srcdir=.
|
test -z "$srcdir" && srcdir=.
|
||||||
|
|
||||||
cd "$srcdir"
|
cd "$srcdir"
|
||||||
|
@ -17,6 +17,12 @@ else
|
||||||
export MAKE=make
|
export MAKE=make
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if command -v gtar; then
|
||||||
|
export TAR=gtar
|
||||||
|
else
|
||||||
|
export TAR=tar
|
||||||
|
fi
|
||||||
|
|
||||||
export CFLAGS="-O2 -pipe"
|
export CFLAGS="-O2 -pipe"
|
||||||
|
|
||||||
unset CC
|
unset CC
|
||||||
|
@ -30,9 +36,9 @@ if [ "$(uname)" = "OpenBSD" ]; then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
mkdir -p toolchain && cd toolchain
|
mkdir -p toolchain && cd toolchain
|
||||||
PREFIX="$(pwd)"
|
PREFIX="$(pwd -P)"
|
||||||
|
|
||||||
export MAKEFLAGS="-j$(nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null || echo 1)"
|
export MAKEFLAGS="-j$(nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null || psrinfo -tc 2>/dev/null || echo 1)"
|
||||||
|
|
||||||
export PATH="$PREFIX/bin:$PATH"
|
export PATH="$PREFIX/bin:$PATH"
|
||||||
|
|
||||||
|
@ -47,8 +53,8 @@ rm -rf build
|
||||||
mkdir build
|
mkdir build
|
||||||
cd build
|
cd build
|
||||||
|
|
||||||
tar -zxf ../binutils-$BINUTILSVERSION.tar.gz
|
$TAR -zxf ../binutils-$BINUTILSVERSION.tar.gz
|
||||||
tar -zxf ../gcc-$GCCVERSION.tar.gz
|
$TAR -zxf ../gcc-$GCCVERSION.tar.gz
|
||||||
|
|
||||||
mkdir build-binutils
|
mkdir build-binutils
|
||||||
cd build-binutils
|
cd build-binutils
|
||||||
|
@ -58,7 +64,11 @@ $MAKE install
|
||||||
cd ..
|
cd ..
|
||||||
|
|
||||||
cd gcc-$GCCVERSION
|
cd gcc-$GCCVERSION
|
||||||
contrib/download_prerequisites
|
sed 's|http://gcc.gnu|https://gcc.gnu|g' < contrib/download_prerequisites > dp.sed
|
||||||
|
mv dp.sed contrib/download_prerequisites
|
||||||
|
chmod +x contrib/download_prerequisites
|
||||||
|
rm dp.sed
|
||||||
|
contrib/download_prerequisites --no-verify
|
||||||
cd ..
|
cd ..
|
||||||
mkdir build-gcc
|
mkdir build-gcc
|
||||||
cd build-gcc
|
cd build-gcc
|
||||||
|
|
|
@ -2,7 +2,7 @@ TARGET ?=
|
||||||
BUILDDIR ?=
|
BUILDDIR ?=
|
||||||
USING_CLANG ?= 0
|
USING_CLANG ?= 0
|
||||||
|
|
||||||
override SRCDIR := $(shell pwd)
|
override SRCDIR := $(shell pwd -P)
|
||||||
|
|
||||||
override SPACE := $(subst ,, )
|
override SPACE := $(subst ,, )
|
||||||
|
|
||||||
|
@ -150,22 +150,22 @@ endif
|
||||||
|
|
||||||
.PHONY: all clean
|
.PHONY: all clean
|
||||||
|
|
||||||
override C_FILES := $(shell find -L ./ -type f -name '*.c')
|
override C_FILES := $(shell find ./ -type f -name '*.c')
|
||||||
ifeq ($(TARGET), bios)
|
ifeq ($(TARGET), bios)
|
||||||
override ASM32_FILES := $(shell find -L ./ -type f -name '*.asm32')
|
override ASM32_FILES := $(shell find ./ -type f -name '*.asm32')
|
||||||
override ASMB_FILES := $(shell find -L ./ -type f -name '*.asmb')
|
override ASMB_FILES := $(shell find ./ -type f -name '*.asmb')
|
||||||
|
|
||||||
override OBJ := $(addprefix $(call MKESCAPE,$(BUILDDIR))/, $(ASM32_FILES:.asm32=.o) $(ASMB_FILES:.asmb=.o) $(C_FILES:.c=.o))
|
override OBJ := $(addprefix $(call MKESCAPE,$(BUILDDIR))/, $(ASM32_FILES:.asm32=.o) $(ASMB_FILES:.asmb=.o) $(C_FILES:.c=.o))
|
||||||
endif
|
endif
|
||||||
ifeq ($(TARGET), uefi64)
|
ifeq ($(TARGET), uefi64)
|
||||||
override ASM64_FILES := $(shell find -L ./ -type f -name '*.asm64')
|
override ASM64_FILES := $(shell find ./ -type f -name '*.asm64')
|
||||||
override ASM64U_FILES := $(shell find -L ./ -type f -name '*.asm64u')
|
override ASM64U_FILES := $(shell find ./ -type f -name '*.asm64u')
|
||||||
|
|
||||||
override OBJ := $(addprefix $(call MKESCAPE,$(BUILDDIR))/, $(ASM64_FILES:.asm64=.o) $(ASM64U_FILES:.asm64u=.o) $(C_FILES:.c=.o))
|
override OBJ := $(addprefix $(call MKESCAPE,$(BUILDDIR))/, $(ASM64_FILES:.asm64=.o) $(ASM64U_FILES:.asm64u=.o) $(C_FILES:.c=.o))
|
||||||
endif
|
endif
|
||||||
ifeq ($(TARGET), uefi32)
|
ifeq ($(TARGET), uefi32)
|
||||||
override ASM32_FILES := $(shell find -L ./ -type f -name '*.asm32')
|
override ASM32_FILES := $(shell find ./ -type f -name '*.asm32')
|
||||||
override ASM32U_FILES := $(shell find -L ./ -type f -name '*.asm32u')
|
override ASM32U_FILES := $(shell find ./ -type f -name '*.asm32u')
|
||||||
|
|
||||||
override OBJ := $(addprefix $(call MKESCAPE,$(BUILDDIR))/, $(ASM32_FILES:.asm32=.o) $(ASM32U_FILES:.asm32u=.o) $(C_FILES:.c=.o))
|
override OBJ := $(addprefix $(call MKESCAPE,$(BUILDDIR))/, $(ASM32_FILES:.asm32=.o) $(ASM32U_FILES:.asm32u=.o) $(C_FILES:.c=.o))
|
||||||
endif
|
endif
|
||||||
|
|
Loading…
Reference in New Issue