From d50bdd0051f938febd2c6e0bb9d3aa895e9153dc Mon Sep 17 00:00:00 2001 From: kamkow1 Date: Sat, 20 Sep 2025 20:07:39 +0200 Subject: [PATCH] Use custom GCC toolchain --- Makefile | 12 ++++++++++++ mk/arch/toolchain-x86_64.mk | 8 +++++--- mk/user/x86_64.mk | 1 + scripts/build-binutils-gdb.sh | 12 ++++++++++++ scripts/build-gcc.sh | 25 +++++++++++++++++++++++++ 5 files changed, 55 insertions(+), 3 deletions(-) create mode 100755 scripts/build-binutils-gdb.sh create mode 100755 scripts/build-gcc.sh diff --git a/Makefile b/Makefile index e2e315c..8c071da 100644 --- a/Makefile +++ b/Makefile @@ -17,6 +17,18 @@ prepare: cd limine; \ make; \ fi + if [ ! -d toolchain/binutils-gdb ]; then \ + cd toolchain; \ + git clone git://sourceware.org/git/binutils-gdb.git --depth=1; \ + $(PWD)/scripts/build-binutils-gdb.sh; \ + cd ..; \ + fi + if [ ! -d toolchain/gcc ]; then \ + cd toolchain; \ + git clone https://gcc.gnu.org/git/gcc.git --depth=1; \ + $(PWD)/scripts/build-gcc.sh; \ + cd ..; \ + fi cleanall: make clean diff --git a/mk/arch/toolchain-x86_64.mk b/mk/arch/toolchain-x86_64.mk index 91e60ca..4f4ab31 100644 --- a/mk/arch/toolchain-x86_64.mk +++ b/mk/arch/toolchain-x86_64.mk @@ -1,3 +1,5 @@ -CC := x86_64-elf-gcc -LD := x86_64-elf-ld -AR := x86_64-elf-ar +PREFIX := $(ROOT)/toolchain/root/bin + +CC := $(PREFIX)/x86_64-elf-gcc +LD := $(PREFIX)/x86_64-elf-ld +AR := $(PREFIX)/x86_64-elf-ar diff --git a/mk/user/x86_64.mk b/mk/user/x86_64.mk index 79d58fb..9f65ffb 100644 --- a/mk/user/x86_64.mk +++ b/mk/user/x86_64.mk @@ -9,4 +9,5 @@ CFLAGS += -m64 \ -fno-stack-protector \ -fno-stack-check \ -fno-builtin \ + -fno-omit-frame-pointer \ -O0 \ diff --git a/scripts/build-binutils-gdb.sh b/scripts/build-binutils-gdb.sh new file mode 100755 index 0000000..c1fc3b0 --- /dev/null +++ b/scripts/build-binutils-gdb.sh @@ -0,0 +1,12 @@ +#!/bin/sh + +PREFIX=$(pwd)/root + +mkdir build-bintuils-gdb +cd build-bintuils-gdb +../binutils-gdb/configure --prefix="$PREFIX" \ + --disable-nls \ + --disable-werror \ + --target=x86_64-elf +make -j$(nproc) +make install diff --git a/scripts/build-gcc.sh b/scripts/build-gcc.sh new file mode 100755 index 0000000..1e28a7c --- /dev/null +++ b/scripts/build-gcc.sh @@ -0,0 +1,25 @@ +#!/bin/sh + +PREFIX=$(pwd)/root + +cd gcc +./contrib/download_prerequisites +cd .. +mkdir build-gcc +cd build-gcc +../gcc/configure --prefix="$PREFIX" \ + --disable-nls \ + --enable-languages=c \ + --target=x86_64-elf \ + --disable-bootstrap \ + --without-headers \ + --disable-shared \ + --disable-threads \ + --disable-libssp \ + --disable-libquadmath \ + --disable-libgomp \ + --disable-libatomic \ + --disable-libmudflap \ + --disable-multilib +make -j$(nproc) +make install