Files
bpfire/lfs/gcc
Michael Tremer 6cf219c427 Drop support for i586
This patch removes support for i586 according to the decision being
taken over a year ago.

It removes the architecture from the build system and removes all
required hacks and other quirks that have been necessary before.

There is no need to ship any changed files to the remaining
architectures as the removed code branches have not been used.

Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
2021-12-04 23:27:26 +01:00

315 lines
9.3 KiB
Plaintext

###############################################################################
# #
# IPFire.org - A linux based firewall #
# Copyright (C) 2007-2021 IPFire Team <info@ipfire.org> #
# #
# This program 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 #
# (at your option) any later version. #
# #
# This program 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 this program. If not, see <http://www.gnu.org/licenses/>. #
# #
###############################################################################
###############################################################################
# Definitions
###############################################################################
include Config
VER = 11.1.0
GMP_VER = 6.2.1
MPFR_VER = 4.1.0
MPC_VER = 1.2.1
THISAPP = gcc-$(VER)
DL_FILE = $(THISAPP).tar.xz
DL_FROM = $(URL_IPFIRE)
DIR_APP = $(DIR_SRC)/$(THISAPP)
ifeq "$(PASS)" "1"
CFLAGS := $(patsubst -march=%,,$(CFLAGS))
CFLAGS := $(patsubst -mfpu=%,,$(CFLAGS))
CFLAGS := $(patsubst -mtune=%,,$(CFLAGS))
CFLAGS := $(patsubst -mfloat-abi=%,,$(CFLAGS))
CFLAGS := $(filter-out -fexceptions,$(CFLAGS))
CFLAGS := $(patsubst -mindirect-branch=%,,$(CFLAGS))
CFLAGS := $(patsubst -mfunction-return=%,,$(CFLAGS))
CFLAGS := $(patsubst -fstack-clash-protection,,$(CFLAGS))
CFLAGS := $(patsubst -fcf-protection,,$(CFLAGS))
endif
CXXFLAGS := $(CFLAGS)
ifeq "$(BUILD_ARCH)" "armv7hl"
FULL_BOOTSTRAP = 1
endif
ifeq "$(BUILD_ARCH)" "armv6l"
FULL_BOOTSTRAP = 1
endif
# Normal build or $(TOOLS_DIR) build.
#
ifeq "$(ROOT)" ""
TARGET = $(DIR_INFO)/$(THISAPP)
EXTRA_CONFIG = \
--prefix=/usr \
--libexecdir=/usr/lib \
--enable-shared \
--enable-threads=posix \
--enable-__cxa_atexit \
--enable-clocale=gnu \
--enable-languages=c,c++ \
--disable-bootstrap \
--disable-nls
EXTRA_MAKE =
EXTRA_INSTALL =
else
ifeq "$(PASS)" "1"
TARGET = $(DIR_INFO)/$(THISAPP)-tools1
EXTRA_CONFIG = \
--target=$(CROSSTARGET) \
--prefix=$(TOOLS_DIR) \
--with-sysroot=$(ROOT) \
--with-local-prefix=$(TOOLS_DIR) \
--with-native-system-header-dir=$(TOOLS_DIR)/include \
--disable-nls \
--disable-shared \
--disable-decimal-float \
--disable-threads \
--disable-libatomic \
--disable-libmudflap \
--disable-libssp \
--disable-libmpx \
--disable-libgomp \
--disable-libquadmath \
--disable-libstdc++-v3 \
--disable-libvtv \
--disable-libcilkrts \
--disable-libitm \
--disable-libsanitizer \
--with-newlib \
--without-headers \
--without-ppl \
--without-cloog \
--enable-languages=c,c++
EXTRA_MAKE =
EXTRA_INSTALL =
else
ifeq "$(PASS)" "2"
TARGET = $(DIR_INFO)/$(THISAPP)-tools2
EXTRA_ENV = \
CC="$(CROSSTARGET)-gcc" \
CXX="$(CROSSTARGET)-g++" \
AR="$(CROSSTARGET)-ar" \
RANLIB="$(CROSSTARGET)-ranlib"
EXTRA_CONFIG = \
--build=$(BUILDTARGET) \
--prefix=$(TOOLS_DIR) \
--with-local-prefix=$(TOOLS_DIR) \
--with-native-system-header-dir=$(TOOLS_DIR)/include \
--enable-languages=c,c++ \
--disable-libstdcxx-pch \
--disable-libgomp
EXTRA_MAKE =
EXTRA_INSTALL =
ifeq "$(FULL_BOOTSTRAP)" "1"
EXTRA_CONFIG += --enable-bootstrap
else
EXTRA_CONFIG += --disable-bootstrap
endif
else
# PASS=L # libstdc++-v3
TARGET = $(DIR_INFO)/$(THISAPP)-libstdc++
EXTRA_ENV = \
CC="$(CROSSTARGET)-gcc" \
AR="$(CROSSTARGET)-ar" \
RANLIB="$(CROSSTARGET)-ranlib"
EXTRA_CONFIG = \
--host=$(CROSSTARGET) \
--prefix=$(TOOLS_DIR) \
--with-sysroot=$(ROOT) \
--disable-shared \
--disable-nls \
--disable-libstdcxx-threads \
--disable-libstdcxx-pch \
--with-gxx-include-dir=$(TOOLS_DIR)/$(CROSSTARGET)/include/c++/$(VER)
EXTRA_MAKE =
EXTRA_INSTALL =
endif
endif
endif
ifeq "$(BUILD_ARCH)" "aarch64"
EXTRA_CONFIG += \
--enable-standard-branch-protection
endif
ifeq "$(BUILD_ARCH)" "armv7hl"
EXTRA_CONFIG += \
--with-float=hard
endif
ifeq "$(BUILD_ARCH)" "armv6l"
EXTRA_CONFIG += \
--with-arch=armv6zk+fp \
--with-float=softfp
# --disable-sjlj-exceptions
endif
ifeq "$(BUILD_ARCH)" "riscv64"
EXTRA_CONFIG += \
--with-arch=rv64gc \
--with-abi=lp64d
endif
EXTRA_CONFIG += \
--disable-multilib \
--with-bugurl=http://bugtracker.ipfire.org \
--disable-libunwind-exceptions \
--enable-gnu-unique-object
export XCFLAGS = $(CFLAGS)
export TCFLAGS = $(CFLAGS)
###############################################################################
# Top-level Rules
###############################################################################
objects = $(DL_FILE) \
gmp-$(GMP_VER).tar.xz \
mpfr-$(MPFR_VER).tar.xz \
mpc-$(MPC_VER).tar.gz
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
gmp-$(GMP_VER).tar.xz = $(DL_FROM)/gmp-$(GMP_VER).tar.xz
mpfr-$(MPFR_VER).tar.xz = $(DL_FROM)/mpfr-$(MPFR_VER).tar.xz
mpc-$(MPC_VER).tar.gz = $(DL_FROM)/mpc-$(MPC_VER).tar.gz
$(DL_FILE)_MD5 = 77f6252be0861ab918042acf42bc10ff
gmp-$(GMP_VER).tar.xz_MD5 = 0b82665c4a92fd2ade7440c13fcaa42b
mpfr-$(MPFR_VER).tar.xz_MD5 = bdd3d5efba9c17da8d83a35ec552baef
mpc-$(MPC_VER).tar.gz_MD5 = 9f16c976c25bb0f76b50be749cd7a3a8
install : $(TARGET)
check : $(patsubst %,$(DIR_CHK)/%,$(objects))
download :$(patsubst %,$(DIR_DL)/%,$(objects))
md5 : $(subst %,%_MD5,$(objects))
###############################################################################
# Downloading, checking, md5sum
###############################################################################
$(patsubst %,$(DIR_CHK)/%,$(objects)) :
@$(CHECK)
$(patsubst %,$(DIR_DL)/%,$(objects)) :
@$(LOAD)
$(subst %,%_MD5,$(objects)) :
@$(MD5)
###############################################################################
# Installation Details
###############################################################################
$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
@$(PREBUILD)
@rm -rf $(DIR_APP) $(DIR_SRC)/gcc-build && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE)
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/gcc/gcc.git-745dae5-remove_cyclades.patch
@mkdir $(DIR_SRC)/gcc-build
cd $(DIR_APP) && sed -i 's/install_to_$$(INSTALL_DEST) //' libiberty/Makefile.in
cd $(DIR_APP) && sed -i gcc/Makefile.in \
-e 's@\./fixinc\.sh@-c true@' \
-e 's/^T_CFLAGS =$$/& -fomit-frame-pointer/'
ifeq "$(TOOLCHAIN)" "1"
# Build gmp and mpfr internally in toolchain.
cd $(DIR_APP) && tar xfa $(DIR_DL)/gmp-$(GMP_VER).tar.xz
cd $(DIR_APP) && mv -v gmp-$(GMP_VER) gmp
cd $(DIR_APP) && tar xfa $(DIR_DL)/mpfr-$(MPFR_VER).tar.xz
cd $(DIR_APP) && mv -v mpfr-$(MPFR_VER) mpfr
cd $(DIR_APP) && tar xfa $(DIR_DL)/mpc-$(MPC_VER).tar.gz
cd $(DIR_APP) && mv -v mpc-$(MPC_VER) mpc
ifeq "$(PASS)" "2"
cd $(DIR_APP) && cat gcc/limitx.h gcc/glimits.h gcc/limity.h > \
`dirname $$($(TOOLS_DIR)/bin/$(CROSSTARGET)-gcc -print-libgcc-file-name)`/include-fixed/limits.h
endif
for file in $$(find $(DIR_APP)/gcc/config -name linux64.h -o -name linux.h \
-o -name sysv4.h -o -name linux-eabi.h -o -name linux-elf.h -o -name aarch64-linux.h); do \
echo "Processing $${file}..."; \
sed -i $${file} \
-e 's@/lib\(64\)\?\(32\)\?/ld@$(TOOLS_DIR)&@g' \
-e 's@/usr@$(TOOLS_DIR)@g'; \
echo '#undef STANDARD_STARTFILE_PREFIX_1' >> $${file}; \
echo '#undef STANDARD_STARTFILE_PREFIX_2' >> $${file}; \
echo '#define STANDARD_STARTFILE_PREFIX_1 "$(TOOLS_DIR)/lib/"' >> $${file}; \
echo '#define STANDARD_STARTFILE_PREFIX_2 ""' >> $${file}; \
done
endif
ifeq "$(PASS)" "L"
# libstdc++ pass
cd $(DIR_SRC)/gcc-build && \
$(EXTRA_ENV) \
$(DIR_APP)/libstdc++-v3/configure \
$(EXTRA_CONFIG)
cd $(DIR_SRC)/gcc-build && make $(EXTRA_MAKE)
cd $(DIR_SRC)/gcc-build && make $(EXTRA_INSTALL) install
else
# The actual build.
cd $(DIR_SRC)/gcc-build && \
$(EXTRA_ENV) \
$(DIR_APP)/configure \
$(EXTRA_CONFIG)
cd $(DIR_SRC)/gcc-build && make $(EXTRA_MAKE) $(MAKETUNING)
cd $(DIR_SRC)/gcc-build && make $(EXTRA_INSTALL) install
endif
ifeq "$(TOOLCHAIN)" "1"
ifeq "$(PASS)" "1"
ln -svf libgcc.a $$($(TOOLS_DIR)/bin/$(CROSSTARGET)-gcc -print-libgcc-file-name | sed 's/libgcc/&_eh/')
endif
ifeq "$(PASS)" "2"
ln -svf gcc $(TOOLS_DIR)/bin/cc
# remove gdb python files from libdir
rm -rf $(TOOLS_DIR)/lib/*-gdb.py
endif
ifeq "$(PASS)" "L"
# Workaround for https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70936
sed -e "s/^#include_next/#include/" -i $(TOOLS_DIR)/$(CROSSTARGET)/include/c++/$(VER)/cstdlib
endif
else # NON-TOOLCHAIN
ln -svf ../usr/bin/cpp /lib
ln -svf gcc /usr/bin/cc
# remove gdb python files from libdir
rm -rf /usr/lib/*-gdb.py
endif
@rm -rf $(DIR_APP) $(DIR_SRC)/gcc-build
@$(POSTBUILD)