130 lines
5.3 KiB
Makefile
130 lines
5.3 KiB
Makefile
#=----------------------------------------------------------------------------=#
|
|
# OS/K CROSS COMPILER BUILDER #
|
|
# #
|
|
# Desc: Project Makefile #
|
|
# #
|
|
# #
|
|
# Copyright © 2018-2020 The OS/K Team #
|
|
# #
|
|
# This file is part of OS/K. #
|
|
# #
|
|
# OS/K is free software: you can redistribute it and/or modify #
|
|
# it under the terms of the GNU General Public License as published by #
|
|
# the Free Software Foundation, either version 3 of the License, or #
|
|
# any later version. #
|
|
# #
|
|
# OS/K is distributed in the hope that it will be useful, #
|
|
# but WITHOUT ANY WARRANTY# without even the implied warranty of #
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
|
|
# GNU General Public License for more details. #
|
|
# #
|
|
# You should have received a copy of the GNU General Public License #
|
|
# along with OS/K. If not, see <https://www.gnu.org/licenses/>. #
|
|
#=----------------------------------------------------------------------------=#
|
|
|
|
.PHONY: retrieve compile showenv deflate clean cross-cc
|
|
.DEFAULT_GOAL := cross-cc
|
|
|
|
|
|
## VERSIONS ------------------------------------------------------------------ #
|
|
|
|
|
|
GCC_NAME =gcc-12.2.0
|
|
BINUTILS_NAME =binutils-2.39
|
|
GCC_SOURCES = https://ftp.gnu.org/gnu/gcc/$(GCC_NAME)/$(GCC_NAME).tar.xz
|
|
BINUTILS_SOURCES = https://ftp.gnu.org/gnu/binutils/$(BINUTILS_NAME).tar.xz
|
|
|
|
|
|
## VARIABLES ----------------------------------------------------------------- #
|
|
|
|
#ENV
|
|
export NTHREADS := $(shell nproc)
|
|
export PREFIX := $(shell pwd)/cross-cc
|
|
export TARGET := x86_64-elf
|
|
export PATH := $(PREFIX)/bin:$(PATH)
|
|
export XZ_DEFAULTS := -T $(NTHREADS)
|
|
|
|
|
|
GCCTARNAME = gcc.tar.xz
|
|
BINUTILSTARNAME = binutils.tar.xz
|
|
GCCDIRNAME = gcc-src
|
|
BINUTILSDIRNAME = binutils-src
|
|
|
|
# Color codes
|
|
CL='\033[0;32m'
|
|
CL2='\033[1;36m'
|
|
CL3='\033[0m'
|
|
NC='\033[1;37m'
|
|
|
|
|
|
## RECIPES ------------------------------------------------------------------- #
|
|
|
|
showenv:
|
|
@echo -e Installation path prefix : $(PREFIX)
|
|
@echo -e Installation path : $(PATH)
|
|
@echo -e Target : $(TARGET)
|
|
@echo -e Thread number : $(NTHREADS)
|
|
|
|
$(GCCTARNAME):
|
|
@echo -e ${CL2}[$@] ${NC}Downloading GCC sources...${CL3}
|
|
@wget $(GCC_SOURCES) -O $(GCCTARNAME) -q -c --show-progress
|
|
@echo -e ${CL2}[$@] ${CL}Success.${CL3}
|
|
|
|
$(BINUTILSTARNAME):
|
|
@echo -e ${CL2}[$@] ${NC}Downloading BINUTILS sources...${CL3}
|
|
@wget $(BINUTILS_SOURCES) -O $(BINUTILSTARNAME) -q -c --show-progress
|
|
@echo -e ${CL2}[$@] ${CL}Success.${CL3}
|
|
|
|
./build-binutils: $(BINUTILSTARNAME)
|
|
@echo -e ${CL2}[$@] ${NC}Deflate $(BINUTILS_NAME) sources...${CL3}
|
|
@tar -xaf $(BINUTILSTARNAME) --skip-old-files
|
|
@echo -e ${CL2}[$@] ${CL}Success.${CL3}
|
|
@echo -e ${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 -e ${CL2}[$@] ${CL}Success.${CL3}
|
|
|
|
$(PREFIX)/bin/x86_64-elf-objcopy: ./build-binutils
|
|
@echo -e ${CL2}[$@] ${NC}Compiling $(BINUTILS_NAME)...${CL3}
|
|
cd build-binutils && make -j $(NTHREADS)
|
|
@echo -e ${CL2}[$@] ${NC}Compiling $(BINUTILS_NAME)...${CL3}
|
|
@mkdir -p cross-cc
|
|
cd build-binutils && make install -j $(NTHREADS)
|
|
@echo -e ${CL2}[$@] ${CL}Success.${CL3}
|
|
|
|
./build-gcc: $(GCCTARNAME)
|
|
@echo -e ${CL2}[$@] ${NC}Deflate $(GCC_NAME) sources...${CL3}
|
|
@tar -xaf $(GCCTARNAME) --skip-old-files
|
|
@echo -e ${CL2}[$@] ${CL}Success.${CL3}
|
|
@echo -e ${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 -e ${CL2}[$@] ${CL}Success.${CL3}
|
|
|
|
$(PREFIX)/bin/x86_64-elf-gcc: $(PREFIX)/bin/x86_64-elf-objcopy ./build-gcc
|
|
@echo -e ${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 cross-cc
|
|
cd build-gcc && make install-gcc -j $(NTHREADS)
|
|
cd build-gcc && make install-target-libgcc -j $(NTHREADS)
|
|
@echo -e ${CL2}[$@] ${CL}The cross compiler has been successfully compiled.${CL3}
|
|
@echo -e It is located in the cross-cc subdirectory.
|
|
|
|
clean:
|
|
cd build-gcc && make clean
|
|
cd build-binutils && make clean
|
|
@rm -rf cross-cc
|
|
-@rm -rf $(GCC_NAME)/gcc/config/i386/t-x86_64-elf
|
|
-@echo -e ${CL2}[$@] ${CL}Success.${CL3}
|
|
|
|
|
|
remove_all:
|
|
@rm -rf *gcc*
|
|
@rm -rf *bin*
|
|
@echo -e ${CL2}[$@] ${CL}Success.${CL3}
|
|
|
|
cross-cc: $(PREFIX)/bin/x86_64-elf-gcc
|