kumquat-buildroot/package/Makefile.in
Thomas Petazzoni 60d39dbb3f Fix external toolchain build
This patch is a new version of a patch already sent several times on
the mailing-list, committed and reverted a few times by Daniel Laird,
due to several imperfections. This version is a new try at finding a
solution that works for everybody. Hopefully it'll work :-)

The original problem is that external toolchain builds failed because
packages couldn't find their dependent libraries at configure time and
could not be linked with them. To fix these two problems, two things
are added:

 * The TARGET_LDFLAGS variable was exposed as LDFLAGS at ./configure
   time thanks to TARGET_CONFIGURE_OPTS. The TARGET_LDFLAGS variable
   contains -L options with the path in the STAGING_DIR for the
   libraries. It allows ./configure scripts to properly compile the
   small test programs testing whether a dependency is properly
   installed.

 * The TARGET_CFLAGS contains a new -Wl,--rpath-link option for both
   $(STAGING_DIR)/lib and $(STAGING_DIR)/usr/lib. It allows library
   depending on other libraries to link properly. The TARGET_CFLAGS is
   exposed as CFLAGS in TARGET_CONFIGURE_OPTS.

This new version fixes a problem encountered by hartleys
<hartleys@visionengravers.com> when building the kernel. The problem
was that the -Wl,--rpath-link options were added to LDFLAGS, while
there are options for the C compiler, not the ld linker. Moving them
to CFLAGS seems to fix the issue.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
2008-11-11 18:32:31 +00:00

368 lines
11 KiB
Makefile

