From b8e64a0c08ea2c3b2940d8e7154970f0dc610ed5 Mon Sep 17 00:00:00 2001 From: Erico Nunes Date: Sun, 21 Jun 2015 20:53:06 -0300 Subject: avr-libc: add support for avr-libc C library This commit adds support for the avr-libc C library. According to the project page at http://www.nongnu.org/avr-libc , the avr-libc package provides a subset of the standard C library for Atmel AVR 8-bit RISC microcontrollers. In addition, the library provides the basic startup code needed by most applications. Support for this library in crosstool-ng is only enabled for the AVR 8-bit target. The avr-libc manual and most distributions build the AVR 8-bit gcc toolchain with the "avr" (non-canonical) target. Some experimentation also led to the conclusion that other (canonical) targets are not very well supported, so we force the "avr" target for crosstool-ng as well. The manual also recommends building avr-libc after the final gcc build. To accomplish this with crosstool-ng, a new do_libc_post_cc step is added, in which currently only avr-libc performs its build, and is a no-op for the other libc options. Signed-off-by: Erico Nunes --- scripts/functions | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'scripts/functions') diff --git a/scripts/functions b/scripts/functions index e62fba2b..0fe8239a 100644 --- a/scripts/functions +++ b/scripts/functions @@ -1206,6 +1206,11 @@ CT_DoBuildTargetTuple() { *glibc) CT_TARGET_SYS=gnu;; uClibc) CT_TARGET_SYS=uclibc;; musl) CT_TARGET_SYS=musl;; + avr-libc) + # avr-libc only seems to work with the non-canonical "avr" target. + CT_TARGET_SKIP_CONFIG_SUB=y + CT_TARGET_SYS= # CT_TARGET_SYS must be empty too + ;; *) CT_TARGET_SYS=elf;; esac @@ -1259,7 +1264,10 @@ CT_DoBuildTargetTuple() { esac # Canonicalise it - CT_TARGET=$(CT_DoConfigSub "${CT_TARGET}") + if [ "${CT_TARGET_SKIP_CONFIG_SUB}" != "y" ]; then + CT_TARGET=$(CT_DoConfigSub "${CT_TARGET}") + fi + # Prepare the target CFLAGS CT_ARCH_TARGET_CFLAGS="${CT_ARCH_TARGET_CFLAGS} ${CT_ARCH_ENDIAN_CFLAG}" CT_ARCH_TARGET_CFLAGS="${CT_ARCH_TARGET_CFLAGS} ${CT_ARCH_ARCH_CFLAG}" -- cgit v1.2.3 From 219c5e932fddfa9a5a996fb5774fdbe0e117c05c Mon Sep 17 00:00:00 2001 From: Erico Nunes Date: Sun, 21 Jun 2015 20:53:43 -0300 Subject: functions: add support for arch-specific patch Add support for applying arch-specific patches found in "patches/${pkgname}/${version}/${CT_ARCH}". This is needed for applying a popular binutils patch specific for the AVR architecture but which isn't isolated for AVR in binutils' code. In this case, applying it for every architecture would end up bloating binutils' "size" options with AVR specifics. This feels like a bit of a hack but it is easy enough to support with current crosstool-ng infrastructure, seems like worth it for this case. Signed-off-by: Erico Nunes --- scripts/functions | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'scripts/functions') diff --git a/scripts/functions b/scripts/functions index 0fe8239a..6429aa8c 100644 --- a/scripts/functions +++ b/scripts/functions @@ -1101,13 +1101,14 @@ CT_Patch() { CT_DoLog EXTRA "Patching '${pkgdir}'" bundled_patch_dir="${CT_LIB_DIR}/patches/${pkgname}/${version}" + bundled_patch_arch_dir="${bundled_patch_dir}/${CT_ARCH}" local_patch_dir="${CT_LOCAL_PATCH_DIR}/${pkgname}/${version}" case "${CT_PATCH_ORDER}" in - bundled) patch_dirs=("${bundled_patch_dir}");; + bundled) patch_dirs=("${bundled_patch_dir}" "${bundled_patch_arch_dir}");; local) patch_dirs=("${local_patch_dir}");; - bundled,local) patch_dirs=("${bundled_patch_dir}" "${local_patch_dir}");; - local,bundled) patch_dirs=("${local_patch_dir}" "${bundled_patch_dir}");; + bundled,local) patch_dirs=("${bundled_patch_dir}" "${bundled_patch_arch_dir}" "${local_patch_dir}");; + local,bundled) patch_dirs=("${local_patch_dir}" "${bundled_patch_dir}" "${bundled_patch_arch_dir}");; none) patch_dirs=;; esac -- cgit v1.2.3 From 14cc1cb28e37d5e6ce0b01990445de493ec7a967 Mon Sep 17 00:00:00 2001 From: Erico Nunes Date: Sun, 21 Jun 2015 20:54:16 -0300 Subject: functions: write permission in config.{guess,sub} avr-libc doesn't have write permissions in these by default in the 1.8.1 tar release, this caused an error during build with CT_OVERIDE_CONFIG_GUESS_SUB enabled. chmod u+w them before overriding to avoid an this error. Signed-off-by: Erico Nunes --- scripts/functions | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'scripts/functions') diff --git a/scripts/functions b/scripts/functions index 6429aa8c..86653465 100644 --- a/scripts/functions +++ b/scripts/functions @@ -1132,7 +1132,9 @@ CT_Patch() { eval ${cfg}="${CT_LIB_DIR}/scripts/${cfg/_/.}" [ -e "${CT_TOP_DIR}/scripts/${cfg/_/.}" ] && eval ${cfg}="${CT_TOP_DIR}/scripts/${cfg/_/.}" # Can't use CT_DoExecLog because of the '{} \;' to be passed un-mangled to find - find . -type f -name "${cfg/_/.}" -exec cp -v "${!cfg}" {} \; |CT_DoLog ALL + find . -type f -name "${cfg/_/.}" \ + -exec chmod -v u+w {} \; \ + -exec cp -v "${!cfg}" {} \; |CT_DoLog ALL done fi -- cgit v1.2.3