Skip to contentSkip to conversation

toolchain-external: support gcc < 4.3

PATCH New Arnout Vandecappelle (Essensium/Mind) 3 participants 5 messages Nov 23, 2016 – Nov 25, 2016

lore
Share & tools
lore
#0 lore raw

PATCH v2 1/2 toolchain-external: support gcc < 4.3

We currently support gcc as old as 4.3. However, Buildroot works perfectly well with even older gcc versions (tested with 4.1). So we can add an option BR2_TOOLCHAIN_EXTERNAL_GCC_OLD to support that. The help text of this option is written with plenty of discouragement.

We use _OLD and not something like _PRE_4_3, because at some point we will likely remove the 4.3 option and what would then require a name change.

We don't set any _AT_LEAST option in this case because it's no use - there is no lower bound on the version in this case. We therefore leave BR2_TOOLCHAIN_GCC_AT_LEAST empty (the implicit default). When it is empty, we don't do a version check at all in check_gcc_version (previously we errored out when it was empty).

---
v2: rebase on next, slightly reword commit message

We should also remove the 4.3 and 4.4 options, because they are currently unused and (after the next patch) untested in the autobuilders.

---
 toolchain/helpers.mk                                          |  3 +--
 .../toolchain-external-custom/Config.in.options               | 11 +++++++++++
 2 files changed, 12 insertions(+), 2 deletions(-)
toolchain/helpers.mk +1 -2
index 3991bc1..72e7292 100644
@@ -145,8 +145,7 @@ check_kernel_headers_version = \
 check_gcc_version = \
 	expected_version="$(strip $2)" ; \
 	if [ -z "$${expected_version}" ]; then \
-		printf "Internal error, gcc version unknown (no GCC_AT_LEAST_X_Y selected)\n"; \
-		exit 1 ; \
+		exit 0 ; \
 	fi; \
 	real_version=`$(1) --version | sed -r -e '1!d; s/^[^)]+\) ([^[:space:]]+).*/\1/;'` ; \
 	if [[ ! "$${real_version}" =~ ^$${expected_version}\. ]] ; then \
toolchain/toolchain-external/toolchain-external-custom/Config.in.options +11 -0
index cdc2555..5ff2491 100644
@@ -59,6 +59,17 @@ config BR2_TOOLCHAIN_EXTERNAL_GCC_4_3
 	bool "4.3.x"
 	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_3
 
+config BR2_TOOLCHAIN_EXTERNAL_GCC_OLD
+	bool "older"
+	help
+	  Use this option if your GCC version is older than any of the
+	  above.
+
+	  Note that the Buildroot community doesn't do any testing with
+	  such old toolchains. Some packages may fail to build in
+	  surprising ways, or the generated root filesystem may not
+	  work at all. Use such old toolchains at your own risk.
+
 endchoice
 
 choice
Signature · 1 line
2.10.2
#1 lore raw

PATCH v2 2/2 toolchain: kill ADI Blackfin toolchain

This toolchain has many problems which are fixed in contemporary gcc and uClibc-ng. In addition, several hacks are needed to be able to work with this toolchain. All these hacks are removed as well. Also the package exceptions for this toolchain are removed.

The BR2_BFIN_INSTALL_FDPIC_SHARED and BR2_BFIN_INSTALL_FLAT_SHARED options don't get a legacy entry. For the ADI toolchain, there already is a legacy entry, so it doesn't make sense to add it twice. For other external toolchains, these options didn't actually work, because they rely on the specific layout of the ADI toolchain.

---
v2: new patch

---
 Config.in.legacy                                   |  8 +++
 package/glog/Config.in                             |  3 --
 package/php-amqp/Config.in                         |  2 -
 package/rabbitmq-c/Config.in                       |  4 --
 package/tinycbor/Config.in                         |  2 -
 package/x264/Config.in                             |  1 -
 toolchain/toolchain-external/Config.in             | 33 ------------
 .../toolchain-external/pkg-toolchain-external.mk   | 59 ----------------------
 .../toolchain-external-blackfin-uclinux/Config.in  | 17 -------
 .../Config.in.options                              | 10 ----
 .../toolchain-external-blackfin-uclinux.hash       |  3 --
 .../toolchain-external-blackfin-uclinux.mk         | 33 ------------
 12 files changed, 8 insertions(+), 167 deletions(-)
 delete mode 100644 toolchain/toolchain-external/toolchain-external-blackfin-uclinux/Config.in
 delete mode 100644 toolchain/toolchain-external/toolchain-external-blackfin-uclinux/Config.in.options
 delete mode 100644 toolchain/toolchain-external/toolchain-external-blackfin-uclinux/toolchain-external-blackfin-uclinux.hash
 delete mode 100644 toolchain/toolchain-external/toolchain-external-blackfin-uclinux/toolchain-external-blackfin-uclinux.mk
