Merge pull request #1102 from stilor/moxie

Moxie architecture support
dev-linux
Alexey Neyman 5 years ago committed by GitHub
commit dc681ec8eb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -22,6 +22,19 @@ fi
# Iterate over NAME entities (the iterator must be set up first
# using the set_iter function), processing the lines until the matching
# #!end-foreach line.
#
# Also, several forms of @@VAR@@ expansions are possible:
#
# @@VAR@@
# Just the value of the variable VAR
# @@VAR|@@
# The value of VAR made into Kconfig-name: all non-alphanumeric character
# replaced with underscores; upper-cased.
# @@VAR?val@@
# If VAR is non-empty, insert value "val". Otherwise, insert nothing.
# @@*ITER@@
# Expands to a space separated list of values for the iterator ITER.
# Postprocess operations, if any, are applied to each value.
declare -A info
@ -183,7 +196,8 @@ run_lines()
{
local start="${1}"
local end="${2}"
local l lnext s s1 v vp pp p val
local l lnext s s1 v vn vp pp p val val0 is_iter pp_saved
local -a vpl
debug "Running lines ${start}..${end}"
l=${start}
@ -199,33 +213,53 @@ run_lines()
*@@*@@*)
v="${s#*@@}"
v="${v%%@@*}"
# $v now includes variable name + any postprocessing
vp="${v%%[|?]*}"
pp="${v#${vp}}"
# $vp is name of the variable proper, $pp is any postprocessing
if [ "${info[${vp}]+set}" != "set" ]; then
error "${template}:${l}: reference to undefined variable '${vp}'"
fi
# $v now has the complete reference. First check if it is cached already.
if [ "${info[${v}]+set}" != "set" ]; then
# We know the base variable, need to cache postprocessed value
val="${info[${vp}]}"
# Apply postprocessing(s)
while [ -n "${pp}" ]; do
case "${pp}" in
"|"*)
# Kconfigize
pp="${pp#|}"
val=${val//[^0-9A-Za-z_]/_}
val=${val^^}
;;
"?"*)
pp="${pp#?}"
p="${pp%%[|?]*}"
pp="${pp#${p}}"
val="${val:+${p}}"
;;
esac
case "${v}" in
"*"*) is_iter=y; vn="${v#\*}";;
*) is_iter=n; vn="${v}";;
esac
# $vn is now the reference without the preceding iterator
vp="${vn%%[|?]*}"
pp="${vn#${vp}}"
# $vp is name of the variable proper, $pp is any postprocessing
if [ "${is_iter}" = "n" ]; then
if [ "${info[${vp}]+set}" != "set" ]; then
error "${template}:${l}: reference to undefined variable '${vp}'"
fi
vpl=( "${info[${vp}]}" )
else
if [ "${info[iter_${vp}]+set}" != "set" ]; then
error "${template}:${l}: iterator over '${vp} is not defined"
fi
vpl=( ${info[iter_${vp}]} )
fi
# ${vpl[@]} now is an array of values to be transformed.
val=
pp_saved="${pp}"
for val0 in "${vpl[@]}"; do
debug "val0 [${val0}]"
pp="${pp_saved}"
# Apply postprocessing(s)
while [ -n "${pp}" ]; do
case "${pp}" in
"|"*)
# Kconfigize
pp="${pp#|}"
val0=${val0//[^0-9A-Za-z_]/_}
val0=${val0^^}
;;
"?"*)
pp="${pp#?}"
p="${pp%%[|?]*}"
pp="${pp#${p}}"
val0="${val0:+${p}}"
;;
esac
done
val="${val:+${val} }${val0}"
done
# Cache for future references.
info[${v}]="${val}"
fi
s1="${s1}${s%%@@*}\${info[${v}]}"

@ -0,0 +1,11 @@
# Moxie soft-core architecture
## no-package
## select ARCH_SUPPORTS_32
## select ARCH_DEFAULT_32
## select ARCH_SUPPORTS_EITHER_ENDIAN
## select ARCH_DEFAULT_BE
## depends on EXPERIMENTAL
## help The Moxie soft-core architecture, as defined by:
## help http://moxielogic.org/blog/pages/architecture.html

@ -0,0 +1,6 @@
# Kernel.org's device tree compiler
## default y if !CONFIGURE_has_dtc && ARCH_MOXIE
config DTC_VERBOSE
bool "Verbose DTC build output"

@ -36,6 +36,9 @@ config CONFIGURE_has_automake_1_15_or_newer
config CONFIGURE_has_gnu_m4_1_4_12_or_newer
@KCONFIG_gnu_m4_1_4_12_or_newer@
config CONFIGURE_has_dtc
@KCONFIG_dtc@
config CONFIGURE_has_cvs
@KCONFIG_cvs@

@ -1,6 +1,6 @@
# Linux kernel options
## depends on ! ARCH_AVR
## depends on !ARCH_AVR && !ARCH_MSP430 && !ARCH_MOXIE
## select KERNEL_SUPPORTS_SHARED_LIBS
## help Build a toolchain targeting systems running Linux as a kernel.

@ -1,7 +1,7 @@
# avr-libc options
## depends on ARCH_AVR
## depends on ! LINUX && ! WINDOWS && BARE_METAL
## depends on BARE_METAL
##
## select LIBC_SUPPORT_THREADS_NONE
##

@ -0,0 +1,16 @@
# moxiebox options
# Moxie is distributed in non-bootstrapped form, so we really need
# autoconfig and automake.
## depends on ARCH_MOXIE
## depends on BARE_METAL
## select LIBC_NEWLIB_SHOW
## select LIBC_SUPPORT_THREADS_NONE
## select COMP_TOOLS_AUTOCONF if !CONFIGURE_has_autoconf_2_65_or_newer || !CONFIGURE_has_autoreconf_2_64_or_newer
## select COMP_TOOLS_AUTOMAKE if !CONFIGURE_has_automake_1_15_or_newer
## select CC_CORE_PASSES_NEEDED if CANADIAN
## select CC_CORE_PASS_2_NEEDED if ! CANADIAN
## select LIBELF_NEEDED
##
## help Secure execution runtime for Moxie architecture.

