diff --git a/.gitignore b/.gitignore index a27db0bd1f..04eb4bf8c2 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,7 @@ Session.vim .netrwhist *~ +/build-tools/ /debs/ ### Vagrant ### scripts/*.log diff --git a/scripts/build/setup/termux_setup_cmake.sh b/scripts/build/setup/termux_setup_cmake.sh index c8c4078e9a..0fa87d0d73 100644 --- a/scripts/build/setup/termux_setup_cmake.sh +++ b/scripts/build/setup/termux_setup_cmake.sh @@ -4,7 +4,13 @@ termux_setup_cmake() { local TERMUX_CMAKE_VERSION=$TERMUX_CMAKE_MAJORVESION.$TERMUX_CMAKE_MINORVERSION local TERMUX_CMAKE_TARNAME=cmake-${TERMUX_CMAKE_VERSION}-Linux-x86_64.tar.gz local TERMUX_CMAKE_TARFILE=$TERMUX_PKG_TMPDIR/$TERMUX_CMAKE_TARNAME - local TERMUX_CMAKE_FOLDER=$TERMUX_COMMON_CACHEDIR/cmake-$TERMUX_CMAKE_VERSION + local TERMUX_CMAKE_FOLDER + + if [ "${TERMUX_PACKAGES_OFFLINE-false}" = "true" ]; then + TERMUX_CMAKE_FOLDER=$TERMUX_SCRIPTDIR/build-tools/cmake-$TERMUX_CMAKE_VERSION + else + TERMUX_CMAKE_FOLDER=$TERMUX_COMMON_CACHEDIR/cmake-$TERMUX_CMAKE_VERSION + fi if [ "$TERMUX_ON_DEVICE_BUILD" = "false" ]; then if [ ! -d "$TERMUX_CMAKE_FOLDER" ]; then diff --git a/scripts/build/setup/termux_setup_ghc.sh b/scripts/build/setup/termux_setup_ghc.sh index 59bdf8f189..04d7153aed 100644 --- a/scripts/build/setup/termux_setup_ghc.sh +++ b/scripts/build/setup/termux_setup_ghc.sh @@ -3,8 +3,14 @@ termux_setup_ghc() { if [ "$TERMUX_ON_DEVICE_BUILD" = "false" ]; then local TERMUX_GHC_VERSION=8.10.1 local TERMUX_GHC_TEMP_FOLDER="${TERMUX_COMMON_CACHEDIR}/ghc-${TERMUX_GHC_VERSION}" - local TERMUX_GHC_RUNTIME_FOLDER="${TERMUX_COMMON_CACHEDIR}/ghc-${TERMUX_GHC_VERSION}-runtime" local TERMUX_GHC_TAR="${TERMUX_GHC_TEMP_FOLDER}.tar.xz" + local TERMUX_GHC_RUNTIME_FOLDER + + if [ "${TERMUX_PACKAGES_OFFLINE-false}" = "true" ]; then + TERMUX_GHC_RUNTIME_FOLDER="${TERMUX_SCRIPTDIR}/build-tools/ghc-${TERMUX_GHC_VERSION}-runtime" + else + TERMUX_GHC_RUNTIME_FOLDER="${TERMUX_COMMON_CACHEDIR}/ghc-${TERMUX_GHC_VERSION}-runtime" + fi export PATH="$TERMUX_GHC_RUNTIME_FOLDER/bin:$PATH" diff --git a/scripts/build/setup/termux_setup_golang.sh b/scripts/build/setup/termux_setup_golang.sh index 5527eb0730..3cb8825454 100644 --- a/scripts/build/setup/termux_setup_golang.sh +++ b/scripts/build/setup/termux_setup_golang.sh @@ -4,9 +4,15 @@ termux_setup_golang() { local TERMUX_GO_VERSION=go1.15.3 local TERMUX_GO_PLATFORM=linux-amd64 - local TERMUX_BUILDGO_FOLDER=$TERMUX_COMMON_CACHEDIR/${TERMUX_GO_VERSION} + local TERMUX_BUILDGO_FOLDER + if [ "${TERMUX_PACKAGES_OFFLINE-false}" = "true" ]; then + TERMUX_BUILDGO_FOLDER=${TERMUX_SCRIPTDIR}/build-tools/${TERMUX_GO_VERSION} + else + TERMUX_BUILDGO_FOLDER=${TERMUX_COMMON_CACHEDIR}/${TERMUX_GO_VERSION} + fi + export GOROOT=$TERMUX_BUILDGO_FOLDER - export PATH=$GOROOT/bin:$PATH + export PATH=${GOROOT}/bin:${PATH} if [ -d "$TERMUX_BUILDGO_FOLDER" ]; then return; fi diff --git a/scripts/build/setup/termux_setup_meson.sh b/scripts/build/setup/termux_setup_meson.sh index 074aaed9c7..05ea60aa73 100644 --- a/scripts/build/setup/termux_setup_meson.sh +++ b/scripts/build/setup/termux_setup_meson.sh @@ -1,7 +1,14 @@ termux_setup_meson() { termux_setup_ninja local MESON_VERSION=0.55.0 - local MESON_FOLDER=$TERMUX_COMMON_CACHEDIR/meson-$MESON_VERSION-v1 + local MESON_FOLDER + + if [ "${TERMUX_PACKAGES_OFFLINE-false}" = "true" ]; then + MESON_FOLDER=${TERMUX_SCRIPTDIR}/build-tools/meson-${MESON_VERSION} + else + MESON_FOLDER=${TERMUX_COMMON_CACHEDIR}/meson-${MESON_VERSION} + fi + if [ ! -d "$MESON_FOLDER" ]; then local MESON_TAR_NAME=meson-$MESON_VERSION.tar.gz local MESON_TAR_FILE=$TERMUX_PKG_TMPDIR/$MESON_TAR_NAME diff --git a/scripts/build/setup/termux_setup_ninja.sh b/scripts/build/setup/termux_setup_ninja.sh index 1ff3d2877f..0111c8aec1 100644 --- a/scripts/build/setup/termux_setup_ninja.sh +++ b/scripts/build/setup/termux_setup_ninja.sh @@ -1,6 +1,12 @@ termux_setup_ninja() { local NINJA_VERSION=1.10.0 - local NINJA_FOLDER=$TERMUX_COMMON_CACHEDIR/ninja-$NINJA_VERSION + local NINJA_FOLDER + + if [ "${TERMUX_PACKAGES_OFFLINE-false}" = "true" ]; then + NINJA_FOLDER=${TERMUX_SCRIPTDIR}/build-tools/ninja-${NINJA_VERSION} + else + NINJA_FOLDER=${TERMUX_COMMON_CACHEDIR}/ninja-$NINJA_VERSION + fi if [ "$TERMUX_ON_DEVICE_BUILD" = "false" ]; then if [ ! -x "$NINJA_FOLDER/ninja" ]; then diff --git a/scripts/build/setup/termux_setup_protobuf.sh b/scripts/build/setup/termux_setup_protobuf.sh index c6f3b22483..40d4d8c994 100644 --- a/scripts/build/setup/termux_setup_protobuf.sh +++ b/scripts/build/setup/termux_setup_protobuf.sh @@ -1,7 +1,13 @@ termux_setup_protobuf() { local _PROTOBUF_VERSION=$(bash -c ". $TERMUX_SCRIPTDIR/packages/libprotobuf/build.sh; echo \${TERMUX_PKG_VERSION:2}") local _PROTOBUF_ZIP=protoc-$_PROTOBUF_VERSION-linux-x86_64.zip - local _PROTOBUF_FOLDER=$TERMUX_COMMON_CACHEDIR/protobuf-$_PROTOBUF_VERSION + local _PROTOBUF_FOLDER + + if [ "${TERMUX_PACKAGES_OFFLINE-false}" = "true" ]; then + _PROTOBUF_FOLDER=${TERMUX_SCRIPTDIR}/build-tools/protobuf-${_PROTOBUF_VERSION} + else + _PROTOBUF_FOLDER=${TERMUX_COMMON_CACHEDIR}/protobuf-${_PROTOBUF_VERSION} + fi if [ "$TERMUX_ON_DEVICE_BUILD" = "false" ]; then if [ ! -d "$_PROTOBUF_FOLDER" ]; then diff --git a/scripts/build/termux_download.sh b/scripts/build/termux_download.sh index 8c0af63311..533814cccc 100755 --- a/scripts/build/termux_download.sh +++ b/scripts/build/termux_download.sh @@ -14,7 +14,7 @@ termux_download() { fi local TMPFILE - TMPFILE=$(mktemp "$TERMUX_PKG_TMPDIR/download.$TERMUX_PKG_NAME.XXXXXXXXX") + TMPFILE=$(mktemp "$TERMUX_PKG_TMPDIR/download.${TERMUX_PKG_NAME-unnamed}.XXXXXXXXX") echo "Downloading ${URL}" if curl --fail --retry 20 --retry-connrefused --retry-delay 30 --location --output "$TMPFILE" "$URL"; then local ACTUAL_CHECKSUM diff --git a/scripts/setup-offline-bundle.sh b/scripts/setup-offline-bundle.sh new file mode 100755 index 0000000000..36aae45c20 --- /dev/null +++ b/scripts/setup-offline-bundle.sh @@ -0,0 +1,49 @@ +#!/usr/bin/env bash +## +## Download and install all build tools whether applicable now, so +## they will be available later for offline use. +## + +set -e -u + +if [ "$(uname -o)" = "Android" ] || [ "$(uname -m)" != "x86_64" ]; then + echo "This script supports only x86_64 GNU/Linux systems." + exit 1 +fi + +export TERMUX_SCRIPTDIR="$(dirname "$(readlink -f "$0")")/../" +mkdir -p "$TERMUX_SCRIPTDIR"/build-tools + +export TERMUX_PACKAGES_OFFLINE=true +export TERMUX_ARCH=aarch64 +export TERMUX_ON_DEVICE_BUILD=false +export TERMUX_PKG_TMPDIR=$TERMUX_SCRIPTDIR/build-tools/_tmp +export TERMUX_COMMON_CACHEDIR=$TERMUX_PKG_TMPDIR +export CC=gcc CXX=g++ LD=ld AR=ar STRIP=strip PKG_CONFIG=pkg-config +export CPPFLAGS="" CFLAGS="" CXXFLAGS="" LDFLAGS="" +mkdir -p "$TERMUX_PKG_TMPDIR" + +. "$TERMUX_SCRIPTDIR"/scripts/build/termux_download.sh +(. "$TERMUX_SCRIPTDIR"/scripts/build/setup/termux_setup_cmake.sh + termux_setup_cmake +) +# GHC fails. Skipping for now. +#(. "$TERMUX_SCRIPTDIR"/scripts/build/setup/termux_setup_ghc.sh +# termux_setup_ghc +#) +(. "$TERMUX_SCRIPTDIR"/scripts/build/setup/termux_setup_golang.sh + termux_setup_golang +) +( + . "$TERMUX_SCRIPTDIR"/scripts/build/setup/termux_setup_ninja.sh + . "$TERMUX_SCRIPTDIR"/scripts/build/setup/termux_setup_meson.sh + termux_setup_meson +) +(. "$TERMUX_SCRIPTDIR"/scripts/build/setup/termux_setup_protobuf.sh + termux_setup_protobuf +) +# Offline rust is not supported yet. +#(. "$TERMUX_SCRIPTDIR"/scripts/build/setup/termux_setup_rust.sh +# termux_setup_rust +#) +rm -rf "${TERMUX_PKG_TMPDIR}"