################################################################################
# Embtoolkit
# Copyright(C) 2009-2010 Abdoulaye Walsimou GAYE. All rights reserved.
#
# 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 .
#
################################################################################
#
# \file gcc.mk
# \brief gcc.mk of Embtoolkit
# \author Abdoulaye Walsimou GAYE
# \date May 2009
################################################################################
GCC_VERSION := $(subst ",,$(strip $(CONFIG_EMBTK_GCC_VERSION_STRING)))
ifeq ($(CONFIG_EMBTK_GCC_HAVE_MIRROR),y)
GCC_SITE := $(subst ",,$(strip $(CONFIG_EMBTK_GCC_HAVE_MIRROR_SITE)))
else
GCC_SITE := http://ftp.gnu.org/gnu/gcc/gcc-$(GCC_VERSION)
endif
GCC_PATCH_SITE := ftp://ftp.embtoolkit.org/embtoolkit.org/gcc/$(GCC_VERSION)
GCC_PACKAGE := gcc-$(GCC_VERSION).tar.bz2
GCC1_BUILD_DIR := $(TOOLS_BUILD)/gcc1
GCC2_BUILD_DIR := $(TOOLS_BUILD)/gcc2
GCC3_BUILD_DIR := $(TOOLS_BUILD)/gcc3
GCC_MULTILIB := --disable-multilib
GCC_LANGUAGES =c
ifeq ($(CONFIG_EMBTK_GCC_LANGUAGE_CPP),y)
GCC_LANGUAGES +=,c++
endif
ifeq ($(CONFIG_EMBTK_GCC_LANGUAGE_JAVA),y)
GCC_LANGUAGES +=,java
GCC3_CONFIGURE_EXTRA_OPTIONS += --enable-java-home
endif
ifeq ($(CONFIG_EMBTK_GCC_LANGUAGE_OBJECTIVEC),y)
GCC_LANGUAGES +=,objc
endif
ifeq ($(CONFIG_EMBTK_GCC_LANGUAGE_OBJECTIVECPP),y)
GCC_LANGUAGES +=,obj-c++
endif
ifeq ($(CONFIG_EMBTK_GCC_LANGUAGE_FORTRAN),y)
GCC_LANGUAGES +=,fortran
endif
ifeq ($(CONFIG_EMBTK_GCC_LANGUAGE_ADA),y)
GCC_LANGUAGES +=,ada
endif
GCC_LANGUAGES :=$(patsubst "",,$(GCC_LANGUAGES))
#Disable tls when creating uClibc toolchain with linuxthreads
ifeq ($(CONFIG_EMBTK_CLIB_UCLIBC),y)
GCC3_CONFIGURE_EXTRA_OPTIONS += \
$(if $(CONFIG_KEMBTK_UCLIBC_UCLIBC_HAS_THREADS_NATIVE),,--disable-tls)
endif
gcc1_install: $(GCC1_BUILD_DIR)/.built
gcc2_install: $(GCC2_BUILD_DIR)/.built
gcc3_install: $(GCC3_BUILD_DIR)/.installed
#GCC first stage
$(GCC1_BUILD_DIR)/.built: download_gcc $(GCC1_BUILD_DIR)/.decompressed \
$(GCC1_BUILD_DIR)/.configured
PATH=$(PATH):$(TOOLS)/bin/ $(MAKE) -C $(GCC1_BUILD_DIR) $(J)
PATH=$(PATH):$(TOOLS)/bin/ $(MAKE) -C $(GCC1_BUILD_DIR) install
@touch $@
download_gcc:
@test -e $(DOWNLOAD_DIR)/$(GCC_PACKAGE) || \
wget -O $(DOWNLOAD_DIR)/$(GCC_PACKAGE) $(GCC_SITE)/$(GCC_PACKAGE)
ifeq ($(CONFIG_EMBTK_GCC_NEED_PATCH),y)
@test -e $(DOWNLOAD_DIR)/gcc-$(GCC_VERSION).patch || \
wget -O $(DOWNLOAD_DIR)/gcc-$(GCC_VERSION).patch \
$(GCC_PATCH_SITE)/gcc-$(GCC_VERSION)-*.patch
endif
$(GCC1_BUILD_DIR)/.decompressed:
$(call DECOMPRESS_MESSAGE,$(GCC_PACKAGE))
@tar -C $(TOOLS_BUILD) -xjf $(DOWNLOAD_DIR)/$(GCC_PACKAGE)
ifeq ($(CONFIG_EMBTK_GCC_NEED_PATCH),y)
cd $(TOOLS_BUILD)/gcc-$(GCC_VERSION); \
patch -p1 < $(DOWNLOAD_DIR)/gcc-$(GCC_VERSION).patch
endif
@mkdir -p $(GCC1_BUILD_DIR)
@touch $@
$(GCC1_BUILD_DIR)/.configured:
$(call CONFIGURE_MESSAGE,gcc-$(GCC_VERSION))
cd $(GCC1_BUILD_DIR); CC=$(HOSTCC_CACHED) CXX=$(HOSTCXX_CACHED) \
$(TOOLS_BUILD)/gcc-$(GCC_VERSION)/configure \
--prefix=$(TOOLS) --with-sysroot=$(SYSROOT) \
--target=$(STRICT_GNU_TARGET) $(GCC_WITH_ABI) $(GCC_WITH_ARCH) \
$(GCC_WITH_CPU) $(GCC_WITH_FLOAT) $(GCC_MULTILIB) $(GCC_WITH_TUNE) \
--host=$(HOST_ARCH) --build=$(HOST_BUILD) \
--without-headers --with-newlib --disable-shared --disable-threads \
--disable-libssp --disable-libgomp --disable-libmudflap --disable-nls \
--enable-languages=c --enable-target-optspace \
--with-gmp=$(GMP_HOST_DIR) --with-mpfr=$(MPFR_HOST_DIR) \
--with-mpc=$(MPC_HOST_DIR) \
--with-pkgversion=embtoolkit-$(EMBTK_VERSION) \
--with-bugurl=$(EMBTK_BUGURL)
@touch $@
#GCC second stage
$(GCC2_BUILD_DIR)/.built: $(GCC2_BUILD_DIR)/.configured
PATH=$(PATH):$(TOOLS)/bin/ $(MAKE) -C $(GCC2_BUILD_DIR) $(J)
PATH=$(PATH):$(TOOLS)/bin/ $(MAKE) -C $(GCC2_BUILD_DIR) install
@touch $@
$(GCC2_BUILD_DIR)/.configured:
$(call CONFIGURE_MESSAGE,gcc-$(GCC_VERSION))
@mkdir -p $(GCC2_BUILD_DIR)
cd $(GCC2_BUILD_DIR); CC=$(HOSTCC_CACHED) CXX=$(HOSTCXX_CACHED) \
$(TOOLS_BUILD)/gcc-$(GCC_VERSION)/configure \
--prefix=$(TOOLS) --with-sysroot=$(SYSROOT) \
--target=$(STRICT_GNU_TARGET) $(GCC_WITH_ABI) $(GCC_WITH_ARCH) \
$(GCC_WITH_CPU) $(GCC_WITH_FLOAT) $(GCC_MULTILIB) $(GCC_WITH_TUNE) \
--host=$(HOST_ARCH) --build=$(HOST_BUILD) \
--disable-libssp --disable-libgomp --disable-libmudflap --disable-nls \
--enable-languages=c --enable-target-optspace \
--with-gmp=$(GMP_HOST_DIR) --with-mpfr=$(MPFR_HOST_DIR) \
--with-mpc=$(MPC_HOST_DIR) \
--with-pkgversion=embtoolkit-$(EMBTK_VERSION) \
--with-bugurl=$(EMBTK_BUGURL)
@touch $@
#GCC last stage
$(GCC3_BUILD_DIR)/.installed: $(GCC3_BUILD_DIR)/.configured
PATH=$(PATH):$(TOOLS)/bin/ $(MAKE) -C $(GCC3_BUILD_DIR) $(J)
PATH=$(PATH):$(TOOLS)/bin/ $(MAKE) -C $(GCC3_BUILD_DIR) install
ifeq ($(CONFIG_EMBTK_32BITS_FS),y)
-cp -d $(TOOLS)/$(STRICT_GNU_TARGET)/lib/*.so* $(SYSROOT)/lib/
else ifeq ($(CONFIG_EMBTK_64BITS_FS),y)
cp -d $(TOOLS)/$(STRICT_GNU_TARGET)/lib64/*.so* $(SYSROOT)/lib/
else ifeq ($(CONFIG_EMBTK_64BITS_FS_COMPAT32),y)
cp -d $(TOOLS)/$(STRICT_GNU_TARGET)/lib32/*.so* $(SYSROOT)/lib32/
endif
ifeq ($(CONFIG_EMBTK_64BITS_FS),y)
ifeq ($(CONFIG_EMBTK_CLIB_UCLIBC),y)
$(Q)cd $(SYSROOT)/lib/; \
ln -s ld-uClibc.so.0 ld64-uClibc.so.0
endif
endif
@touch $@
$(GCC3_BUILD_DIR)/.configured:
$(call CONFIGURE_MESSAGE,gcc-$(GCC_VERSION))
@mkdir -p $(GCC3_BUILD_DIR)
cd $(GCC3_BUILD_DIR); CC=$(HOSTCC_CACHED) CXX=$(HOSTCXX_CACHED) \
$(TOOLS_BUILD)/gcc-$(GCC_VERSION)/configure \
--prefix=$(TOOLS) --with-sysroot=$(SYSROOT) \
--target=$(STRICT_GNU_TARGET) $(GCC_WITH_ABI) $(GCC_WITH_ARCH) \
$(GCC_WITH_CPU) $(GCC_WITH_FLOAT) $(GCC_MULTILIB) $(GCC_WITH_TUNE) \
--host=$(HOST_ARCH) --build=$(HOST_BUILD) --enable-__cxa_atexit \
--disable-libssp --disable-libgomp --disable-libmudflap --disable-nls \
--enable-threads --enable-shared --enable-target-optspace \
--with-gmp=$(GMP_HOST_DIR) --with-mpfr=$(MPFR_HOST_DIR) \
--with-mpc=$(MPC_HOST_DIR) \
--enable-languages=`echo $(GCC_LANGUAGES) | sed 's/ //g'` \
$(GCC3_CONFIGURE_EXTRA_OPTIONS) \
--with-pkgversion=embtoolkit-$(EMBTK_VERSION) \
--with-bugurl=$(EMBTK_BUGURL)
@touch $@