Skip to content

Commit a70201d

Browse files
authored
Merge pull request #13651 from cxp484/tpbuild
FDS Build: Automatic third-party lib build scripts.
2 parents 89cfa6b + e915e2c commit a70201d

File tree

13 files changed

+330
-138
lines changed

13 files changed

+330
-138
lines changed

Build/Scripts/HYPRE/build_hypre.sh

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,17 +32,17 @@ if [ -d "$FIREMODELS/hypre" ]; then
3232
cd $FIREMODELS/hypre
3333
if [[ "$(git tag -l "v2.32.0")" == "v2.32.0" ]]; then
3434
echo "Checking out v2.32.0"
35-
$(git checkout v2.32.0)
35+
git checkout v2.32.0
3636
fi
37-
cd $FIREMODELS/hypre/src
37+
cd $FIREMODELS/hypre/src/cmbuild
3838
export HYPRE_VERSION=$(git describe)
3939
echo "Cleaning hypre repository..."
40-
make distclean
40+
rm -r $FIREMODELS/hypre/src/cmbuild/*
4141
cp $FIREMODELS/fds/Build/Scripts/HYPRE/$CONFMAKE .
4242
./$CONFMAKE
4343
# get back from detached HEAD state
4444
cd $FIREMODELS/hypre
45-
$(git checkout master)
45+
git checkout master
4646
cd $dir
4747
export HYPRE_HOME=$FIREMODELS/libs/hypre/$HYPRE_VERSION
4848
echo "Hypre library:" $FIREMODELS/libs/hypre/$HYPRE_VERSION

Build/Scripts/HYPRE/confmake.sh

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
export HYPRE_INSTALL_PREFIX=$FIREMODELS/libs/hypre/$HYPRE_VERSION
2+
3+
if [[ "$FDS_BUILD_TARGET" == *"osx"* ]]; then
4+
C_FLAGS="-O3"
5+
elif [[ "$FDS_BUILD_TARGET" == *"intel"* ]]; then
6+
C_FLAGS="-O3 -fno-unsafe-math-optimizations -fp-model=precise"
7+
else
8+
C_FLAGS="-O3"
9+
fi
10+
11+
cmake_args=(
12+
-DCMAKE_INSTALL_PREFIX="$HYPRE_INSTALL_PREFIX"
13+
-DCMAKE_C_COMPILER="$CC"
14+
-DCMAKE_C_FLAGS="$C_FLAGS"
15+
-DCMAKE_INSTALL_LIBDIR="lib"
16+
)
17+
18+
# Add OSX deployment target if building for macOS
19+
if [[ "$FDS_BUILD_TARGET" == *"osx"* ]]; then
20+
if [ "$(uname -m)" == "x86_64" ]; then
21+
cmake_args+=(-DCMAKE_OSX_DEPLOYMENT_TARGET="10.6")
22+
else
23+
cmake_args+=(-DCMAKE_OSX_DEPLOYMENT_TARGET="13.0")
24+
fi
25+
fi
26+
27+
# Run cmake with the arguments
28+
cmake ../ "${cmake_args[@]}"
29+
30+
# ./configure CC=$CC FC=mpiifort CFLAGS="-O3 -fno-unsafe-math-optimizations -fp-model=precise" FFLAGS="-O3 -fno-unsafe-math-optimizations -fp-model=precise" \
31+
# --prefix=$FIREMODELS/libs/hypre/$HYPRE_VERSION
32+
33+
make install

Build/Scripts/HYPRE/confmake_impi_intel_linux.sh

Lines changed: 0 additions & 13 deletions
This file was deleted.

Build/Scripts/SUNDIALS/build_sundials.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ if [ -d "$FIREMODELS/sundials" ]; then
3333
cd $FIREMODELS/sundials
3434
if [[ "$(git tag -l "v6.7.0")" == "v6.7.0" ]]; then
3535
echo "Checking out v6.7.0"
36-
$(git checkout v6.7.0)
36+
git checkout v6.7.0
3737
fi
3838
mkdir $FIREMODELS/sundials/BUILDDIR
3939
cd $FIREMODELS/sundials/BUILDDIR
@@ -46,7 +46,7 @@ if [ -d "$FIREMODELS/sundials" ]; then
4646
./$CONFMAKE
4747
# get back from detached HEAD state
4848
cd $FIREMODELS/sundials
49-
$(git checkout main)
49+
git checkout main
5050
cd $dir
5151
export SUNDIALS_HOME=$FIREMODELS/libs/sundials/$SUNDIALS_VERSION
5252
echo "Sundials library:" $FIREMODELS/libs/sundials/$SUNDIALS_VERSION

Build/Scripts/SUNDIALS/confmake.sh

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
export SUNDIALS_INSTALL_PREFIX=$FIREMODELS/libs/sundials/$SUNDIALS_VERSION
2+
3+
cmake_args=(
4+
-DCMAKE_INSTALL_PREFIX="$SUNDIALS_INSTALL_PREFIX"
5+
-DEXAMPLES_INSTALL_PATH="$SUNDIALS_INSTALL_PREFIX/examples"
6+
-DCMAKE_C_COMPILER="$CC"
7+
-DCMAKE_CXX_COMPILER="$CXX"
8+
-DCMAKE_Fortran_COMPILER="$FC"
9+
-DBUILD_FORTRAN_MODULE_INTERFACE=ON
10+
-DEXAMPLES_ENABLE_CXX=OFF
11+
-DEXAMPLES_ENABLE_CUDA=OFF
12+
-DEXAMPLES_ENABLE_F2003=OFF
13+
-DENABLE_OPENMP=OFF
14+
-DCMAKE_INSTALL_LIBDIR="lib"
15+
)
16+
17+
# Add OSX deployment target if building for macOS
18+
if [[ "$FDS_BUILD_TARGET" == *"osx"* ]]; then
19+
if [ "$(uname -m)" == "x86_64" ]; then
20+
cmake_args+=(-DCMAKE_OSX_DEPLOYMENT_TARGET="10.6")
21+
else
22+
cmake_args+=(-DCMAKE_OSX_DEPLOYMENT_TARGET="13.0")
23+
fi
24+
fi
25+
26+
# Run cmake with the arguments
27+
cmake ../ "${cmake_args[@]}"
28+
29+
make install

Build/Scripts/SUNDIALS/confmake_impi_intel_linux.sh

Lines changed: 0 additions & 35 deletions
This file was deleted.
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
# PARSE OPTIONS FOR CLEAN LIBRARY BUILDS ####################################
2+
3+
# Set FIREMODELS environment variable if it is not already exists.
4+
if [ -z "${FIREMODELS}" ]; then
5+
export FIREMODELS="$(readlink -f "$(pwd)/../../../")"
6+
fi
7+
8+
echo "FIREMODELS=$FIREMODELS"
9+
10+
clean_hypre=false
11+
clean_sundials=false
12+
ARG=""
13+
14+
# Loop through the options
15+
while [[ $# -gt 0 ]]; do
16+
case "$1" in
17+
--clean-hypre)
18+
clean_hypre=true # Set the flag to true when --clean-hypre is used
19+
shift
20+
;;
21+
--clean-sundials)
22+
clean_sundials=true
23+
shift
24+
;;
25+
--)
26+
shift
27+
break
28+
;;
29+
*)
30+
ARG="${ARG} $1" # Append unrecognized arguments to ARG
31+
shift
32+
;;
33+
esac
34+
done
35+
36+
# Trim leading spaces from ARG, if necessary
37+
ARG="${ARG#"${ARG%%[![:space:]]*}"}"
38+
39+
if [ "$clean_hypre" = true ]; then
40+
echo "Option --clean-hypre is set."
41+
fi
42+
43+
if [ "$clean_sundials" = true ]; then
44+
echo "Option --clean-sundials is set."
45+
fi
46+
47+
# FINISHED WITH CLEANING OPTIONS ###########################################
48+
49+
# Decide compilers
50+
source ../Scripts/set_thirdparty_compilers.sh
51+
52+
# build hypre
53+
source ../Scripts/HYPRE/build_hypre.sh confmake.sh $clean_hypre
54+
55+
## build sundials
56+
source ../Scripts/SUNDIALS/build_sundials.sh confmake.sh $clean_sundials
57+
58+
59+
# Use ARG and the options
60+
#echo "ARG is: $ARG"
61+
if [ "$SOURCE_INTEL_IFORT" -eq 1 ]; then
62+
source ../Scripts/set_intel_compiler.sh $ARG
63+
fi
Lines changed: 166 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,166 @@
1+
echo "FDS build target = $FDS_BUILD_TARGET"
2+
3+
# For following variables 1- indicate availble through
4+
# environment variable FIREMODELS_CC, FIREMODELS_CXX, and FIREMODELS_FC
5+
set_CC=0
6+
set_CXX=0
7+
set_FC=0
8+
9+
if [ -n "$FIREMODELS_CC" ]; then
10+
CC=$FIREMODELS_CC
11+
if command -v $CC &> /dev/null; then
12+
set_CC=1
13+
else
14+
echo "The compiler specified by the FIREMODELS_CC environment variable ($CC) is not available on this system. Searching for an alternative compiler."
15+
fi
16+
fi
17+
18+
if [ -n "$FIREMODELS_CXX" ]; then
19+
CXX=$FIREMODELS_CXX
20+
if command -v $CXX &> /dev/null; then
21+
set_CXX=1
22+
else
23+
echo "The compiler specified by the FIREMODELS_CXX environment variable ($CXX) is not available on this system. Searching for an alternative compiler."
24+
fi
25+
fi
26+
27+
if [ -n "$FIREMODELS_FC" ]; then
28+
FC=$FIREMODELS_FC
29+
if command -v $FC &> /dev/null; then
30+
set_FC=1
31+
else
32+
echo "The compiler specified by the FIREMODELS_FC environment variable ($FC) is not available on this system. Searching for an alternative compiler."
33+
fi
34+
fi
35+
36+
37+
if [[ "$FDS_BUILD_TARGET" == *"osx"* ]]; then
38+
# Check for C compiler (mpicc, gcc, clang)
39+
if [ $set_CC -eq 0 ]; then
40+
if command -v mpicc &> /dev/null; then
41+
CC=mpicc
42+
elif command -v clang &> /dev/null; then
43+
CC=clang
44+
elif command -v gcc &> /dev/null; then
45+
CC=gcc
46+
else
47+
echo "Error: Any of mpicc, iclang, or gcc is not available on this system."
48+
exit 1
49+
fi
50+
fi
51+
52+
# Check for clang C++ compiler (mpicxx, g++, clang ++)
53+
if [ $set_CXX -eq 0 ]; then
54+
if command -v mpicxx &> /dev/null; then
55+
CXX=mpicxx
56+
elif command -v clang++ &> /dev/null; then
57+
CXX=clang++
58+
elif command -v g++ &> /dev/null; then
59+
CXX=g++
60+
else
61+
echo "Error: Any of mpicxx, clang++, or g++ is not available on this system."
62+
exit 1
63+
fi
64+
fi
65+
66+
# Check for Fortran compiler (gfortran)
67+
if [ $set_FC -eq 0 ]; then
68+
if command -v mpifort &> /dev/null; then
69+
FC=mpifort
70+
elif command -v gfortran &> /dev/null; then
71+
FC=gfortran
72+
else
73+
echo "Error: gfortran is not available on this system."
74+
exit 1
75+
fi
76+
fi
77+
78+
elif [[ "$FDS_BUILD_TARGET" == *"intel"* ]]; then
79+
# Check for Intel C compiler
80+
if [ $set_CC -eq 0 ]; then
81+
if command -v mpiicx &> /dev/null; then
82+
CC=mpiicx
83+
elif command -v icx &> /dev/null; then
84+
CC=icx
85+
elif command -v mpiicc &> /dev/null; then
86+
CC=mpiicc
87+
elif command -v icc &> /dev/null; then
88+
CC=icc
89+
else
90+
echo "Error: Any of mpiicx, icx, mpiicc, or icc is not available on this system."
91+
exit 1
92+
fi
93+
fi
94+
95+
# Check for Intel C++ compiler
96+
if [ $set_CXX -eq 0 ]; then
97+
if command -v mpiicpx &> /dev/null; then
98+
CXX=mpiicpx
99+
elif command -v icpx &> /dev/null; then
100+
CXX=icpx
101+
elif command -v mpiicpc &> /dev/null; then
102+
CXX=mpiicpc
103+
elif command -v icpc &> /dev/null; then
104+
CXX=icpc
105+
else
106+
echo "Error: Any of mpiicpx, icpx, mpiicpc, or icpc is not available on this system."
107+
exit 1
108+
fi
109+
fi
110+
111+
# Check for Intel Fortran compiler (ifort). ifx will be added in future.
112+
if [ $set_FC -eq 0 ]; then
113+
if command -v mpiifort &> /dev/null; then
114+
FC=mpiifort
115+
elif command -v ifort &> /dev/null; then
116+
FC=ifort
117+
else
118+
echo "Error: Any of mpiifort, or ifort is not available on this system."
119+
exit 1
120+
fi
121+
fi
122+
else #gnu
123+
# Check for gnu C compiler (gcc)
124+
if [ $set_CC -eq 0 ]; then
125+
if command -v mpicc &> /dev/null; then
126+
CC=mpicc
127+
elif command -v gcc &> /dev/null; then
128+
CC=gcc
129+
else
130+
echo "Error: Any of mpicc, gcc is not available on this system."
131+
exit 1
132+
fi
133+
fi
134+
135+
# Check for Intel C++ compiler (g++)
136+
if [ $set_CXX -eq 0 ]; then
137+
if command -v mpicxx &> /dev/null; then
138+
CXX=mpicxx
139+
elif command -v g++ &> /dev/null; then
140+
CXX=g++
141+
else
142+
echo "Error: Any of mpicxx, g++ is not available on this system."
143+
exit 1
144+
fi
145+
fi
146+
147+
# Check for Fortran compiler (gfortran)
148+
if [ $set_FC -eq 0 ]; then
149+
if command -v mpifort &> /dev/null; then
150+
FC=mpifort
151+
elif command -v gfortran &> /dev/null; then
152+
FC=gfortran
153+
else
154+
echo "Error: Any of mpifort, gfortran is not available on this system."
155+
exit 1
156+
fi
157+
fi
158+
fi
159+
160+
echo "C Compiler CC=$CC"
161+
echo "C++ compiler CXX=$CXX"
162+
echo "Fortran compiler FC=$FC"
163+
164+
export CC=$CC
165+
export CXX=$CXX
166+
export FC=$FC

0 commit comments

Comments
 (0)