diff options
author | Abdoulaye Walsimou Gaye <awg@embtoolkit.org> | 2014-03-19 00:08:11 +0100 |
---|---|---|
committer | Abdoulaye Walsimou Gaye <awg@embtoolkit.org> | 2014-03-19 00:08:11 +0100 |
commit | 13b06c297ebbf63be00f725894391630c5d516bc (patch) | |
tree | a088d1ab5003254f64ebf7be24dbf84c12684f33 /core/toolchain/toolchain.mk | |
parent | 60099890f36754d9fd4c1ec00d9679ba3de5d3b6 (diff) | |
download | embtoolkit-13b06c297ebbf63be00f725894391630c5d516bc.tar.gz embtoolkit-13b06c297ebbf63be00f725894391630c5d516bc.tar.bz2 embtoolkit-13b06c297ebbf63be00f725894391630c5d516bc.tar.xz |
Move toolchain/ to core/
Signed-off-by: Abdoulaye Walsimou Gaye <awg@embtoolkit.org>
Diffstat (limited to 'core/toolchain/toolchain.mk')
-rw-r--r-- | core/toolchain/toolchain.mk | 299 |
1 files changed, 299 insertions, 0 deletions
diff --git a/core/toolchain/toolchain.mk b/core/toolchain/toolchain.mk new file mode 100644 index 0000000..2941906 --- /dev/null +++ b/core/toolchain/toolchain.mk @@ -0,0 +1,299 @@ +################################################################################ +# Copyright(C) 2009-2014 Abdoulaye Walsimou GAYE <awg@embtoolkit.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 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 <http://www.gnu.org/licenses/>. +# +################################################################################ +# +# \file toolchain.mk +# \brief toolchain.mk of Embtoolkit +# \author Abdoulaye Walsimou GAYE <awg@embtoolkit.org> +# \date May 2009 +################################################################################ + +embtk_pkgincdir := toolchain + +# +# Toolchain variables +# +include core/toolchain/vars.mk +include packages/htools/ccache/vars.mk + +# GMP +include core/mk/gmp.mk + +# MPFR +include core/mk/mpfr.mk + +# MPC +include core/mk/mpc.mk + +# +# binutils +# +include core/toolchain/binutils/binutils.mk + +# +# GCC +# +include core/toolchain/gcc/gcc.mk + +# +# llvm/clang compiler infrastructure +# +include core/toolchain/llvm/clang/clang.mk +include core/toolchain/llvm/llvm/llvm.mk +include core/toolchain/llvm/compiler-rt/compiler-rt.mk +include core/toolchain/libcxxrt/libcxxrt.mk +include core/toolchain/llvm/libc++/libcxx.mk + +# +# linux kernel headers +# +include core/mk/linux.mk + +# +# toolchain addon: strace +# +include core/mk/strace.mk +TOOLCHAIN_ADDONS-$(CONFIG_EMBTK_HAVE_STRACE) += strace_install + +# +# toolchain addon: gdb +# +include packages/development/gdb/gdb.mk +TOOLCHAIN_ADDONS-$(CONFIG_EMBTK_HAVE_GDB) += gdb_install +TOOLCHAIN_ADDONS-$(CONFIG_EMBTK_HAVE_GDBSERVER) += gdbserver_install +TOOLCHAIN_ADDONS-$(CONFIG_EMBTK_HOST_HAVE_GDB) += gdb_host_install + +# +# Autotools +# +include core/mk/libtool.mk +include core/mk/autoconf.mk +include core/mk/automake.mk +include core/mk/m4.mk +AUTOTOOLS_INSTALL := m4_install libtool_install autoconf_install +AUTOTOOLS_INSTALL += automake_install + +# GNU sed +include core/mk/gsed.mk + +# BSD make +include core/mk/bmake.mk + +# GNU make +include core/mk/gmake.mk + +# +# Toolchain virtual package internals +# +__xtools_compiler-$(CONFIG_EMBTK_LLVM_ONLY_TOOLCHAIN) := clangllvm-$(LLVM_VERSION) +__xtools_compiler-$(CONFIG_EMBTK_LLVM_DEFAULT_TOOLCHAIN) := clangllvm-$(LLVM_VERSION) +__xtools_compiler-$(CONFIG_EMBTK_GCC_ONLY_TOOLCHAIN) := gcc-$(GCC_VERSION) +__xtools_compiler-$(CONFIG_EMBTK_GCC_DEFAULT_TOOLCHAIN) := gcc-$(GCC_VERSION) +__xtools_bins := $(__xtools_compiler-y)-$(embtk_clib)-$(embtk_clib_version) + +TOOLCHAIN_PACKAGE := toolchain-$(HOST_ARCH)-target-$(__xtools_archos)-$(__xtools_bins)-$(__xtools_env).tar.bz2 +TOOLCHAIN_DIR := $(embtk_generated)/toolchains/toolchain-$(__xtools_archos)-$(__xtools_bins)-$(__xtools_env) +TOOLCHAIN_NAME := toolchain +TOOLCHAIN_BUILD_DIR := $(TOOLCHAIN_DIR)/.embtk-toolchain +TOOLCHAIN_SRC_DIR := $(TOOLCHAIN_DIR)/.embtk-toolchain + +TOOLCHAIN_PRE_DEPS-y := ccache_host_install $(AUTOTOOLS_INSTALL) pkgconf_host_install +ifeq ($(embtk_buildhost_os_type),bsd) +TOOLCHAIN_PRE_DEPS-y += gsed_install gmake_install +endif +TOOLCHAIN_PRE_DEPS-$(CONFIG_EMBTK_TOOLCHAIN_PREDEP_GPERF_HOST) += gperf_host_install + +__gcc3_toolchain-$(CONFIG_EMBTK_GCC_ONLY_TOOLCHAIN) := gcc3_install +__gcc3_toolchain-$(CONFIG_EMBTK_GCC_DEFAULT_TOOLCHAIN) := gcc3_install +# FIXME: When libc++ will be used with clang/llvm toolchain, remove this +__gcc3_toolchain-$(CONFIG_EMBTK_GCC_LANGUAGE_CPP) := gcc3_install + +__gcc3_toolchain-$(CONFIG_EMBTK_GCC_LANGUAGE_OBJECTIVEC) := gcc3_install +__gcc3_toolchain-$(CONFIG_EMBTK_GCC_LANGUAGE_OBJECTIVECPP) := gcc3_install + +# +# Handle clang/llvm/uClibc based toolchain where linuxthread.old is used or non +# threading is used at all. +# FIXME: print a warning + +ifeq ($(CONFIG_EMBTK_HAVE_COMPILER-RT)$(CONFIG_KEMBTK_UCLIBC_LINUXTHREADS_OLD),yy) +else ifeq ($(CONFIG_EMBTK_HAVE_COMPILER-RT)$(CONFIG_KEMBTK_UCLIBC_LINUXTHREADS_OLD),yy) +else +__llvm_compiler-rt-$(CONFIG_EMBTK_HAVE_COMPILER-RT) := compiler-rt_install +endif + +TOOLCHAIN_DEPS-y := linux_headers_install gmp_host_install +TOOLCHAIN_DEPS-y += mpfr_host_install mpc_host_install binutils_install +TOOLCHAIN_DEPS-$(CONFIG_EMBTK_HAVE_LLVM) += llvm_install +TOOLCHAIN_DEPS-y += gcc1_install +TOOLCHAIN_DEPS-$(CONFIG_EMBTK_CLIB_UCLIBC) += $(embtk_clib)_headers_install gcc2_install +TOOLCHAIN_DEPS-y += $(embtk_clib)_install +TOOLCHAIN_DEPS-y += $(__gcc3_toolchain-y) $(__llvm_compiler-rt-y) + +TOOLCHAIN_DEPS := $(TOOLCHAIN_DEPS-y) +TOOLCHAIN_ADDONS_NAME := toolchain_addons +TOOLCHAIN_ADDONS_DEPS := $(TOOLCHAIN_ADDONS-y) +TOOLCHAIN_ADDONS_BUILD_DIR := $(TOOLCHAIN_DIR)/.embtk-toolchain_addons +TOOLCHAIN_ADDONS_SRC_DIR := $(TOOLCHAIN_DIR)/.embtk-toolchain_addons + +-include core/mk/$(embtk_clib).mk + +define __embtk_toolchain_mkinitdirs + mkdir -p $(embtk_generated) + mkdir -p $(TOOLCHAIN_DIR) + mkdir -p $(TOOLCHAIN_ADDONS_BUILD_DIR) + $(__embtk_mk_initsysrootdirs) + $(__embtk_mk_inittoolsdirs) + $(__embtk_mk_inithosttoolsdirs) + $(__embtk_mk_initpkgdirs) +endef + +define __embtk_toolchain_symlinktools + cd $(embtk_tools)/bin; \ + tools=$$(ls $(STRICT_GNU_TARGET)-*); \ + toolsnames=$$(echo $$tools | sed 's/$(STRICT_GNU_TARGET)-*//g'); \ + for tool in $$toolsnames; do \ + ln -sf $(STRICT_GNU_TARGET)-$$tool $(GNU_TARGET)-$$tool; \ + done +endef + +define __embtk_toolchain_compress + cd $(embtk_generated); \ + tar -cjf $(TOOLCHAIN_PACKAGE) \ + $(notdir $(embtk_sysroot)) $(notdir $(embtk_tools)) && \ + mv $(TOOLCHAIN_PACKAGE) $(TOOLCHAIN_DIR)/$(TOOLCHAIN_PACKAGE) +endef + +define ___embtk_toolchain_decompress + rm -rf $(embtk_sysroot) $(embtk_tools) + cd $(embtk_generated) && tar xjf $(TOOLCHAIN_DIR)/$(TOOLCHAIN_PACKAGE) + $(__embtk_toolchain_mkinitdirs) + $(MAKE) $(TOOLCHAIN_PRE_DEPS-y) +endef + +define __embtk_toolchain_decompress + $(if $(call __embtk_pkg_notdecompressed-y,toolchain), + $(call embtk_pinfo,"Decompressing cached $(GNU_TARGET)/$(EMBTK_MCU_FLAG) toolchain - please wait...") + $(___embtk_toolchain_decompress) + $(call __embtk_setdecompressed_pkg,toolchain)) +endef + +__embtk_toolchain_deps-y = $(patsubst %_install,%,$(TOOLCHAIN_DEPS)) +__embtk_toolchain_predeps-y = $(patsubst %_install,%,$(TOOLCHAIN_PRE_DEPS-y)) +__embtk_toolchain_addons-y = $(patsubst %_install,%,$(TOOLCHAIN_ADDONS-y)) +__embtk_toolchain_addons-n = $(patsubst %_install,%,$(TOOLCHAIN_ADDONS-)) +__embtk_toolchain_built_msg = $(call embtk_pinfo,"New $(GNU_TARGET)/$(EMBTK_MCU_FLAG) toolchain successfully built!") +__embtk_toolchain_building_msg = $(call embtk_pinfo,"Building new $(GNU_TARGET)/$(EMBTK_MCU_FLAG) CORE toolchain - please wait...") +__embtk_toolsaddons_build_msg = $(call embtk_pinfo,"Building new $(GNU_TARGET)/$(EMBTK_MCU_FLAG) toolchain ADDONS - please wait...") + +define __embtk_toolchain_build_core + $(__embtk_toolchain_building_msg) + $(call __embtk_unsetinstalled_pkg,toolchain) + $(call __embtk_unsetdecompressed_pkg,toolchain) + $(foreach dep,$(__embtk_toolchain_deps-y), + $(call embtk_cleanup_pkg,$(dep))) + $(foreach pkg,$(__embtk_rootfs_pkgs-y), + $(call embtk_cleanup_pkg,$(pkg))) + $(foreach pkgn,$(__embtk_rootfs_pkgs-n), + $(call embtk_cleanup_pkg,$(pkgn))) + rm -rf $(embtk_sysroot) $(embtk_tools) + $(__embtk_toolchain_mkinitdirs) + $(foreach pdep,$(__embtk_toolchain_predeps-y), + $(call embtk_install_xpkg,$(pdep))) + $(foreach dep,$(__embtk_toolchain_deps-y), + $(call embtk_install_xpkg,$(dep))) + $(call __embtk_setinstalled_pkg,toolchain) + $(call __embtk_pkg_gen_dotkconfig_f,toolchain) +endef + +define __embtk_toolchain_build_addons + $(__embtk_toolsaddons_build_msg) + $(call __embtk_unsetinstalled_pkg,toolchain_addons) + $(call __embtk_unsetdecompressed_pkg,toolchain_addons) + $(__embtk_toolchain_mkinitdirs) + $(if $(findstring core,$(1)),, + $(foreach rootfspkg,$(__embtk_rootfs_pkgs-y), + $(call embtk_cleanup_pkg,$(rootfspkg))) + $(foreach rootfsnpkg,$(__embtk_rootfs_pkgs-n), + $(call embtk_cleanup_pkg,$(rootfsnpkg))) + $(___embtk_toolchain_decompress)) + $(if $(findstring core,$(1)), + $(foreach addon,$(__embtk_toolchain_addons-y), + $(call embtk_cleanup_pkg,$(addon)))) + $(if $(TOOLCHAIN_ADDONS-), + $(foreach addon,$(__embtk_toolchain_addons-n), + $(call embtk_cleanup_pkg,$(addon)))) + $(if $(TOOLCHAIN_ADDONS-y), + $(foreach pdep,$(__embtk_toolchain_predeps-y), + $(call embtk_install_xpkg,$(pdep))) + $(foreach addon,$(__embtk_toolchain_addons-y), + $(call embtk_install_xpkg,$(addon)))) + $(call __embtk_setinstalled_pkg,toolchain_addons) + $(if $(TOOLCHAIN_ADDONS-y), + $(call __embtk_pkg_gen_dotkconfig_f,toolchain_addons), + $(call __embtk_pkg_setkconfigured,toolchain_addons)) +endef + +define __embtk_toolchain_build + $(if $(findstring core,$(1)),$(__embtk_toolchain_build_core)) + $(if $(findstring addons,$(1)),$(__embtk_toolchain_build_addons)) + $(if $(findstring core,$(1))$(findstring addons,$(1)), + $(__embtk_toolchain_symlinktools) + $(call embtk_pinfo,"Packaging new $(GNU_TARGET)/$(EMBTK_MCU_FLAG) toolchain - please wait...") + $(__embtk_toolchain_compress) + $(call __embtk_setdecompressed_pkg,toolchain) + $(call __embtk_setdecompressed_pkg,toolchain_addons) + $(__embtk_toolchain_built_msg), + $(__embtk_toolchain_decompress)) +endef + +define __embtk_toolchain_runrecipe-y + $(or $(call __embtk_pkg_runrecipe-y,toolchain),$(if $(wildcard $(TOOLCHAIN_DIR)/$(TOOLCHAIN_PACKAGE)),,y)) +endef + +define __embtk_toolchain_addons_runrecipe-y + $(or $(call __embtk_pkg_runrecipe-y,toolchain_addons),$(if $(wildcard $(TOOLCHAIN_DIR)/$(TOOLCHAIN_PACKAGE)),,y)) +endef + +__embtk_toolchain_buildargs = $(if $(strip $(__embtk_toolchain_runrecipe-y)),core-addons) +__embtk_toolchain_buildargs += $(if $(strip $(__embtk_toolchain_addons_runrecipe-y)),addons) + +toolchain_install: + $(Q)$(call __embtk_toolchain_build,$(__embtk_toolchain_buildargs)) + +define __embtk_toolchain_clean + $(call __embtk_unsetdecompressed_pkg,toolchain) +endef + +toolchain_clean: + $(Q)$(__embtk_toolchain_clean) + +pembtk_toolchain_mkinitdirs: + $(call __embtk_toolchain_mkinitdirs) + +pembtk_toolchain_predeps_install: + $(call __embtk_toolchain_mkinitdirs) + $(MAKE) $(TOOLCHAIN_PRE_DEPS-y) + +# Download target for offline build +TOOLCHAIN_ALL_DEPS := $(TOOLCHAIN_PRE_DEPS-y) $(TOOLCHAIN_DEPS) +TOOLCHAIN_ALL_DEPS += $(TOOLCHAIN_ADDONS_DEPS) + +packages_fetch:: $(patsubst %_install,download_%,$(TOOLCHAIN_ALL_DEPS)) + +-include $(call __embtk_pkg_dotkconfig_f,toolchain) +-include $(call __embtk_pkg_dotkconfig_f,toolchain_addons) |