################################################################################
# Embtoolkit
# Copyright(C) 2009-2012 Abdoulaye Walsimou GAYE.
#
# 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 2 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_NAME := gcc
GCC_VERSION := $(call embtk_get_pkgversion,gcc)
GCC_SITE := http://ftp.gnu.org/gnu/gcc/gcc-$(GCC_VERSION)
GCC_GIT_SITE := git://gcc.gnu.org/git/gcc.git
GCC_PACKAGE := gcc-$(GCC_VERSION).tar.bz2
GCC_SRC_DIR := $(embtk_toolsb)/gcc-$(GCC_VERSION)
GCC_MULTILIB := --disable-multilib
#
# Selected languages to support in the toolchain
#
__GCC_LANGUAGES := c
__GCC_LANGUAGES += $(if $(CONFIG_EMBTK_GCC_LANGUAGE_CPP),c++)
__GCC_LANGUAGES += $(if $(CONFIG_EMBTK_GCC_LANGUAGE_JAVA),java)
__GCC_LANGUAGES += $(if $(CONFIG_EMBTK_GCC_LANGUAGE_OBJECTIVEC),objc)
__GCC_LANGUAGES += $(if $(CONFIG_EMBTK_GCC_LANGUAGE_OBJECTIVECPP),obj-c++)
__GCC_LANGUAGES += $(if $(CONFIG_EMBTK_GCC_LANGUAGE_FORTRAN),fortran)
__GCC_LANGUAGES += $(if $(CONFIG_EMBTK_GCC_LANGUAGE_ADA),ada)
GCC_LANGUAGES := $(subst $(embtk_space),$(embtk_comma),$(strip $(__GCC_LANGUAGES)))
GCC_CXA_ATEXIT-$(CONFIG_EMBTK_GCC_LANGUAGE_CPP) := --enable-__cxa_atexit
GCC_CXA_ATEXIT-$(CONFIG_EMBTK_GCC_LANGUAGE_OBJECTIVECPP) := --enable-__cxa_atexit
#
# Final GCC extra configure options
#
GCC3_CONFIGURE_EXTRA_OPTIONS += $(if $(CONFIG_EMBTK_GCC_LANGUAGE_JAVA), \
--enable-java-home)
# 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
define embtk_install_gcc1
$(call __embtk_install_hostpkg,gcc1)
endef
define embtk_install_gcc2
$(call __embtk_install_hostpkg,gcc2)
endef
define embtk_install_gcc3
$(call __embtk_install_hostpkg,gcc3)
endef
#
# GCC first stage
#
GCC1_NAME := $(GCC_NAME)
GCC1_VERSION := $(GCC_VERSION)
GCC1_SITE := $(GCC_SITE)
GCC1_GIT_SITE := $(GCC_GIT_SITE)
GCC1_PACKAGE := $(GCC_PACKAGE)
GCC1_SRC_DIR := $(GCC_SRC_DIR)
GCC1_BUILD_DIR := $(embtk_toolsb)/gcc1-build
GCC1_KCONFIGS_NAME := GCC
GCC1_MAKE_ENV := PATH=$(PATH):$(embtk_tools)/bin
GCC1_PREFIX := $(embtk_tools)
GCC1_CONFIGURE_OPTS := --with-sysroot=$(embtk_sysroot) \
--target=$(STRICT_GNU_TARGET) $(GCC_WITH_ABI) $(GCC_WITH_ARCH) \
$(GCC_WITH_CPU) $(GCC_WITH_FLOAT) $(GCC_WITH_FPU) $(GCC_WITH_TUNE) \
$(GCC_MULTILIB) \
--with-gmp=$(GMP_HOST_DIR) --with-mpfr=$(MPFR_HOST_DIR) \
--with-mpc=$(MPC_HOST_DIR) --with-bugurl=$(EMBTK_BUGURL) \
--with-pkgversion=embtoolkit-$(EMBTK_VERSION) \
--without-headers --with-newlib --disable-shared --disable-threads \
--disable-libssp --disable-libgomp --disable-libmudflap --disable-nls \
--enable-languages=c --enable-target-optspace --disable-libquadmath
CONFIG_EMBTK_GCC1_VERSION_GIT := $(CONFIG_EMBTK_GCC_VERSION_GIT)
CONFIG_EMBTK_GCC1_REFSPEC := $(CONFIG_EMBTK_GCC_REFSPEC)
#
# GCC second stage
#
GCC2_NAME := $(GCC_NAME)
GCC2_VERSION := $(GCC_VERSION)
GCC2_SITE := $(GCC_SITE)
GCC2_GIT_SITE := $(GCC_GIT_SITE)
GCC2_PACKAGE := $(GCC_PACKAGE)
GCC2_SRC_DIR := $(GCC_SRC_DIR)
GCC2_BUILD_DIR := $(embtk_toolsb)/gcc2-build
GCC2_KCONFIGS_NAME := GCC
GCC2_MAKE_ENV := PATH=$(PATH):$(embtk_tools)/bin
GCC2_PREFIX := $(embtk_tools)
GCC2_CONFIGURE_OPTS := --with-sysroot=$(embtk_sysroot) \
--target=$(STRICT_GNU_TARGET) $(GCC_WITH_ABI) $(GCC_WITH_ARCH) \
$(GCC_WITH_CPU) $(GCC_WITH_FLOAT) $(GCC_WITH_FPU) $(GCC_WITH_TUNE) \
$(GCC_MULTILIB) \
--with-gmp=$(GMP_HOST_DIR) --with-mpfr=$(MPFR_HOST_DIR) \
--with-mpc=$(MPC_HOST_DIR) --with-bugurl=$(EMBTK_BUGURL) \
--with-pkgversion=embtoolkit-$(EMBTK_VERSION) \
--disable-libquadmath \
--disable-libssp --disable-libgomp --disable-libmudflap --disable-nls \
--enable-languages=c --enable-target-optspace --enable-threads \
$(GCC_CXA_ATEXIT-y)
CONFIG_EMBTK_GCC2_VERSION_GIT := $(CONFIG_EMBTK_GCC_VERSION_GIT)
CONFIG_EMBTK_GCC2_REFSPEC := $(CONFIG_EMBTK_GCC_REFSPEC)
define __embtk_postinstall_gcc2
($(if $(CONFIG_EMBTK_32BITS_FS), \
cp -d $(embtk_tools)/$(STRICT_GNU_TARGET)/lib/*.so* \
$(embtk_sysroot)/lib/ &&) \
$(if $(CONFIG_EMBTK_64BITS_FS), \
cp -d $(embtk_tools)/$(STRICT_GNU_TARGET)/lib64/*.so* \
$(embtk_sysroot)/lib/ &&) \
$(if $(CONFIG_EMBTK_64BITS_FS_COMPAT32), \
cp -d $(embtk_tools)/$(STRICT_GNU_TARGET)/lib32/*.so* \
$(embtk_sysroot)/lib32/ &&) \
$(if $(CONFIG_EMBTK_64BITS_FS), \
$(if $(CONFIG_EMBTK_CLIB_UCLIBC), \
cd $(embtk_sysroot)/lib/; \
ln -sf ld-uClibc.so.0 ld64-uClibc.so.0 &&)) \
touch $(GCC2_BUILD_DIR)/.gcc.embtk.postinstall)
endef
define embtk_postinstall_gcc2
$(if $(CONFIG_EMBTK_LLVM_ONLY_TOOLCHAIN),
[ -e $(GCC2_BUILD_DIR)/.gcc.embtk.postinstall ] || \
$(__embtk_postinstall_gcc2),true)
endef
#
# GCC last stage
#
GCC3_NAME := $(GCC_NAME)
GCC3_VERSION := $(GCC_VERSION)
GCC3_SITE := $(GCC_SITE)
GCC3_GIT_SITE := $(GCC_GIT_SITE)
GCC3_PACKAGE := $(GCC_PACKAGE)
GCC3_SRC_DIR := $(GCC_SRC_DIR)
GCC3_BUILD_DIR := $(embtk_toolsb)/gcc3-build
GCC3_KCONFIGS_NAME := GCC
GCC3_MAKE_ENV := PATH=$(PATH):$(embtk_tools)/bin
GCC3_PREFIX := $(embtk_tools)
GCC3_CONFIGURE_OPTS := --with-sysroot=$(embtk_sysroot) \
--target=$(STRICT_GNU_TARGET) $(GCC_WITH_ABI) $(GCC_WITH_ARCH) \
$(GCC_WITH_CPU) $(GCC_WITH_FLOAT) $(GCC_WITH_FPU) $(GCC_WITH_TUNE) \
$(GCC_MULTILIB) \
--with-gmp=$(GMP_HOST_DIR) --with-mpfr=$(MPFR_HOST_DIR) \
--with-mpc=$(MPC_HOST_DIR) --with-bugurl=$(EMBTK_BUGURL) \
--with-pkgversion=embtoolkit-$(EMBTK_VERSION) \
--disable-libssp --disable-libgomp --disable-libmudflap --disable-nls \
--disable-libquadmath \
--enable-languages=$(GCC_LANGUAGES) $(GCC_CXA_ATEXIT-y) \
--enable-threads --enable-shared --enable-target-optspace \
$(GCC3_CONFIGURE_EXTRA_OPTIONS)
CONFIG_EMBTK_GCC3_VERSION_GIT := $(CONFIG_EMBTK_GCC_VERSION_GIT)
CONFIG_EMBTK_GCC3_REFSPEC := $(CONFIG_EMBTK_GCC_REFSPEC)
define __embtk_postinstall_gcc3
($(if $(CONFIG_EMBTK_32BITS_FS), \
cp -d $(embtk_tools)/$(STRICT_GNU_TARGET)/lib/*.so* \
$(embtk_sysroot)/lib/ &&) \
$(if $(CONFIG_EMBTK_64BITS_FS), \
cp -d $(embtk_tools)/$(STRICT_GNU_TARGET)/lib64/*.so* \
$(embtk_sysroot)/lib/ &&) \
$(if $(CONFIG_EMBTK_64BITS_FS_COMPAT32), \
cp -d $(embtk_tools)/$(STRICT_GNU_TARGET)/lib32/*.so* \
$(embtk_sysroot)/lib32/ &&) \
$(if $(CONFIG_EMBTK_64BITS_FS), \
$(if $(CONFIG_EMBTK_CLIB_UCLIBC), \
cd $(embtk_sysroot)/lib/; \
ln -sf ld-uClibc.so.0 ld64-uClibc.so.0 &&)) \
touch $(GCC3_BUILD_DIR)/.gcc3_post_install)
endef
define embtk_postinstall_gcc3
[ -e $(GCC3_BUILD_DIR)/.gcc3_post_install ] || \
$(__embtk_postinstall_gcc3)
endef
#
# clean up macros and targets
#
define embtk_cleanup_gcc1
rm -rf $(GCC1_BUILD_DIR)
endef
define embtk_cleanup_gcc2
rm -rf $(GCC2_BUILD_DIR)
endef
define embtk_cleanup_gcc3
rm -rf $(GCC3_BUILD_DIR)
endef