ifndef MAKE
MAKE:=make
endif
ifndef HOSTMAKE
HOSTMAKE=$(MAKE)
endif
HOSTMAKE :=$(shell $(CONFIG_SHELL) -c "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
#########################################################################
ifeq ($(BR2_TOOLCHAIN_SOURCE),y)
TARGET_CFLAGS=$(TARGET_OPTIMIZATION) $(TARGET_DEBUGGING) \
-I$(STAGING_DIR)/usr/include -I$(STAGING_DIR)/include \
-Wl,--rpath-link -Wl,$(STAGING_DIR)/lib -Wl,--rpath-link -Wl,$(STAGING_DIR)/usr/lib
TARGET_LDFLAGS+=-L$(STAGING_DIR)/lib -L$(STAGING_DIR)/usr/lib
ifeq ($(BR2_TOOLCHAIN_SYSROOT),y)
TARGET_CFLAGS+= $(BR2_SYSROOT) $(BR2_ISYSROOT)
TARGET_LDFLAGS+= $(BR2_SYSROOT)
endif
CC_TARGET_TUNE_:=$(strip $(subst ",,$(BR2_GCC_TARGET_TUNE)))
#"))
CC_TARGET_ARCH_:=$(strip $(subst ",,$(BR2_GCC_TARGET_ARCH)))
#"))
CC_TARGET_ABI_:=$(strip $(subst ",,$(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
# 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
TARGET_CXXFLAGS=$(TARGET_CFLAGS)
# else it's an external toolchain
#########################################################################
else
TARGET_CFLAGS=$(TARGET_OPTIMIZATION) $(TARGET_DEBUGGING) \
-I$(STAGING_DIR)/include -I$(STAGING_DIR)/usr/include -I$(TOOLCHAIN_EXTERNAL_PATH)/$(TOOLCHAIN_EXTERNAL_PREFIX)/include \
-Wl,--rpath-link -Wl,$(STAGING_DIR)/lib -Wl,--rpath-link -Wl,$(STAGING_DIR)/usr/lib
TARGET_CXXFLAGS=$(TARGET_CFLAGS)
TARGET_LDFLAGS=-L$(STAGING_DIR)/lib -L$(STAGING_DIR)/usr/lib
endif
#########################################################################
#ifeq ($(BR2_ROOTFS_SUFFIX),)
ROOTFS_SUFFIX:=$(strip $(subst ",, $(BR2_ROOTFS_SUFFIX)))
ifeq ($(ROOTFS_SUFFIX),)
ROOTFS_SUFFIX:=
else
XXXX=xxxx
ROOTFS_SUFFIX:=-$(BR2_ROOTFS_SUFFIX)
endif
ifeq ($(strip $(subst ",, $(BR2_FPU_SUFFIX))),y)
COND_ARCH_FPU_SUFFIX:=$(ARCH_FPU_SUFFIX)
else
COND_ARCH_FPU_SUFFIX:=
endif
ifeq ($(BR2_TOOLCHAIN_SOURCE),y)
TOOL_BUILD_DIR=$(BASE_DIR)/$(TOPDIR_PREFIX)toolchain_build_$(ARCH)$(COND_ARCH_FPU_SUFFIX)$(TOPDIR_SUFFIX)
# Quotes are needed for spaces et al in path components.
TARGET_PATH="$(TOOL_BUILD_DIR)/bin:$(STAGING_DIR)/bin:$(STAGING_DIR)/usr/bin:$(PATH)"
IMAGE:=$(BINARIES_DIR)/$(BR2_ROOTFS_PREFIX).$(ARCH)$(COND_ARCH_FPU_SUFFIX)$(ROOTFS_SUFFIX)
GNU_TARGET_NAME=$(OPTIMIZE_FOR_CPU)-linux
REAL_GNU_TARGET_NAME=$(OPTIMIZE_FOR_CPU)$(GNU_TARGET_SUFFIX)
TARGET_CROSS=$(STAGING_DIR)/usr/bin/$(REAL_GNU_TARGET_NAME)-
KERNEL_CROSS=$(TARGET_CROSS)
else
TOOLCHAIN_EXTERNAL_PREFIX:=$(strip $(subst ",, $(BR2_TOOLCHAIN_EXTERNAL_PREFIX)))
#"))
TOOLCHAIN_EXTERNAL_PATH:=$(strip $(subst ",, $(BR2_TOOLCHAIN_EXTERNAL_PATH)))
#"))
#TOOL_BUILD_DIR=$(BASE_DIR)/$(TOPDIR_PREFIX)toolchain_build_$(TOOLCHAIN_EXTERNAL_PREFIX)
TOOL_BUILD_DIR=$(BASE_DIR)/$(TOPDIR_PREFIX)toolchain_build_$(ARCH)$(COND_ARCH_FPU_SUFFIX)$(TOPDIR_SUFFIX)
# Make sure that STAGING_DIR/usr/bin is in path for freetype-config etc.
TARGET_PATH="$(STAGING_DIR)/usr/bin:$(STAGING_DIR)/bin:$(TOOL_BUILD_DIR)/bin:$(TOOLCHAIN_EXTERNAL_PATH)/bin:$(PATH)"
#IMAGE:=$(BINARIES_DIR)/$(BR2_ROOTFS_PREFIX).$(TOOLCHAIN_EXTERNAL_PREFIX)$(ROOTFS_SUFFIX)
IMAGE:=$(BINARIES_DIR)/$(BR2_ROOTFS_PREFIX).$(ARCH)$(COND_ARCH_FPU_SUFFIX)$(ROOTFS_SUFFIX)
REAL_GNU_TARGET_NAME=$(TOOLCHAIN_EXTERNAL_PREFIX)
GNU_TARGET_NAME=$(TOOLCHAIN_EXTERNAL_PREFIX)
KERNEL_CROSS=$(TOOLCHAIN_EXTERNAL_PATH)/bin/$(TOOLCHAIN_EXTERNAL_PREFIX)-
TARGET_CROSS=$(TOOLCHAIN_EXTERNAL_PATH)/bin/$(TOOLCHAIN_EXTERNAL_PREFIX)-
endif
TARGET_AR=$(TARGET_CROSS)ar
TARGET_AS=$(TARGET_CROSS)as
TARGET_CC=$(TARGET_CROSS)gcc
TARGET_CPP=$(TARGET_CROSS)cpp
TARGET_CXX=$(TARGET_CROSS)g++
ifeq ($(BR2_GCC_VERSION_3_4_6),y)
TARGET_FC=$(TARGET_CROSS)g77
else
TARGET_FC=$(TARGET_CROSS)gfortran
endif
TARGET_LD=$(TARGET_CROSS)ld
TARGET_NM=$(TARGET_CROSS)nm
TARGET_RANLIB=$(TARGET_CROSS)ranlib
TARGET_OBJCOPY=$(TARGET_CROSS)objcopy
TARGET_OBJDUMP=$(TARGET_CROSS)objdump
ifeq ($(BR2_TOOLCHAIN_EXTERNAL),y)
TARGET_LDCONFIG=/sbin/ldconfig
else
TARGET_LDCONFIG=$(TARGET_CROSS)ldconfig
endif
ifeq ($(BR2_STRIP_strip),y)
STRIP_DISCARD_ALL:=--discard-all
STRIP_STRIP_UNNEEDED:=--strip-unneeded
STRIP_STRIP_ALL:=--strip-all
REMOVE_SECTION_COMMENT:=--remove-section=.comment
REMOVE_SECTION_NOTE:=--remove-section=.note
TARGET_STRIP=$(TARGET_CROSS)strip
STRIPCMD=$(TARGET_CROSS)strip $(REMOVE_SECTION_COMMENT) $(REMOVE_SECTION_NOTE)
endif
ifeq ($(BR2_STRIP_sstrip),y)
STRIP_DISCARD_ALL:=
STRIP_STRIP_UNNEEDED:=
STRIP_STRIP_ALL:=
REMOVE_SECTION_COMMENT:=
REMOVE_SECTION_NOTE:=
TARGET_STRIP=$(STAGING_DIR)/usr/bin/$(REAL_GNU_TARGET_NAME)-sstrip
STRIPCMD=$(TARGET_STRIP)
endif
ifeq ($(BR2_STRIP_none),y)
TARGET_STRIP=true -Not_stripping
STRIPCMD=$(TARGET_STRIP)
endif
INSTALL=/usr/bin/install
HOST_ARCH:=$(shell $(HOSTCC) -dumpmachine | sed -e s'/-.*//' \
-e 's/sparc.*/sparc/' \
-e 's/arm.*/arm/g' \
-e 's/m68k.*/m68k/' \
-e 's/ppc/powerpc/g' \
-e 's/v850.*/v850/g' \
-e 's/sh[234]/sh/' \
-e 's/mips-.*/mips/' \
-e 's/mipsel-.*/mipsel/' \
-e 's/cris.*/cris/' \
-e 's/i[3-9]86/i386/' \
)
GNU_HOST_NAME:=$(HOST_ARCH)-$(subst ",,$(BR2_GNU_BUILD_SUFFIX))
#")
TARGET_CONFIGURE_OPTS=PATH=$(TARGET_PATH) \
AR="$(TARGET_AR)" \
AS="$(TARGET_AS)" \
LD="$(TARGET_LD)" \
CFLAGS="$(TARGET_CFLAGS)" \
LDFLAGS="$(TARGET_LDFLAGS)" \
NM="$(TARGET_NM)" \
CC="$(TARGET_CC) $(TARGET_CFLAGS)" \
GCC="$(TARGET_CC) $(TARGET_CFLAGS)" \
CPP="$(TARGET_CPP) $(TARGET_CFLAGS)" \
CXX="$(TARGET_CXX) $(TARGET_CXXFLAGS)" \
FC="$(TARGET_FC) $(TARGET_FCFLAGS)" \
RANLIB="$(TARGET_RANLIB)" \
STRIP="$(TARGET_STRIP)" \
OBJCOPY="$(TARGET_OBJCOPY)" \
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)" \
AR_FOR_TARGET="$(TARGET_AR)" \
AS_FOR_TARGET="$(TARGET_AS)" \
CC_FOR_TARGET="$(TARGET_CC)" \
LD_FOR_TARGET="$(TARGET_LD)" \
NM_FOR_TARGET="$(TARGET_NM)" \
DEFAULT_ASSEMBLER="$(TARGET_AS)" \
DEFAULT_LINKER="$(TARGET_LD)" \
PKG_CONFIG_SYSROOT_DIR="$(STAGING_DIR)" \
PKG_CONFIG="$(STAGING_DIR)/usr/bin/pkg-config" \
PKG_CONFIG_PATH="$(STAGING_DIR)/usr/lib/pkgconfig:$(PKG_CONFIG_PATH)" \
STAGING_DIR="$(STAGING_DIR)"
HOST_CONFIGURE_OPTS=PATH=$(TARGET_PATH) \
AR="$(HOSTAR)" \
AS="$(HOSTAS)" \
LD="$(HOSTLD) $(HOST_LDFLAGS)" \
NM="$(HOSTNM)" \
CC="$(HOSTCC) $(HOST_CFLAGS)" \
GCC="$(HOSTCC) $(HOST_CFLAGS)" \
CXX="$(HOSTCXX) $(HOST_CXXFLAGS)" \
CPP="$(HOSTCPP) $(HOST_CFLAGS)" \
AR_FOR_BUILD="$(HOSTAR)" \
AS_FOR_BUILD="$(HOSTAS)" \
CC_FOR_BUILD="$(HOSTCC)" \
GCC_FOR_BUILD="$(HOSTCC)" \
CXX_FOR_BUILD="$(HOSTCXX)" \
LD_FOR_BUILD="$(HOSTLD)" \
FC_FOR_BUILD="$(HOSTFC)" \
CFLAGS_FOR_BUILD="$(HOST_CFLAGS)" \
CXXFLAGS_FOR_BUILD="$(HOST_CXXFLAGS)" \
LDFLAGS_FOR_BUILD="$(HOST_LDFLAGS)" \
FCFLAGS_FOR_BUILD="$(HOST_FCFLAGS)" \
AR_FOR_TARGET="$(TARGET_AR)" \
AS_FOR_TARGET="$(TARGET_AS)" \
CC_FOR_TARGET="$(TARGET_CC)" \
LD_FOR_TARGET="$(TARGET_LD)" \
NM_FOR_TARGET="$(TARGET_NM)" \
RANLIB_FOR_TARGET="$(TARGET_RANLIB)" \
STRIP_FOR_TARGET="$(TARGET_STRIP)" \
OBJCOPY_FOR_TARGET="$(TARGET_OBJCOPY)" \
OBJDUMP_FOR_TARGET="$(TARGET_OBJDUMP)" \
DEFAULT_ASSEMBLER="$(TARGET_AS)" \
DEFAULT_LINKER="$(TARGET_LD)" \
ORIGINAL_AS_FOR_TARGET="$(TARGET_AS)" \
ORIGINAL_LD_FOR_TARGET="$(TARGET_LD)" \
ORIGINAL_NM_FOR_TARGET="$(TARGET_NM)" \
ORIGINAL_OBJDUMP_FOR_TARGET="$(TARGET_OBJDUMP)"
#######################################################################
# 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_s390),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
# XXX: FIXME: We would need to grab MALLOC_GLIBC_COMPAT from the uClibc.config
# Including it doesn't seem wise, grepping is ugly.. Suggestions?
# Does malloc return live pointer for malloc(0) ?
ifeq ($(MALLOC_GLIBC_COMPAT),y)
BR2_AC_CV_FUNC_MALLOC_0_NONNULL=ac_cv_func_malloc_0_nonnull=yes \
gl_cv_func_malloc_0_nonnull=yes \
ac_cv_func_realloc_0_nonnull=yes
else
BR2_AC_CV_FUNC_MALLOC_0_NONNULL=ac_cv_func_malloc_0_nonnull=no \
gl_cv_func_malloc_0_nonnull=no \
ac_cv_func_realloc_0_nonnull=no
endif
TARGET_CONFIGURE_ARGS= \
$(BR2_AC_CV_TRAP_CHECK) \
ac_cv_func_mmap_fixed_mapped=yes \
ac_cv_func_memcmp_working=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_INET_IPV6),y)
DISABLE_IPV6= --disable-ipv6
endif
ifneq ($(BR2_GCC_CROSS_CXX),y)
TARGET_CONFIGURE_OPTS+=CXX=""
endif
ifeq ($(BR2_ENABLE_DEBUG),y)
ENABLE_DEBUG:=--enable-debug
else
ENABLE_DEBUG:=
endif
# X Windowing system
XSERVER:=
ifeq ($(strip $(BR2_PACKAGE_TINYX)),y)
XSERVER+=tinyx
endif
ifeq ($(strip $(BR2_PACKAGE_XORG)),y)
XSERVER+=xorg
endif
ifeq ($(strip $(BR2_PACKAGE_XORG7)),y)
XSERVER+=xserver_xorg-server
endif
ifeq ($(strip $(BR2_PACKAGE_XGGI)),y)
XSERVER+=xggi
endif
X11_PREFIX:=$(strip $(subst ",, $(BR2_X11_PREFIX)))
#"))
include package/Makefile.autotools.in