@ -182,14 +182,14 @@ config NATIVE
depends on EXPERIMENTAL
help
Build a native toolchain.
See: "docs/6 - Toolchain types.txt"
See: "docs/6_Toolchain_Types.md"
config CROSS
bool
prompt "Cross"
help
Build a cross-toolchain.
See: "docs/6 - Toolchain types.txt"
See: "docs/6_Toolchain_Types.md"
config CROSS_NATIVE
bool
@ -197,14 +197,14 @@ config CROSS_NATIVE
depends on EXPERIMENTAL
help
Build a cross-native toolchain.
See: "docs/6 - Toolchain types.txt"
See: "docs/6_Toolchain_Types.md"
config CANADIAN
bool
prompt "Canadian"
help
Build a canadian-toolchain.
See: "docs/6 - Toolchain types.txt"
See: "docs/6_Toolchain_Types.md"
endchoice

@ -217,6 +217,9 @@ CTNG_PROG_VERSION([M4],
AC_SUBST([kconfig_options])
AC_CHECK_PROGS([dtc], [dtc])
CTNG_SET_KCONFIG_OPTION([dtc])
AC_CHECK_PROGS([cvs], [cvs])
CTNG_SET_KCONFIG_OPTION([cvs])

@ -254,7 +254,7 @@ CT_STEPS := \
kernel_headers \
libc_start_files \
cc_core_pass_2 \
libc \
libc_main \
cc_for_build \
cc_for_host \
libc_post_cc \

@ -32,7 +32,12 @@ config @@dir|@@_CHOICE_KSYM
#!end-foreach
#!foreach choice
if @@dir|@@_@@choice|@@
config @@dir|@@_@@choice|@@_SHOW
bool
default y if @@dir|@@_@@choice|@@
if @@dir|@@_@@choice|@@_SHOW
comment "Options for @@choice@@"
config @@dir|@@_@@choice|@@_PKG_KSYM
string
default "@@pkg|@@"
@ -44,3 +49,7 @@ source "config/@@dir@@/@@choice@@.in"
endif
#!end-foreach
config ALL_@@dir|@@_CHOICES
string
default "@@*choice|@@"

@ -25,3 +25,7 @@ source "config/@@dir@@/@@choice@@.in"
endif
#!end-foreach
config ALL_@@dir|@@_CHOICES
string
default "@@*choice|@@"

@ -0,0 +1,8 @@
md5 dtc-1.4.7.tar.xz cdf3bfae59374fdcd2bbc5ae4f0e835e
sha1 dtc-1.4.7.tar.xz f9724c51caae4fef4da0c8a5d52e9d4d9fc7e8af
sha256 dtc-1.4.7.tar.xz 6643e8f00ff86350f465bb54b2185058b5b1b7bac01a0842c81a52b86589cde7
sha512 dtc-1.4.7.tar.xz 01e0c88aee154d8ce8a5b84a299c98d12df9698e5eff572409e5e912236028532309fd21ca6a146dffef859c665d476bbbe13c371c621c1dee4abe546e5e6ebf
md5 dtc-1.4.7.tar.gz d51a50202d323fdafd0778f53e861cdd
sha1 dtc-1.4.7.tar.gz 1de4ad95e08efd6d04dae5f1a71ce18f26565bba
sha256 dtc-1.4.7.tar.gz 9f4ee98d402b55b4afd79a4bcfce52f891b160d16c0f46d9aee3c0f7e034516d
sha512 dtc-1.4.7.tar.gz d58855746d9d05f19b2cc091438901acf2dc8cb2b24191de6292abffadfd1fa62a32ea82c300cde51ce30ca5facb0553bed42741a41bc4f4c20c1b9221bdd164

@ -0,0 +1,4 @@
repository='git git://git.kernel.org/pub/scm/utils/dtc/dtc.git'
mirrors='$(CT_Mirrors kernel.org dtc)'
archive_formats='.tar.xz .tar.gz'
signature_format='unpacked/.sign'

@ -0,0 +1,29 @@
From a59675779247f544695959646a1615a033ca2d8d Mon Sep 17 00:00:00 2001
From: Alexey Neyman <stilor@att.net>
Date: Tue, 20 Nov 2018 10:54:40 -0800
Subject: [PATCH] Remove PKG_CONFIG check
... it is not used afterwards anyway, and causes errors if pkg-config
is not installed (since one cannot just run configure - one has to
run autogen.sh first).
Signed-off-by: Alexey Neyman <stilor@att.net>
---
configure.ac | 1 -
1 file changed, 1 deletion(-)
diff --git a/configure.ac b/configure.ac
index aeadb36..1925a88 100644
--- a/configure.ac
+++ b/configure.ac
@@ -22,7 +22,6 @@ AC_PATH_TOOL(STRIP, strip)
AC_CHECK_PROG(MOX_AS, moxiebox-as, moxiebox-as)
AC_CHECK_PROG(MOX_AR, moxiebox-ar, moxiebox-ar)
AC_CHECK_PROG(MOX_GCC, moxiebox-gcc, moxiebox-gcc)
-PKG_PROG_PKG_CONFIG
AC_LANG_PUSH([C++])
--
2.14.1

@ -0,0 +1,2 @@
repository='git https://github.com/jgarzik/moxiebox.git'
repository_cset='9a79ac546faa4196b66e279f8017814ba8d6fd4b'

@ -0,0 +1,23 @@
/*
Wrapper around moxiebox'es implementation of SHA256 digest that
mimics the API of the OpenSSL implementation.
*/
#ifndef __SHA_H_
#define __SHA_H_
#ifdef __cplusplus
extern "C" {
#endif
#include "../runtime/sandboxrt_crypto.h"
#define SHA256_DIGEST_LENGTH SHA256_BLOCK_SIZE
void SHA256_Init(SHA256_CTX *ctx);
void SHA256_Update(SHA256_CTX *ctx, const void *data, size_t len);
void SHA256_Final(unsigned char *md, SHA256_CTX *ctx);
#ifdef __cplusplus
}
#endif
#endif

@ -0,0 +1,25 @@
/*
Wrapper around moxiebox'es implementation of SHA256 digest that
mimics the API of the OpenSSL implementation.
*/
#include "sha.h"
#include "../runtime/sha256.c"
void
SHA256_Init(SHA256_CTX *ctx)
{
sha256_init(ctx);
}
void
SHA256_Update(SHA256_CTX *ctx, const void *data, size_t len)
{
sha256_update(ctx, data, len);
}
void
SHA256_Final(unsigned char *md, SHA256_CTX *ctx)
{
sha256_final(ctx, md);
}

@ -0,0 +1,8 @@
CT_EXPERIMENTAL=y
CT_ARCH_MOXIE=y
CT_LIBC_NEWLIB=y
CT_DEBUG_GDB=y
CT_GDB_CROSS_SIM=y
# CT_GDB_CROSS_PYTHON is not set
CT_COMP_LIBS_LIBELF=y
CT_DTC_VERBOSE=y

@ -0,0 +1,10 @@
reporter_name="Alexey Neyman"
reporter_url=""
reporter_comment="Bare metal configuration for moxie architecture.
It appears to generate a broken toolchain. E.g. newlib's CRT expects
symbols __bss_start__ and __bss_end__, while linker script generates
__bss_start (no underscores at the end) and no __bss_end__whatsoever.
This is not a bug in crosstool-NG. If you're interested in saving the
moxie, please report this upstream."

@ -0,0 +1,6 @@
CT_EXPERIMENTAL=y
CT_ARCH_MOXIE=y
CT_DEBUG_GDB=y
CT_GDB_CROSS_SIM=y
# CT_GDB_CROSS_PYTHON is not set
CT_DTC_VERBOSE=y

@ -0,0 +1,3 @@
reporter_name="Alexey Neyman"
reporter_url=""
reporter_comment="Moxie toolchain with moxiebox+newlib as the C library."

@ -0,0 +1,9 @@
CT_EXPERIMENTAL=y
CT_ARCH_MOXIE=y
CT_CANADIAN=y
CT_HOST="x86_64-multilib-linux-uclibc"
CT_DEBUG_GDB=y
CT_GDB_CROSS_SIM=y
# CT_LIBICONV_NEEDED is not set
# CT_GETTEXT_NEEDED is not set
CT_DTC_VERBOSE=y

@ -0,0 +1,3 @@
reporter_name="Alexey Neyman"
reporter_url=""
reporter_comment="Canadian cross using moxiebox lib."

@ -2,4 +2,11 @@
CT_DoArchTupleValues() {
CT_TARGET_ARCH="${CT_ARCH}"
case "${CT_LIBC}" in
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
;;
esac
}

@ -0,0 +1,11 @@
# Moxie-specific arch callbacks
# No arch-specific overrides yet
CT_DoArchTupleValues()
{
case "${CT_LIBC}" in
moxiebox)
CT_TARGET_SYS=moxiebox
;;
esac
}