Config.in.legacy +8 -0
index cfb1276..20692b9 100644
@@ -145,6 +145,14 @@ endif
 ###############################################################################
 comment "Legacy options removed in 2017.02"
 
+config BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX
+	bool "Blackfin.uclinux.org 2014R1"
+	select BR2_LEGACY
+	help
+	  The ADI Blackfin toolchain has many bugs which are fixed in
+	  more recent gcc and uClibc-ng releases. Use the Buildroot
+	  toolchain instead.
+
 config BR2_PACKAGE_MAKEDEVS
 	bool "makedevs removed"
 	select BR2_LEGACY
package/glog/Config.in +0 -3
index f708758..534997a 100644
@@ -3,14 +3,11 @@ config BR2_PACKAGE_GLOG
 	depends on BR2_INSTALL_LIBSTDCPP
 	depends on BR2_TOOLCHAIN_HAS_THREADS
 	depends on !BR2_STATIC_LIBS
-	# build issues with this external toolchain
-	depends on !BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX
 	help
 	  C++ implementation of the Google logging module
 
 	  https://github.com/google/glog
 
 comment "glog needs a toolchain w/ C++, threads, dynamic library"
-	depends on !BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX
 	depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS || \
 		BR2_STATIC_LIBS
package/php-amqp/Config.in +0 -2
index 253bfa7..0aa2021 100644
@@ -2,7 +2,6 @@ config BR2_PACKAGE_PHP_AMQP
 	bool "php-amqp"
 	depends on BR2_PACKAGE_PHP
 	depends on BR2_TOOLCHAIN_HAS_THREADS # rabbitmq-c
-	depends on !BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX # rabbitmq-c
 	select BR2_PACKAGE_RABBITMQ_C
 	help
 	  Communicate with any AMQP compliant server.
@@ -11,4 +10,3 @@ config BR2_PACKAGE_PHP_AMQP
 
 comment "php-amqp needs a toolchain w/ threads"
 	depends on !BR2_TOOLCHAIN_HAS_THREADS
-	depends on !BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX
package/rabbitmq-c/Config.in +0 -4
index 0d08233..b330c90 100644
@@ -1,9 +1,6 @@
 config BR2_PACKAGE_RABBITMQ_C
 	bool "rabbitmq-c"
 	depends on BR2_TOOLCHAIN_HAS_THREADS
-	# too old uClibc, not providing posix_spawn functions
-	# http://autobuild.buildroot.net/results/a6c3e79c61c5a535970d03bf37b068349f766a7f/
-	depends on !BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX
 	help
 	  This is a C-language AMQP client library for use with v2.0+
 	  of the RabbitMQ broker.
@@ -12,4 +9,3 @@ config BR2_PACKAGE_RABBITMQ_C
 
 comment "rabbitmq-c needs a toolchain w/ threads"
 	depends on !BR2_TOOLCHAIN_HAS_THREADS
-	depends on !BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX
package/tinycbor/Config.in +0 -2
index cf176e4..41f0b5f 100644
@@ -1,7 +1,5 @@
 config BR2_PACKAGE_TINYCBOR
 	bool "tinycbor"
-	# package uses fopencookie(), not available with this toolchain
-	depends on !BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX
 	help
 	  Concise Binary Object Representation (CBOR) Library
 
package/x264/Config.in +0 -1
index 7bf2319..be3ab3f 100644
@@ -1,6 +1,5 @@
 config BR2_PACKAGE_X264
 	bool "x264"
-	depends on !BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX # madvise()
 	help
 	  x264 is a free software library and application for
 	  encoding video streams into the H.264/MPEG-4 AVC
toolchain/toolchain-external/Config.in +0 -33
index 2c39e5a..c007e62 100644
@@ -25,9 +25,6 @@ source "toolchain/toolchain-external/toolchain-external-codesourcery-arm/Config.
 # ARM big-endian
 source "toolchain/toolchain-external/toolchain-external-linaro-armeb/Config.in"
 
-# Blackfin
-source "toolchain/toolchain-external/toolchain-external-blackfin-uclinux/Config.in"
-
 # MIPS (use codesourcery toolchain by default)
 source "toolchain/toolchain-external/toolchain-external-codesourcery-mips/Config.in"
 source "toolchain/toolchain-external/toolchain-external-codescape-img-mips/Config.in"
