6c492d5e7b
Instead of letting the user define all the details of his external toolchain, we define a set of profiles for well-known external toolchains (CodeSourcery ones only at the moment, can easily be extended with other toolchains). Once a profile has been choosen, the user is offered the choice of either letting Buildroot download and install the external toolchain, or (as before) to tell Buildroot where the toolchain is installed on the system. We of course provide a "custom profile", through which the user can configure Buildroot to use a custom external toolchain for which no profile is available. Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
322 lines
8.9 KiB
Makefile
322 lines
8.9 KiB
Makefile
ifndef MAKE
|
|
MAKE:=make
|
|
endif
|
|
ifndef HOSTMAKE
|
|
HOSTMAKE=$(MAKE)
|
|
endif
|
|
HOSTMAKE :=$(shell which $(HOSTMAKE) || type -p $(HOSTMAKE) || echo make)
|
|
|
|
MAKE1:=$(HOSTMAKE) -j1
|
|
MAKE:=$(HOSTMAKE) -j$(BR2_JLEVEL)
|
|
|
|
ifeq ($(BR2_OPTIMIZE_0),y)
|
|
TARGET_OPTIMIZATION+=-O0
|
|
endif
|
|
ifeq ($(BR2_OPTIMIZE_1),y)
|
|
TARGET_OPTIMIZATION+=-O1
|
|
endif
|
|
ifeq ($(BR2_OPTIMIZE_2),y)
|
|
TARGET_OPTIMIZATION+=-O2
|
|
endif
|
|
ifeq ($(BR2_OPTIMIZE_3),y)
|
|
TARGET_OPTIMIZATION+=-O3
|
|
endif
|
|
ifeq ($(BR2_OPTIMIZE_S),y)
|
|
TARGET_OPTIMIZATION+=-Os
|
|
endif
|
|
ifeq ($(BR2_DEBUG_1),y)
|
|
TARGET_DEBUGGING=-g1
|
|
endif
|
|
ifeq ($(BR2_DEBUG_2),y)
|
|
TARGET_DEBUGGING=-g2
|
|
endif
|
|
ifeq ($(BR2_DEBUG_3),y)
|
|
TARGET_DEBUGGING=-g3
|
|
endif
|
|
|
|
TARGET_CFLAGS=$(TARGET_OPTIMIZATION) $(TARGET_DEBUGGING)
|
|
|
|
CC_TARGET_TUNE_:=$(call qstrip,$(BR2_GCC_TARGET_TUNE))
|
|
CC_TARGET_ARCH_:=$(call qstrip,$(BR2_GCC_TARGET_ARCH))
|
|
CC_TARGET_ABI_:=$(call qstrip,$(BR2_GCC_TARGET_ABI))
|
|
|
|
ifneq ($(CC_TARGET_TUNE_),)
|
|
TARGET_CFLAGS+=-mtune=$(CC_TARGET_TUNE_)
|
|
endif
|
|
ifneq ($(CC_TARGET_ARCH_),)
|
|
TARGET_CFLAGS+=-march=$(CC_TARGET_ARCH_)
|
|
endif
|
|
ifneq ($(CC_TARGET_ABI_),)
|
|
TARGET_CFLAGS+=-mabi=$(CC_TARGET_ABI_)
|
|
endif
|
|
|
|
ifneq ($(BR2_PREFER_STATIC_LIB),y)
|
|
ifeq ($(BR2_x86_64),y)
|
|
TARGET_CFLAGS+=-fPIC -DPIC
|
|
endif # PIC for dynamic objects on x86_64
|
|
endif
|
|
|
|
ifeq ($(BR2_SOFT_FLOAT),y)
|
|
TARGET_CFLAGS+=-msoft-float
|
|
endif
|
|
|
|
ifeq ($(BR2_VFP_FLOAT),y)
|
|
TARGET_CFLAGS+=-mfpu=vfp
|
|
endif
|
|
|
|
# enable VIS for v9a and v9b
|
|
ifeq ($(findstring y,$(BR2_sparc_v9a)$(BR2_sparc64_v9a)$(BR2_sparc_v9b)$(BR2_sparc64_v9b)),y)
|
|
TARGET_CFLAGS+=-mvis
|
|
endif
|
|
|
|
ifeq ($(findstring yy,$(BR2_mips)$(BR2_MIPS_ABI64)),yy)
|
|
TARGET_CFLAGS+=-fno-pic -mno-abicalls
|
|
endif
|
|
|
|
ifeq ($(BR2_LARGEFILE),y)
|
|
TARGET_CFLAGS+=-D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64
|
|
endif
|
|
|
|
ifeq ($(BR2_TOOLCHAIN_BUILDROOT),y)
|
|
TARGET_CFLAGS+=-I$(STAGING_DIR)/usr/include -I$(STAGING_DIR)/include
|
|
endif
|
|
|
|
TARGET_LDFLAGS+=-L$(STAGING_DIR)/lib -L$(STAGING_DIR)/usr/lib
|
|
TARGET_CXXFLAGS=$(TARGET_CFLAGS)
|
|
TARGET_SYSROOT_OPT=--sysroot=$(STAGING_DIR)
|
|
|
|
# Compute GNU_TARGET_NAME and REAL_GNU_TARGET_NAME
|
|
GNU_TARGET_NAME=$(ARCH)-linux
|
|
|
|
ifeq ($(BR2_TOOLCHAIN_BUILDROOT),y)
|
|
LIBC=uclibc
|
|
else ifeq ($(BR2_TOOLCHAIN_EXTERNAL_UCLIBC),y)
|
|
LIBC=uclibc
|
|
else
|
|
LIBC=gnu
|
|
endif
|
|
|
|
# The ABI suffix is a bit special on ARM, as it needs to be
|
|
# -uclibcgnueabi for uClibc EABI, -uclibc for uClibc OABI, -gnueabi
|
|
# for glibc EABI and -gnu for glibc OABI. This means that the LIBC and
|
|
# ABI aren't strictly orthogonal, which explains why we need the test
|
|
# on LIBC below.
|
|
ifeq ($(BR2_ARM_EABI),y)
|
|
ifeq ($(LIBC),uclibc)
|
|
ABI=gnueabi
|
|
else
|
|
ABI=eabi
|
|
endif
|
|
endif
|
|
|
|
REAL_GNU_TARGET_NAME=$(ARCH)-unknown-linux-$(LIBC)$(ABI)
|
|
|
|
ifeq ($(BR2_TOOLCHAIN_BUILDROOT),y)
|
|
TARGET_CROSS=$(STAGING_DIR)/usr/bin/$(REAL_GNU_TARGET_NAME)-
|
|
else ifeq ($(BR2_TOOLCHAIN_EXTERNAL),y)
|
|
TOOLCHAIN_EXTERNAL_PREFIX=$(call qstrip,$(BR2_TOOLCHAIN_EXTERNAL_PREFIX))
|
|
ifeq ($(BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD),y)
|
|
TOOLCHAIN_EXTERNAL_LOCATION=$(TOOLCHAIN_EXTERNAL_DIR)
|
|
else
|
|
TOOLCHAIN_EXTERNAL_LOCATION=$(call qstrip,$(BR2_TOOLCHAIN_EXTERNAL_PATH))
|
|
endif
|
|
TARGET_CROSS=$(TOOLCHAIN_EXTERNAL_LOCATION)/bin/$(TOOLCHAIN_EXTERNAL_PREFIX)-
|
|
else ifeq ($(BR2_TOOLCHAIN_CTNG),y)
|
|
TARGET_CROSS=$(TOOLCHAIN_DIR)/bin/$(REAL_GNU_TARGET_NAME)-
|
|
endif
|
|
|
|
# Quotes are needed for spaces et al in path components.
|
|
TARGET_PATH="$(HOST_DIR)/bin:$(HOST_DIR)/usr/bin:$(HOST_DIR)/usr/sbin/:$(PATH)"
|
|
|
|
# Define TARGET_xx variables for all common binutils/gcc tools by
|
|
# including the --sysroot option where necessary.
|
|
TARGET_AR = $(TARGET_CROSS)ar
|
|
TARGET_AS = $(TARGET_CROSS)as
|
|
TARGET_CC = $(TARGET_CROSS)gcc $(TARGET_SYSROOT_OPT)
|
|
TARGET_CPP = $(TARGET_CROSS)cpp $(TARGET_SYSROOT_OPT)
|
|
TARGET_CXX = $(TARGET_CROSS)g++ $(TARGET_SYSROOT_OPT)
|
|
TARGET_FC = $(TARGET_CROSS)gfortran $(TARGET_SYSROOT_OPT)
|
|
TARGET_LD = $(TARGET_CROSS)ld $(TARGET_SYSROOT_OPT)
|
|
TARGET_NM = $(TARGET_CROSS)nm
|
|
TARGET_RANLIB = $(TARGET_CROSS)ranlib
|
|
TARGET_OBJCOPY = $(TARGET_CROSS)objcopy
|
|
TARGET_OBJDUMP = $(TARGET_CROSS)objdump
|
|
|
|
TARGET_CC_NOCCACHE := $(TARGET_CC)
|
|
TARGET_CXX_NOCCACHE := $(TARGET_CXX)
|
|
|
|
ifeq ($(BR2_CCACHE),y)
|
|
TARGET_CC := $(CCACHE) $(TARGET_CC)
|
|
TARGET_CXX := $(CCACHE) $(TARGET_CXX)
|
|
endif
|
|
|
|
ifeq ($(BR2_STRIP_strip),y)
|
|
STRIP_DISCARD_ALL:=--discard-all
|
|
STRIP_STRIP_UNNEEDED:=--strip-unneeded
|
|
STRIP_STRIP_ALL:=--strip-all
|
|
TARGET_STRIP=$(TARGET_CROSS)strip
|
|
STRIPCMD=$(TARGET_CROSS)strip --remove-section=.comment --remove-section=.note
|
|
KSTRIPCMD=$(STRIPCMD) $(STRIP_STRIP_UNNEEDED)
|
|
endif
|
|
ifeq ($(BR2_STRIP_sstrip),y)
|
|
STRIP_DISCARD_ALL:=
|
|
STRIP_STRIP_UNNEEDED:=
|
|
STRIP_STRIP_ALL:=
|
|
TARGET_STRIP=$(STAGING_DIR)/usr/bin/$(REAL_GNU_TARGET_NAME)-sstrip
|
|
STRIPCMD=$(TARGET_STRIP)
|
|
KSTRIPCMD=$(TARGET_CROSS)strip --remove-section=.comment --remove-section=.note --strip-unneeded
|
|
endif
|
|
ifeq ($(BR2_STRIP_none),y)
|
|
TARGET_STRIP=true
|
|
STRIPCMD=$(TARGET_STRIP)
|
|
KSTRIPCMD=$(TARGET_STRIP)
|
|
endif
|
|
INSTALL:=$(shell which install || type -p install)
|
|
FLEX:=$(shell which flex || type -p flex)
|
|
BISON:=$(shell which bison || type -p bison)
|
|
SED:=$(shell which sed || type -p sed) -i -e
|
|
|
|
HOST_CFLAGS ?= -O2
|
|
HOST_CFLAGS += -I$(HOST_DIR)/include -I$(HOST_DIR)/usr/include
|
|
HOST_CXXFLAGS += -I$(HOST_DIR)/include -I$(HOST_DIR)/usr/include
|
|
HOST_LDFLAGS += -L$(HOST_DIR)/lib -L$(HOST_DIR)/usr/lib -Wl,-rpath,$(HOST_DIR)/usr/lib
|
|
HOST_PATH=$(HOST_DIR)/bin:$(HOST_DIR)/usr/bin:$(PATH)
|
|
|
|
# hostcc version as an integer - E.G. 4.3.2 => 432
|
|
HOSTCC_VERSION:=$(shell $(HOSTCC_NOCCACHE) --version | \
|
|
sed -n 's/^.* \([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)[ ]*.*$$/\1\2\3/p')
|
|
|
|
TARGET_CONFIGURE_OPTS=PATH=$(TARGET_PATH) \
|
|
AR="$(TARGET_AR)" \
|
|
AS="$(TARGET_AS)" \
|
|
LD="$(TARGET_LD)" \
|
|
NM="$(TARGET_NM)" \
|
|
CC="$(TARGET_CC)" \
|
|
GCC="$(TARGET_CC)" \
|
|
CPP="$(TARGET_CPP)" \
|
|
CXX="$(TARGET_CXX)" \
|
|
FC="$(TARGET_FC)" \
|
|
RANLIB="$(TARGET_RANLIB)" \
|
|
STRIP="$(TARGET_STRIP)" \
|
|
OBJCOPY="$(TARGET_OBJCOPY)" \
|
|
OBJDUMP="$(TARGET_OBJDUMP)" \
|
|
AR_FOR_BUILD="$(HOSTAR)" \
|
|
AS_FOR_BUILD="$(HOSTAS)" \
|
|
CC_FOR_BUILD="$(HOSTCC)" \
|
|
GCC_FOR_BUILD="$(HOSTCC)" \
|
|
CXX_FOR_BUILD="$(HOSTCXX)" \
|
|
FC_FOR_BUILD="$(HOSTFC)" \
|
|
LD_FOR_BUILD="$(HOSTLD)" \
|
|
CFLAGS_FOR_BUILD="$(HOST_CFLAGS)" \
|
|
CXXFLAGS_FOR_BUILD="$(HOST_CXXFLAGS)" \
|
|
LDFLAGS_FOR_BUILD="$(HOST_LDFLAGS)" \
|
|
FCFLAGS_FOR_BUILD="$(HOST_FCFLAGS)" \
|
|
DEFAULT_ASSEMBLER="$(TARGET_AS)" \
|
|
DEFAULT_LINKER="$(TARGET_LD)" \
|
|
CFLAGS="$(TARGET_CFLAGS)" \
|
|
CXXFLAGS="$(TARGET_CXXFLAGS)" \
|
|
LDFLAGS="$(TARGET_LDFLAGS)" \
|
|
FCFLAGS="$(TARGET_FCFLAGS)" \
|
|
PKG_CONFIG_SYSROOT_DIR="$(STAGING_DIR)" \
|
|
PKG_CONFIG="$(PKG_CONFIG_HOST_BINARY)" \
|
|
PKG_CONFIG_PATH="$(STAGING_DIR)/usr/lib/pkgconfig:$(PKG_CONFIG_PATH)" \
|
|
PERLLIB="$(HOST_DIR)/usr/lib/perl" \
|
|
STAGING_DIR="$(STAGING_DIR)"
|
|
|
|
TARGET_MAKE_ENV=PATH=$(TARGET_PATH) \
|
|
PERLLIB="$(HOST_DIR)/usr/lib/perl"
|
|
|
|
HOST_CONFIGURE_OPTS=PATH=$(HOST_PATH) \
|
|
AR="$(HOSTAR)" \
|
|
AS="$(HOSTAS)" \
|
|
LD="$(HOSTLD)" \
|
|
NM="$(HOSTNM)" \
|
|
CC="$(HOSTCC)" \
|
|
GCC="$(HOSTCC)" \
|
|
CXX="$(HOSTCXX)" \
|
|
CPP="$(HOSTCPP)" \
|
|
CFLAGS="$(HOST_CFLAGS)" \
|
|
CXXFLAGS="$(HOST_CXXFLAGS)" \
|
|
LDFLAGS="$(HOST_LDFLAGS)" \
|
|
PKG_CONFIG_ALLOW_SYSTEM_CFLAGS=1 \
|
|
PKG_CONFIG_ALLOW_SYSTEM_LIBS=1 \
|
|
PKG_CONFIG="$(PKG_CONFIG_HOST_BINARY)" \
|
|
PKG_CONFIG_LIBDIR="$(HOST_DIR)/usr/lib/pkgconfig" \
|
|
PERLLIB="$(HOST_DIR)/usr/lib/perl" \
|
|
LD_LIBRARY_PATH="$(HOST_DIR)/usr/lib:$(LD_LIBRARY_PATH)"
|
|
|
|
HOST_MAKE_ENV=PATH=$(HOST_PATH) \
|
|
LD_LIBRARY_PATH="$(HOST_DIR)/usr/lib:$(LD_LIBRARY_PATH)" \
|
|
PKG_CONFIG="$(PKG_CONFIG_HOST_BINARY)" \
|
|
PKG_CONFIG_LIBDIR="$(HOST_DIR)/usr/lib/pkgconfig" \
|
|
PERLLIB="$(HOST_DIR)/usr/lib/perl"
|
|
|
|
|
|
#######################################################################
|
|
# settings we need to pass to configure
|
|
|
|
# does unaligned access trap?
|
|
BR2_AC_CV_TRAP_CHECK=ac_cv_lbl_unaligned_fail=yes
|
|
ifeq ($(BR2_i386),y)
|
|
BR2_AC_CV_TRAP_CHECK=ac_cv_lbl_unaligned_fail=no
|
|
endif
|
|
ifeq ($(BR2_x86_64),y)
|
|
BR2_AC_CV_TRAP_CHECK=ac_cv_lbl_unaligned_fail=no
|
|
endif
|
|
ifeq ($(BR2_m68k),y)
|
|
BR2_AC_CV_TRAP_CHECK=ac_cv_lbl_unaligned_fail=no
|
|
endif
|
|
ifeq ($(BR2_powerpc)$(BR2_ENDIAN),yBIG)
|
|
BR2_AC_CV_TRAP_CHECK=ac_cv_lbl_unaligned_fail=no
|
|
endif
|
|
|
|
ifeq ($(BR2_ENDIAN),"BIG")
|
|
BR2_AC_CV_C_BIGENDIAN=ac_cv_c_bigendian=yes
|
|
else
|
|
BR2_AC_CV_C_BIGENDIAN=ac_cv_c_bigendian=no
|
|
endif
|
|
|
|
TARGET_CONFIGURE_ARGS= \
|
|
$(BR2_AC_CV_TRAP_CHECK) \
|
|
ac_cv_func_mmap_fixed_mapped=yes \
|
|
ac_cv_func_memcmp_working=yes \
|
|
ac_cv_have_decl_malloc=yes \
|
|
gl_cv_func_malloc_0_nonnull=yes \
|
|
ac_cv_func_malloc_0_nonnull=yes \
|
|
ac_cv_func_calloc_0_nonnull=yes \
|
|
ac_cv_func_realloc_0_nonnull=yes \
|
|
$(BR2_AC_CV_C_BIGENDIAN)
|
|
|
|
#######################################################################
|
|
|
|
ifeq ($(BR2_ENABLE_LOCALE),y)
|
|
DISABLE_NLS:=
|
|
else
|
|
DISABLE_NLS:=--disable-nls
|
|
endif
|
|
|
|
ifneq ($(BR2_LARGEFILE),y)
|
|
DISABLE_LARGEFILE= --disable-largefile
|
|
endif
|
|
|
|
ifneq ($(BR2_HAVE_DOCUMENTATION),y)
|
|
DISABLE_DOCUMENTATION=--disable-gtk-doc
|
|
endif
|
|
|
|
ifneq ($(BR2_INET_IPV6),y)
|
|
DISABLE_IPV6= --disable-ipv6
|
|
endif
|
|
|
|
ifneq ($(BR2_GCC_CROSS_CXX),y)
|
|
TARGET_CONFIGURE_OPTS+=CXX=false
|
|
endif
|
|
|
|
ifeq ($(BR2_ENABLE_DEBUG),y)
|
|
ENABLE_DEBUG:=--enable-debug
|
|
else
|
|
ENABLE_DEBUG:=
|
|
endif
|
|
|
|
include package/Makefile.autotools.in
|
|
include package/Makefile.package.in
|