Skip to content

Commit 8cd94e9

Browse files
committed
feat(stellopt): add patches for upstream fixes
Add patch system to stellopt setup script that applies fixes before building. Patches are skipped if already applied upstream. - Add GCC version comparison fix for GCC 10+ (PR #417) - Update Arch Linux config with correct library names (PR #418) - Add apply_patches() function to stellopt.sh
1 parent 0a5911f commit 8cd94e9

3 files changed

Lines changed: 134 additions & 55 deletions

File tree

scripts/setup/stellopt.sh

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,21 @@ select_machine() {
7777
esac
7878
}
7979

80+
apply_patches() {
81+
local patches_dir="$CODE/scripts/setup/stellopt/patches"
82+
if [ -d "$patches_dir" ]; then
83+
for patch in "$patches_dir"/*.patch; do
84+
[ -f "$patch" ] || continue
85+
if git apply --check "$patch" 2>/dev/null; then
86+
echo "Applying patch: $(basename "$patch")"
87+
git apply "$patch"
88+
else
89+
echo "Patch already applied or not applicable: $(basename "$patch")"
90+
fi
91+
done
92+
fi
93+
}
94+
8095
cd $CODE/external
8196

8297
if [ ! -d "STELLOPT" ] ; then
@@ -86,6 +101,10 @@ fi
86101

87102
cd STELLOPT
88103
export STELLOPT_PATH=$PWD
104+
105+
# Apply patches before building
106+
apply_patches
107+
89108
select_machine
90109
echo "Building STELLOPT with MACHINE=$MACHINE"
91110
./build_all -o release -j ${NPROC:-$(nproc)}
Lines changed: 63 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
1+
#######################################################################
2+
# Arch Linux Configuration
3+
# For use with pacman packages: openmpi, hdf5-openmpi,
4+
# netcdf-openmpi, scalapack, blas, lapack
5+
#######################################################################
6+
17
#######################################################################
28
# Define Basic Utilities
39
#######################################################################
4-
SHELL ?= /bin/zsh
10+
SHELL ?= /bin/sh
511
PWD1 = `pwd`
612
MYHOME = $(HOME)/bin
713
PRECOMP:= /usr/bin/cpp -traditional -DLINUX
@@ -28,10 +34,7 @@
2834
MPI_COMPILE_C = mpicc
2935
MPI_LINK = mpif90
3036
MPI_RUN = mpiexec
31-
MPI_RUN_OPTS = -np 4
32-
# MPI_RUN_OPTS_SM = -np 16
33-
# MPI_RUN_OPTS_MD = -np 64
34-
# MPI_RUN_OPTS_LG = -np 256
37+
MPI_RUN_OPTS = --use-hwthread-cpus
3538

3639
#######################################################################
3740
# NAG Options
@@ -50,8 +53,8 @@
5053
# NTCC Options
5154
#######################################################################
5255
LNTCC = F
53-
NTCC_INC = -I/usr/include
54-
NTCC_LIB = -L/usr/lib -laladdinsub -lr8slatec -ladpak\
56+
NTCC_INC = -I$(NTCCHOME)/mod
57+
NTCC_LIB = -L$(NTCCHOME)/lib -laladdinsub -lr8slatec -ladpak\
5558
-lcppsub -lcomput -lpspline -lportlib -lezcdf -lmds_sub \
5659
-lmdstransp -lvaxonly
5760

@@ -60,22 +63,21 @@
6063
#######################################################################
6164
LHDF5 = T
6265
HDF5_INC = -I/usr/include
63-
HDF5_LIB = -L/usr/lib \
64-
-lhdf5 -lhdf5_hl -lhdf5_fortran
66+
HDF5_LIB = -L/usr/lib -lhdf5 -lhdf5_hl -lhdf5_fortran -lhdf5_hl_fortran
6567

6668
#######################################################################
6769
# PGPLOT Options
6870
#######################################################################
6971
LPGPLOT = F
7072
PGPLOT_INC = -I$(PGPLOT_DIR)
71-
PGPLOT_LIB = -L$(PGPLOT_DIR) -lpgplot -L/usr/lib/x86_64-linux-gnu -lX11
73+
PGPLOT_LIB = -L$(PGPLOT_DIR) -lpgplot -L/usr/lib -lX11
7274

7375
#######################################################################
7476
# SILO Options
7577
#######################################################################
7678
LSILO = F
7779
SILO_INC = -I$(SILOHOME)/include
78-
SILO_LIB = -L$(SILOHOME)/lib/x86_64-linux-gnu -lsiloh5
80+
SILO_LIB = -L$(SILOHOME)/lib -lsiloh5
7981

8082
#######################################################################
8183
# FFTW3 Options
@@ -93,72 +95,108 @@
9395
#######################################################################
9496
# GENE Options
9597
#######################################################################
96-
LGENE = F
98+
ifneq ("$(wildcard $(GENE_PATH))","")
99+
LGENE = T
97100
GENE_INC = -I$(GENE_PATH)
98101
GENE_DIR = $(GENE_PATH)
99102
LIB_GENE = libgene.a
100103
GENE_LIB = $(GENE_DIR)/$(LIB_GENE) \
101-
-L/u/slazerso/src/GENE17_2016/external/pppl_cluster/futils/src -lfutils \
102104
-L$(FFTWHOME)/lib -lfftw3 \
103105
-L$(SLEPC_DIR)/$(PETSC_ARCH)/lib -lslepc \
104106
-L$(PETSC_DIR)/$(PETSC_ARCH)/lib -lpetsc -lX11
107+
else
108+
LGENE = F
109+
endif
105110

106111
#######################################################################
107112
# COILOPT++ Options
108113
#######################################################################
109-
LCOILOPT = F
114+
ifneq ("$(wildcard $(COILOPT_PATH))","")
115+
LCOILOPT = T
110116
COILOPT_INC = -I$(COILOPT_PATH)
111117
COILOPTPP_DIR = $(COILOPT_PATH)
112118
LIB_COILOPTPP = libcoilopt++.a
113119
COILOPT_LIB = $(COILOPT_PATH)/$(LIB_COILOPTPP) \
114-
-L$(GSLHOME)/lib/x86_64-linux-gnu -lgsl -lgslcblas -lstdc++ -lmpi_cxx
120+
-L$(GSLHOME)/lib -lgsl -lgslcblas -lstdc++
121+
else
122+
LCOILOPT = F
123+
endif
115124

116125
#######################################################################
117126
# TERPSICHORE Options
118127
#######################################################################
119-
LTERPSICHORE= F
128+
ifneq ("$(wildcard $(TERPSICHORE_PATH))","")
129+
LTERPSICHORE= T
120130
TERPSICHORE_INC = -I$(TERPSICHORE_PATH)
121131
TERPSICHORE_DIR = $(TERPSICHORE_PATH)
122132
LIB_TERPSICHORE = libterpsichore.a
123133
TERPSICHORE_LIB = $(TERPSICHORE_DIR)/$(LIB_TERPSICHORE)
134+
else
135+
LTERPSICHORE = F
136+
endif
124137

125138
#######################################################################
126139
# TRAVIS Options
127140
#######################################################################
128-
LTRAVIS= F
141+
ifneq ("$(wildcard $(TRAVIS_PATH))","")
142+
LTRAVIS = T
129143
TRAVIS_DIR = $(TRAVIS_PATH)
130144
LIB_TRAVIS = libtravis64_sopt.a
131145
LIB_MCONF = libmconf64.a
132-
TRAVIS_LIB = $(TRAVIS_DIR)/lib/$(LIB_TRAVIS) \
133-
$(TRAVIS_DIR)/mag_conf/lib/$(LIB_MCONF) -lstdc++
146+
LIB_FADDEEVA = libfaddeeva64.a
147+
TRAVIS_LIB = $(TRAVIS_DIR)lib/$(LIB_TRAVIS) \
148+
$(TRAVIS_DIR)faddeeva_package/lib/$(LIB_FADDEEVA) \
149+
$(TRAVIS_DIR)magconf/lib/$(LIB_MCONF) -lstdc++
150+
else
151+
LTRAVIS = F
152+
endif
134153

135154
#######################################################################
136155
# REGCOIL Options
137156
#######################################################################
138-
LREGCOIL= F
157+
ifneq ("$(wildcard $(REGCOIL_PATH))","")
158+
LREGCOIL= T
139159
REGCOIL_DIR = $(REGCOIL_PATH)
140160
REGCOIL_INC = -I$(REGCOIL_DIR)
141161
LIB_REGCOIL = libregcoil.a
142162
REGCOIL_LIB = $(REGCOIL_DIR)/$(LIB_REGCOIL) -fopenmp
163+
else
164+
LREGCOIL = F
165+
endif
166+
167+
#######################################################################
168+
# SFINCS Options
169+
#######################################################################
170+
ifneq ("$(wildcard $(SFINCS_PATH))","")
171+
LSFINCS = T
172+
SFINCS_DIR = $(SFINCS_PATH)
173+
SFINCS_INC = -I$(SFINCS_DIR)
174+
LIB_SFINCS = libsfincs.a
175+
SFINCS_LIB = $(SFINCS_DIR)/$(LIB_SFINCS) \
176+
-L$(PETSC_DIR)/$(PETSC_ARCH)/lib -lpetsc -lX11
177+
else
178+
LSFINCS = F
179+
endif
143180

144181
#######################################################################
145182
# Available Energy Options
146183
#######################################################################
147-
LAEOPT= F
184+
ifneq ("$(wildcard $(AEOPT_PATH))","")
185+
LAEOPT = T
148186
AEOPT_DIR = $(AEOPT_PATH)
149187
AEOPT_INC = -I$(AEOPT_DIR)
150188
LIB_AEOPT = libtrapAE.a
151189
AEOPT_LIB = $(AEOPT_PATH)/$(LIB_AEOPT)
190+
else
191+
LAEOPT = F
192+
endif
152193

153194
#######################################################################
154195
# MANGO Options
155196
#######################################################################
156197
ifneq ("$(wildcard $(MANGO_PATH))","")
157198
LMANGO = T
158199
MANGO_DIR = $(MANGO_PATH)
159-
# Any flags specified on the next 2 lines will be added to the
160-
# MANGO_F_COMPILE_FLAGS and MANGO_F_LINK_FLAGS lines as defined in
161-
# $(MANGO_DIR)/lib/mangoMakeVariables
162200
MANGO_INC =
163201
MANGO_LIB =
164202
else
@@ -168,34 +206,4 @@ endif
168206
#######################################################################
169207
# LIBSTELL Shared Options
170208
#######################################################################
171-
#LIB_SHARE = $(BLASHOME)/lib/libblas.so \
172-
$(SCALAPACK_HOME)/lib/libscalapack-openmpi.so \
173-
$(BLACS_HOME)/lib/libblacs-openmpi.so $(BLACS_HOME)/lib/libblacsCinit-openmpi.so $(BLACS_HOME)/lib/libblacsF77init-openmpi.so \
174-
$(HDF5_HOME)/lib/x86_64-linux-gnu/libhdf5_hl.so $(HDF5_HOME)/lib/x86_64-linux-gnu/libhdf5_fortran.so $(HDF5_HOME)/lib/x86_64-linux-gnu/libhdf5hl_fortran.so $(HDF5_HOME)/lib/x86_64-linux-gnu/libhdf5.so \
175-
$(HDF5_HOME)/lib/x86_64-linux-gnu/libmpi_usempif08.so $(HDF5_HOME)/lib/x86_64-linux-gnu/libhdf5_openmpi_fortran.so \
176-
$(NETCDF_HOME)/lib/x86_64-linux-gnu/libnetcdf.so $(NETCDF_HOME)/lib/x86_64-linux-gnu/libnetcdff.so $(NETCDF_HOME)/lib/x86_64-linux-gnu/libnetcdf_c++.so \
177-
$(SILOHOME)/lib/x86_64-linux-gnu/libsiloh5.so \
178-
$(GSLHOME)/lib/x86_64-linux-gnu/libgsl.so \
179-
$(GCC6_HOME)/libgfortran.so $(GCC6_HOME)/libstdc++.so \
180-
$(MPIHOME)/lib/x86_64-linux-gnu/libmpi.so $(MPIHOME)/lib/x86_64-linux-gnu/libmpi_mpifh.so \
181-
/usr/lib/x86_64-linux-gnu/libm.so /usr/lib/liblapack.so /usr/lib/x86_64-linux-gnu/libdl.so
182-
#LIB_SHARE = $(BLASHOME)/lib/libblas.so \
183-
$(SCALAPACK_HOME)/lib/libscalapack-openmpi.so.1 \
184-
$(BLACS_HOME)/lib/libblacs-openmpi.so.1 \
185-
$(BLACS_HOME)/lib/libblacsCinit-openmpi.so.1 \
186-
$(BLACS_HOME)/lib/libblacsF77init-openmpi.so.1 \
187-
$(HDF5_HOME)/lib/x86_64-linux-gnu/libhdf5_openmpi_fortran.so \
188-
$(NETCDF_HOME)/lib/libnetcdf.so \
189-
$(NETCDF_HOME)/lib/libnetcdff.so \
190-
$(NETCDF_HOME)/lib/libnetcdf_c++.so \
191-
$(SILOHOME)/lib/x86_64-linux-gnu/libsiloh5.so \
192-
$(GSLHOME)/lib/x86_64-linux-gnu/libgsl.so \
193-
$(GCC49_HOME)/libgfortran.so \
194-
$(GCC49_HOME)/libstdc++.so \
195-
$(MPIHOME)/lib/libmpi.so \
196-
$(MPIHOME)/lib/libmpif77.so \
197-
/usr/lib/x86_64-linux-gnu/libm.so \
198-
/usr/lib/liblapack.so \
199-
/usr/lib/x86_64-linux-gnu/libdl.so
200-
201-
209+
LIB_SHARE = -lc -lgfortran -lstdc++ -lmpi -lmpi_mpifh -lz -lc -lm -lpthread $(LIBS) -lc
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
From: itpplasma
2+
Subject: Fix GCC version comparison for versions >= 10
3+
4+
The shell comparison `[ $(GFORTRAN_VERSION) -gt 9 ]` fails when
5+
gfortran -dumpversion returns a semver string like "15.2.1" because
6+
the -gt operator expects integers. This extracts the major version
7+
number before comparison.
8+
9+
Upstream PR: https://github.com/PrincetonUniversity/STELLOPT/pull/417
10+
11+
diff --git a/SHARE/make_debian.inc b/SHARE/make_debian.inc
12+
index 67dd28c1..b99fb7dd 100644
13+
--- a/SHARE/make_debian.inc
14+
+++ b/SHARE/make_debian.inc
15+
@@ -33,7 +33,8 @@ SILOHOME = /usr/lib/$(ARCH)-linux-gnu
16+
LIBS = -L/usr/lib -lopenblas -lscalapack-openmpi
17+
18+
GFORTRAN_VERSION := $(shell $(FC) -dumpversion)
19+
- ifeq "$(shell [ $(GFORTRAN_VERSION) -gt 9 ] && echo true)" "true"
20+
+ GFORTRAN_VERSION_MAJOR := $(firstword $(subst ., ,$(GFORTRAN_VERSION)))
21+
+ ifeq "$(shell [ $(GFORTRAN_VERSION_MAJOR) -gt 9 ] && echo true)" "true"
22+
FLAGS_R += -fallow-argument-mismatch
23+
FLAGS_D += -fallow-argument-mismatch
24+
endif
25+
diff --git a/SHARE/make_redhat.inc b/SHARE/make_redhat.inc
26+
index 037f42ce..84d394ff 100644
27+
--- a/SHARE/make_redhat.inc
28+
+++ b/SHARE/make_redhat.inc
29+
@@ -21,7 +21,8 @@
30+
/lib64/openmpi/lib/libscalapack.so.2
31+
32+
GFORTRAN_VERSION := $(shell $(FC) -dumpversion)
33+
- ifeq "$(shell [ $(GFORTRAN_VERSION) -gt 9 ] && echo true)" "true"
34+
+ GFORTRAN_VERSION_MAJOR := $(firstword $(subst ., ,$(GFORTRAN_VERSION)))
35+
+ ifeq "$(shell [ $(GFORTRAN_VERSION_MAJOR) -gt 9 ] && echo true)" "true"
36+
FLAGS_R += -fallow-argument-mismatch
37+
FLAGS_D += -fallow-argument-mismatch
38+
endif
39+
diff --git a/SHARE/make_ubuntu.inc b/SHARE/make_ubuntu.inc
40+
index 188919f6..81becbd2 100644
41+
--- a/SHARE/make_ubuntu.inc
42+
+++ b/SHARE/make_ubuntu.inc
43+
@@ -31,7 +31,8 @@
44+
45+
# Need to allow argument mismatch for gfortran version 10 and above
46+
GFORTRAN_VERSION := $(shell $(FC) -dumpversion)
47+
- ifeq "$(shell [ $(GFORTRAN_VERSION) -gt 9 ] && echo true)" "true"
48+
+ GFORTRAN_VERSION_MAJOR := $(firstword $(subst ., ,$(GFORTRAN_VERSION)))
49+
+ ifeq "$(shell [ $(GFORTRAN_VERSION_MAJOR) -gt 9 ] && echo true)" "true"
50+
FLAGS_R += -fallow-argument-mismatch
51+
FLAGS_D += -fallow-argument-mismatch
52+
endif

0 commit comments

Comments
 (0)