| 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 | "$@"
|