| 1 | #!/usr/bin/env bash
 | 
| 2 | #
 | 
| 3 | # Handle build dependencies that are in tarballs.
 | 
| 4 | #
 | 
| 5 | # Usage:
 | 
| 6 | #   deps/from-tar.sh <function name>
 | 
| 7 | #
 | 
| 8 | # Examples:
 | 
| 9 | #   deps/from-tar.sh download-re2c
 | 
| 10 | #   deps/from-tar.sh build-re2c
 | 
| 11 | #
 | 
| 12 | # The executable will be in ../oil_DEPS/re2c/re2c.
 | 
| 13 | 
 | 
| 14 | set -o nounset
 | 
| 15 | set -o pipefail
 | 
| 16 | set -o errexit
 | 
| 17 | 
 | 
| 18 | REPO_ROOT=$(cd "$(dirname $0)/.."; pwd)
 | 
| 19 | readonly REPO_ROOT
 | 
| 20 | 
 | 
| 21 | readonly DEPS_DIR=$REPO_ROOT/../oil_DEPS
 | 
| 22 | 
 | 
| 23 | source build/common.sh  # $PREPARE_DIR, $PY27
 | 
| 24 | 
 | 
| 25 | clean-temp() {
 | 
| 26 |   ### Works for layer-bloaty now.  TODO: re2c, cmark, Python 3, spec-bin
 | 
| 27 |   rm -r -f -v _cache/
 | 
| 28 | }
 | 
| 29 | 
 | 
| 30 | configure-python() {
 | 
| 31 |   ### for both 2.7 OVM slice and 3.10 mycpp
 | 
| 32 | 
 | 
| 33 |   local dir=${1:-$PREPARE_DIR}
 | 
| 34 |   local conf=${2:-$PWD/$PY27/configure}
 | 
| 35 | 
 | 
| 36 |   rm -r -f $dir
 | 
| 37 |   mkdir -p $dir
 | 
| 38 | 
 | 
| 39 |   pushd $dir 
 | 
| 40 |   time $conf
 | 
| 41 |   popd
 | 
| 42 | }
 | 
| 43 | 
 | 
| 44 | # Clang makes this faster.  We have to build all modules so that we can
 | 
| 45 | # dynamically discover them with py-deps.
 | 
| 46 | #
 | 
| 47 | # Takes about 27 seconds on a fast i7 machine.
 | 
| 48 | # Ubuntu under VirtualBox on MacBook Air with 4 cores (3 jobs): 1m 25s with
 | 
| 49 | # -O2, 30 s with -O0.  The Make part of the build is parallelized, but the
 | 
| 50 | # setup.py part is not!
 | 
| 51 | 
 | 
| 52 | readonly NPROC=$(nproc)
 | 
| 53 | readonly JOBS=$(( NPROC == 1 ? NPROC : NPROC-1 ))
 | 
| 54 | 
 | 
| 55 | build-python() {
 | 
| 56 |   local dir=${1:-$PREPARE_DIR}
 | 
| 57 | 
 | 
| 58 |   pushd $dir
 | 
| 59 |   make clean
 | 
| 60 |   time make -j $JOBS
 | 
| 61 |   popd
 | 
| 62 | }
 | 
| 63 | 
 | 
| 64 | layer-cpython() {
 | 
| 65 |   ### For bootstrapping OVM build
 | 
| 66 | 
 | 
| 67 |   # TODO: can we do this with a wedge?
 | 
| 68 |   # $PREPARE_DIR is ../oil_DEPS/cpython-full, which we want to get rid of
 | 
| 69 |   configure-python
 | 
| 70 |   build-python
 | 
| 71 | }
 | 
| 72 | 
 | 
| 73 | download-wild() {
 | 
| 74 |   ### Done outside the container
 | 
| 75 | 
 | 
| 76 |   mkdir -p $REPO_ROOT/_cache
 | 
| 77 |   wget --directory $REPO_ROOT/_cache --no-clobber \
 | 
| 78 |     https://www.oilshell.org/blob/wild/wild-source.tar.gz
 | 
| 79 | }
 | 
| 80 | 
 | 
| 81 | extract-wild() {
 | 
| 82 |   ### Done in the container build
 | 
| 83 | 
 | 
| 84 |   mkdir -p $DEPS_DIR/wild/src
 | 
| 85 |   pushd $DEPS_DIR/wild/src
 | 
| 86 |   tar --extract -z < $REPO_ROOT/_cache/wild-source.tar.gz
 | 
| 87 |   popd
 | 
| 88 | }
 | 
| 89 | 
 | 
| 90 | "$@"
 |