@@ -125,9 +122,6 @@ source "toolchain/toolchain-external/toolchain-external-codesourcery-arm/Config.
 # ARM big-endian
 source "toolchain/toolchain-external/toolchain-external-linaro-armeb/Config.in.options"
 
-# Blackfin
-source "toolchain/toolchain-external/toolchain-external-blackfin-uclinux/Config.in.options"
-
 # MIPS
 source "toolchain/toolchain-external/toolchain-external-codesourcery-mips/Config.in.options"
 source "toolchain/toolchain-external/toolchain-external-codescape-img-mips/Config.in.options"
@@ -156,31 +150,4 @@ config BR2_TOOLCHAIN_EXTERNAL_GDB_SERVER_COPY
 	  Copy the gdbserver provided by the external toolchain to the
 	  target.
 
-# When the FDPIC shared binary format is used, the corresponding libraries are
-# always installed. When a different binary format is used, we offer the option
-# of installing the FDPIC shared libraries.
-config BR2_BFIN_INSTALL_FDPIC_SHARED
-	bool "Install FDPIC shared libraries"
-	depends on BR2_bfin && !BR2_BINFMT_FDPIC
-	help
-	  The Linux kernel supports running both FDPIC and FLAT applications
-	  concurrently if the binary format specific libraries are installed
-	  properly. This option allows developer to install FDPIC libraries
-	  into a buildroot rootfs image built with binary format that is not
-	  FDPIC.
-
-# When the FLAT shared binary format is used, we force the installation
-# of the corresponding libraries. When a different binary format is
-# used, we offer the option of installing the FLAT shared libraries.
-config BR2_BFIN_INSTALL_FLAT_SHARED
-	bool "Install FLAT shared libraries" if !BR2_BINFMT_FLAT_SHARED
-	depends on BR2_bfin
-	default y if BR2_BINFMT_FLAT_SHARED
-	help
-	  The Linux kernel supports running both FDPIC and FLAT applications
-	  concurrently if the binary format specific libraries are installed
-	  properly. This option allows developer to install FLAT libraries
-	  into a buildroot rootfs image built with binary format that is not
-	  shared FLAT.
-
 endif # BR2_TOOLCHAIN_EXTERNAL
toolchain/toolchain-external/pkg-toolchain-external.mk +0 -59

91 lines not on this page · raw message

toolchain/toolchain-external/toolchain-external-blackfin-uclinux/Config.in deleted +0 -17
deleted file mode 100644
index 8b299e8..0000000
@@ -1,17 +0,0 @@
-config BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX
-	bool "Blackfin.uclinux.org 2014R1"
-	depends on BR2_bfin
-	depends on BR2_HOSTARCH = "x86_64" || BR2_HOSTARCH = "x86"
-	select BR2_TOOLCHAIN_EXTERNAL_UCLIBC
-	select BR2_INSTALL_LIBSTDCPP
-	select BR2_TOOLCHAIN_HAS_NATIVE_RPC
-	select BR2_USE_WCHAR
-	select BR2_TOOLCHAIN_HAS_THREADS
-	select BR2_TOOLCHAIN_HAS_THREADS_DEBUG
-	select BR2_HOSTARCH_NEEDS_IA32_LIBS
-	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10
-	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_3
-	select BR2_TOOLCHAIN_HAS_FORTRAN
-	help
-	  Toolchain for the Blackfin architecture, from
-	  http://blackfin.uclinux.org.
toolchain/toolchain-external/toolchain-external-blackfin-uclinux/Config.in.options deleted +0 -10
deleted file mode 100644
index 3b7f457..0000000
@@ -1,10 +0,0 @@
-if BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX
-
-config BR2_TOOLCHAIN_EXTERNAL_PREFIX
-	default "bfin-uclinux" if BR2_BINFMT_FLAT
-	default "bfin-linux-uclibc" if BR2_BINFMT_FDPIC
-
-config BR2_PACKAGE_PROVIDES_TOOLCHAIN_EXTERNAL
-	default "toolchain-external-blackfin-uclinux"
-
-endif
toolchain/toolchain-external/toolchain-external-blackfin-uclinux/toolchain-external-blackfin-uclinux.hash deleted +0 -3
deleted file mode 100644
index b320d94..0000000
@@ -1,3 +0,0 @@
-# Locally calculated
-sha256 e424e90d8481d942a40266d78d1488726561fed3ec38403094f98055e61889d0  blackfin-toolchain-2014R1-RC2.i386.tar.bz2
-sha256 c65b1b4b918d5185349d62a3b7bf43b4b21e1175c52598ec047ca56b3f11d857  blackfin-toolchain-uclibc-full-2014R1-RC2.i386.tar.bz2
toolchain/toolchain-external/toolchain-external-blackfin-uclinux/toolchain-external-blackfin-uclinux.mk deleted +0 -33
deleted file mode 100644
index 0a48220..0000000
@@ -1,33 +0,0 @@
-################################################################################
-#
-# toolchain-external-blackfin-uclinux
-#
-################################################################################
-
-TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_VERSION_MAJOR = 2014R1
-TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_VERSION = $(TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_VERSION_MAJOR)-RC2
-
-ifeq ($(BR2_BINFMT_FLAT),y)
-TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_SUBDIR = bfin-uclinux
-else
-TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_SUBDIR = bfin-linux-uclibc
-endif
-
-TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_SITE = http://downloads.sourceforge.net/project/adi-toolchain/$(TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_VERSION_MAJOR)/$(TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_VERSION)/i386
-TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_SOURCE = blackfin-toolchain-$(TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_VERSION).i386.tar.bz2
-TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_EXTRA_DOWNLOADS = blackfin-toolchain-uclibc-full-$(TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_VERSION).i386.tar.bz2
-
-TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_STRIP_COMPONENTS = 3
-
-# Special handling for Blackfin toolchain, because of the split in two
-# tarballs, and the organization of tarball contents. The tarballs
-# contain ./opt/uClinux/{bfin-uclinux,bfin-linux-uclibc} directories,
-# which themselves contain the toolchain. This is why we strip more
-# components than usual.
-define TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_UCLIBC_EXTRA_EXTRACT
-	$(call suitable-extractor,$(TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_EXTRA_DOWNLOADS)) $(DL_DIR)/$(TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_EXTRA_DOWNLOADS) | \
-		$(TAR) --strip-components=3 -C $(@D) $(TAR_OPTIONS) -
-endef
-TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_POST_EXTRACT_HOOKS += TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX_UCLIBC_EXTRA_EXTRACT
-
-$(eval $(toolchain-external-package))
Signature · 1 line
2.10.2
#2 lore raw

