mirror of
https://github.com/crosstool-ng/crosstool-ng.git
synced 2025-06-18 07:18:16 +00:00
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 <nunes.erico@gmail.com>
This commit is contained in:
51
config/libc/avr-libc.in
Normal file
51
config/libc/avr-libc.in
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
# avr-libc options
|
||||||
|
|
||||||
|
## depends on ARCH_avr
|
||||||
|
## depends on ! LINUX && ! WINDOWS && BARE_METAL
|
||||||
|
##
|
||||||
|
## select LIBC_SUPPORT_THREADS_NONE
|
||||||
|
##
|
||||||
|
## help The AVR Libc package provides a subset of the standard C library for
|
||||||
|
## help Atmel AVR 8-bit RISC microcontrollers. In addition, the library
|
||||||
|
## help provides the basic startup code needed by most applications.
|
||||||
|
|
||||||
|
choice
|
||||||
|
bool
|
||||||
|
prompt "avr-libc version"
|
||||||
|
# Don't remove next line
|
||||||
|
# CT_INSERT_VERSION_BELOW
|
||||||
|
|
||||||
|
config LIBC_AVR_LIBC_V_1_8_1
|
||||||
|
bool
|
||||||
|
prompt "1.8.1"
|
||||||
|
|
||||||
|
config LIBC_AVR_LIBC_V_1_8_0
|
||||||
|
bool
|
||||||
|
prompt "1.8.0"
|
||||||
|
|
||||||
|
config LIBC_AVR_LIBC_CUSTOM
|
||||||
|
bool
|
||||||
|
prompt "Custom avr-libc"
|
||||||
|
depends on EXPERIMENTAL
|
||||||
|
|
||||||
|
endchoice
|
||||||
|
|
||||||
|
if LIBC_AVR_LIBC_CUSTOM
|
||||||
|
|
||||||
|
config LIBC_AVR_LIBC_CUSTOM_LOCATION
|
||||||
|
string
|
||||||
|
prompt "Full path to custom avr-libc source"
|
||||||
|
default ""
|
||||||
|
help
|
||||||
|
Enter the path to the directory (or tarball) of your source for avr-libc,
|
||||||
|
or leave blank to use default CT_CUSTOM_LOCATION_ROOT_DIR/avr-libc
|
||||||
|
|
||||||
|
endif # LIBC_AVR_LIBC_CUSTOM
|
||||||
|
|
||||||
|
config LIBC_VERSION
|
||||||
|
string
|
||||||
|
# Don't remove next line
|
||||||
|
# CT_INSERT_VERSION_STRING_BELOW
|
||||||
|
default "1.8.1" if LIBC_AVR_LIBC_V_1_8_1
|
||||||
|
default "1.8.0" if LIBC_AVR_LIBC_V_1_8_0
|
||||||
|
default "custom" if LIBC_AVR_LIBC_CUSTOM
|
8
config/libc/avr-libc.in.2
Normal file
8
config/libc/avr-libc.in.2
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
# avr-libc second-part options
|
||||||
|
|
||||||
|
config LIBC_AVR_LIBC_EXTRA_CONFIG_ARRAY
|
||||||
|
string
|
||||||
|
prompt "Extra config for avr-libc"
|
||||||
|
default ""
|
||||||
|
help
|
||||||
|
Extra flags to pass onto ./configure when configuring the avr-libc.
|
@ -99,6 +99,7 @@ comment "Tuple completion and aliasing"
|
|||||||
config TARGET_VENDOR
|
config TARGET_VENDOR
|
||||||
string
|
string
|
||||||
prompt "Tuple's vendor string"
|
prompt "Tuple's vendor string"
|
||||||
|
depends on !LIBC_avr_libc
|
||||||
default "unknown"
|
default "unknown"
|
||||||
help
|
help
|
||||||
Vendor part of the target tuple.
|
Vendor part of the target tuple.
|
||||||
|
71
scripts/build/libc/avr-libc.sh
Normal file
71
scripts/build/libc/avr-libc.sh
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
# This file adds functions to build the avr-libc C library
|
||||||
|
|
||||||
|
do_libc_get() {
|
||||||
|
local libc_src
|
||||||
|
|
||||||
|
libc_src="http://download.savannah.gnu.org/releases/avr-libc"
|
||||||
|
|
||||||
|
if [ "${CT_LIBC_AVR_LIBC_CUSTOM}" = "y" ]; then
|
||||||
|
CT_GetCustom "avr-libc" "${CT_LIBC_VERSION}" \
|
||||||
|
"${CT_LIBC_AVR_LIBC_CUSTOM_LOCATION}"
|
||||||
|
else # ! custom location
|
||||||
|
CT_GetFile "avr-libc-${CT_LIBC_VERSION}" "${libc_src}"
|
||||||
|
fi # ! custom location
|
||||||
|
}
|
||||||
|
|
||||||
|
do_libc_extract() {
|
||||||
|
# If using custom directory location, nothing to do.
|
||||||
|
if [ "${CT_LIBC_AVR_LIBC_CUSTOM}" = "y" ]; then
|
||||||
|
# Abort if the custom directory is not found.
|
||||||
|
if ! [ -d "${CT_SRC_DIR}/avr-libc-${CT_LIBC_VERSION}" ]; then
|
||||||
|
CT_Abort "Directory not found: ${CT_SRC_DIR}/avr-libc-${CT_LIBC_VERSION}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
CT_Extract "avr-libc-${CT_LIBC_VERSION}"
|
||||||
|
CT_Patch "avr-libc" "${CT_LIBC_VERSION}"
|
||||||
|
}
|
||||||
|
|
||||||
|
do_libc_check_config() {
|
||||||
|
:
|
||||||
|
}
|
||||||
|
|
||||||
|
do_libc_configure() {
|
||||||
|
CT_DoLog EXTRA "Configuring C library"
|
||||||
|
|
||||||
|
CT_DoExecLog CFG \
|
||||||
|
./configure \
|
||||||
|
--build=${CT_BUILD} \
|
||||||
|
--host=${CT_TARGET} \
|
||||||
|
--prefix=${CT_PREFIX_DIR} \
|
||||||
|
"${CT_LIBC_AVR_LIBC_EXTRA_CONFIG_ARRAY[@]}"
|
||||||
|
}
|
||||||
|
|
||||||
|
do_libc_start_files() {
|
||||||
|
:
|
||||||
|
}
|
||||||
|
|
||||||
|
do_libc() {
|
||||||
|
:
|
||||||
|
}
|
||||||
|
|
||||||
|
do_libc_post_cc() {
|
||||||
|
CT_DoStep INFO "Installing C library"
|
||||||
|
|
||||||
|
CT_DoLog EXTRA "Copying sources to build directory"
|
||||||
|
CT_DoExecLog ALL cp -av "${CT_SRC_DIR}/avr-libc-${CT_LIBC_VERSION}" \
|
||||||
|
"${CT_BUILD_DIR}/build-libc-post-cc"
|
||||||
|
cd "${CT_BUILD_DIR}/build-libc-post-cc"
|
||||||
|
|
||||||
|
do_libc_configure
|
||||||
|
|
||||||
|
CT_DoLog EXTRA "Building C library"
|
||||||
|
CT_DoExecLog ALL make ${JOBSFLAGS}
|
||||||
|
|
||||||
|
CT_DoLog EXTRA "Installing C library"
|
||||||
|
CT_DoExecLog ALL make install
|
||||||
|
|
||||||
|
CT_EndStep
|
||||||
|
}
|
@ -665,3 +665,7 @@ do_libc_locales() {
|
|||||||
install_root="${CT_SYSROOT_DIR}" \
|
install_root="${CT_SYSROOT_DIR}" \
|
||||||
localedata/install-locales
|
localedata/install-locales
|
||||||
}
|
}
|
||||||
|
|
||||||
|
do_libc_post_cc() {
|
||||||
|
:
|
||||||
|
}
|
||||||
|
@ -112,3 +112,7 @@ do_libc() {
|
|||||||
|
|
||||||
CT_EndStep
|
CT_EndStep
|
||||||
}
|
}
|
||||||
|
|
||||||
|
do_libc_post_cc() {
|
||||||
|
:
|
||||||
|
}
|
||||||
|
@ -113,3 +113,7 @@ do_libc() {
|
|||||||
|
|
||||||
CT_EndStep
|
CT_EndStep
|
||||||
}
|
}
|
||||||
|
|
||||||
|
do_libc_post_cc() {
|
||||||
|
:
|
||||||
|
}
|
||||||
|
@ -149,3 +149,7 @@ do_libc() {
|
|||||||
|
|
||||||
CT_EndStep
|
CT_EndStep
|
||||||
}
|
}
|
||||||
|
|
||||||
|
do_libc_post_cc() {
|
||||||
|
:
|
||||||
|
}
|
||||||
|
@ -21,3 +21,7 @@ do_libc_start_files() {
|
|||||||
do_libc() {
|
do_libc() {
|
||||||
:
|
:
|
||||||
}
|
}
|
||||||
|
|
||||||
|
do_libc_post_cc() {
|
||||||
|
:
|
||||||
|
}
|
||||||
|
@ -554,3 +554,7 @@ mungeuClibcConfig() {
|
|||||||
|
|
||||||
sed -r -f "${munge_file}" "${src_config_file}" >"${dst_config_file}"
|
sed -r -f "${munge_file}" "${src_config_file}" >"${dst_config_file}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
do_libc_post_cc() {
|
||||||
|
:
|
||||||
|
}
|
||||||
|
@ -1206,6 +1206,11 @@ CT_DoBuildTargetTuple() {
|
|||||||
*glibc) CT_TARGET_SYS=gnu;;
|
*glibc) CT_TARGET_SYS=gnu;;
|
||||||
uClibc) CT_TARGET_SYS=uclibc;;
|
uClibc) CT_TARGET_SYS=uclibc;;
|
||||||
musl) CT_TARGET_SYS=musl;;
|
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;;
|
*) CT_TARGET_SYS=elf;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
@ -1259,7 +1264,10 @@ CT_DoBuildTargetTuple() {
|
|||||||
esac
|
esac
|
||||||
|
|
||||||
# Canonicalise it
|
# Canonicalise it
|
||||||
|
if [ "${CT_TARGET_SKIP_CONFIG_SUB}" != "y" ]; then
|
||||||
CT_TARGET=$(CT_DoConfigSub "${CT_TARGET}")
|
CT_TARGET=$(CT_DoConfigSub "${CT_TARGET}")
|
||||||
|
fi
|
||||||
|
|
||||||
# Prepare the target CFLAGS
|
# 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_ENDIAN_CFLAG}"
|
||||||
CT_ARCH_TARGET_CFLAGS="${CT_ARCH_TARGET_CFLAGS} ${CT_ARCH_ARCH_CFLAG}"
|
CT_ARCH_TARGET_CFLAGS="${CT_ARCH_TARGET_CFLAGS} ${CT_ARCH_ARCH_CFLAG}"
|
||||||
|
Reference in New Issue
Block a user