@ -1,14 +1,17 @@
# Build script for make
do_companion_tools_make_get() {
do_companion_tools_make_get()
{
CT_Fetch MAKE
}
do_companion_tools_make_extract() {
do_companion_tools_make_extract()
{
CT_ExtractPatch MAKE
}
do_companion_tools_make_for_build() {
do_companion_tools_make_for_build()
{
CT_DoStep INFO "Installing make for build"
CT_mkdir_pushd "${CT_BUILD_DIR}/build-make-build"
do_make_backend \
@ -23,7 +26,8 @@ do_companion_tools_make_for_build() {
CT_EndStep
}
do_companion_tools_make_for_host() {
do_companion_tools_make_for_host()
{
CT_DoStep INFO "Installing make for host"
CT_mkdir_pushd "${CT_BUILD_DIR}/build-make-host"
do_make_backend \
@ -38,7 +42,8 @@ do_companion_tools_make_for_host() {
CT_EndStep
}
do_make_backend() {
do_make_backend()
{
local host
local prefix
local cflags

@ -1,14 +1,17 @@
# Build script for m4
do_companion_tools_m4_get() {
do_companion_tools_m4_get()
{
CT_Fetch M4
}
do_companion_tools_m4_extract() {
do_companion_tools_m4_extract()
{
CT_ExtractPatch M4
}
do_companion_tools_m4_for_build() {
do_companion_tools_m4_for_build()
{
CT_DoStep INFO "Installing m4 for build"
CT_mkdir_pushd "${CT_BUILD_DIR}/build-m4-build"
do_m4_backend \
@ -20,7 +23,8 @@ do_companion_tools_m4_for_build() {
CT_EndStep
}
do_companion_tools_m4_for_host() {
do_companion_tools_m4_for_host()
{
CT_DoStep INFO "Installing m4 for host"
CT_mkdir_pushd "${CT_BUILD_DIR}/build-m4-host"
do_m4_backend \
@ -32,7 +36,8 @@ do_companion_tools_m4_for_host() {
CT_EndStep
}
do_m4_backend() {
do_m4_backend()
{
local host
local prefix
local cflags

@ -1,14 +1,17 @@
# Build script for autoconf
do_companion_tools_autoconf_get() {
do_companion_tools_autoconf_get()
{
CT_Fetch AUTOCONF
}
do_companion_tools_autoconf_extract() {
do_companion_tools_autoconf_extract()
{
CT_ExtractPatch AUTOCONF
}
do_companion_tools_autoconf_for_build() {
do_companion_tools_autoconf_for_build()
{
CT_DoStep INFO "Installing autoconf for build"
CT_mkdir_pushd "${CT_BUILD_DIR}/build-autoconf-build"
do_autoconf_backend host=${CT_BUILD} prefix="${CT_BUILD_COMPTOOLS_DIR}"
@ -16,7 +19,8 @@ do_companion_tools_autoconf_for_build() {
CT_EndStep
}
do_companion_tools_autoconf_for_host() {
do_companion_tools_autoconf_for_host()
{
CT_DoStep INFO "Installing autoconf for host"
CT_mkdir_pushd "${CT_BUILD_DIR}/build-autoconf-host"
do_autoconf_backend host=${CT_HOST} prefix="${CT_PREFIX_DIR}"
@ -24,7 +28,8 @@ do_companion_tools_autoconf_for_host() {
CT_EndStep
}
do_autoconf_backend() {
do_autoconf_backend()
{
local host
local prefix

@ -1,14 +1,17 @@
# Build script for automake
do_companion_tools_automake_get() {
do_companion_tools_automake_get()
{
CT_Fetch AUTOMAKE
}
do_companion_tools_automake_extract() {
do_companion_tools_automake_extract()
{
CT_ExtractPatch AUTOMAKE
}
do_companion_tools_automake_for_build() {
do_companion_tools_automake_for_build()
{
CT_DoStep INFO "Installing automake for build"
CT_mkdir_pushd "${CT_BUILD_DIR}/build-automake-build"
do_automake_backend host=${CT_BUILD} prefix="${CT_BUILD_COMPTOOLS_DIR}"
@ -16,7 +19,8 @@ do_companion_tools_automake_for_build() {
CT_EndStep
}
do_companion_tools_automake_for_host() {
do_companion_tools_automake_for_host()
{
CT_DoStep INFO "Installing automake for host"
CT_mkdir_pushd "${CT_BUILD_DIR}/build-automake-host"
do_automake_backend host=${CT_HOST} prefix="${CT_PREFIX_DIR}"
@ -24,7 +28,8 @@ do_companion_tools_automake_for_host() {
CT_EndStep
}
do_automake_backend() {
do_automake_backend()
{
local host
local prefix

@ -1,14 +1,17 @@
# Build script for libtool
do_companion_tools_libtool_get() {
do_companion_tools_libtool_get()
{
CT_Fetch LIBTOOL
}
do_companion_tools_libtool_extract() {
do_companion_tools_libtool_extract()
{
CT_ExtractPatch LIBTOOL
}
do_companion_tools_libtool_for_build() {
do_companion_tools_libtool_for_build()
{
CT_DoStep INFO "Installing libtool for build"
CT_mkdir_pushd "${CT_BUILD_DIR}/build-libtool-build"
do_libtool_backend host=${CT_BUILD} prefix="${CT_BUILD_COMPTOOLS_DIR}"
@ -16,7 +19,8 @@ do_companion_tools_libtool_for_build() {
CT_EndStep
}
do_companion_tools_libtool_for_host() {
do_companion_tools_libtool_for_host()
{
CT_DoStep INFO "Installing libtool for host"
CT_mkdir_pushd "${CT_BUILD_DIR}/build-libtool-host"
do_libtool_backend host=${CT_HOST} prefix="${CT_PREFIX_DIR}"
@ -24,7 +28,8 @@ do_companion_tools_libtool_for_host() {
CT_EndStep
}
do_libtool_backend() {
do_libtool_backend()
{
local host
local prefix

@ -0,0 +1,81 @@
# Build script for DTC (device tree compiler)
do_companion_tools_dtc_get()
{
CT_Fetch DTC
}
do_companion_tools_dtc_extract()
{
CT_ExtractPatch DTC
}
do_companion_tools_dtc_for_build()
{
CT_DoStep INFO "Installing dtc for build"
CT_mkdir_pushd "${CT_BUILD_DIR}/build-dtc-build"
do_dtc_backend \
host=${CT_BUILD} \
prefix="${CT_BUILD_COMPTOOLS_DIR}" \
cflags="${CT_CFLAGS_FOR_BUILD}" \
ldflags="${CT_LDFLAGS_FOR_BUILD}"
CT_Popd
CT_EndStep
}
do_companion_tools_dtc_for_host()
{
CT_DoStep INFO "Installing dtc for host"
CT_mkdir_pushd "${CT_BUILD_DIR}/build-dtc-host"
do_dtc_backend \
host=${CT_HOST} \
prefix="${CT_PREFIX_DIR}" \
cflags="${CT_CFLAGS_FOR_HOST}" \
ldflags="${CT_LDFLAGS_FOR_HOST}"
CT_Popd
CT_EndStep
}
do_dtc_backend()
{
local host
local prefix
local cflags
local ldflags
local -a extra_opts
for arg in "$@"; do
eval "${arg// /\\ }"
done
extra_opts=( \
CC="${host}-gcc" \
AR="${host}-ar" \
PREFIX="${prefix}" \
NO_PYTHON=1 \
BIN=dtc \
)
if [ -n "${CT_DTC_VERBOSE}" ]; then
extra_opts+=( V=1 )
fi
case "${host}" in
*-mingw32)
# Turn off warnings: mingw32 hosts complain about %zd formats even though
# they seem to be supported by mingw32. Only build 'dtc', again, because
# other binaries use syscalls not available under mingw32, but we also
# do not need them. Hijack WARNINGS to override lstat with stat (Windows
# does not have symlinks).
extra_opts+=( BIN=dtc WARNINGS=-Dlstat=stat )
;;
esac
CT_DoExecLog ALL cp -av "${CT_SRC_DIR}/dtc/." .
CT_DoLog EXTRA "Building dtc"
CT_DoExecLog ALL make all "${extra_opts[@]}"
# Only install binaries, we don't support shared libraries in installation
# directory yet.
CT_DoLog EXTRA "Installing dtc"
CT_DoExecLog ALL make install-bin "${extra_opts[@]}"
}

@ -6,7 +6,6 @@ CT_DoKernelTupleValues() {
# Even we compile for x86_64 target architecture, the target OS have to
# bet mingw32 (require by gcc and mingw-w64)
CT_TARGET_KERNEL="mingw32"
CT_TARGET_SYS=
}
do_kernel_get() {

@ -0,0 +1,39 @@
# C library build routines. We don't invoke the corresponding functions directly
# because some of them build on top of another. E.g. moxiebox runtime requires
# newlib as a prerequisite.
# Define default hooks - download/unpack just the main package; no-op build hooks.
# The actual implementation can override just what it needs then.
eval "${CT_LIBC//[^A-Za-z0-9]/_}_get() { CT_Fetch ${CT_LIBC_CHOICE_KSYM}; }"
eval "${CT_LIBC//[^A-Za-z0-9]/_}_extract() { CT_ExtractPatch ${CT_LIBC_CHOICE_KSYM}; }"
for _m in start_files main post_cc; do
eval "${CT_LIBC//[^A-Za-z0-9]/_}_${_m}() { :; }"
done
# Source the selected libc.
. "${CT_LIB_DIR}/scripts/build/libc/${CT_LIBC}.sh"
do_libc_get()
{
eval "${CT_LIBC//[^A-Za-z0-9]/_}_get"
}
do_libc_extract()
{
eval "${CT_LIBC//[^A-Za-z0-9]/_}_extract"
}
do_libc_start_files()
{
eval "${CT_LIBC//[^A-Za-z0-9]/_}_start_files"
}
do_libc_main()
{
eval "${CT_LIBC//[^A-Za-z0-9]/_}_main"
}
do_libc_post_cc()
{
eval "${CT_LIBC//[^A-Za-z0-9]/_}_post_cc"
}

@ -1,22 +1,7 @@
# This file adds functions to build the avr-libc C library
do_libc_get() {
CT_Fetch AVR_LIBC
}
do_libc_extract() {
CT_ExtractPatch AVR_LIBC
}
do_libc_start_files() {
:
}
do_libc() {
:
}
do_libc_post_cc() {
avr_libc_post_cc()
{
CT_DoStep INFO "Installing C library"
CT_DoLog EXTRA "Copying sources to build directory"

@ -2,21 +2,15 @@
# Copyright 2017 Howard Chu
# Licensed under the GPL v2. See COPYING in the root of this package
do_libc_get() {
CT_Fetch ANDROID_NDK
}
do_libc_extract() {
CT_ExtractPatch ANDROID_NDK
}
# Install Unified headers
do_libc_start_files() {
bionic_start_files()
{
CT_DoStep INFO "Installing C library headers"
CT_DoExecLog ALL cp -r "${CT_SRC_DIR}/android-ndk/sysroot/usr" "${CT_SYSROOT_DIR}"
}
do_libc() {
bionic_main()
{
local arch="${CT_ARCH}"
if [ "${CT_ARCH_64}" = "y" ]; then
if [ "${CT_ARCH}" = "x86" ]; then
@ -34,8 +28,3 @@ do_libc() {
# options isn't completely out of character.
CT_EnvModify CT_TARGET_CFLAGS "${CT_TARGET_CFLAGS} -D__ANDROID_API__=${CT_ANDROID_API}"
}
do_libc_post_cc() {
:
}

@ -2,7 +2,8 @@
# Copyright 2007 Yann E. MORIN
# Licensed under the GPL v2. See COPYING in the root of this package
do_libc_get() {
glibc_get()
{
local date
local version
@ -13,7 +14,8 @@ do_libc_get() {
return 0
}
do_libc_extract() {
glibc_extract()
{
CT_ExtractPatch GLIBC
if [ "${CT_GLIBC_USE_PORTS_EXTERNAL}" = "y" ]; then
CT_ExtractPatch GLIBC_PORTS
@ -29,27 +31,26 @@ do_libc_extract() {
}
# Build and install headers and start files
do_libc_start_files() {
glibc_start_files()
{
# Start files and Headers should be configured the same way as the
# final libc, but built and installed differently.
do_libc_backend libc_mode=startfiles
glibc_backend libc_mode=startfiles
}
# This function builds and install the full C library
do_libc() {
do_libc_backend libc_mode=final
}
do_libc_post_cc() {
:
glibc_main()
{
glibc_backend libc_mode=final
}
# This backend builds the C library once for each multilib
# variant the compiler gives us
# Usage: do_libc_backend param=value [...]
# Usage: glibc_backend param=value [...]
# Parameter : Definition : Type : Default
# libc_mode : 'startfiles' or 'final' : string : (none)
do_libc_backend() {
glibc_backend()
{
local libc_mode
local arg
@ -70,17 +71,18 @@ do_libc_backend() {
esac
CT_mkdir_pushd "${CT_BUILD_DIR}/build-libc-${libc_mode}"
CT_IterateMultilibs do_libc_backend_once multilib libc_mode="${libc_mode}"
CT_IterateMultilibs glibc_backend_once multilib libc_mode="${libc_mode}"
CT_Popd
CT_EndStep
}
# This backend builds the C library once
# Usage: do_libc_backend_once param=value [...]
# Usage: glibc_backend_once param=value [...]
# Parameter : Definition : Type
# libc_mode : 'startfiles' or 'final' : string : (empty)
# multi_* : as defined in CT_IterateMultilibs : (varies) :
do_libc_backend_once() {
glibc_backend_once()
{
local multi_flags multi_dir multi_os_dir multi_root multi_index multi_count multi_target
local build_cflags build_cppflags build_ldflags
local startfiles_dir
@ -136,7 +138,7 @@ do_libc_backend_once() {
# values, as they CT_GLIBC_EXTRA_CONFIG_ARRAY is passed after
# extra_config
extra_config+=("$(do_libc_min_kernel_config)")
extra_config+=("$(glibc_min_kernel_config)")
case "${CT_THREADS}" in
nptl) extra_config+=("--with-__thread" "--with-tls");;
@ -165,9 +167,9 @@ do_libc_backend_once() {
extra_config+=("--enable-oldest-abi=${CT_GLIBC_OLDEST_ABI}")
fi
case "$(do_libc_add_ons_list ,)" in
case "$(glibc_add_ons_list ,)" in
"") extra_config+=("--enable-add-ons=no");;
*) extra_config+=("--enable-add-ons=$(do_libc_add_ons_list ,)");;
*) extra_config+=("--enable-add-ons=$(glibc_add_ons_list ,)");;
esac
[ "${CT_GLIBC_ENABLE_WERROR}" != "y" ] && extra_config+=("--disable-werror")
@ -241,7 +243,7 @@ do_libc_backend_once() {
# Run explicitly through CONFIG_SHELL, or the build breaks badly (loop-of-death)
# when the shell is not bash... Sigh... :-(
CT_DoLog DEBUG "Configuring with addons : '$(do_libc_add_ons_list ,)'"
CT_DoLog DEBUG "Configuring with addons : '$(glibc_add_ons_list ,)'"
CT_DoLog DEBUG "Extra config args passed : '${extra_config[*]}'"
CT_DoLog DEBUG "Extra CFLAGS passed : '${glibc_cflags}'"
CT_DoLog DEBUG "Placing startfiles into : '${startfiles_dir}'"
@ -402,7 +404,7 @@ do_libc_backend_once() {
fi
if [ "${CT_GLIBC_LOCALES}" = "y" -a "${multi_index}" = "${multi_count}" ]; then
do_libc_locales
glibc_locales
fi
fi # libc_mode = final
@ -410,7 +412,8 @@ do_libc_backend_once() {
}
# Build up the addons list, separated with $1
do_libc_add_ons_list() {
glibc_add_ons_list()
{
local sep="$1"
local addons_list
@ -427,7 +430,8 @@ do_libc_add_ons_list() {
}
# Compute up the minimum supported Linux kernel version
do_libc_min_kernel_config() {
glibc_min_kernel_config()
{
local min_kernel_config
case "${CT_GLIBC_EXTRA_CONFIG_ARRAY[*]}" in
@ -462,7 +466,8 @@ do_libc_min_kernel_config() {
}
# Build and install the libc locales
do_libc_locales() {
glibc_locales()
{
local src_dir="${CT_SRC_DIR}/glibc"
local -a extra_config
local glibc_cflags

@ -1,22 +1,15 @@
# Copyright 2012 Yann Diorcet
# Licensed under the GPL v2. See COPYING in the root of this package
do_libc_get() {
CT_Fetch MINGW_W64
}
do_libc_extract() {
CT_ExtractPatch MINGW_W64
}
do_set_mingw_install_prefix(){
mingw_w64_set_install_prefix()
{
MINGW_INSTALL_PREFIX=/usr/${CT_TARGET}
if [[ ${CT_MINGW_W64_VERSION} == 2* ]]; then
MINGW_INSTALL_PREFIX=/usr
fi
}
do_libc_start_files() {
mingw_w64_start_files() {
local -a sdk_opts
CT_DoStep INFO "Installing C library headers"
@ -36,7 +29,7 @@ do_libc_start_files() {
CT_DoLog EXTRA "Configuring Headers"
do_set_mingw_install_prefix
mingw_w64_set_install_prefix
CT_DoExecLog CFG \
${CONFIG_SHELL} \
"${CT_SRC_DIR}/mingw-w64/mingw-w64-headers/configure" \
@ -96,7 +89,7 @@ do_mingw_tools()
--program-prefix=${CT_TARGET}- \
--prefix="${CT_PREFIX_DIR}"
# mingw-w64 has issues with parallel builds, see do_libc
# mingw-w64 has issues with parallel builds, see mingw_w64_main
CT_DoLog EXTRA "Building ${f}"
CT_DoExecLog ALL make
CT_DoLog EXTRA "Installing ${f}"
@ -154,7 +147,7 @@ do_mingw_pthreads()
--build=${CT_BUILD} \
--host=${multi_target}
# mingw-w64 has issues with parallel builds, see do_libc
# mingw-w64 has issues with parallel builds, see mingw_w64_main
CT_DoLog EXTRA "Building mingw-w64-winpthreads"
CT_DoExecLog ALL make
@ -179,7 +172,7 @@ do_mingw_pthreads()
CT_EndStep
}
do_libc()
mingw_w64_main()
{
# Used when iterating over libwinpthread
local default_libprefix
@ -192,7 +185,7 @@ do_libc()
CT_mkdir_pushd "${CT_BUILD_DIR}/build-mingw-w64-crt"
do_set_mingw_install_prefix
mingw_w64_set_install_prefix
CT_DoExecLog CFG \
${CONFIG_SHELL} \
"${CT_SRC_DIR}/mingw-w64/mingw-w64-crt/configure" \
@ -228,6 +221,6 @@ do_libc()
fi
}
do_libc_post_cc() {
mingw_w64_post_cc() {
:
}

@ -0,0 +1,84 @@
# Functions to build the moxiebox runtime.
. "${CT_LIB_DIR}/scripts/build/libc/newlib.sh"
moxiebox_get()
{
CT_Fetch NEWLIB
CT_Fetch MOXIEBOX
}
moxiebox_extract()
{
CT_ExtractPatch NEWLIB
CT_ExtractPatch MOXIEBOX
}
moxiebox_start_files()
{
newlib_start_files
}
moxiebox_main()
{
newlib_main
# newlib installs the linker script, moxiebox.ld, to the
# PREFIX/moxie-unknown-moxiebox/lib, but ld searches PREFIX/lib when
# configured for that target. ld does find scripts in PREFIX/TARGET/lib
# for other targets, so this seems to be moxie architecture's quirk.
# Move it to PREFIX/lib.
# TBD CT_DoExecLog ALL mv -v "${CT_SYSROOT_DIR}/lib/"*.ld "${CT_PREFIX_DIR}/lib"
# TBD what about moxie-*-elf? Does it need the same?
CT_DoStep INFO "Installing moxiebox runtime and VM"
CT_mkdir_pushd "${CT_BUILD_DIR}/build-libc-moxiebox"
CT_DoExecLog ALL cp -av "${CT_SRC_DIR}/moxiebox/." .
CT_DoLog EXTRA "Building SHA256-only libcrypto"
# Moxiebox needs libcrypto on the host, but it only uses SHA256 digest functions
# from it. We don't want to pull the whole OpenSSL for the host; fortunately,
# moxiebox comes with a standalone SHA256 implementation - which it only uses
# for the target library. Help it use the same implementation for the host.
CT_mkdir_pushd openssl
CT_DoExecLog ALL cp -v "${CT_LIB_DIR}/packages/moxiebox/"sha*.[ch] ./
CT_DoExecLog ALL "${CT_HOST}-gcc" -c sha256_wrap.c -O2 -Wall
CT_DoExecLog ALL "${CT_HOST}-ar" cru libcrypto.a sha256_wrap.o
CT_Popd
# Moxiebox includes a VM which we're building for the
# host machine.
CT_DoLog EXTRA "Configuring moxiebox"
CT_DoExecLog CFG ./autogen.sh
# moxiebox build script create symlinks from the installation location to the build
# directory for the moxiebox library. This seems backwards. Instead, pass the search
# as part of the MOX_GCC definition.
# moxiebox also depends on the tools being named moxiebox-{gcc,as,ar}. However, failure
# to detect such tools is non-fatal in the configure and we need to override it in
# make's command line anyway.
CT_DoExecLog CFG \
LDFLAGS="${CT_LDFLAGS_FOR_HOST} -L${CT_BUILD_DIR}/build-libc-moxiebox/openssl" \
CFLAGS="${CT_CFLAGS_FOR_HOST} -I${CT_BUILD_DIR}/build-libc-moxiebox" \
CXXFLAGS="${CT_CFLAGS_FOR_HOST} -I${CT_BUILD_DIR}/build-libc-moxiebox" \
./configure \
--host="${CT_HOST}"
CT_DoLog EXTRA "Building moxiebox"
CT_DoExecLog CFG make all \
MOX_GCC="${CT_TARGET}-gcc -B ${CT_BUILD_DIR}/build-libc-moxiebox/runtime -B ${CT_SYSROOT_DIR}/lib" \
MOX_AS="${CT_TARGET}-as" \
MOX_AR="${CT_TARGET}-ar"
CT_DoLog EXTRA "Installing moxiebox"
# moxiebox does not have install target. Copy the interesting stuff manually.
CT_DoExecLog ALL cp -v "${CT_BUILD_DIR}/build-libc-moxiebox/runtime/libsandboxrt.a" \
"${CT_BUILD_DIR}/build-libc-moxiebox/runtime/crt0.o" \
"${CT_SYSROOT_DIR}/lib/"
CT_DoExecLog ALL cp -v "${CT_BUILD_DIR}/build-libc-moxiebox/src/sandbox" \
"${CT_PREFIX_DIR}/bin"
CT_Popd
CT_EndStep
}

@ -2,33 +2,27 @@
# Copyright 2013 Timo Teräs
# Licensed under the GPL v2. See COPYING in the root of this package
do_libc_get() {
CT_Fetch MUSL
}
do_libc_extract() {
CT_ExtractPatch MUSL
}
# Build and install headers and start files
do_libc_start_files() {
musl_start_files()
{
# Start files and Headers should be configured the same way as the
# final libc, but built and installed differently.
do_libc_backend libc_mode=startfiles
musl_backend libc_mode=startfiles
}
# This function builds and install the full C library
do_libc() {
do_libc_backend libc_mode=final
musl_main()
{
musl_backend libc_mode=final
}
do_libc_post_cc() {
musl_post_cc() {
# MUSL creates dynamic linker symlink with absolute path - which works on the
# target but not on the host. We want our cross-ldd tool to work.
CT_MultilibFixupLDSO
}
do_libc_backend() {
musl_backend() {
local libc_mode
local arg
@ -43,16 +37,16 @@ do_libc_backend() {
esac
CT_mkdir_pushd "${CT_BUILD_DIR}/build-libc-${libc_mode}"
CT_IterateMultilibs do_libc_backend_once multilib libc_mode="${libc_mode}"
CT_IterateMultilibs musl_backend_once multilib libc_mode="${libc_mode}"
CT_Popd
CT_EndStep
}
# This backend builds the C library
# Usage: do_libc_backend param=value [...]
# Usage: musl_backend param=value [...]
# Parameter : Definition : Type : Default
# libc_mode : 'startfiles' or 'final' : string : (none)
do_libc_backend_once() {
musl_backend_once() {
local libc_mode
local -a extra_cflags
local -a extra_config

@ -5,15 +5,8 @@
# Edited by Martin Lund <mgl@doredevelopment.dk>
#
do_libc_get() {
CT_Fetch NEWLIB
}
do_libc_extract() {
CT_ExtractPatch NEWLIB
}
do_libc_start_files() {
newlib_start_files()
{
CT_DoStep INFO "Installing C library headers & start files"
CT_DoExecLog ALL cp -a "${CT_SRC_DIR}/newlib/newlib/libc/include/." \
"${CT_HEADERS_DIR}"
@ -25,14 +18,14 @@ do_libc_start_files() {
CT_EndStep
}
do_libc() {
newlib_main()
{
local -a newlib_opts
local cflags_for_target
CT_DoStep INFO "Installing C library"
mkdir -p "${CT_BUILD_DIR}/build-libc"
cd "${CT_BUILD_DIR}/build-libc"
CT_mkdir_pushd "${CT_BUILD_DIR}/build-libc"
CT_DoLog EXTRA "Configuring C library"
@ -135,9 +128,6 @@ ENABLE_TARGET_OPTSPACE:target-optspace
"${CT_PREFIX_DIR}/share/doc/newlib"
fi
CT_Popd
CT_EndStep
}
do_libc_post_cc() {
:
}

@ -2,22 +2,12 @@
# Copyright 2008 Yann E. MORIN
# Licensed under the GPL v2. See COPYING in the root of this package
do_libc_get() {
none_get()
{
:
}
do_libc_extract() {
:
}
do_libc_start_files() {
:
}
do_libc() {
:
}
do_libc_post_cc() {
none_extract()
{
:
}

@ -2,30 +2,23 @@
# Copyright 2007 Yann E. MORIN
# Licensed under the GPL v2. See COPYING in the root of this package
# Download uClibc
do_libc_get() {
CT_Fetch UCLIBC
}
# Extract uClibc
do_libc_extract() {
CT_ExtractPatch UCLIBC
}
# Build and install headers and start files
do_libc_start_files() {
uclibc_start_files()
{
# Start files and Headers should be configured the same way as the
# final libc, but built and installed differently.
do_libc_backend libc_mode=startfiles
uclibc_backend libc_mode=startfiles
}
# This function builds and install the full C library
do_libc() {
do_libc_backend libc_mode=final
uclibc_main()
{
uclibc_backend libc_mode=final
}
# Common backend for 1st and 2nd passes.
do_libc_backend() {
uclibc_backend()
{
local libc_mode
local arg
@ -40,13 +33,14 @@ do_libc_backend() {
esac
CT_mkdir_pushd "${CT_BUILD_DIR}/build-libc-${libc_mode}"
CT_IterateMultilibs do_libc_backend_once multilib libc_mode="${libc_mode}"
CT_IterateMultilibs uclibc_backend_once multilib libc_mode="${libc_mode}"
CT_Popd
CT_EndStep
}
# Common backend for 1st and 2nd passes, once per multilib.
do_libc_backend_once() {
uclibc_backend_once()
{
local libc_mode
local multi_dir multi_os_dir multi_root multi_flags multi_index multi_count
local multilib_dir startfiles_dir
@ -215,7 +209,8 @@ do_libc_backend_once() {
# Initialises the .config file to sensible values
# $1: original file
# $2: modified file
manage_uClibc_config() {
manage_uClibc_config()
{
src="$1"
dst="$2"
flags="$3"
@ -408,7 +403,8 @@ manage_uClibc_config() {
CT_DoArchUClibcCflags "${dst}" "${flags}"
}
do_libc_post_cc() {
uclibc_post_cc()
{
# uClibc and GCC disagree where the dynamic linker lives. uClibc always
# places it in the MULTILIB_DIR, while gcc does that for *some* variants
# and expects it in /lib for the other. So, create a symlink from lib

@ -669,7 +669,6 @@ if [ "${CT_ONLY_DOWNLOAD}" != "y" -a "${CT_ONLY_EXTRACT}" != "y" ]; then
do_stop=0
prev_step=
[ -n "${CT_RESTART}" ] && do_it=0 || do_it=1
# Aha! CT_STEPS comes from steps.mk!
for step in ${CT_STEPS}; do
if [ ${do_it} -eq 0 ]; then
if [ "${CT_RESTART}" = "${step}" ]; then

@ -23,7 +23,7 @@ CT_LoadConfig() {
. "${CT_LIB_DIR}/scripts/build/kernel/${CT_KERNEL}.sh"
. "${CT_LIB_DIR}/scripts/build/companion_libs.sh"
. "${CT_LIB_DIR}/scripts/build/binutils/${CT_BINUTILS}.sh"
. "${CT_LIB_DIR}/scripts/build/libc/${CT_LIBC}.sh"
. "${CT_LIB_DIR}/scripts/build/libc.sh"
. "${CT_LIB_DIR}/scripts/build/cc/${CT_CC}.sh"
. "${CT_LIB_DIR}/scripts/build/debug.sh"
. "${CT_LIB_DIR}/scripts/build/test_suite.sh"
@ -1091,16 +1091,16 @@ CT_DoBuildTargetTuple() {
# Set defaults for the system part of the tuple. Can be overriden
# by architecture-specific values.
case "${CT_LIBC}" in
*glibc) CT_TARGET_SYS=gnu;;
uClibc) CT_TARGET_SYS=uclibc;;
musl) CT_TARGET_SYS=musl;;
glibc) CT_TARGET_SYS=gnu;;
uClibc) CT_TARGET_SYS=uclibc;;
musl) CT_TARGET_SYS=musl;;
bionic) CT_TARGET_SYS=android;;