PATCH v2 2/2 toolchain: kill ADI Blackfin toolchain

Hi Arnout,
Arnout Vandecappelle (Essensium/Mind) wrote,

Quoted 5 lines

This toolchain has many problems which are fixed in contemporary gcc and uClibc-ng. In addition, several hacks are needed to be able to work with this toolchain. All these hacks are removed as well. Also the package exceptions for this toolchain are removed.

Quoted 7 lines

The BR2_BFIN_INSTALL_FDPIC_SHARED and BR2_BFIN_INSTALL_FLAT_SHARED options don't get a legacy entry. For the ADI toolchain, there already is a legacy entry, so it doesn't make sense to add it twice. For other external toolchains, these options didn't actually work, because they rely on the specific layout of the ADI toolchain.

ACK from me. May be we convince ADI people to get more stuff fixed upstream, when this toolchain is removed.

best regards
Waldemar

#3 lore raw

PATCH v2 2/2 toolchain: kill ADI Blackfin toolchain

In reply to Arnout Vandecappelle (Essensium/Mind)

Hello,

Config.in.legacy endif · line 149

Quoted 2 lines · Arnout Vandecappelle (Essensium/Mind)
Config.in.legacy +2 -0
+config BR2_TOOLCHAIN_EXTERNAL_BLACKFIN_UCLINUX
+	bool "Blackfin.uclinux.org 2014R1"

This prompt was a bit short, so I changed it to:

bool "Blackfin.uclinux.org 2014R1 toolchain removed"

Applied to next. Thanks!

Thomas

Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com
#4 lore raw

PATCH v2 1/2 toolchain-external: support gcc < 4.3

In reply to Arnout Vandecappelle (Essensium/Mind)

Hello,

Quoted 15 lines · Arnout Vandecappelle (Essensium/Mind)

We currently support gcc as old as 4.3. However, Buildroot works perfectly well with even older gcc versions (tested with 4.1). So we can add an option BR2_TOOLCHAIN_EXTERNAL_GCC_OLD to support that. The help text of this option is written with plenty of discouragement.

We use _OLD and not something like _PRE_4_3, because at some point we will likely remove the 4.3 option and what would then require a name change.

We don't set any _AT_LEAST option in this case because it's no use - there is no lower bound on the version in this case. We therefore leave BR2_TOOLCHAIN_GCC_AT_LEAST empty (the implicit default). When it is empty, we don't do a version check at all in check_gcc_version (previously we errored out when it was empty).

Quoted 3 lines

---
v2: rebase on next, slightly reword commit message

Applied to next, thanks.

Thomas

Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com