55# Last updated with shell parser by PeterC, July 2024
66
77# NOTE: If -r script is only allowed to change CXX flags and optionally include wrappers.
8+ set -e # Exit on error
9+ set -o pipefail # Exit on error in a pipeline
810
911# Default values
10- Buildpath=" build"
11- IS_BUILDPATH_DEFAULT=true
12+ build_path=build
13+ install_path=install
14+ is_default_build_path=true
1215jobs=3
13- WITH_DYNAMICS_MODULE=false
14- install_deps=false
1516rebuild=false
16- BUILD_TYPE=debug # default build type, possible options: debug, release, relwithdebinfo, minsizerel
17+ BUILD_TYPE=relwithdebinfo # default build type, possible options: debug, release, relwithdebinfo, minsizerel
1718ADD_CHECKS=false
1819ADD_CXX_FLAGS=" "
1920WITH_PYTHON=false
@@ -25,8 +26,8 @@ PYTHON_EXE=$HOME/miniconda3/home/peterc/miniconda3/envs/gtsam/bin/python3.12 # D
2526
2627# Parse options using getopt
2728# NOTE: no ":" after option means no argument, ":" means required argument, "::" means optional argument
28- OPTIONS=B::,j::,i,r,t::,c,f::,p::,m::,u,e,o
29- LONGOPTIONS=Buildpath ::,jobs::,install-deps ,rebuild,type-build::,checks,flagsCXX::,python-wrap::,matlab-wrap::,unstable_build,exp_map_enabled,on_manifold_preintegr
29+ OPTIONS=B::,j::,i:: ,r,t::,c,f::,p::,m::,u,e,o
30+ LONGOPTIONS=build_path ::,jobs::,install-path:: ,rebuild,type-build::,checks,flagsCXX::,python-wrap::,matlab-wrap::,unstable_build,exp_map_enabled,on_manifold_preintegr
3031
3132# Parsed arguments list with getopt
3233PARSED=$( getopt --options ${OPTIONS} --longoptions ${LONGOPTIONS} --name " $0 " -- " $@ " )
@@ -44,15 +45,15 @@ eval set -- "$PARSED"
4445# Process options (change default values if needed)
4546while true ; do
4647 case " $1 " in
47- -B|--Buildpath )
48+ -B|--build_path )
4849 if [ -n " $2 " ] && [ " $2 " != " --" ]; then # Check how many args (if 2)
49- Buildpath =" $2 "
50- IS_BUILDPATH_DEFAULT =false
50+ build_path =" $2 "
51+ is_default_build_path =false
5152 shift 2 # Shift of two args, i.e. $1 will then point to the next argument
5253 else
5354 # Handle the default case (no optional argument provided), thus shift of 1
54- Buildpath =" build"
55- IS_BUILDPATH_DEFAULT =true
55+ build_path =" build"
56+ is_default_build_path =true
5657 shift
5758 fi
5859 ;;
@@ -65,9 +66,9 @@ while true; do
6566 shift
6667 fi
6768 ;;
68- -i|--install-deps )
69- install_deps=true
70- shift
69+ -i|--install-path )
70+ install_path= " $2 "
71+ shift 2
7172 ;;
7273 -r|--rebuild)
7374 rebuild=true
@@ -142,63 +143,52 @@ done
142143
143144if [ " ${rebuild} " = true ]; then
144145 # REBUILDING FROM EXISTING BUILD
145- if [ " ${IS_BUILDPATH_DEFAULT } " = true ]; then
146- Buildpath =" build_dev" # Set default for rebuild if not specified
146+ if [ " ${is_default_build_path } " = true ]; then
147+ build_path =" build_dev" # Set default for rebuild if not specified
147148 fi
148149 echo " REBUILDING GTSAM with options..."
149- echo -e " \tBuildpath : $Buildpath "
150+ echo -e " \tbuild_path : $build_path "
150151 echo -e " \tJobs: $jobs "
151152 echo -e " \tBuild Type: ${BUILD_TYPE} "
152153 echo -e " \tEnforced compile flags: ${ADD_CXX_FLAGS} "
153154 echo -e " \tPython wrapper build: ${WITH_PYTHON} "
154155 echo -e " \tPython executable path: ${PYTHON_EXE} "
155156 echo -e " \tMATLAB wrapper build: ${WITH_MATLAB} "
156- echo -e " \tWith Dynamics Module: ${WITH_DYNAMICS_MODULE} "
157157 echo -e " \tBuild GTSAM unstable: ${WITH_UNSTABLE} "
158- if ! [ -d $Buildpath ]; then
158+ if ! [ -d $build_path ]; then
159159 echo " ERROR: NO PREVIOUS BUILD FOUND! EXITING..." >&2
160160 exit 1
161161 else
162162
163163 sleep 1
164164
165- # cmake -B ${Buildpath} -S . -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \
166- # -DGTSAM_BUILD_UNSTABLE:OPTION=OFF -DGTSAM_BUILD_CONVENIENCE_LIBRARIES:OPTION=ON \
167- # -DGTSAM_BUILD_PYTHON=${WITH_PYTHON} -DGTSAM_INSTALL_MATLAB_TOOLBOX=${WITH_MATLAB} \
168- # -DGTSAM_WITH_TBB=ON \
169- # -DGTSAM_WITH_EIGEN_MKL=OFF \
170- # -DGTSAM_UNSTABLE_BUILD_PYTHON=${WITH_PYTHON} \
171- # -DGTSAM_WITH_DYNAMICS=${WITH_DYNAMICS_MODULE} \
172- # -DCMAKE_CXX_FLAGS=${ADD_CXX_FLAGS} \
173- # -DCMAKE_C_FLAGS=${ADD_CXX_FLAGS}
174-
175165 # Build and install (system-wide)
176166 if [ ${BUILD_TYPE} == " debug" ]; then
177- sudo cmake ${Buildpath } -DCMAKE_CXX_FLAGS=${ADD_CXX_FLAGS} \
167+ cmake ${build_path } -DCMAKE_CXX_FLAGS=${ADD_CXX_FLAGS} \
178168 -DCMAKE_C_FLAGS=${ADD_CXX_FLAGS} \
179169 -DGTSAM_BUILD_PYTHON=${WITH_PYTHON} \
180170 -DPYTHON_EXECUTABLE=${PYTHON_EXE} \
181171 -DGTSAM_INSTALL_MATLAB_TOOLBOX=${WITH_MATLAB} \
182172 -DGTSAM_BUILD_UNSTABLE:OPTION=${WITH_UNSTABLE} \
173+ -DCMAKE_INSTALL_PREFIX=${install_path}
183174
184- sudo make -j ${jobs} -C ${Buildpath } # |& tee MAKE_OUTPUT_LOG.txt
175+ make -j ${jobs} -C ${build_path } # |& tee MAKE_OUTPUT_LOG.txt
185176 if [ " ${ADD_CHECKS} " = true ]; then
186- sudo make check -j ${jobs} -C ${Buildpath } # |& tee MAKE_CHECK_OUTPUT_LOG.txt
177+ make check -j ${jobs} -C ${build_path } # |& tee MAKE_CHECK_OUTPUT_LOG.txt
187178 fi
188179 else
189- sudo make check -j ${jobs} -C ${Buildpath } # |& tee MAKE_CHECK_OUTPUT_LOG.txt
190- sudo make install -j ${jobs} -C ${Buildpath } # |& tee MAKE_INSTALL_OUTPUT_LOG.txt
180+ make check -j ${jobs} -C ${build_path } # |& tee MAKE_CHECK_OUTPUT_LOG.txt
181+ make install -j ${jobs} -C ${build_path } # |& tee MAKE_INSTALL_OUTPUT_LOG.txt
191182 fi
192183
193184 fi
194185
195186else
196187 # BUILDING FROM SCRATCH
197188 echo " Building with options..."
198- echo -e " \tBuildpath: $Buildpath "
189+ echo -e " \tBuild path: ${build_path} "
190+ echo -e " \tInstall path: ${install_path} "
199191 echo -e " \tJobs: $jobs "
200- echo -e " \tWith Dynamics Module: ${WITH_DYNAMICS_MODULE} "
201- echo -e " \tInstall Dependencies: ${install_deps} "
202192 echo -e " \tBuild Type: ${BUILD_TYPE} "
203193 echo -e " \tEnforced compile flags: ${ADD_CXX_FLAGS} "
204194 echo -e " \tPython wrapper build: ${WITH_PYTHON} "
@@ -209,53 +199,51 @@ else
209199 sleep 1
210200
211201 # Install dependencies (should add check if already installed)
212- if [ " ${install-deps} " = true ]; then
213- sudo apt update
214- sudo apt install libboost1.74-all-dev cmake libtbb-dev -y
215- # sudo apt install libboost-all-dev cmake libtbb-dev -y
216- sudo apt install gcc-11 g++-11
202+ sudo apt update
203+ # udo apt install libboost1.74-all-dev cmake libtbb-dev -y
204+ # sudo apt install libboost-all-dev cmake libtbb-dev -y
205+ sudo apt install gcc-11 g++-11
217206
218- # NEED TO ADD IF "not installed" for the following:
219- # sudo apt-get install python3-pip -y
220- # sudo apt-get install python-is-python3 -y
221- # pip install pyparsing numpy
222- sudo apt-get install libeigen3-dev -y
223- fi
207+ # NEED TO ADD IF "not installed" for the following:
208+ # sudo apt-get install python3-pip -y
209+ # sudo apt-get install python-is-python3 -y
210+ # pip install pyparsing numpy
211+ sudo apt-get install libeigen3-dev -y
224212
225213
226- if [ -d $Buildpath ]; then
227- sudo rm -r ${Buildpath } /
214+ if [ -d $build_path ]; then
215+ sudo rm -r ${build_path } /
228216 fi
229217
230218 # Export path to use GCC 11.4 instead of >13.0
231- export CC=/usr/bin/gcc-11
232- export CXX=/usr/bin/g++-11
219+ # export CC=/usr/bin/gcc-11
220+ # export CXX=/usr/bin/g++-11
233221
234222 # Generate makefiles with verbose output log
235- cmake -B ${Buildpath } -S . -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \
236- -DGTSAM_BUILD_UNSTABLE=${WITH_UNSTABLE} -DGTSAM_BUILD_CONVENIENCE_LIBRARIES=OFF \
223+ cmake -B ${build_path } -S . -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \
224+ -DGTSAM_BUILD_UNSTABLE=${WITH_UNSTABLE} \
237225 -DGTSAM_BUILD_PYTHON=${WITH_PYTHON} -DGTSAM_INSTALL_MATLAB_TOOLBOX=${WITH_MATLAB} \
238226 -DGTSAM_WITH_TBB=ON \
239227 -DGTSAM_WITH_EIGEN_MKL=OFF \
240228 -DGTSAM_UNSTABLE_BUILD_PYTHON=${WITH_PYTHON} \
241- -DGTSAM_WITH_DYNAMICS=${WITH_DYNAMICS_MODULE} \
242229 -DCMAKE_CXX_FLAGS=${ADD_CXX_FLAGS} \
243230 -DCMAKE_C_FLAGS=${ADD_CXX_FLAGS} \
244231 -DGTSAM_TANGENT_PREINTEGRATION=${USE_TANGENT_PREINTEGR} \
245232 -DGTSAM_POSE3_EXPMAP=${WITH_EXPMAP} \
246- -DGTSAM_ROT3_EXPMAP=${WITH_EXPMAP}
233+ -DGTSAM_ROT3_EXPMAP=${WITH_EXPMAP} \
234+ -DCMAKE_INSTALL_PREFIX=${install_path}
247235 # -DCMAKE_VERBOSE_MAKEFILE=ON . |& tee CMAKE_OUTPUT_LOG.txt ..
248236
249237 # Build and install (system-wide)
250238 if [ ${BUILD_TYPE} == " debug" ]; then
251- sudo make -j ${jobs} -C ${Buildpath } # |& tee MAKE_OUTPUT_LOG.txt
239+ make -j ${jobs} -C ${build_path } # |& tee MAKE_OUTPUT_LOG.txt
252240 if [ " ${ADD_CHECKS} " = true ]; then
253- sudo make check -j ${jobs} -C ${Buildpath } # |& tee MAKE_CHECK_OUTPUT_LOG.txt
241+ make check -j ${jobs} -C ${build_path } # |& tee MAKE_CHECK_OUTPUT_LOG.txt
254242 fi
255243 else
256- sudo make -j ${jobs} -C ${Buildpath } # |& tee MAKE_OUTPUT_LOG.txt
257- sudo make check -j ${jobs} -C ${Buildpath } # |& tee MAKE_CHECK_OUTPUT_LOG.txt
258- # sudo make install -j ${jobs} -C ${Buildpath } # |& tee MAKE_INSTALL_OUTPUT_LOG.txt
244+ make -j ${jobs} -C ${build_path } # |& tee MAKE_OUTPUT_LOG.txt
245+ make check -j ${jobs} -C ${build_path } # |& tee MAKE_CHECK_OUTPUT_LOG.txt
246+ make install -j ${jobs} -C ${build_path } # |& tee MAKE_INSTALL_OUTPUT_LOG.txt
259247 fi
260248
261- fi
249+ fi
0 commit comments