On macOS, "gnumake" and "make" are both supplied by the OS, but are too
old to build glibc (both are version 3.81 as of this writing). Homebrew
provides the "gmake" executable, which is recent enough for glibc.
However, the existing logic in "scripts/build-util.sh" will always
prefer "gnumake" over "gmake".
The configure logic in the riscv-glibc library allows a user to override
the preference for "gnumake" by setting the MAKE environment variable.
This change makes "scripts/build-openocd.sh" and
"scripts/build-toolchains.sh" mimic that behavior. A user can now use
"gmake" instead of "gnumake" during the toolchain build like so:
MAKE=gmake ./scripts/build-toolchains.sh
91 lines
2.2 KiB
Bash
91 lines
2.2 KiB
Bash
# Derived from
|
|
# https://github.com/riscv/riscv-tools/blob/master/build.common
|
|
|
|
[ -n "${SRCDIR}" ] || exit 1
|
|
|
|
# Scale number of parallel make jobs by hardware thread count
|
|
ncpu="${NPROC:-$(getconf _NPROCESSORS_ONLN || # GNU
|
|
getconf NPROCESSORS_ONLN || # *BSD, Solaris
|
|
nproc --all || # Linux
|
|
sysctl -n hw.ncpu || # *BSD, OS X
|
|
:)}" 2>/dev/null
|
|
case ${ncpu} in
|
|
''|*[!0-9]*) ;; # Ignore non-integer values
|
|
*) export MAKEFLAGS="-j ${ncpu} ${MAKEFLAGS}" ;;
|
|
esac
|
|
|
|
# Allow user to override MAKE
|
|
[ -n "${MAKE}" ] || MAKE=$(command -v gnumake || command -v gmake || command -v make)
|
|
readonly MAKE
|
|
|
|
|
|
module_prepare() ( # <submodule> [ignored-submodule..]
|
|
set -e
|
|
name=$1
|
|
shift
|
|
|
|
dir="${SRCDIR}/${name}"
|
|
echo "=> Starting ${name} build"
|
|
echo "==> Initializing ${name} submodule"
|
|
if [ $# -gt 0 ] ; then
|
|
git submodule update --init "${dir}"
|
|
while [ -n "$1" ] ; do
|
|
git -C "${dir}" config submodule."${1}".update none
|
|
shift
|
|
done
|
|
fi
|
|
git submodule update --init --recursive "${dir}"
|
|
)
|
|
|
|
module_run() ( # <submodule> <command..>
|
|
set -e
|
|
cd "${SRCDIR}/${1}"
|
|
shift
|
|
"$@"
|
|
)
|
|
|
|
module_make() ( # <submodule> <target..>
|
|
set -e -o pipefail
|
|
cd "${SRCDIR}/${1}/build"
|
|
shift
|
|
"${MAKE}" "$@" | tee "build-${1:-make}.log"
|
|
)
|
|
|
|
module_build() ( # <submodule> [configure-arg..]
|
|
set -e -o pipefail
|
|
name=$1
|
|
shift
|
|
|
|
cd "${SRCDIR}/${name}"
|
|
|
|
if [ -e build ] ; then
|
|
echo "==> Removing existing ${name}/build directory"
|
|
rm -rf build
|
|
fi
|
|
if ! [ -e configure ] ; then
|
|
echo "==> Updating autoconf files for ${name}"
|
|
find . -iname configure.ac -type f -print0 |
|
|
while read -r -d '' file ; do
|
|
mkdir -p -- "${file%/*}/m4"
|
|
done
|
|
autoreconf -i
|
|
fi
|
|
|
|
mkdir -p build
|
|
cd build
|
|
{
|
|
export PATH="${RISCV:+${RISCV}/bin:}${PATH}"
|
|
echo "==> Configuring ${name}"
|
|
../configure "$@"
|
|
echo "==> Building ${name}"
|
|
"${MAKE}"
|
|
echo "==> Installing ${name}"
|
|
"${MAKE}" install
|
|
} 2>&1 | tee build.log
|
|
)
|
|
|
|
module_all() { # <submodule> [configure-arg..]
|
|
module_prepare "$1"
|
|
module_build "$@"
|
|
}
|