2007-08-22 13:47:22 +02:00
|
|
|
ifndef MAKE
|
2014-07-25 18:38:37 +02:00
|
|
|
MAKE := make
|
2007-01-30 18:33:53 +01:00
|
|
|
endif
|
2007-07-17 14:09:07 +02:00
|
|
|
ifndef HOSTMAKE
|
2014-07-25 18:38:37 +02:00
|
|
|
HOSTMAKE = $(MAKE)
|
2007-07-17 14:09:07 +02:00
|
|
|
endif
|
2014-07-25 18:38:37 +02:00
|
|
|
HOSTMAKE := $(shell which $(HOSTMAKE) || type -p $(HOSTMAKE) || echo make)
|
2007-07-17 14:09:07 +02:00
|
|
|
|
2015-04-08 02:53:36 +02:00
|
|
|
# If BR2_JLEVEL is 0, scale the maximum concurrency with the number of
|
package-infra: limit the number of // jobs
The current code spawns as many jobs as up to twice the number of CPUs.
On small-class machines like laptops, with a limitted amount of memory,
but still a few CPUs (real or hyperthreads), the HDD becomes a bottleneck,
and it becomes almost impossible to do anythiong else while there is a
build in progress.
Limit the number of jobs to the number of CPUs plus one.
Even on fast machines with fast HDDs, this settings keeps the machine
fully busy (for those packages that can build in parallel, of course).
For example, building qemu or the linux kernel kept my hyperthreaded
hexa Core i7 with 18GiB of RAM, busy at 99% (I never ever managed to
get 100% even with more jobs, not even 200); while on my hyperthreaded
dual Core i5 with only 4GiB and a slow HDD, I still topped at 100% CPU,
while still able to do some work involving the HDD.
If the number of processors is not available, assume one.
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Nathan Lynch <ntl@pobox.com>
Reviewed-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Reviewed-by: Nathan Lynch <ntl@pobox.com>
Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
2013-05-10 05:56:01 +02:00
|
|
|
# CPUs. An additional job is used in order to keep processors busy
|
2012-06-16 11:37:17 +02:00
|
|
|
# while waiting on I/O.
|
package-infra: limit the number of // jobs
The current code spawns as many jobs as up to twice the number of CPUs.
On small-class machines like laptops, with a limitted amount of memory,
but still a few CPUs (real or hyperthreads), the HDD becomes a bottleneck,
and it becomes almost impossible to do anythiong else while there is a
build in progress.
Limit the number of jobs to the number of CPUs plus one.
Even on fast machines with fast HDDs, this settings keeps the machine
fully busy (for those packages that can build in parallel, of course).
For example, building qemu or the linux kernel kept my hyperthreaded
hexa Core i7 with 18GiB of RAM, busy at 99% (I never ever managed to
get 100% even with more jobs, not even 200); while on my hyperthreaded
dual Core i5 with only 4GiB and a slow HDD, I still topped at 100% CPU,
while still able to do some work involving the HDD.
If the number of processors is not available, assume one.
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Nathan Lynch <ntl@pobox.com>
Reviewed-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Reviewed-by: Nathan Lynch <ntl@pobox.com>
Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
2013-05-10 05:56:01 +02:00
|
|
|
# If the number of processors is not available, assume one.
|
2012-06-16 11:37:17 +02:00
|
|
|
ifeq ($(BR2_JLEVEL),0)
|
2014-07-25 18:38:37 +02:00
|
|
|
PARALLEL_JOBS := $(shell echo \
|
package-infra: limit the number of // jobs
The current code spawns as many jobs as up to twice the number of CPUs.
On small-class machines like laptops, with a limitted amount of memory,
but still a few CPUs (real or hyperthreads), the HDD becomes a bottleneck,
and it becomes almost impossible to do anythiong else while there is a
build in progress.
Limit the number of jobs to the number of CPUs plus one.
Even on fast machines with fast HDDs, this settings keeps the machine
fully busy (for those packages that can build in parallel, of course).
For example, building qemu or the linux kernel kept my hyperthreaded
hexa Core i7 with 18GiB of RAM, busy at 99% (I never ever managed to
get 100% even with more jobs, not even 200); while on my hyperthreaded
dual Core i5 with only 4GiB and a slow HDD, I still topped at 100% CPU,
while still able to do some work involving the HDD.
If the number of processors is not available, assume one.
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Nathan Lynch <ntl@pobox.com>
Reviewed-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Reviewed-by: Nathan Lynch <ntl@pobox.com>
Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
2013-05-10 05:56:01 +02:00
|
|
|
$$((1 + `getconf _NPROCESSORS_ONLN 2>/dev/null || echo 1`)))
|
2012-06-16 11:37:17 +02:00
|
|
|
else
|
2014-07-25 18:38:37 +02:00
|
|
|
PARALLEL_JOBS := $(BR2_JLEVEL)
|
2012-06-16 11:37:17 +02:00
|
|
|
endif
|
2012-06-11 18:09:37 +02:00
|
|
|
|
2014-07-25 18:38:37 +02:00
|
|
|
MAKE1 := $(HOSTMAKE) -j1
|
2015-07-01 10:10:46 +02:00
|
|
|
override MAKE = $(HOSTMAKE) \
|
|
|
|
$(if $(findstring j,$(filter-out --%,$(MAKEFLAGS))),,-j$(PARALLEL_JOBS))
|
2008-07-01 15:30:26 +02:00
|
|
|
|
2014-04-01 08:25:47 +02:00
|
|
|
ifeq ($(BR2_TOOLCHAIN_BUILDROOT),y)
|
|
|
|
TARGET_VENDOR = $(call qstrip,$(BR2_TOOLCHAIN_BUILDROOT_VENDOR))
|
|
|
|
else
|
|
|
|
TARGET_VENDOR = buildroot
|
|
|
|
endif
|
|
|
|
|
|
|
|
# Sanity checks
|
|
|
|
ifeq ($(TARGET_VENDOR),)
|
|
|
|
$(error BR2_TOOLCHAIN_BUILDROOT_VENDOR is not allowed to be empty)
|
|
|
|
endif
|
|
|
|
ifeq ($(TARGET_VENDOR),unknown)
|
|
|
|
$(error BR2_TOOLCHAIN_BUILDROOT_VENDOR cannot be 'unknown'. \
|
2014-10-25 20:29:31 +02:00
|
|
|
It might be confused with the native toolchain)
|
2014-04-01 08:25:47 +02:00
|
|
|
endif
|
|
|
|
|
2012-06-08 03:52:16 +02:00
|
|
|
# Compute GNU_TARGET_NAME
|
2014-07-25 18:38:37 +02:00
|
|
|
GNU_TARGET_NAME = $(ARCH)-$(TARGET_VENDOR)-$(TARGET_OS)-$(LIBC)$(ABI)
|
2013-07-20 14:52:14 +02:00
|
|
|
|
2013-09-23 11:16:50 +02:00
|
|
|
# FLAT binary format needs uclinux
|
|
|
|
ifeq ($(BR2_BINFMT_FLAT),y)
|
2014-07-25 18:38:37 +02:00
|
|
|
TARGET_OS = uclinux
|
2013-07-20 14:52:14 +02:00
|
|
|
else
|
2014-07-25 18:38:37 +02:00
|
|
|
TARGET_OS = linux
|
2013-07-20 14:52:14 +02:00
|
|
|
endif
|
2010-12-28 20:10:27 +01:00
|
|
|
|
2013-06-30 21:29:09 +02:00
|
|
|
ifeq ($(BR2_TOOLCHAIN_USES_UCLIBC),y)
|
2014-07-25 18:38:37 +02:00
|
|
|
LIBC = uclibc
|
2014-05-05 23:17:06 +02:00
|
|
|
else ifeq ($(BR2_TOOLCHAIN_USES_MUSL),y)
|
2014-07-25 18:38:37 +02:00
|
|
|
LIBC = musl
|
2010-12-28 20:10:27 +01:00
|
|
|
else
|
2014-07-25 18:38:37 +02:00
|
|
|
LIBC = gnu
|
2010-12-28 20:10:27 +01:00
|
|
|
endif
|
|
|
|
|
|
|
|
# The ABI suffix is a bit special on ARM, as it needs to be
|
2013-07-14 00:27:31 +02:00
|
|
|
# -uclibcgnueabi for uClibc EABI, and -gnueabi for glibc EABI.
|
|
|
|
# This means that the LIBC and ABI aren't strictly orthogonal,
|
|
|
|
# which explains why we need the test on LIBC below.
|
|
|
|
ifeq ($(BR2_arm)$(BR2_armeb),y)
|
2010-12-28 20:10:27 +01:00
|
|
|
ifeq ($(LIBC),uclibc)
|
2014-07-25 18:38:37 +02:00
|
|
|
ABI = gnueabi
|
2010-12-28 20:10:27 +01:00
|
|
|
else
|
2014-07-25 18:38:37 +02:00
|
|
|
ABI = eabi
|
2010-12-28 20:10:27 +01:00
|
|
|
endif
|
2013-08-23 20:40:16 +02:00
|
|
|
|
|
|
|
ifeq ($(BR2_ARM_EABIHF),y)
|
2014-07-25 18:38:37 +02:00
|
|
|
ABI := $(ABI)hf
|
arch: improve ARM floating point support and add support for EABIhf
This commit introduces the support for the EABIhf ABI, next to the
existing support we have for EABI and OABI (even though OABI support
is deprecated). EABIhf allows to improve performance of floating point
workload by using floating point registers to transfer floating point
arguments when calling functions, instead of using integer registers
to do, as is done in the 'softfp' floating point model of EABI.
In addition to this, this commit introduces a list of options for the
floating point support:
* Software floating point
* VFP
* VFPv3
* VFPv3-D16
* VFPv4
* VFPv4-D16
and it introduces some logic to make sure the options are only visible
when it makes sense, depending on the ARM core being selected. This is
however made complicated by the fact that certain VFP capabilities are
mandatory on some cores, but optional on some other cores. The kconfig
logic tries to achieve the following goals:
* Hide options that are definitely not possible.
* Use safe default values (i.e for Cortex-A5 and A7, the presence of
the VFPv4 unit is optional, so we default on software floating
point on these cores)..
* Show the available possibilities, even if some of them are not
necessarily working on a particular core (again, for the Cortex-A5
and A7 cores, there is no way of knowing whether the particular
variant used by the user has VFPv4 or not, so we select software
floating point by default, but still show VFP/VFPv3/VFPv4 options).
It is worth noting that this commit doesn't add support for all
possible -mfpu= values on ARM. We haven't added support for fpa, fpe2,
fpe3, maverick (those four are only used on very old ARM cores), for
vfpv3-fp16, vfpv3-d16-fp16, vfpv3xd, vfpv3xd-fp16, neon-fp16,
vfpv4-sp-d16. They can be added quite easily if needed thanks to the
new organization of the Config.in options.
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
2013-07-16 10:03:14 +02:00
|
|
|
endif
|
2010-12-28 20:10:27 +01:00
|
|
|
endif
|
|
|
|
|
2012-01-05 20:31:43 +01:00
|
|
|
# For FSL PowerPC there's SPE
|
|
|
|
ifeq ($(BR2_powerpc_SPE),y)
|
2014-07-25 18:38:37 +02:00
|
|
|
ABI = spe
|
2012-01-05 20:31:43 +01:00
|
|
|
# MPC8540s are e500v1 with single precision FP
|
|
|
|
ifeq ($(BR2_powerpc_8540),y)
|
2014-07-25 18:38:37 +02:00
|
|
|
TARGET_ABI += -mabi=spe -mfloat-gprs=single -Wa,-me500
|
2012-01-05 20:31:43 +01:00
|
|
|
endif
|
|
|
|
ifeq ($(BR2_powerpc_8548),y)
|
2014-07-25 18:38:37 +02:00
|
|
|
TARGET_ABI += -mabi=spe -mfloat-gprs=double -Wa,-me500x2
|
2012-01-05 20:31:43 +01:00
|
|
|
endif
|
|
|
|
ifeq ($(BR2_powerpc_e500mc),y)
|
2014-07-25 18:38:37 +02:00
|
|
|
TARGET_ABI += -mabi=spe -mfloat-gprs=double -Wa,-me500mc
|
2012-01-05 20:31:43 +01:00
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
2012-12-05 20:36:36 +01:00
|
|
|
# Use longcalls option for Xtensa globally.
|
|
|
|
# The 'longcalls' option allows calls across a greater range of addresses,
|
|
|
|
# and is required for some packages. While this option can degrade both
|
|
|
|
# code size and performance, the linker can usually optimize away the
|
|
|
|
# overhead when a call ends up within a certain range.
|
2014-03-30 19:57:46 +02:00
|
|
|
#
|
2015-08-13 00:20:02 +02:00
|
|
|
# Use auto-litpools for Xtensa globally.
|
2014-03-30 19:57:46 +02:00
|
|
|
# Collecting literals into separate section can be advantageous if that
|
|
|
|
# section is placed into DTCM at link time. This is applicable for code
|
|
|
|
# running on bare metal, but makes no sense under linux, where userspace
|
|
|
|
# is isolated from the physical memory details. OTOH placing literals into
|
|
|
|
# separate section breaks build of huge source files, because l32r
|
|
|
|
# instruction can only access literals in 256 KBytes range.
|
|
|
|
#
|
2012-12-05 20:36:36 +01:00
|
|
|
ifeq ($(BR2_xtensa),y)
|
2015-08-13 00:20:02 +02:00
|
|
|
TARGET_ABI += -mlongcalls -mauto-litpools
|
2012-12-05 20:36:36 +01:00
|
|
|
endif
|
|
|
|
|
2014-07-31 15:24:42 +02:00
|
|
|
ifeq ($(BR2_arc)$(BR2_ARC_ATOMIC_EXT),yy)
|
|
|
|
TARGET_ABI += -matomic
|
|
|
|
endif
|
|
|
|
|
2017-07-04 16:03:51 +02:00
|
|
|
STAGING_SUBDIR = $(GNU_TARGET_NAME)/sysroot
|
2012-07-15 03:12:05 +02:00
|
|
|
STAGING_DIR = $(HOST_DIR)/$(STAGING_SUBDIR)
|
2010-12-28 20:10:27 +01:00
|
|
|
|
2008-03-12 14:07:10 +01:00
|
|
|
ifeq ($(BR2_OPTIMIZE_0),y)
|
2015-10-15 00:19:10 +02:00
|
|
|
TARGET_OPTIMIZATION = -O0
|
2008-03-12 14:07:10 +01:00
|
|
|
endif
|
|
|
|
ifeq ($(BR2_OPTIMIZE_1),y)
|
2015-10-15 00:19:10 +02:00
|
|
|
TARGET_OPTIMIZATION = -O1
|
2008-03-12 14:07:10 +01:00
|
|
|
endif
|
|
|
|
ifeq ($(BR2_OPTIMIZE_2),y)
|
2015-10-15 00:19:10 +02:00
|
|
|
TARGET_OPTIMIZATION = -O2
|
2008-03-12 14:07:10 +01:00
|
|
|
endif
|
|
|
|
ifeq ($(BR2_OPTIMIZE_3),y)
|
2015-10-15 00:19:10 +02:00
|
|
|
TARGET_OPTIMIZATION = -O3
|
2008-03-12 14:07:10 +01:00
|
|
|
endif
|
2016-05-18 23:17:55 +02:00
|
|
|
ifeq ($(BR2_OPTIMIZE_G),y)
|
|
|
|
TARGET_OPTIMIZATION = -Og
|
|
|
|
endif
|
2008-03-12 14:07:10 +01:00
|
|
|
ifeq ($(BR2_OPTIMIZE_S),y)
|
2015-10-15 00:19:10 +02:00
|
|
|
TARGET_OPTIMIZATION = -Os
|
2008-03-12 14:07:10 +01:00
|
|
|
endif
|
2018-03-26 21:34:05 +02:00
|
|
|
ifeq ($(BR2_OPTIMIZE_FAST),y)
|
|
|
|
TARGET_OPTIMIZATION = -Ofast
|
|
|
|
endif
|
2008-03-12 14:07:10 +01:00
|
|
|
ifeq ($(BR2_DEBUG_1),y)
|
2014-07-25 18:38:37 +02:00
|
|
|
TARGET_DEBUGGING = -g1
|
2008-03-12 14:07:10 +01:00
|
|
|
endif
|
|
|
|
ifeq ($(BR2_DEBUG_2),y)
|
2014-07-25 18:38:37 +02:00
|
|
|
TARGET_DEBUGGING = -g2
|
2008-03-12 14:07:10 +01:00
|
|
|
endif
|
|
|
|
ifeq ($(BR2_DEBUG_3),y)
|
2014-07-25 18:38:37 +02:00
|
|
|
TARGET_DEBUGGING = -g3
|
2008-03-12 14:07:10 +01:00
|
|
|
endif
|
|
|
|
|
2018-01-24 05:09:41 +01:00
|
|
|
TARGET_CFLAGS_RELRO = -Wl,-z,relro
|
|
|
|
TARGET_CFLAGS_RELRO_FULL = -Wl,-z,now $(TARGET_CFLAGS_RELRO)
|
|
|
|
|
|
|
|
TARGET_LDFLAGS = $(call qstrip,$(BR2_TARGET_LDFLAGS))
|
|
|
|
|
|
|
|
ifeq ($(BR2_SSP_REGULAR),y)
|
2018-07-11 16:31:08 +02:00
|
|
|
TARGET_HARDENED += -fstack-protector
|
2018-01-24 05:09:41 +01:00
|
|
|
else ifeq ($(BR2_SSP_STRONG),y)
|
2018-07-11 16:31:08 +02:00
|
|
|
TARGET_HARDENED += -fstack-protector-strong
|
2018-01-24 05:09:41 +01:00
|
|
|
else ifeq ($(BR2_SSP_ALL),y)
|
2018-07-11 16:31:08 +02:00
|
|
|
TARGET_HARDENED += -fstack-protector-all
|
2018-01-24 05:09:41 +01:00
|
|
|
endif
|
|
|
|
|
|
|
|
ifeq ($(BR2_RELRO_PARTIAL),y)
|
2018-07-11 16:31:08 +02:00
|
|
|
TARGET_HARDENED += $(TARGET_CFLAGS_RELRO)
|
2018-01-24 05:09:41 +01:00
|
|
|
TARGET_LDFLAGS += $(TARGET_CFLAGS_RELRO)
|
|
|
|
else ifeq ($(BR2_RELRO_FULL),y)
|
2018-07-11 16:31:08 +02:00
|
|
|
TARGET_HARDENED += -fPIE $(TARGET_CFLAGS_RELRO_FULL)
|
2018-07-11 16:31:09 +02:00
|
|
|
TARGET_LDFLAGS += -pie $(TARGET_CFLAGS_RELRO_FULL)
|
2018-01-24 05:09:41 +01:00
|
|
|
endif
|
|
|
|
|
|
|
|
ifeq ($(BR2_FORTIFY_SOURCE_1),y)
|
2018-07-11 16:31:08 +02:00
|
|
|
TARGET_HARDENED += -D_FORTIFY_SOURCE=1
|
2018-01-24 05:09:41 +01:00
|
|
|
else ifeq ($(BR2_FORTIFY_SOURCE_2),y)
|
2018-07-11 16:31:08 +02:00
|
|
|
TARGET_HARDENED += -D_FORTIFY_SOURCE=2
|
2018-01-24 05:09:41 +01:00
|
|
|
endif
|
|
|
|
|
2012-07-25 19:40:46 +02:00
|
|
|
TARGET_CPPFLAGS += -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64
|
2018-07-11 16:31:08 +02:00
|
|
|
TARGET_CFLAGS = $(TARGET_CPPFLAGS) $(TARGET_ABI) $(TARGET_OPTIMIZATION) $(TARGET_DEBUGGING) $(TARGET_HARDENED)
|
2012-10-11 09:01:10 +02:00
|
|
|
TARGET_CXXFLAGS = $(TARGET_CFLAGS)
|
2016-07-01 18:29:08 +02:00
|
|
|
TARGET_FCFLAGS = $(TARGET_ABI) $(TARGET_OPTIMIZATION) $(TARGET_DEBUGGING)
|
2007-06-20 13:26:36 +02:00
|
|
|
|
2013-05-03 02:39:38 +02:00
|
|
|
ifeq ($(BR2_BINFMT_FLAT),y)
|
2013-09-11 14:53:44 +02:00
|
|
|
TARGET_CFLAGS += $(if $($(PKG)_FLAT_STACKSIZE),-Wl$(comma)-elf2flt=-s$($(PKG)_FLAT_STACKSIZE),\
|
|
|
|
-Wl$(comma)-elf2flt)
|
|
|
|
TARGET_CXXFLAGS += $(if $($(PKG)_FLAT_STACKSIZE),-Wl$(comma)-elf2flt=-s$($(PKG)_FLAT_STACKSIZE),\
|
|
|
|
-Wl$(comma)-elf2flt)
|
2016-07-01 18:29:08 +02:00
|
|
|
TARGET_FCFLAGS += $(if $($(PKG)_FLAT_STACKSIZE),-Wl$(comma)-elf2flt=-s$($(PKG)_FLAT_STACKSIZE),\
|
|
|
|
-Wl$(comma)-elf2flt)
|
package/Makefile.in: adjust LDFLAGS for elf2flt
So far, our LDFLAGS for the BR2_BINFMT_FLAT case were only used on
Blackfin. However, passing -elf2flt in LDFLAGS is wrong. Indeed,
LDFLAGS are not linker flags, but flags passed to the compiler when
linking.
If you pass -elf2flt to the compiler when linking, it is understood as
"-e lf2flt", i.e "the entry point is named lf2flt", which isn't
exactly the intention. We in fact need to pass -Wl,-elf2flt in LDFLAGS
as well, so that the compiler passes -elf2flt down to the linker.
For some reason, this option does not cause an issue with the Blackfin
toolchain, but it does with either a Buildroot toolchain for Cortex-M
or an OSELAS toolchain for Cortex-M. We have verified that passing
-Wl,-elf2flt continues to work with the Blackfin toolchain.
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
2016-03-31 21:00:11 +02:00
|
|
|
TARGET_LDFLAGS += $(if $($(PKG)_FLAT_STACKSIZE),-Wl$(comma)-elf2flt=-s$($(PKG)_FLAT_STACKSIZE),-Wl$(comma)-elf2flt)
|
2013-05-03 02:39:38 +02:00
|
|
|
endif
|
|
|
|
|
2013-05-03 12:39:37 +02:00
|
|
|
ifeq ($(BR2_BINFMT_FLAT_SHARED),y)
|
|
|
|
TARGET_LDFLAGS += -mid-shared-library -mshared-library-id=0
|
|
|
|
TARGET_CFLAGS += -mid-shared-library -mshared-library-id=0
|
2016-07-01 18:29:08 +02:00
|
|
|
TARGET_FCFLAGS += -mid-shared-library -mshared-library-id=0
|
2013-05-03 12:39:37 +02:00
|
|
|
TARGET_CXXFLAGS += -mid-shared-library -mshared-library-id=0
|
|
|
|
endif
|
|
|
|
|
2013-10-06 16:19:11 +02:00
|
|
|
ifeq ($(BR2_TOOLCHAIN_BUILDROOT),y)
|
2017-07-05 13:14:19 +02:00
|
|
|
TARGET_CROSS = $(HOST_DIR)/bin/$(GNU_TARGET_NAME)-
|
2010-10-15 23:01:08 +02:00
|
|
|
else
|
2017-07-05 13:14:19 +02:00
|
|
|
TARGET_CROSS = $(HOST_DIR)/bin/$(TOOLCHAIN_EXTERNAL_PREFIX)-
|
2007-02-06 19:19:38 +01:00
|
|
|
endif
|
2010-06-25 15:04:08 +02:00
|
|
|
|
2013-09-02 18:06:27 +02:00
|
|
|
# Define TARGET_xx variables for all common binutils/gcc
|
2010-06-25 15:04:08 +02:00
|
|
|
TARGET_AR = $(TARGET_CROSS)ar
|
|
|
|
TARGET_AS = $(TARGET_CROSS)as
|
2011-05-02 23:58:20 +02:00
|
|
|
TARGET_CC = $(TARGET_CROSS)gcc
|
|
|
|
TARGET_CPP = $(TARGET_CROSS)cpp
|
|
|
|
TARGET_CXX = $(TARGET_CROSS)g++
|
|
|
|
TARGET_FC = $(TARGET_CROSS)gfortran
|
|
|
|
TARGET_LD = $(TARGET_CROSS)ld
|
2010-06-25 15:04:08 +02:00
|
|
|
TARGET_NM = $(TARGET_CROSS)nm
|
|
|
|
TARGET_RANLIB = $(TARGET_CROSS)ranlib
|
2012-11-07 06:01:20 +01:00
|
|
|
TARGET_READELF = $(TARGET_CROSS)readelf
|
2010-06-25 15:04:08 +02:00
|
|
|
TARGET_OBJCOPY = $(TARGET_CROSS)objcopy
|
|
|
|
TARGET_OBJDUMP = $(TARGET_CROSS)objdump
|
|
|
|
|
2007-07-31 20:06:50 +02:00
|
|
|
ifeq ($(BR2_STRIP_strip),y)
|
2014-07-25 18:38:37 +02:00
|
|
|
STRIP_STRIP_DEBUG := --strip-debug
|
|
|
|
TARGET_STRIP = $(TARGET_CROSS)strip
|
|
|
|
STRIPCMD = $(TARGET_CROSS)strip --remove-section=.comment --remove-section=.note
|
2017-07-01 14:51:20 +02:00
|
|
|
else
|
2017-07-01 09:42:05 +02:00
|
|
|
TARGET_STRIP = /bin/true
|
2014-07-25 18:38:37 +02:00
|
|
|
STRIPCMD = $(TARGET_STRIP)
|
2007-07-31 20:06:50 +02:00
|
|
|
endif
|
2014-07-25 18:38:37 +02:00
|
|
|
INSTALL := $(shell which install || type -p install)
|
|
|
|
FLEX := $(shell which flex || type -p flex)
|
|
|
|
BISON := $(shell which bison || type -p bison)
|
2014-10-29 10:18:41 +01:00
|
|
|
UNZIP := $(shell which unzip || type -p unzip) -q
|
2004-10-09 03:06:03 +02:00
|
|
|
|
2017-07-05 13:14:19 +02:00
|
|
|
APPLY_PATCHES = PATH=$(HOST_DIR)/bin:$$PATH support/scripts/apply-patches.sh $(if $(QUIET),-s)
|
2014-10-22 18:20:10 +02:00
|
|
|
|
2017-07-05 13:14:22 +02:00
|
|
|
HOST_CPPFLAGS = -I$(HOST_DIR)/include
|
2010-10-29 21:00:26 +02:00
|
|
|
HOST_CFLAGS ?= -O2
|
2012-07-25 19:40:46 +02:00
|
|
|
HOST_CFLAGS += $(HOST_CPPFLAGS)
|
|
|
|
HOST_CXXFLAGS += $(HOST_CFLAGS)
|
2017-07-04 16:03:56 +02:00
|
|
|
HOST_LDFLAGS += -L$(HOST_DIR)/lib -Wl,-rpath,$(HOST_DIR)/lib
|
2009-03-16 21:58:08 +01:00
|
|
|
|
2017-07-03 10:41:06 +02:00
|
|
|
# The macros below are taken from linux 4.11 and adapted slightly.
|
|
|
|
# Copy more when needed.
|
|
|
|
|
|
|
|
# try-run
|
|
|
|
# Usage: option = $(call try-run, $(CC)...-o "$$TMP",option-ok,otherwise)
|
|
|
|
# Exit code chooses option. "$$TMP" is can be used as temporary file and
|
|
|
|
# is automatically cleaned up.
|
|
|
|
try-run = $(shell set -e; \
|
2018-06-29 23:40:12 +02:00
|
|
|
TMP="$$(mktemp)"; \
|
2017-07-03 10:41:06 +02:00
|
|
|
if ($(1)) >/dev/null 2>&1; \
|
|
|
|
then echo "$(2)"; \
|
|
|
|
else echo "$(3)"; \
|
|
|
|
fi; \
|
|
|
|
rm -f "$$TMP")
|
|
|
|
|
|
|
|
# host-cc-option
|
|
|
|
# Usage: HOST_FOO_CFLAGS += $(call host-cc-option,-no-pie,)
|
|
|
|
host-cc-option = $(call try-run,\
|
|
|
|
$(HOSTCC) $(HOST_CFLAGS) $(1) -c -x c /dev/null -o "$$TMP",$(1),$(2))
|
|
|
|
|
|
|
|
|
2014-10-17 20:48:01 +02:00
|
|
|
# host-intltool should be executed with the system perl, so we save
|
|
|
|
# the path to the system perl, before a host-perl built by Buildroot
|
2017-07-05 13:14:19 +02:00
|
|
|
# might get installed into $(HOST_DIR)/bin and therefore appears
|
2014-10-17 20:48:01 +02:00
|
|
|
# in our PATH. This system perl will be used as INTLTOOL_PERL.
|
|
|
|
export PERL=$(shell which perl)
|
|
|
|
|
|
|
|
# host-intltool needs libxml-parser-perl, which Buildroot installs in
|
2017-07-05 13:14:21 +02:00
|
|
|
# $(HOST_DIR)/lib/perl, so we must make sure that the system perl
|
2014-10-17 20:48:01 +02:00
|
|
|
# finds this perl module by exporting the proper value for PERL5LIB.
|
2017-07-05 13:14:21 +02:00
|
|
|
export PERL5LIB=$(HOST_DIR)/lib/perl
|
2014-10-17 20:48:01 +02:00
|
|
|
|
2016-10-14 16:09:44 +02:00
|
|
|
TARGET_MAKE_ENV = PATH=$(BR_PATH)
|
|
|
|
|
2014-12-30 08:36:23 +01:00
|
|
|
TARGET_CONFIGURE_OPTS = \
|
2016-10-14 16:09:44 +02:00
|
|
|
$(TARGET_MAKE_ENV) \
|
2014-12-30 08:36:23 +01:00
|
|
|
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)" \
|
2016-07-01 18:29:09 +02:00
|
|
|
F77="$(TARGET_FC)" \
|
2014-12-30 08:36:23 +01:00
|
|
|
RANLIB="$(TARGET_RANLIB)" \
|
|
|
|
READELF="$(TARGET_READELF)" \
|
|
|
|
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)" \
|
|
|
|
LD_FOR_BUILD="$(HOSTLD)" \
|
|
|
|
CPPFLAGS_FOR_BUILD="$(HOST_CPPFLAGS)" \
|
|
|
|
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)" \
|
|
|
|
CPPFLAGS="$(TARGET_CPPFLAGS)" \
|
|
|
|
CFLAGS="$(TARGET_CFLAGS)" \
|
|
|
|
CXXFLAGS="$(TARGET_CXXFLAGS)" \
|
|
|
|
LDFLAGS="$(TARGET_LDFLAGS)" \
|
|
|
|
FCFLAGS="$(TARGET_FCFLAGS)" \
|
2016-07-01 18:29:09 +02:00
|
|
|
FFLAGS="$(TARGET_FCFLAGS)" \
|
2014-12-30 08:36:23 +01:00
|
|
|
PKG_CONFIG="$(PKG_CONFIG_HOST_BINARY)" \
|
|
|
|
STAGING_DIR="$(STAGING_DIR)" \
|
|
|
|
INTLTOOL_PERL=$(PERL)
|
2007-06-20 13:26:36 +02:00
|
|
|
|
2014-02-10 13:23:08 +01:00
|
|
|
|
2016-10-14 16:09:44 +02:00
|
|
|
HOST_MAKE_ENV = \
|
|
|
|
PATH=$(BR_PATH) \
|
|
|
|
PKG_CONFIG="$(PKG_CONFIG_HOST_BINARY)" \
|
|
|
|
PKG_CONFIG_SYSROOT_DIR="/" \
|
|
|
|
PKG_CONFIG_ALLOW_SYSTEM_CFLAGS=1 \
|
|
|
|
PKG_CONFIG_ALLOW_SYSTEM_LIBS=1 \
|
2017-07-05 13:14:23 +02:00
|
|
|
PKG_CONFIG_LIBDIR="$(HOST_DIR)/lib/pkgconfig:$(HOST_DIR)/share/pkgconfig"
|
2009-12-15 13:39:40 +01:00
|
|
|
|
2014-12-30 08:36:23 +01:00
|
|
|
HOST_CONFIGURE_OPTS = \
|
2016-10-14 16:09:44 +02:00
|
|
|
$(HOST_MAKE_ENV) \
|
2014-12-30 08:36:23 +01:00
|
|
|
AR="$(HOSTAR)" \
|
|
|
|
AS="$(HOSTAS)" \
|
|
|
|
LD="$(HOSTLD)" \
|
|
|
|
NM="$(HOSTNM)" \
|
|
|
|
CC="$(HOSTCC)" \
|
|
|
|
GCC="$(HOSTCC)" \
|
|
|
|
CXX="$(HOSTCXX)" \
|
|
|
|
CPP="$(HOSTCPP)" \
|
|
|
|
OBJCOPY="$(HOSTOBJCOPY)" \
|
|
|
|
RANLIB="$(HOSTRANLIB)" \
|
|
|
|
CPPFLAGS="$(HOST_CPPFLAGS)" \
|
|
|
|
CFLAGS="$(HOST_CFLAGS)" \
|
|
|
|
CXXFLAGS="$(HOST_CXXFLAGS)" \
|
|
|
|
LDFLAGS="$(HOST_LDFLAGS)" \
|
|
|
|
INTLTOOL_PERL=$(PERL)
|
|
|
|
|
2014-03-10 21:51:33 +01:00
|
|
|
# This is extra environment we can not export ourselves (eg. because some
|
2013-11-11 16:03:26 +01:00
|
|
|
# packages use that variable internally, eg. uboot), so we have to
|
|
|
|
# explicitly pass it to user-supplied external hooks (eg. post-build,
|
|
|
|
# post-images)
|
2014-07-25 18:38:37 +02:00
|
|
|
EXTRA_ENV = \
|
2014-04-15 00:31:09 +02:00
|
|
|
PATH=$(BR_PATH) \
|
2014-07-01 00:26:19 +02:00
|
|
|
BR2_DL_DIR=$(BR2_DL_DIR) \
|
2017-07-14 15:04:17 +02:00
|
|
|
BUILD_DIR=$(BUILD_DIR) \
|
|
|
|
O=$(CANONICAL_O)
|
2009-03-17 14:48:15 +01:00
|
|
|
|
2013-06-07 12:13:46 +02:00
|
|
|
################################################################################
|
2007-06-27 11:48:23 +02:00
|
|
|
# settings we need to pass to configure
|
|
|
|
|
|
|
|
# does unaligned access trap?
|
2014-07-25 18:38:37 +02:00
|
|
|
BR2_AC_CV_TRAP_CHECK = ac_cv_lbl_unaligned_fail=yes
|
2007-06-27 11:48:23 +02:00
|
|
|
ifeq ($(BR2_i386),y)
|
2014-07-25 18:38:37 +02:00
|
|
|
BR2_AC_CV_TRAP_CHECK = ac_cv_lbl_unaligned_fail=no
|
2007-06-27 11:48:23 +02:00
|
|
|
endif
|
|
|
|
ifeq ($(BR2_x86_64),y)
|
2014-07-25 18:38:37 +02:00
|
|
|
BR2_AC_CV_TRAP_CHECK = ac_cv_lbl_unaligned_fail=no
|
2007-06-27 11:48:23 +02:00
|
|
|
endif
|
|
|
|
ifeq ($(BR2_m68k),y)
|
2014-07-25 18:38:37 +02:00
|
|
|
BR2_AC_CV_TRAP_CHECK = ac_cv_lbl_unaligned_fail=no
|
2007-06-27 11:48:23 +02:00
|
|
|
endif
|
2014-05-13 07:28:21 +02:00
|
|
|
ifeq ($(BR2_powerpc)$(BR2_powerpc64)$(BR2_powerpc64le),y)
|
2014-07-25 18:38:37 +02:00
|
|
|
BR2_AC_CV_TRAP_CHECK = ac_cv_lbl_unaligned_fail=no
|
2007-06-27 11:48:23 +02:00
|
|
|
endif
|
|
|
|
|
2007-06-27 14:01:27 +02:00
|
|
|
ifeq ($(BR2_ENDIAN),"BIG")
|
2014-07-25 18:38:37 +02:00
|
|
|
BR2_AC_CV_C_BIGENDIAN = ac_cv_c_bigendian=yes
|
2007-06-27 14:01:27 +02:00
|
|
|
else
|
2014-07-25 18:38:37 +02:00
|
|
|
BR2_AC_CV_C_BIGENDIAN = ac_cv_c_bigendian=no
|
2007-06-27 14:01:27 +02:00
|
|
|
endif
|
|
|
|
|
2016-02-01 17:02:06 +01:00
|
|
|
# AM_GNU_GETTEXT misdetects musl gettext support.
|
|
|
|
# musl currently implements api level 1 and 2 (basic + ngettext)
|
|
|
|
# http://www.openwall.com/lists/musl/2015/04/16/3
|
package/Makefile.in: fix musl handling
Until now, we had no support for full NLS with the musl C library:
BR2_NEEDS_GETTEXT was only true for uClibc. But the musl C library
provides a stub gettext implementation, which some packages were
failing to recognize as being usable, and therefore we are passing
autoconf cache variables to hint those packages that yes, the C
library has a usable gettext implementation.
However, we are going to enable full NLS support for musl, by giving
the possibility to build gettext libintl with musl. In such a case, we
do not want packages to use the gettext implementation of the C
library, but really the one provided by gettext libintl.
Therefore, we should only pre-seed the
gt_cv_func_gnugettext1_libc*=yes variables if we're on musl but
without gettext libintl. Otherwise packages will fail building because:
- libintl.h is the one from the full-blown gettext implementation, so
it assumes the package will link against -lintl
- the package thinks gettext is provided by the C library, so it
doesn't link with -lintl
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Reviewed-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
2017-07-04 16:47:51 +02:00
|
|
|
#
|
|
|
|
# These autoconf variables should only be pre-seeded when the minimal
|
|
|
|
# gettext implementation of musl is used. When the full blown
|
|
|
|
# implementation provided by gettext libintl is used, auto-detection
|
|
|
|
# works fine, and pre-seeding those values is actually wrong.
|
|
|
|
ifeq ($(BR2_TOOLCHAIN_USES_MUSL):$(BR2_PACKAGE_GETTEXT_PROVIDES_LIBINTL),y:)
|
2016-02-01 17:02:06 +01:00
|
|
|
BR2_GT_CV_FUNC_GNUGETTEXT_LIBC = \
|
2016-02-01 17:19:36 +01:00
|
|
|
gt_cv_func_gnugettext1_libc=yes \
|
2016-02-01 17:02:06 +01:00
|
|
|
gt_cv_func_gnugettext2_libc=yes
|
|
|
|
endif
|
|
|
|
|
2014-07-25 18:38:37 +02:00
|
|
|
TARGET_CONFIGURE_ARGS = \
|
2007-06-27 11:48:23 +02:00
|
|
|
$(BR2_AC_CV_TRAP_CHECK) \
|
2007-06-27 14:01:27 +02:00
|
|
|
ac_cv_func_mmap_fixed_mapped=yes \
|
|
|
|
ac_cv_func_memcmp_working=yes \
|
2008-11-28 15:20:47 +01:00
|
|
|
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 \
|
2011-05-03 15:23:40 +02:00
|
|
|
lt_cv_sys_lib_search_path_spec="" \
|
2016-02-01 17:02:06 +01:00
|
|
|
$(BR2_AC_CV_C_BIGENDIAN) \
|
|
|
|
$(BR2_GT_CV_FUNC_GNUGETTEXT_LIBC)
|
2004-10-09 03:06:03 +02:00
|
|
|
|
2013-06-07 12:13:46 +02:00
|
|
|
################################################################################
|
2007-06-27 11:48:23 +02:00
|
|
|
|
system: introduce BR2_SYSTEM_ENABLE_NLS
Until now, the option BR2_ENABLE_LOCALE was more-or-less controlling
whether NLS support was enabled in packages. More precisely, if
BR2_ENABLE_LOCALE=y, we were not doing anything (so some packages
could have NLS support enabled, some not). And only when
BR2_ENABLE_LOCALE was disabled we were explicitly passing
--disable-nls to packages.
This doesn't make much sense, and there is no reason to tie NLS
support to locale support. You may want locale support, but not
necessarily NLS support. Therefore, this commit introduces
BR2_SYSTEM_ENABLE_NLS, which allows to enable/disable NLS support
globally. When this option is enabled, we pass --enable-nls to
packages, otherwise we pass --disable-nls.
In addition, when this option is enabled and the C library doesn't
provide a full-blown implementation of gettext, we select the gettext
package, which will provide the full blown implementation.
It is worth mentioning that this commit has a visible impact for users:
- Prior to this commit, as soon as BR2_ENABLE_LOCALE=y, packages
*could* provide NLS support. It was up to each package to decide
whether they wanted to provide NLS support or not (we were not
passing --enable-nls nor --disable-nls).
- After this commit, it's BR2_SYSTEM_ENABLE_NLS that controls whether
NLS is enabled or disabled, and this option is disabled by default.
Bottom line: with the default of BR2_SYSTEM_ENABLE_NLS disabled, some
packages may lose NLS support that they used to provide. But we
believe it's a reasonable default behavior for Buildroot, where
generally NLS support is not necessary.
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Reviewed-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
2017-07-04 16:47:49 +02:00
|
|
|
ifeq ($(BR2_SYSTEM_ENABLE_NLS),y)
|
|
|
|
NLS_OPTS = --enable-nls
|
2017-07-04 16:47:50 +02:00
|
|
|
TARGET_NLS_DEPENDENCIES = host-gettext
|
|
|
|
ifeq ($(BR2_PACKAGE_GETTEXT_PROVIDES_LIBINTL),y)
|
|
|
|
TARGET_NLS_DEPENDENCIES += gettext
|
|
|
|
TARGET_NLS_LIBS += -lintl
|
|
|
|
endif
|
2004-10-09 03:06:03 +02:00
|
|
|
else
|
2017-07-04 16:47:48 +02:00
|
|
|
NLS_OPTS = --disable-nls
|
2004-10-09 03:06:03 +02:00
|
|
|
endif
|
|
|
|
|
core: alternate solution to disable C++
Some packages that use libtool really need some love to be able to
disable C++ support.
This is because libtool will want to call AC_PROG_CXXCPP as soon as CXX
is set non-empty to something different from 'no'. Then, AC_PROG_CXXCPP
will want a C++ preprocessor that works on valid input *and* fail on
invalid input.
So, providing 'false' as the C++ compiler will then require that we do
have a working C++ preprocessor. Which is totally counter-productive
since we do not have a C++ compiler to start with...
bd39d11d2e (core/infra: fix build on toolchain without C++) was a
previous attempt at fixing this, by using the host's C++ preprocessor.
However, that is very incorrect (that's my code, I can say so!) because
the set of defines will most probably be different for the host and the
target, thus causing all sorts of trouble. For example, on ARM we'd have
to include different headers for soft-float vs hard-float, which is
decided based on a macro, which is not defined for x86, and thus may
redirect to the wrong (and missing) header.
Instead, we notice that libtool uses the magic value 'no' to decide that
a C++ compiler is not available, in which case it skips the call to
AC_PROG_CXXCPP.
Given that 'no' is not provided by any package in Debian and
derivatives, as well as in Fedora, we can assume that no system will
have an executable called 'no'. Hence, we use that as a magic value to
disable C++ detection altogether.
Fixes: #10846 (again)
Reported-by: Damien Riegel <damien.riegel@savoirfairelinux.com>
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Damien Riegel <damien.riegel@savoirfairelinux.com>
Cc: Peter Seiderer <ps.report@gmx.net>
Cc: Vivien Didelot <vivien.didelot@savoirfairelinux.com>
Cc: Peter Korsgaard <peter@korsgaard.com>
Cc: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
Tested-by: Peter Seiderer <ps.report@gmx.net>
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
2018-03-27 13:00:22 +02:00
|
|
|
# We need anything that is invalid. Traditionally, we'd have used 'false' (and
|
|
|
|
# we did so in the past). However, that breaks libtool for packages that have
|
|
|
|
# optional C++ support (e.g. gnutls), because libtool will *require* a *valid*
|
|
|
|
# C++ preprocessor as long as CXX is not 'no'.
|
|
|
|
# Now, whether we use 'no' or 'false' for CXX as the same side effect: it is an
|
|
|
|
# invalid C++ compiler, and thus will cause detection of C++ to fail (which is
|
|
|
|
# expected and what we want), while at the same time taming libtool into
|
|
|
|
# silence.
|
2010-12-13 17:27:41 +01:00
|
|
|
ifneq ($(BR2_INSTALL_LIBSTDCPP),y)
|
core: alternate solution to disable C++
Some packages that use libtool really need some love to be able to
disable C++ support.
This is because libtool will want to call AC_PROG_CXXCPP as soon as CXX
is set non-empty to something different from 'no'. Then, AC_PROG_CXXCPP
will want a C++ preprocessor that works on valid input *and* fail on
invalid input.
So, providing 'false' as the C++ compiler will then require that we do
have a working C++ preprocessor. Which is totally counter-productive
since we do not have a C++ compiler to start with...
bd39d11d2e (core/infra: fix build on toolchain without C++) was a
previous attempt at fixing this, by using the host's C++ preprocessor.
However, that is very incorrect (that's my code, I can say so!) because
the set of defines will most probably be different for the host and the
target, thus causing all sorts of trouble. For example, on ARM we'd have
to include different headers for soft-float vs hard-float, which is
decided based on a macro, which is not defined for x86, and thus may
redirect to the wrong (and missing) header.
Instead, we notice that libtool uses the magic value 'no' to decide that
a C++ compiler is not available, in which case it skips the call to
AC_PROG_CXXCPP.
Given that 'no' is not provided by any package in Debian and
derivatives, as well as in Fedora, we can assume that no system will
have an executable called 'no'. Hence, we use that as a magic value to
disable C++ detection altogether.
Fixes: #10846 (again)
Reported-by: Damien Riegel <damien.riegel@savoirfairelinux.com>
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Damien Riegel <damien.riegel@savoirfairelinux.com>
Cc: Peter Seiderer <ps.report@gmx.net>
Cc: Vivien Didelot <vivien.didelot@savoirfairelinux.com>
Cc: Peter Korsgaard <peter@korsgaard.com>
Cc: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
Tested-by: Peter Seiderer <ps.report@gmx.net>
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
2018-03-27 13:00:22 +02:00
|
|
|
TARGET_CONFIGURE_OPTS += CXX=no
|
2006-12-21 14:51:53 +01:00
|
|
|
endif
|
2004-10-09 03:06:03 +02:00
|
|
|
|
2014-12-03 22:41:29 +01:00
|
|
|
ifeq ($(BR2_STATIC_LIBS),y)
|
2014-07-25 18:38:37 +02:00
|
|
|
SHARED_STATIC_LIBS_OPTS = --enable-static --disable-shared
|
2014-05-26 00:13:00 +02:00
|
|
|
TARGET_CFLAGS += -static
|
|
|
|
TARGET_CXXFLAGS += -static
|
2016-07-01 18:29:08 +02:00
|
|
|
TARGET_FCFLAGS += -static
|
2014-05-26 00:12:59 +02:00
|
|
|
TARGET_LDFLAGS += -static
|
Turn the static lib option into a choice with more options
This commit turns the single static option into a choice, which offers
various possibilities:
1. Build and use static libraries only;
2. Build both shared and static libraries, but use shared libraries;
3. Build and use shared libraries only.
On most platforms, (2) is currently the default, and kept as the
default in this commit. Of course, on certain platforms (Blackfin,
m68k), only option (1) will be available.
In addition to the introduction of the Config.in options, this commit
also:
* Removes the 'select BR2_STATIC_LIBS' from 'BR2_BINFMT_FLAT', since
with the use of a choice, we are guaranteed that BR2_STATIC_LIBS
will be selected when the binary format is BR2_BINFMT_FLAT, since
BR2_STATIC_LIBS will be the only possible solution in the choice.
* Changes package/Makefile.in to use the proper
--{enable,disable}-{shared,static} options for autotools packages.
[Thomas: remove useless empty newline right after 'choice'. Noticed by
Yann E. Morin.]
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Reviewed-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
2014-12-11 23:50:09 +01:00
|
|
|
else ifeq ($(BR2_SHARED_LIBS),y)
|
|
|
|
SHARED_STATIC_LIBS_OPTS = --disable-static --enable-shared
|
|
|
|
else ifeq ($(BR2_SHARED_STATIC_LIBS),y)
|
2014-07-25 18:38:37 +02:00
|
|
|
SHARED_STATIC_LIBS_OPTS = --enable-static --enable-shared
|
package/autotools: add --{enable,disable}-{shared,static} automatically
For target packages, depending on BR2_PREFER_STATIC_LIB, add the
correct combination of --{enable,disable}-{shared,static} flags to
./configure calls.
* When BR2_PREFER_STATIC_LIB is enabled, we pass --enable-static
--disable-shared.
* When BR2_PREFER_STATIC_LIB is disabled, we pass --enable-static
--enable-shared. We enable static libraries since they can still be
useful to statically link applications against some libraries
(sometimes it is useful for size reasons). Static libraries are
anyway only installed in the STAGING_DIR, so it doesn't increase in
any way the size of the TARGET_DIR.
For host packages, always pass --enable-shared and --disable-static.
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
2011-05-30 23:57:02 +02:00
|
|
|
endif
|
|
|
|
|
2014-12-10 23:53:57 +01:00
|
|
|
ifeq ($(BR2_COMPILER_PARANOID_UNSAFE_PATH),y)
|
|
|
|
export BR_COMPILER_PARANOID_UNSAFE_PATH=enabled
|
|
|
|
endif
|
|
|
|
|
2012-04-17 16:45:19 +02:00
|
|
|
include package/pkg-download.mk
|
2012-07-06 00:06:46 +02:00
|
|
|
include package/pkg-autotools.mk
|
|
|
|
include package/pkg-cmake.mk
|
2014-01-11 16:42:07 +01:00
|
|
|
include package/pkg-luarocks.mk
|
2014-02-23 15:17:16 +01:00
|
|
|
include package/pkg-perl.mk
|
2013-12-11 21:26:36 +01:00
|
|
|
include package/pkg-python.mk
|
2014-04-05 17:21:45 +02:00
|
|
|
include package/pkg-virtual.mk
|
2012-07-06 00:06:46 +02:00
|
|
|
include package/pkg-generic.mk
|
infra: introduce a kconfig-package infrastructure
There are several packages that have a configuration file managed by
kconfig: uclibc, busybox, linux and barebox. All these packages need some
make targets to handle the kconfig specificities: creating a configuration
(menuconfig, ...) and saving it back (update-config, ...)
These targets should be the same for each of these packages, but
unfortunately they are not. Especially with respect to saving back the
configuration to the original config file, there are many differences.
A previous set of patches fixed these targets for the uclibc package.
This patch extracts these targets into a common kconfig-package
infrastructure, with the goals of:
- aligning the behavior of all kconfig-based packages
- removing code duplication
In order to use this infrastructure, a package should at a minimum specify
FOO_KCONFIG_FILE and eval the kconfig-package macro. The supported
configuration editors can be set with FOO_KCONFIG_EDITORS and defaults to
menuconfig only.
Additionally, a package can specify FOO_KCONFIG_OPT for extra options to
pass to the invocation of the kconfig editors, and FOO_KCONFIG_FIXUP_CMDS
for a list of shell commands used to fixup the .config file after a
configuration has been created/edited.
Signed-off-by: Thomas De Schampheleire <thomas.de.schampheleire@gmail.com>
[yann.morin.1998@free.fr: add missing 4th argument when calling to
inner-kconfig-package (namely, 'target']
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
2014-08-03 17:32:40 +02:00
|
|
|
include package/pkg-kconfig.mk
|
2015-01-12 10:32:06 +01:00
|
|
|
include package/pkg-rebar.mk
|
package-infra: add helper to build kernel modules
The Linux kernel offers a nice and easy-to-use infra to build
out-of-tree kernel modules.
Currently, we have quite a few packages that build kernel modules, and
most duplicate (or rewrite) the same code over-and-over again.
Introduce a new infrastructure that provides helpers to build kernel
modules, so packages do not have to duplicate/rewrite that.
The infrastructure, unlike any other package infra, is not standalone.
It needs another package infra to be used. This is so that packages that
provide both userland and kernel modules can be built easily. So, this
infra only defines post-build and post-install hooks, that will build
the kernel modules after the rest of the package.
We need to override PWD, because some packages will use it to find their
own includes (and other helper files). PWD is inherited from the
environment, so it gets whatever value it had when make was launched,
which happens to be Buildroot's own top source tree. So, we just force
PWD to the proper value, rather than cd-ing first.
Also, no host version is provided, since it does not make sense to build
kernel modules for the host.
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Cc: Baruch Siach <baruch@tkos.co.il>
Cc: Arnout Vandecappelle <arnout@mind.be>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
2015-07-12 02:21:31 +02:00
|
|
|
include package/pkg-kernel-module.mk
|
2016-10-30 17:02:13 +01:00
|
|
|
include package/pkg-waf.mk
|
2018-03-31 15:27:30 +02:00
|
|
|
include package/pkg-golang.mk
|
2018-05-15 21:51:52 +02:00
|
|
|
include package/pkg-meson.mk
|