Kbuild: Add support for multiple toolchains

To use this, export the following:

export VXMICRO_GCC_VARIANT=yocto # for yocto
export VXMICRO_GCC_VARIANT=xtools # for crosstool-ng

export YOCTO_SDK_INSTALL_DIR=/opt/poky-tm/1.8
or
export XTOOLS_TOOLCHAIN_PATH=/opt/crosstool-ng

Change-Id: I9cd6062ecc32047d1582aad46209f4232e0e31f6
Signed-off-by: Anas Nashif <anas.nashif@intel.com>
This commit is contained in:
Anas Nashif 2015-05-13 00:44:22 -04:00
commit aca245d96f
5 changed files with 61 additions and 3 deletions

View file

@ -628,6 +628,9 @@ endif # $(dot-config)
#File that includes all prepare special embedded architecture targets.
include $(srctree)/scripts/Makefile.preparch
sinclude $(srctree)/scripts/Makefile.$(SRCARCH).preparch
ifdef VXMICRO_GCC_VARIANT
include $(srctree)/scripts/Makefile.toolchain.$(VXMICRO_GCC_VARIANT)
endif
# The all: target is the default when no target is given on the
# command line.
@ -900,7 +903,7 @@ export KBUILD_ALLDIRS := $(sort $(filter-out arch/%,$(tinymountain-alldirs)) arc
tinymountain-deps := $(KBUILD_LDS) $(KBUILD_TIMO_INIT) $(KBUILD_TIMO_MAIN)
# Final link of tinymountain
cmd_link-tinymountain = $(CONFIG_SHELL) $< $(LD) $(LDFLAGS) $(LDFLAGS_tinymountain)
cmd_link-tinymountain = $(CONFIG_SHELL) $< $(LD) $(LDFLAGS) $(LDFLAGS_tinymountain) $(LIB_INCLUDE_DIR)
quiet_cmd_link-tinymountain = LINK $@
# Include targets which we want to

View file

@ -0,0 +1,13 @@
CROSS_COMPILE_TARGET_arm = arm-none-eabi
CROSS_COMPILE_arm_version = 4.9.2
CROSS_COMPILE_arm=${XTOOLS_TOOLCHAIN_PATH}/${CROSS_COMPILE_TARGET_arm}/bin/${CROSS_COMPILE_TARGET_arm}-
CROSS_COMPILE_TARGET_x86 = i586-pc-elf
CROSS_COMPILE_x86_version = 4.9.2
CROSS_COMPILE_x86=${XTOOLS_TOOLCHAIN_PATH}/${CROSS_COMPILE_TARGET_x86}/bin/${CROSS_COMPILE_TARGET_x86}-
CROSS_COMPILE= $(CROSS_COMPILE_$(ARCH))
export CROSS_COMPILE

View file

@ -0,0 +1,27 @@
# arm
CROSS_COMPILE_TARGET_arm = arm-poky-eabi
CROSS_COMPILE_arm_version = 4.9.2
CROSS_COMPILE_arm=${YOCTO_SDK_INSTALL_DIR}/sysroots/i686-pokysdk-linux/usr/bin/$(CROSS_COMPILE_TARGET_arm)/$(CROSS_COMPILE_TARGET_arm)-
LIB_INCLUDE_DIR_x86 = -L ${YOCTO_SDK_INSTALL_DIR}/sysroots/i586-poky-elf/usr/lib/i586-poky-elf/4.9.2
# x86
CROSS_COMPILE_TARGET_x86 = i586-poky-elf
CROSS_COMPILE_x86_version = 4.9.2
CROSS_COMPILE_x86=${YOCTO_SDK_INSTALL_DIR}/sysroots/i686-pokysdk-linux/usr/bin/$(CROSS_COMPILE_TARGET_x86)/$(CROSS_COMPILE_TARGET_x86)-
LIB_INCLUDE_DIR_arm = -L ${YOCTO_SDK_INSTALL_DIR}/sysroots/armv5e-poky-eabi/usr/lib/arm-poky-eabi/4.9.2
# arc
CROSS_COMPILE_TARGET_arc = arc-poky-elf
CROSS_COMPILE_arc_version = 4.8.3
CROSS_COMPILE_arc=${YOCTO_SDK_INSTALL_DIR}/sysroots/i686-pokysdk-linux/usr/bin/$(CROSS_COMPILE_TARGET_x86)/$(CROSS_COMPILE_TARGET_x86)-
LIB_INCLUDE_DIR_arm = -L ${YOCTO_SDK_INSTALL_DIR}/sysroots/arc-poky-elf/usr/lib/arc-poky-elf/$(CROSS_COMPILE_arc_version)
CROSS_COMPILE= $(CROSS_COMPILE_$(ARCH))
LIB_INCLUDE_DIR = $(LIB_INCLUDE_DIR_$(ARCH))
export LIB_INCLUDE_DIR CROSS_COMPILE

View file

@ -46,7 +46,8 @@ linker_params()
echo "-Wl,-Map,./${2}" >> ${1}
echo "-L ${objtree}/include/generated" >> ${1}
echo "-u _OffsetAbsSyms -u _ConfigAbsSyms" >> ${1}
echo "-Wl,--start-group ${KBUILD_TIMO_MAIN} -lgcc" >> ${1}
echo "-Wl,--start-group ${KBUILD_TIMO_MAIN}" >> ${1}
echo "${LIB_INCLUDE_DIR} -lgcc" >> ${1}
echo "${objtree}/include/generated/offsets.o" >> ${1}
}

View file

@ -265,14 +265,19 @@ proj_info_set() {
if [ ${bsp2use} = "pentium4" ] ; then
BSP_INFO[${NUM_PROJ}]="BSP=generic_pc BSP_VARIANT=pentium4"
BSP[${NUM_PROJ}]=generic_pc
elif [ ${bsp2use} = "minuteia" ] ; then
BSP_INFO[${NUM_PROJ}]="BSP=generic_pc BSP_VARIANT=minuteia"
BSP[${NUM_PROJ}]=generic_pc
elif [ ${bsp2use} = "atom" ] ; then
BSP_INFO[${NUM_PROJ}]="BSP=generic_pc BSP_VARIANT=atom_n28xx"
BSP[${NUM_PROJ}]=generic_pc
elif [ ${bsp2use} = "quark" ] ; then
BSP_INFO[${NUM_PROJ}]="BSP=quark"
BSP[${NUM_PROJ}]=quark
else
BSP_INFO[${NUM_PROJ}]="BSP=${bsp2use}"
BSP[${NUM_PROJ}]=${bsp2use}
fi
BSP_FLAG[${NUM_PROJ}]=`${AWK} '/!/ {print "!"}' <<< ${line}`
@ -334,7 +339,16 @@ build_project() {
${MAKE} distclean
[ $? -eq 0 ] || fail_exit $? $FUNCNAME $LINENO
${MAKE} ARCH=${ARCH_NAME} ${BUILD_INFO} ${PRJ_ARGS[$1]} ${BSP_INFO[$1]}
if [[ $arm_BSP_LIST == *"${BSP[$1]}"* ]]; then
arch=arm
else
arch=x86
fi
if [ ! -z ${ARCH_NAME} ]; then
arch=${ARCH_NAME}
fi
${MAKE} ARCH=${arch} ${BUILD_INFO} ${PRJ_ARGS[$1]} ${BSP_INFO[$1]}
[ $? -eq 0 ] || fail_exit $? $FUNCNAME $LINENO
if [ x$2 == x ] ; then