From ce9079174765a28e00b20d29ce4f5cf05322655b Mon Sep 17 00:00:00 2001 From: Arnau478 Date: Thu, 16 Jun 2022 00:29:13 +0200 Subject: [PATCH] Initial code organization and GCC+binutils toolchain --- .gitignore | 3 +++ Makefile | 9 +++++++ config/toolchain.conf | 15 +++++++++++ scripts/toolchain.mk | 61 +++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 88 insertions(+) create mode 100644 .gitignore create mode 100644 Makefile create mode 100644 config/toolchain.conf create mode 100644 scripts/toolchain.mk diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4fa9f61 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +./quark +build/ +toolchain/ diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..cb28362 --- /dev/null +++ b/Makefile @@ -0,0 +1,9 @@ +include scripts/toolchain.mk + +BUILD_DIR?=build/ + +quark: build-dir $(BUILD_DIR)/quark + +.PHONY: build-dir +build-dir: + @mkdir -p $(BUILD_DIR) diff --git a/config/toolchain.conf b/config/toolchain.conf new file mode 100644 index 0000000..db9d102 --- /dev/null +++ b/config/toolchain.conf @@ -0,0 +1,15 @@ +# TOOLCHAIN CONFIGURATION FILE + +export TARGET = i686-elf +export TARGET_ASM = nasm +export TARGET_ASMFLAGS = +export TARGET_CFLAGS = -std=c99 -g +export TARGET_CC = $(TARGET)-gcc +export TARGET_CXX = $(TARGET)-g++ +export TARGET_LD = $(TARGET)-gcc +export TARGET_LINKFLAGS = +export TARGET_LIBS = +BINUTILS_VERSION = 2.37 +BINUTILS_URL = https://ftp.gnu.org/gnu/binutils/binutils-$(BINUTILS_VERSION).tar.xz +GCC_VERSION = 11.1.0 +GCC_URL = https://ftp.gnu.org/gnu/gcc/gcc-$(GCC_VERSION)/gcc-$(GCC_VERSION).tar.gz diff --git a/scripts/toolchain.mk b/scripts/toolchain.mk new file mode 100644 index 0000000..31aa2d8 --- /dev/null +++ b/scripts/toolchain.mk @@ -0,0 +1,61 @@ +include config/toolchain.conf + +TOOLCHAIN_PREFIX = $(abspath toolchain/$(TARGET)) +export PATH := $(TOOLCHAIN_PREFIX)/bin:$(PATH) + +toolchain: toolchain_binutils toolchain_gcc + +BINUTILS_SRC = toolchain/binutils-$(BINUTILS_VERSION) +BINUTILS_BUILD = toolchain/binutils-build-$(BINUTILS_VERSION) + +toolchain_binutils: $(TOOLCHAIN_PREFIX)/bin/i686-elf-ld + +$(TOOLCHAIN_PREFIX)/bin/i686-elf-ld: $(BINUTILS_SRC).tar.xz + cd toolchain && tar -xf binutils-$(BINUTILS_VERSION).tar.xz + mkdir $(BINUTILS_BUILD) + cd $(BINUTILS_BUILD) && CFLAGS= ASMFLAGS= CC= CXX= LD= ASM= LINKFLAGS= LIBS= ../binutils-$(BINUTILS_VERSION)/configure \ + --prefix="$(TOOLCHAIN_PREFIX)" \ + --target=$(TARGET) \ + --with-sysroot \ + --disable-nls \ + --disable-werror + $(MAKE) -j8 -C $(BINUTILS_BUILD) + $(MAKE) -C $(BINUTILS_BUILD) install + +$(BINUTILS_SRC).tar.xz: + mkdir -p toolchain + cd toolchain && wget $(BINUTILS_URL) + + +GCC_SRC = $(abspath toolchain/gcc-$(GCC_VERSION)) +GCC_BUILD = toolchain/gcc-build-$(GCC_VERSION) + +toolchain_gcc: $(TOOLCHAIN_PREFIX)/bin/i686-elf-gcc + +$(TOOLCHAIN_PREFIX)/bin/i686-elf-gcc: $(TOOLCHAIN_PREFIX)/bin/i686-elf-ld $(GCC_SRC).tar.gz + cd toolchain && tar -xf $(GCC_SRC).tar.gz + cd toolchain/gcc-$(GCC_VERSION) && ./contrib/download_prerequisites + mkdir -p $(GCC_BUILD) + cd $(GCC_BUILD) && CFLAGS= ASMFLAGS= CC= CXX= LD= ASM= LINKFLAGS= LIBS= ../gcc-$(GCC_VERSION)/configure \ + --prefix="$(TOOLCHAIN_PREFIX)" \ + --target=$(TARGET) \ + --disable-nls \ + --enable-languages=c,c++ \ + --without-headers + $(MAKE) -j8 -C $(GCC_BUILD) all-gcc all-target-libgcc + $(MAKE) -C $(GCC_BUILD) install-gcc install-target-libgcc + +$(GCC_SRC).tar.gz: + mkdir -p toolchain + cd toolchain && wget $(GCC_URL) + +# +# Clean +# +clean-toolchain: + rm -rf $(GCC_BUILD) $(GCC_SRC) $(BINUTILS_BUILD) $(BINUTILS_SRC) + +clean-toolchain-all: + rm -rf toolchain/* + +.PHONY: toolchain toolchain_binutils toolchain_gcc clean-toolchain clean-toolchain-all