diff --git a/.gitignore b/.gitignore
index 12eb267..21cbd9e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,3 +2,5 @@ gcc*/*
binutils*/*
gcc*
binutils*
+bin/*
+build*
diff --git a/Makefile b/Makefile
index fe16f79..e20a9d7 100644
--- a/Makefile
+++ b/Makefile
@@ -22,23 +22,26 @@
# along with OS/K. If not, see . #
#=----------------------------------------------------------------------------=#
-.PHONY: retrieve compile showenv
-.DEFAULT_GOAL := compile
+.PHONY: retrieve compile showenv deflate configurebinutils binutils gcc clean
+.DEFAULT_GOAL := gcc
## VERSIONS ------------------------------------------------------------------ #
+
+GCC_NAME = gcc-10.1.0
+BINUTILS_NAME =binutils-2.34
# GCC 10.1.0
-GCC_SOURCES = https://ftp.gnu.org/gnu/gcc/gcc-10.1.0/gcc-10.1.0.tar.xz
+GCC_SOURCES = https://ftp.gnu.org/gnu/gcc/$(GCC_NAME)/$(GCC_NAME).tar.xz
# BINUTILS 2.34
-BINUTILS_SOURCES = https://ftp.gnu.org/gnu/binutils/binutils-2.34.tar.xz
+BINUTILS_SOURCES = https://ftp.gnu.org/gnu/binutils/$(BINUTILS_NAME).tar.xz
## VARIABLES ----------------------------------------------------------------- #
#ENV
-export NTHREADS := ${nproc}
-export PREFIX := $(HOME)/opt/cross
+export NTHREADS := $(shell nproc)
+export PREFIX := $(shell pwd)/bin
export TARGET := x86_64-elf
export PATH := $(PREFIX)/bin:$(PATH)
export XZ_DEFAULTS := -T $(NTHREADS)
@@ -73,15 +76,51 @@ retrieve: showenv
deflate:
@echo ${CL2}[$@] ${NC}Deflate GCC sources...${CL3}
- @tar -xaf $(GCCTARNAME) --threads NTHREADS
- @echo ${CL2}[$@] ${NC}Deflate BINUTILS sources...${CL3}
- @tar -xaf $(BINUTILSTARNAME) --threads NTHREADS
+ @tar -xaf $(GCCTARNAME) --skip-old-files
+ @echo ${CL2}[$@] ${NC}Deflate $(BINUTILS_NAME) sources...${CL3}
+ @tar -xaf $(BINUTILSTARNAME) --skip-old-files
@echo ${CL2}[$@] ${CL}Success.${CL3}
-compile: retrieve deflate
+configurebinutils: retrieve deflate
+ @echo ${CL2}[$@] ${NC}Configuring $(BINUTILS_NAME)...${CL3}
+ @mkdir -p build-binutils
+ cd build-binutils && ../$(BINUTILS_NAME)/configure --target=$(TARGET) --prefix="$(PREFIX)" --with-sysroot --disable-nls --disable-werror
@echo ${CL2}[$@] ${CL}Success.${CL3}
+binutils: configurebinutils
+ @echo ${CL2}[$@] ${NC}Compiling $(BINUTILS_NAME)...${CL3}
+ cd build-binutils && make -j $(NTHREADS)
+ @echo ${CL2}[$@] ${NC}Compiling $(BINUTILS_NAME)...${CL3}
+ @mkdir -p bin
+ cd build-binutils && make install -j $(NTHREADS)
+ @echo ${CL2}[$@] ${CL}Success.${CL3}
+
+configuregcc:
+ @echo ${CL2}[$@] ${NC}Configuring $(GCC_NAME)...${CL3}
+ @cp multilib.opt $(GCC_NAME)/gcc/config/i386/t-x86_64-elf
+ @patch $(GCC_NAME)/gcc/config.gcc < patch-red-zone.diff
+ @mkdir -p build-gcc
+ cd build-gcc && ../$(GCC_NAME)/configure --target=$(TARGET) --prefix="$(PREFIX)" --disable-nls --enable-languages=c,c++ --without-headers
+ @echo ${CL2}[$@] ${CL}Success.${CL3}
+
+gcc: binutils configuregcc
+ @echo ${CL2}[$@] ${NC}Compiling $(GCC_NAME)...${CL3}
+ cd build-gcc && make all-gcc -j $(NTHREADS)
+ cd build-gcc && make all-target-libgcc -j $(NTHREADS)
+ @mkdir -p bin
+ cd build-gcc && make install-gcc -j $(NTHREADS)
+ cd build-gcc && make install-target-libgcc -j $(NTHREADS)
+ @echo ${CL2}[$@] ${CL}Success.${CL3}
+
+clean:
+ @mkdir -p build-gcc build-binutils
+ @cd build-gcc && rm -rf *
+ @cd build-binutils && rm -rf *
+ @rm -rf bin
+ @echo ${CL2}[$@] ${CL}Success.${CL3}
+
+
remove_all:
@rm -rf gcc*
- @rm -rf binutils*
+ @rm -rf bin*
@echo ${CL2}[$@] ${CL}Success.${CL3}
diff --git a/multilib.opt b/multilib.opt
new file mode 100644
index 0000000..30f8698
--- /dev/null
+++ b/multilib.opt
@@ -0,0 +1,4 @@
+# Add libgcc multilib variant without red-zone requirement
+
+MULTILIB_OPTIONS += mno-red-zone
+MULTILIB_DIRNAMES += no-red-zone
diff --git a/patch-red-zone.diff b/patch-red-zone.diff
new file mode 100644
index 0000000..4739630
--- /dev/null
+++ b/patch-red-zone.diff
@@ -0,0 +1,19 @@
+--- config.gcc 2020-06-01 20:40:52.562801089 +0200
++++ configm.gcc 2020-06-01 20:41:49.970576321 +0200
+@@ -180,7 +180,7 @@
+ # the --with-sysroot configure option or the
+ # --sysroot command line option is used this
+ # will be relative to the sysroot.
+-# target_type_format_char
++# target_type_format_char
+ # The default character to be used for formatting
+ # the attribute in a
+ # .type symbol_name, ${t_t_f_c}
+@@ -1865,6 +1865,7 @@
+ tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h newlib-stdint.h i386/i386elf.h"
+ ;;
+ x86_64-*-elf*)
++ tmake_file="${tmake_file} i386/t-x86_64-elf" # include the new multilib configuration to prevent red-zone
+ tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h newlib-stdint.h i386/i386elf.h i386/x86-64.h"
+ ;;
+ x86_64-*-rtems*)