-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbuild_with_spack_cmake.sh
executable file
·148 lines (132 loc) · 4.02 KB
/
build_with_spack_cmake.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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
#!/bin/bash
set -e
# Gets the directory location of this script
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
function prereqs() {
echo "Before running this script, you must follow the directions here:"
echo "https://github.com/nicspack/nicspack/"
}
# Tests for spack existence
if ! which spack; then
prereqs
exit -1
fi
# Parses command line arguments
SPACK_TARGET=$(spack spec zlib | grep arch | tr '-' ' ' | awk '{print $NF}')
CLEAN=
function help() {
echo "usage: $0 <options>"
echo " -h,--help - show this message and exit"
echo " -t=,--target=<TARGET> - set the spack target architecture"
echo " -c,--clean - clean before building"
}
for i in "$@"; do
case $i in
-h|--help)
help
exit 0
;;
-t=*|--target=*)
SPACK_TARGET="${i#*=}"
shift
;;
-c|--clean)
CLEAN="YES"
shift
;;
*)
echo "unknown argument: $i"
help
exit -1
esac
done
echo "SPACK_TARGET=${SPACK_TARGET}"
echo "CLEAN=${CLEAN}"
# Ensure dependencies are installed
BRANCH=cmake
BUILD_SPEC="paragraph-creator@${BRANCH} target=${SPACK_TARGET}"
echo "BUILD_SPEC=${BUILD_SPEC}"
# Ensures all dependencies are installed
if ! spack install --only dependencies ${BUILD_SPEC}; then
prereqs
exit -1
fi
# Saves the full spec to a tmp file for later parsing
spack spec ${BUILD_SPEC} > /tmp/paragraph-creator_spec_${BRANCH}
# Extracts the exact spec of a dependency then returns the install directory
function location() {
local spec=$(grep "\^${1}@" /tmp/paragraph-creator_spec_${BRANCH} | sed 's/\s.*^//g')
spack location -i ${spec}
}
function add_to_install_rpath() {
if [[ ";$INSTALL_RPATH;" != *";$1;"* ]]; then
INSTALL_RPATH="$1;${INSTALL_RPATH}"
fi
}
function add_to_prefix_path() {
if [[ ";$PREFIX_PATH;" != *";$1;"* ]]; then
PREFIX_PATH="$1;${PREFIX_PATH}"
fi
}
BUILD_DIR=${SCRIPT_DIR}/cmake-build
INSTALL_DIR=${SCRIPT_DIR}/cmake-local
INSTALL_RPATH="${INSTALL_DIR}/lib;${INSTALL_DIR}/lib64;"
add_to_install_rpath $(location protobuf)/lib
add_to_install_rpath $(location abseil-cpp)/lib
add_to_install_rpath $(location libprim)/lib
add_to_install_rpath $(location libcolhash)/lib
add_to_install_rpath $(location libfactory)/lib
add_to_install_rpath $(location librnd)/lib
add_to_install_rpath $(location libmut)/lib
add_to_install_rpath $(location libbits)/lib
add_to_install_rpath $(location libstrop)/lib
add_to_install_rpath $(location libfio)/lib
add_to_install_rpath $(location libsettings)/lib
add_to_install_rpath $(location nlohmann-json)/lib
add_to_install_rpath $(location zlib)/lib
add_to_install_rpath $(location tclap)/lib
add_to_install_rpath $(location paragraph-core)/lib
echo "INSTALL_RPATH:"
echo "$INSTALL_RPATH"
echo ""
PREFIX_PATH=""
add_to_prefix_path $(location protobuf)
add_to_prefix_path $(location abseil-cpp)
add_to_prefix_path $(location libprim)
add_to_prefix_path $(location libcolhash)
add_to_prefix_path $(location libfactory)
add_to_prefix_path $(location librnd)
add_to_prefix_path $(location libmut)
add_to_prefix_path $(location libbits)
add_to_prefix_path $(location libstrop)
add_to_prefix_path $(location libfio)
add_to_prefix_path $(location libsettings)
add_to_prefix_path $(location nlohmann-json)
add_to_prefix_path $(location zlib)
add_to_prefix_path $(location tclap)
add_to_prefix_path $(location paragraph-core)
echo "PREFIX_PATH:"
echo "$PREFIX_PATH"
echo ""
CMAKE_DIR=$(spack location -i cmake)
CMAKE=${CMAKE_DIR}/bin/cmake
if [[ ! -z "${CLEAN}" ]]; then
rm -rf ${BUILD_DIR} ${INSTALL_DIR}
fi
mkdir -p ${BUILD_DIR}
cd ${BUILD_DIR}
${CMAKE} \
-G 'Unix Makefiles' \
-DCMAKE_INSTALL_PREFIX:STRING=${INSTALL_DIR} \
-DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo \
-DCMAKE_INTERPROCEDURAL_OPTIMIZATION:BOOL=OFF \
-DCMAKE_VERBOSE_MAKEFILE:BOOL=ON \
-DCMAKE_INSTALL_RPATH_USE_LINK_PATH:BOOL=OFF \
-DCMAKE_INSTALL_RPATH:STRING=${INSTALL_RPATH} \
-DCMAKE_PREFIX_PATH:STRING=${PREFIX_PATH} \
..
make -j $(nproc) all
make install
echo ""
echo "Build successful :)"
echo ""