This repository has been archived by the owner on Feb 27, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 38
/
build.sh
executable file
·121 lines (103 loc) · 3.64 KB
/
build.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#!/bin/bash
#Copyright (c) 2019, NVIDIA CORPORATION.
# custrings build script
# This script is used to build the component(s) in this repo from
# source, and can be called with various options to customize the
# build as needed (see the help output for details)
# Abort script on first error
set -e
NUMARGS=$#
ARGS=$*
# Get root of git repository without assuming location of build.sh script
SCRIPT_DIR=$( cd $( dirname ${BASH_SOURCE[0]} ) && pwd )
cd "$SCRIPT_DIR"
VALIDARGS="clean libcustrings custrings -v -g -n -h"
HELP="$0 [clean] [libcustrings] [custrings] [-v] [-g] [-n] [-h]
clean - remove all existing build artifacts and configuration (start over)
libcustrings - build the custrings C++ code only
custrings - build the custrings Python package
-v - verbose build mode
-g - build for debug
-n - no install step
-h - print this text
default action (no args) is to build and install 'libcustrings' then 'custrings' targets
"
LIBCUSTRINGS_BUILD_DIR=${SCRIPT_DIR}/cpp/build
CUSTRINGS_BUILD_DIR=${SCRIPT_DIR}/python/build
BUILD_DIRS="${LIBCUSTRINGS_BUILD_DIR} ${CUSTRINGS_BUILD_DIR}"
# Set defaults for vars modified by flags to this script
VERBOSE=""
BUILD_TYPE=Release
INSTALL_TARGET=install
# Set defaults for vars that may not have been defined externally
# FIXME: if INSTALL_PREFIX is not set, check PREFIX, then check
# CONDA_PREFIX, but there is no fallback from there!
INSTALL_PREFIX=${INSTALL_PREFIX:=${PREFIX:=${CONDA_PREFIX}}}
PARALLEL_LEVEL=${PARALLEL_LEVEL:=""}
PYTHON=${PYTHON:-python}
function hasArg {
(( NUMARGS != 0 )) && (echo " ${ARGS} " | grep -q " $1 ")
}
if hasArg -h; then
echo "${HELP}"
exit 0
fi
# Check for valid usage
if (( NUMARGS != 0 )); then
for a in ${ARGS}; do
if ! (echo " ${VALIDARGS} " | grep -q " ${a} "); then
echo "Invalid option: ${a}"
exit 1
fi
done
fi
# Process flags
if hasArg -v; then
VERBOSE=1
set -x
fi
if hasArg -g; then
BUILD_TYPE=Debug
fi
if hasArg -n; then
INSTALL_TARGET=""
fi
# If no args or clean given, run it prior to any other steps
if (( NUMARGS == 0 )) || hasArg clean; then
# If the dirs to clean are mounted dirs in a container, the
# contents should be removed but the mounted dirs will remain.
# The find removes all contents but leaves the dirs, the rmdir
# attempts to remove the dirs but can fail safely.
for bd in ${BUILD_DIRS}; do
if [ -d "${bd}" ]; then
find "${bd}" -mindepth 1 -delete
rmdir "${bd}" || true
fi
done
fi
################################################################################
# Configure, build, and install libcustrings
if (( NUMARGS == 0 )) || hasArg libcustrings; then
# Preparing build environment
mkdir -p "${LIBCUSTRINGS_BUILD_DIR}"
cd "${LIBCUSTRINGS_BUILD_DIR}"
# Configure build environment
cmake -DCMAKE_INSTALL_PREFIX="${INSTALL_PREFIX}" \
-DCMAKE_CXX11_ABI=ON \
-DCMAKE_BUILD_TYPE=${BUILD_TYPE} ..
# Build libcustrings by default. Install libcustrings only if specifically requested.
make -j${PARALLEL_LEVEL} VERBOSE=${VERBOSE}
if [[ ${INSTALL_TARGET} != "" ]]; then
make -j${PARALLEL_LEVEL} VERBOSE=${VERBOSE} install
fi
fi
# Build and install the custrings Python package
if (( NUMARGS == 0 )) || hasArg custrings; then
# build custrings
cd "$SCRIPT_DIR/python"
if [[ ${INSTALL_TARGET} != "" ]]; then
$PYTHON setup.py install --single-version-externally-managed --record=record.txt
else
$PYTHON setup.py build_ext --library-dir="${LIBCUSTRINGS_BUILD_DIR}"
fi
fi