Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
416 commits
Select commit Hold shift + click to select a range
fcb0b82
Copy function for calulation setting
pprcht Jan 13, 2026
e26f45d
deactivate restartlog for now... it is not working and messing with i…
pprcht Jan 13, 2026
131304a
gfnff hr guess implemented and rfo gd fixed
Lukasrindt Jan 14, 2026
4eabcfe
constraints mapping repaired
pprcht Jan 14, 2026
1034af3
minor printout change
Lukasrindt Jan 15, 2026
2bb972d
start work on reconstruction
pprcht Jan 15, 2026
6946575
LAPACK error fixed
Lukasrindt Jan 16, 2026
bd011b1
Hessian initialization added
Lukasrindt Jan 16, 2026
e2d1b21
cntd reconstruct
pprcht Jan 16, 2026
cccc0c1
debug origin mapping
pprcht Jan 16, 2026
d4e1f8d
start adding classification routines
pprcht Jan 17, 2026
629260e
Basic functional group identification interface, start implementing -…
pprcht Jan 18, 2026
fa1c916
gf0 init added
Lukasrindt Jan 19, 2026
73790c9
Repair aklylize alignment
pprcht Jan 19, 2026
56221d6
Bugfixes and minitool for func groups
pprcht Jan 20, 2026
0bfd27b
alkylize, fix linearizing
pprcht Jan 21, 2026
ccc4d5f
clash check based on CN
pprcht Jan 21, 2026
23a84b1
alkylize cleanup
pprcht Jan 22, 2026
c50dbba
Optimizers with scalable stepsize
Lukasrindt Jan 28, 2026
4248c9c
correct parameters ancopt
Lukasrindt Jan 28, 2026
274ecb7
Fix issues with "natural" zmat setup
pprcht Jan 30, 2026
f88a8d7
Change splitting function to always produce just 2 fragments
pprcht Jan 30, 2026
cbc6a4d
Update irmsd routines from irmsd project
pprcht Feb 2, 2026
9ec2576
start building charge distribution for fragment split
pprcht Feb 2, 2026
f044843
Working automatic charge distribution
pprcht Feb 3, 2026
09a4acb
test
pprcht Feb 4, 2026
055df2d
new bugfix attempt omp hrutils
Lukasrindt Feb 4, 2026
0495169
Work on required CREGEN refactor 1
pprcht Feb 4, 2026
92c59a1
Work on required CREGEN refactor 2
pprcht Feb 5, 2026
c2a990a
Work on required CREGEN refactor 3
pprcht Feb 5, 2026
13cbddd
modelhessians and different hu for hr implemented
Lukasrindt Feb 5, 2026
f5887d1
Work on required CREGEN refactor 4
pprcht Feb 5, 2026
d0a84fe
Work on required CREGEN refactor 5
pprcht Feb 6, 2026
86e2c2a
Work on required CREGEN refactor 6
pprcht Feb 6, 2026
60f2ef6
CREGEN refactor (likely) finished. Plus nicer printout
pprcht Feb 7, 2026
c9d9de9
Some prettier printout for CREGEN
pprcht Feb 7, 2026
30f446a
Enable internal structure list input for newcregen
pprcht Feb 7, 2026
e7cfae2
alkylize rotamerfile for reconstruction
pprcht Feb 8, 2026
9149222
deform_opt_hess added
Lukasrindt Feb 9, 2026
e0f99df
double track fixed and deform opt hess changes (still buggy)
Lukasrindt Feb 10, 2026
bc853a2
smarter pre-sorting in queue reconstruction
pprcht Feb 10, 2026
ad16cd6
CREGEN printout changes
pprcht Feb 11, 2026
39bbf90
parallelization in reconstruction, cregen printout changes
pprcht Feb 11, 2026
03903e8
More cregen printout changes
pprcht Feb 11, 2026
11267e0
deform opt hess fixed finally
Lukasrindt Feb 12, 2026
bb81f8c
Fix zmat-issue, prettify some printouts
pprcht Feb 12, 2026
c8e13fa
g_sampling added
Lukasrindt Feb 18, 2026
00b05a1
Add 50% accumulative population printout to cregen
pprcht Feb 18, 2026
54bfacd
Temporarily disable intel builds on CI (needs fixing)
pprcht Feb 18, 2026
57647e1
Merge branch '3.0.3-maintenance' into merge_branch
pprcht Feb 18, 2026
9fc4b92
Implement Truhlar frequency cut-off for thermochem
pprcht Feb 18, 2026
226f6a9
optimizers refixed
Lukasrindt Feb 19, 2026
813eec4
ancopt alp 1
Lukasrindt Feb 19, 2026
1fbbef2
Fix io error in cleanup
pprcht Feb 21, 2026
b54e119
Moving some thermo/frequency routines around
pprcht Feb 25, 2026
428c4ad
Start implementing "approxg" with modelhessian thermocontributions
pprcht Feb 25, 2026
55c62cb
changes to approxg, callable via calculator now. why though?
pprcht Feb 25, 2026
88b76ff
Start implementing RMSD penalty as calculator object
pprcht Mar 2, 2026
bf5904a
pass refine_lvl in calculation copy
pprcht Mar 2, 2026
9cbfdb8
CREGEN printout fix
pprcht Mar 3, 2026
167f02f
RMSD penalty function via calculation.level TOML object
pprcht Mar 3, 2026
8803964
ORCA .hess reader for thermo
pprcht Mar 4, 2026
a3426b4
allow coord files to be specified in Angström
pprcht Mar 5, 2026
885b29e
Clean up CLI arguments --> map usage, terminate for invalid configs
pprcht Mar 5, 2026
513ff94
Proper final printout for basin-hopping
pprcht Mar 9, 2026
bd2135a
Basinhopping on dihedral angles
pprcht Mar 10, 2026
738e575
Fix optimization tester (sp -> wp)
pprcht Mar 10, 2026
71d73fd
fix 1 character readl
pprcht Mar 10, 2026
b73a1bb
Change asynchronous BH execution
pprcht Mar 10, 2026
66ab386
drawbox function in iomod
pprcht Mar 10, 2026
0319fda
Allow "refine" settings for mc quenches
pprcht Mar 11, 2026
3c26d41
Test fortbridge subproject
pprcht Mar 12, 2026
f31b550
Preliminary work on mlip interfacing
pprcht Mar 12, 2026
051fbbb
flesh out mlip_sc.f90 a bit
pprcht Mar 12, 2026
6d2468b
First working call of CREST to MACE-OFF (singlepoint and optimization…
pprcht Mar 12, 2026
a83550d
rename fortbridge -> fmlip_relay
pprcht Mar 13, 2026
1c0a963
second try at renaming subproject
pprcht Mar 13, 2026
ecf12df
Add dftd4 as git submodule (tblite requirement)
pprcht Mar 13, 2026
47bb33b
Add mctc-lib as git submodule (tblite dependency)
pprcht Mar 13, 2026
baeace4
Update fmlip_relay update logic
pprcht Mar 13, 2026
996b42d
parallel execution of fmlip-relay
pprcht Mar 13, 2026
251fc0d
thread limitation for parallel MLIPs
pprcht Mar 13, 2026
c19d5a0
Add charge&spin update from fmlip-relay
pprcht Mar 13, 2026
7907167
Update git submodule link
pprcht Mar 13, 2026
2df287f
g_sampling fully integrated
Lukasrindt Mar 13, 2026
231b456
alternate mlip keyword
pprcht Mar 13, 2026
9dc0ea4
Add mstore as submodule (tblite dependency)
pprcht Mar 13, 2026
ce898c9
Add multicharge as submodule (tblite dependency)
pprcht Mar 13, 2026
820e3ad
change multicharge version to something dftd4 compliant
pprcht Mar 13, 2026
87c8d9e
add s-dftd3 submodule (tblite dependency)
pprcht Mar 13, 2026
48632b3
Start another attempt at redoing the meson build system
pprcht Mar 14, 2026
4f8057c
point libpvol to fork with modified meson build
pprcht Mar 15, 2026
f0d5925
Update build systems for gfn0 and gfnff locally
pprcht Mar 15, 2026
5d13f55
.gitignore update
pprcht Mar 15, 2026
5ae0527
meson build configuration updates
pprcht Mar 15, 2026
65282e7
Thermochem omp protected
Lukasrindt Mar 16, 2026
74ab584
omp now really protected
Lukasrindt Mar 16, 2026
f19f2f8
syntax error fixed
Lukasrindt Mar 16, 2026
cc45794
add fmlip-relay meson build
pprcht Mar 16, 2026
dfb3cef
Update gfnff subproject commits
pprcht Mar 16, 2026
9d7eecf
Add missing meson build srcs, fix weird printout format in ancopt
pprcht Mar 16, 2026
157100e
omp critical for symmetry
Lukasrindt Mar 17, 2026
1898585
Merge remote-tracking branch 'lukas/hessian_update' into experimental…
pprcht Mar 17, 2026
7488285
Start work on parallel free energy correction calculation
pprcht Mar 17, 2026
9487c3a
fix function
pprcht Mar 17, 2026
4cd1127
serial loop for dG refine implementation
pprcht Mar 17, 2026
a70d06b
Add (unused) symmetry_i.f90 rewrite of the C code
pprcht Mar 17, 2026
3d10912
disable tblite C-api, unneeded for build
pprcht Mar 17, 2026
25891ef
Turn of warnings for default meson build
pprcht Mar 18, 2026
a2af9c9
working STATIC buil with meson, GNU compilers and openblas
pprcht Mar 18, 2026
556028d
Change to numhess1, enable parallelization
pprcht Mar 18, 2026
6cde111
Merge branch 'experimental' into experimental-meson
pprcht Mar 18, 2026
474ce5b
Refactor symmetry detection C->Fortran
pprcht Mar 18, 2026
42bd17a
Point groups defined as parameter rather then repeated setup
pprcht Mar 18, 2026
2d43d16
Fix text-formatting error
pprcht Mar 18, 2026
90e659b
formatting
pprcht Mar 18, 2026
9b75759
Small refactor, removed getsymmetry2, now only importing symmetry_i
pprcht Mar 18, 2026
d03bf34
Add tests for all relevant point groups
pprcht Mar 18, 2026
06fb54b
Merge branch 'experimental-meson' into experimental
pprcht Mar 18, 2026
1595bba
prepare nicer dry-run printout
pprcht Mar 18, 2026
2778351
start working on getting ifx build to run
pprcht Mar 19, 2026
b7efe12
Initial version that can build an intel-llvm binary with meson
pprcht Mar 19, 2026
975848e
Modify MD test to be compiler portable
pprcht Mar 19, 2026
59099ad
Cleanup fixes
pprcht Mar 19, 2026
d1c7727
Safeguard some code for intel-llvm builds
pprcht Mar 20, 2026
ec04a5f
fix warning for intel-llvm build
pprcht Mar 20, 2026
62f7908
intel-llvm updates
pprcht Mar 20, 2026
bb8e9f3
Update metadata printout
pprcht Mar 20, 2026
4c00112
refactor: move c helpers into src/chelpers/
pprcht Mar 20, 2026
180efad
Small refactor of propcalc to remove old code
pprcht Mar 20, 2026
676f7e9
refactor to remove legacy readl routine with modern Fortran
pprcht Mar 20, 2026
e756c73
Test implementation of a Langevin and a Bussi-Parinello thermostat. T…
pprcht Mar 20, 2026
73b2c5d
Fix Bussi-parinello thermostat
pprcht Mar 20, 2026
e8162ba
Clean up thermostat implementations and printouts
pprcht Mar 20, 2026
e5547ac
Start refactor of molecule type and readers
pprcht Mar 23, 2026
1af40fb
cntd work on molecule type refactor
pprcht Mar 23, 2026
ae3e346
Re-export types
pprcht Mar 23, 2026
e204424
Some cleanup for molecule type refactor
pprcht Mar 23, 2026
b7c7a75
Modify the mol%write() function to adapt to file types
pprcht Mar 24, 2026
a5bf112
working on extxyz reader
pprcht Mar 24, 2026
4cea29a
extxyz parsing ...
pprcht Mar 24, 2026
2b20668
continue on extxyz parsing
pprcht Mar 24, 2026
07778c7
continue work on extxyz parser
pprcht Mar 24, 2026
2f2923e
Debugging extxyz reader
pprcht Mar 24, 2026
44453d6
extxyz printout for crestopt.log.xyz files
pprcht Mar 24, 2026
3bbff95
extended xyz refactor
pprcht Mar 24, 2026
fc080e2
ensemble reader function extended xyz
pprcht Mar 24, 2026
6d4d858
update dftd4 subproject across builds
pprcht Mar 25, 2026
d459b1e
Update multicharge subproject to v0.5.0
pprcht Mar 25, 2026
8ec2920
Update toml-f subproject
pprcht Mar 25, 2026
3610d80
Add tblite fixes because of newer version
pprcht Mar 25, 2026
96df0f9
gxtb-tblite calculator setup... still some energy difference compared…
pprcht Mar 25, 2026
03527f0
Taking care of EEQ-BC aux charges
pprcht Mar 25, 2026
d83e01b
fix energy conversion for extxyz ensembles
pprcht Mar 30, 2026
b5ac891
Fix extxyz energy conversion within sampling workflows
pprcht Mar 30, 2026
7816020
Add a deep-copy function for coord types
pprcht Apr 7, 2026
ce57b07
Fix deep copy routines for calcdata and calculation_settings
pprcht Apr 7, 2026
3c244ea
Create deep copy routine for env
pprcht Apr 7, 2026
ab19738
Update to gfnff v0.1.1 subproject
pprcht Apr 7, 2026
f9d1b0f
Remove omp critical statement in orca hessian processor
pprcht Apr 13, 2026
d3e5e68
new logic for g-xTB usage: WITH_GXTB --> tblite implementation (still…
pprcht Apr 24, 2026
32c663b
Deactivate g-xTB tblite build (still confidential, in preparation)
pprcht Apr 24, 2026
4e4df52
Merge remote-tracking branch 'origin/experimental-gxtb' into experime…
pprcht Apr 24, 2026
ae8f669
Update in preparation for tblite gxtb build
pprcht Apr 24, 2026
aa1691e
Use the same commits in all of git submodules, Cmake Find* files, and…
pprcht Apr 24, 2026
740765d
let refine write in extxyz format
pprcht Apr 24, 2026
d04cf04
printout formatting
pprcht Apr 24, 2026
244b436
Avoid starting calculations by itself. require explicit runtype speci…
pprcht Apr 24, 2026
919ced4
rewire --cregen/--sort logic for easier use
pprcht Apr 24, 2026
9a8afe7
Nicer --help menu print, plus some man page cleanup
pprcht Apr 24, 2026
526cad7
irmsd test
pprcht Apr 24, 2026
453a855
Build updates and tested static builds
pprcht Apr 25, 2026
6124536
Update commit on meson wrap and cmake find files
pprcht Apr 25, 2026
2a4d037
alternative flag '-itmdgc'
pprcht Apr 25, 2026
115d93d
workflow rework, part 1
pprcht Apr 25, 2026
8de0897
workflow rework, part 2
pprcht Apr 26, 2026
96f93a0
printout update
pprcht May 3, 2026
c7cbf6e
Perpare for spin-polarized xtb via tblite
pprcht May 3, 2026
bbf448e
spin-polarization flags/toml
pprcht May 3, 2026
406aadd
spin-polarization, some printouts
pprcht May 3, 2026
023e25f
unit test for spin-polarization
pprcht May 3, 2026
1a6e936
Repair entropy mode functionality
pprcht May 3, 2026
0f380e9
small modification to extxyz, energy and froces units
pprcht May 3, 2026
84b85bd
prepare global setting for output units in extxyz
pprcht May 3, 2026
29c270a
Working on restart logic
pprcht May 5, 2026
ab02d46
Update restart logic
pprcht May 5, 2026
3cf9293
Trimmed down workflows + manual trigger full workflow
pprcht May 6, 2026
1b43773
Some additions to printouts
pprcht May 6, 2026
06eccc0
g-xTB via tblite requires Fermi temperature 0 instead of 300
pprcht May 6, 2026
c4974ca
port the TOML keyword "freeze" as cli arg
pprcht May 6, 2026
adfb6f8
Add hybrid method selection cli args
pprcht May 6, 2026
936e8bd
Experimental branch static build test
pprcht May 7, 2026
aa22218
Update build-upload.yml workflow
pprcht May 7, 2026
5807032
-rerank and -reopt flags
pprcht May 7, 2026
f7e09d0
multilevel keyword compatibility with --opt
pprcht May 7, 2026
5dc2ac3
deprecate -for flag
pprcht May 7, 2026
cc36974
--ensemblehess and --finalhess keywords
pprcht May 7, 2026
75107ad
fix some crest_multilevel_oloop calls
pprcht May 8, 2026
3a801c8
explicit --alkylize simple keyword for completeness
pprcht May 8, 2026
ab7a9d8
scaling logic for alkylize reconstriction
pprcht May 8, 2026
7d3d9f7
Refactor queue reconstruct
pprcht May 8, 2026
d4aac15
Activate the new protonate/deprotonate protocols by default
pprcht May 15, 2026
30eae3e
Update examples
pprcht May 15, 2026
5760b68
Add toml keyword for CREGEN
pprcht May 15, 2026
0adb694
update example 10
pprcht May 15, 2026
efa3174
Update example 12
pprcht May 15, 2026
0d3e634
Update file name info protonate/deprotonate/tautomerize
pprcht May 15, 2026
fa99644
Version bump in preparation of merge
pprcht May 15, 2026
c5956cc
cosmetics (adapting term_ui from github.com/pprcht/irmsd)
pprcht May 22, 2026
7598806
cosmetics (warning due to temporary array in axis() call)
pprcht May 22, 2026
e373720
cleaner stack handling in queue reconstruction for static build
pprcht May 22, 2026
95729d9
cosmetics (avoid ifx warnings in ancopt for static builds)
pprcht May 22, 2026
58175d9
update fermi smearing default for g-xTB, consistent with tblite
pprcht May 22, 2026
cda1733
cosmetics (ir intensities in "vibspectrum" file)
pprcht May 22, 2026
12c6caa
cosmetics (nicer MD/MTD block printout)
pprcht May 22, 2026
5b18166
cosmetics (remove stale refine part)
pprcht May 23, 2026
c4688c1
cosmetics (sdf ensemble rewrite function)
pprcht May 23, 2026
4ca4b50
cosmetics (pca clustering as --sort runtype via additonal --cluster arg)
pprcht May 23, 2026
e79f12c
cosmetics (modernize some ccegen code parts)
pprcht May 23, 2026
2e90462
cosmetics (update help menue, in particular --help sort)
pprcht May 23, 2026
a9778cc
cosmetics (cleanup of ancient ensemblecomp routine --> iRMSD)
pprcht May 23, 2026
a8e9467
cosmetics (more CCEGEN cleanup)
pprcht May 24, 2026
412f416
cosmetics (some source cleanup)
pprcht May 24, 2026
9813e59
fmlip-relay example
pprcht May 24, 2026
aff0a70
Better handling of parallel fmlip-relay usage
pprcht May 24, 2026
a110036
submodule commit update
pprcht May 24, 2026
0ea9d24
update some printout banners and use proper deep copy of "calc" in th…
pprcht May 30, 2026
f26668f
cosmetic banner change for sp,opt,numhess
pprcht May 30, 2026
a2baea8
Static linkage of subprojects in meson build by default (≠full static…
pprcht Jun 1, 2026
bee72b8
allow custom name for optimizer logfile
pprcht Jun 1, 2026
6be326d
Simplified orca driver via cli
pprcht Jun 1, 2026
75226ba
Update sources from iRMSD standalone project
pprcht Jun 4, 2026
5a35ac2
Mini update on graph routines + tests
pprcht Jun 4, 2026
9bd9863
graph routines test
pprcht Jun 4, 2026
343a667
no gxtb+implicit solvation
pprcht Jun 4, 2026
56cf6c9
implement and use a %create shortcut for calcdata objects
pprcht Jun 4, 2026
e8970a2
be more verbose about gxtb usage in this build version
pprcht Jun 4, 2026
4e67ffd
Update fmlip-relay subproject
pprcht Jun 5, 2026
8520dfd
Cleaner separation between uhf and multiplicity
pprcht Jun 5, 2026
2ddc404
UMA interface via fmlip subproject
pprcht Jun 5, 2026
379cb48
better implementation of "standard" uma and mace-off usage
pprcht Jun 5, 2026
86966e2
Update --mdopt output format
pprcht Jun 5, 2026
20b637d
Update tblite version (plus, required for that, dftd3/dftd4)
pprcht Jun 12, 2026
851ff3c
ddX and tblite 0.6.0 update
pprcht Jun 13, 2026
ec60941
standalone eeq and ddX as calculator settings
pprcht Jun 13, 2026
885d89a
move libpvol to components (conceptionally better match)
pprcht Jun 13, 2026
b70a877
EEQ-BC charges + dq/dR → ddX polar → SASA tension + charge-dependent…
pprcht Jun 13, 2026
e07fe95
Printouts, and add example
pprcht Jun 13, 2026
a2a8557
expose eeqbc standalone via calculator
pprcht Jun 13, 2026
5941442
Fix CMake finder (#487)
awvwgk Jun 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
388 changes: 388 additions & 0 deletions .github/workflows/build-CI-full.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,388 @@
name: CI (full)

on:
workflow_dispatch:

env:
BUILD_DIR: _build
PIP_PACKAGES: >-
meson!=1.8.0
cmake
ninja
PIP_EXTRAS: >-
pkgconfig
numpy
ase
matplotlib

jobs:
build:
runs-on: ${{ matrix.os }}

strategy:
fail-fast: false
matrix:
include:
# ---- Linux GCC + OpenBLAS — CMake debug --------------------------
- { os: ubuntu-latest, build-type: debug,
toolchain: { compiler: gcc, version: '12', build: cmake } }
- { os: ubuntu-latest, build-type: debug,
toolchain: { compiler: gcc, version: '14', build: cmake } }

# ---- Linux GCC + OpenBLAS — Meson debugoptimized -----------------
- { os: ubuntu-latest, build-type: debugoptimized,
toolchain: { compiler: gcc, version: '12', build: meson } }
- { os: ubuntu-latest, build-type: debugoptimized,
toolchain: { compiler: gcc, version: '14', build: meson } }

# ---- Linux Intel (ifx/icx) + MKL — CMake debug ------------------
- { os: ubuntu-latest, build-type: debug,
toolchain: { compiler: intel, version: '2025.1', mkl_version: '2025.1', build: cmake } }

# ---- Linux Intel (ifx/icx) + MKL — Meson debugoptimized ---------
- { os: ubuntu-latest, build-type: debugoptimized,
toolchain: { compiler: intel, version: '2025.1', mkl_version: '2025.1', build: meson } }

# ---- macOS GCC + OpenBLAS — CMake debug (GNU only) ---------------
- { os: macos-latest, build-type: debug,
toolchain: { compiler: gcc, version: '12', build: cmake } }
- { os: macos-latest, build-type: debug,
toolchain: { compiler: gcc, version: '14', build: cmake } }

defaults:
run:
shell: bash

steps:
# ----------------------------------------------------------------------
# Setup
# ----------------------------------------------------------------------
- name: Checkout code
uses: actions/checkout@v4

- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: "3.10"

# ----------------------------------------------------------------------
# Compiler setup
# ----------------------------------------------------------------------

- name: Install GCC using setup-fortran
if: ${{ contains(matrix.toolchain.compiler, 'gcc') }}
uses: fortran-lang/setup-fortran@v1
with:
compiler: ${{ matrix.toolchain.compiler }}
version: ${{ matrix.toolchain.version }}

- name: Install libopenblas (Linux GCC builds)
if: ${{ contains(matrix.os, 'ubuntu') && contains(matrix.toolchain.compiler, 'gcc') }}
run: |
sudo apt-get update
sudo apt-get install -y libopenblas-dev

- name: Install OpenBLAS (macOS)
if: ${{ contains(matrix.os, 'macos') }}
run: |
brew update
brew install openblas
echo "PKG_CONFIG_PATH=/usr/local/opt/openblas/lib/pkgconfig:/opt/homebrew/opt/openblas/lib/pkgconfig" >> $GITHUB_ENV
echo "LDFLAGS=-L/usr/local/opt/openblas/lib -L/opt/homebrew/opt/openblas/lib" >> $GITHUB_ENV
echo "CPPFLAGS=-I/usr/local/opt/openblas/include -I/opt/homebrew/opt/openblas/include" >> $GITHUB_ENV

- name: Prepare for Intel cache restore
if: ${{ contains(matrix.toolchain.compiler, 'intel') }}
run: |
sudo mkdir -p /opt/intel
sudo chown $USER /opt/intel

- name: Cache Intel installation
if: ${{ contains(matrix.toolchain.compiler, 'intel') }}
id: cache-install
uses: actions/cache@v4
with:
path: /opt/intel/oneapi
key: install-${{ matrix.toolchain.compiler }}-${{ matrix.toolchain.version }}-${{ matrix.toolchain.mkl_version }}-${{ matrix.os }}

- name: Install Intel Compiler
if: ${{ contains(matrix.toolchain.compiler, 'intel') && steps.cache-install.outputs.cache-hit != 'true' }}
uses: fortran-lang/setup-fortran@v1
with:
compiler: ${{ matrix.toolchain.compiler }}
version: ${{ matrix.toolchain.version }}

- name: Install Intel MKL
if: ${{ contains(matrix.toolchain.compiler, 'intel') && steps.cache-install.outputs.cache-hit != 'true' }}
run: |
sudo apt-get install -y \
intel-oneapi-mkl-${{ matrix.toolchain.mkl_version }} \
intel-oneapi-mkl-devel-${{ matrix.toolchain.mkl_version }}

- name: Setup Intel oneAPI environment
if: ${{ contains(matrix.toolchain.compiler, 'intel') }}
run: |
source /opt/intel/oneapi/setvars.sh --force
printenv >> $GITHUB_ENV

- name: Set compiler environment variables
run: |
if [ ! -n "$FC" ]; then
if [ "${{ matrix.toolchain.compiler }}" = "gcc" ]; then
echo "FC=gfortran" >> $GITHUB_ENV
echo "CC=gcc" >> $GITHUB_ENV
elif [ "${{ matrix.toolchain.compiler }}" = "intel" ]; then
echo "FC=ifx" >> $GITHUB_ENV
echo "CC=icx" >> $GITHUB_ENV
fi
fi
echo "COMPILER_VERSION=${{ matrix.toolchain.version }}" >> $GITHUB_ENV

# ----------------------------------------------------------------------
# Dependencies & submodules
# ----------------------------------------------------------------------

- name: Git submodules checkout
run: git submodule update --init

- name: Install build and test dependencies
run: |
pip3 install ${{ env.PIP_PACKAGES }} ${{ env.PIP_EXTRAS }}

# ----------------------------------------------------------------------
# Configure
# ----------------------------------------------------------------------

- name: Configure build (CMake, debug)
if: ${{ matrix.toolchain.build == 'cmake' && matrix.build-type == 'debug' }}
run: >
cmake -B${{ env.BUILD_DIR }}
-GNinja
-DCMAKE_BUILD_TYPE=Debug
-DCMAKE_INSTALL_PREFIX=$PWD/_dist
-DCMAKE_INSTALL_LIBDIR=lib

- name: Configure build (CMake, debugoptimized)
if: ${{ matrix.toolchain.build == 'cmake' && matrix.build-type == 'debugoptimized' }}
run: >
cmake -B${{ env.BUILD_DIR }}
-GNinja
-DCMAKE_BUILD_TYPE=RelWithDebInfo
-DCMAKE_INSTALL_PREFIX=$PWD/_dist
-DCMAKE_INSTALL_LIBDIR=lib

- name: Configure build (Meson, GNU)
if: ${{ matrix.toolchain.build == 'meson' && matrix.toolchain.compiler == 'gcc' }}
run: >
meson setup ${{ env.BUILD_DIR }}
--buildtype=${{ matrix.build-type }}
--prefix=$PWD/_dist
--libdir=lib
--warnlevel=0
-Dlapack=openblas

- name: Configure build (Meson, Intel)
if: ${{ matrix.toolchain.build == 'meson' && contains(matrix.toolchain.compiler, 'intel') }}
run: >
meson setup ${{ env.BUILD_DIR }}
--buildtype=${{ matrix.build-type }}
--prefix=$PWD/_dist
--libdir=lib
--warnlevel=0
--native-file=config/intel-llvm.ini
-Dlapack=mkl

# ----------------------------------------------------------------------
# Build / test / install
# ----------------------------------------------------------------------

- name: Build project
run: ninja -C ${{ env.BUILD_DIR }}

- name: Run unit tests (ctest)
if: ${{ matrix.toolchain.build == 'cmake' && contains(matrix.toolchain.compiler, 'gcc') }}
run: |
ctest --output-on-failure --parallel 2 -R '^crest/'
working-directory: ${{ env.BUILD_DIR }}
env:
OMP_NUM_THREADS: 1,2,1

- name: Install project
run: |
ninja -C ${{ env.BUILD_DIR }} install
echo "CREST_PREFIX=$PWD/_dist" >> $GITHUB_ENV

build-static:
runs-on: ${{ matrix.os }}

strategy:
fail-fast: false
matrix:
include:
# Linux x86_64 — GNU static (CMake)
- { os: ubuntu-latest, build-type: static,
toolchain: { compiler: gcc, version: '14', build: cmake } }

# Linux x86_64 — Intel LLVM static (Meson; better ifx static support)
- { os: ubuntu-latest, build-type: static,
toolchain: { compiler: intel, version: '2025.1', mkl_version: '2025.1', build: meson } }

# Linux aarch64 — GNU static (CMake; Intel oneAPI is x86-only)
- { os: ubuntu-24.04-arm, build-type: static,
toolchain: { compiler: gcc, version: '14', build: cmake } }

# macOS arm64 — GNU mostly-static (CMake)
# Note: macOS does not support fully-static executables; system libs remain dynamic.
- { os: macos-latest, build-type: static,
toolchain: { compiler: gcc, version: '14', build: cmake } }

defaults:
run:
shell: bash

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: "3.10"

# --- Compiler setup ----------------------------------------------------

- name: Install GCC using setup-fortran
if: ${{ contains(matrix.toolchain.compiler, 'gcc') }}
uses: fortran-lang/setup-fortran@v1
with:
compiler: ${{ matrix.toolchain.compiler }}
version: ${{ matrix.toolchain.version }}

- name: Install libopenblas (Linux GCC builds)
if: ${{ contains(matrix.os, 'ubuntu') && contains(matrix.toolchain.compiler, 'gcc') }}
run: |
sudo apt-get update
sudo apt-get install -y libopenblas-dev

- name: Install OpenBLAS (macOS)
if: ${{ contains(matrix.os, 'macos') }}
run: |
brew update
brew install openblas
echo "PKG_CONFIG_PATH=/usr/local/opt/openblas/lib/pkgconfig:/opt/homebrew/opt/openblas/lib/pkgconfig" >> $GITHUB_ENV
echo "LDFLAGS=-L/usr/local/opt/openblas/lib -L/opt/homebrew/opt/openblas/lib" >> $GITHUB_ENV
echo "CPPFLAGS=-I/usr/local/opt/openblas/include -I/opt/homebrew/opt/openblas/include" >> $GITHUB_ENV

- name: Prepare for Intel cache restore
if: ${{ contains(matrix.toolchain.compiler, 'intel') }}
run: |
sudo mkdir -p /opt/intel
sudo chown $USER /opt/intel

- name: Cache Intel installation
if: ${{ contains(matrix.toolchain.compiler, 'intel') }}
id: cache-install
uses: actions/cache@v4
with:
path: /opt/intel/oneapi
key: install-${{ matrix.toolchain.compiler }}-${{ matrix.toolchain.version }}-${{ matrix.toolchain.mkl_version }}-${{ matrix.os }}

- name: Install Intel Compiler
if: ${{ contains(matrix.toolchain.compiler, 'intel') && steps.cache-install.outputs.cache-hit != 'true' }}
uses: fortran-lang/setup-fortran@v1
with:
compiler: ${{ matrix.toolchain.compiler }}
version: ${{ matrix.toolchain.version }}

- name: Install Intel MKL
if: ${{ contains(matrix.toolchain.compiler, 'intel') && steps.cache-install.outputs.cache-hit != 'true' }}
run: |
sudo apt-get install -y \
intel-oneapi-mkl-${{ matrix.toolchain.mkl_version }} \
intel-oneapi-mkl-devel-${{ matrix.toolchain.mkl_version }}

- name: Setup Intel oneAPI environment
if: ${{ contains(matrix.toolchain.compiler, 'intel') }}
run: |
source /opt/intel/oneapi/setvars.sh --force
printenv >> $GITHUB_ENV

- name: Set compiler environment variables
run: |
if [ ! -n "$FC" ]; then
if [ "${{ matrix.toolchain.compiler }}" = "gcc" ]; then
echo "FC=gfortran" >> $GITHUB_ENV
echo "CC=gcc" >> $GITHUB_ENV
elif [ "${{ matrix.toolchain.compiler }}" = "intel" ]; then
echo "FC=ifx" >> $GITHUB_ENV
echo "CC=icx" >> $GITHUB_ENV
fi
fi
echo "COMPILER_VERSION=${{ matrix.toolchain.version }}" >> $GITHUB_ENV

# --- Dependencies & submodules -----------------------------------------

- name: Git submodules checkout
run: git submodule update --init

- name: Install build dependencies
run: |
pip3 install ${{ env.PIP_PACKAGES }} ${{ env.PIP_EXTRAS }}

# --- Configure ---------------------------------------------------------

- name: Configure build (CMake, static)
if: ${{ matrix.toolchain.build == 'cmake' && matrix.build-type == 'static' }}
run: >
cmake -B${{ env.BUILD_DIR }}
-GNinja
-DCMAKE_BUILD_TYPE=RelWithDebInfo
-DCMAKE_INSTALL_PREFIX=$PWD/_dist
-DCMAKE_INSTALL_LIBDIR=lib
-DWITH_TESTS=OFF
-DSTATICBUILD=ON

- name: Configure build (Meson, Intel static)
if: ${{ matrix.toolchain.build == 'meson' && matrix.build-type == 'static' }}
run: >
meson setup ${{ env.BUILD_DIR }}
--buildtype=release
--prefix=$PWD/_dist
--libdir=lib
--warnlevel=0
--native-file=config/intel-llvm.ini
-Dstatic=true
-Dlapack=mkl
-Dtests=false

# --- Build / install ---------------------------------------------------

- name: Build project
run: ninja -C ${{ env.BUILD_DIR }}

- name: Install project
run: |
ninja -C ${{ env.BUILD_DIR }} install
echo "CREST_PREFIX=$PWD/_dist" >> $GITHUB_ENV

- name: Create package
run: |
mkdir crest
cp COPYING crest/LICENSE
cp COPYING.LESSER crest/LICENSE.LESSER
cp _dist/bin/crest crest/
ARCH=$(uname -m)
UNAME_OS=$(uname -s | tr '[:upper:]' '[:lower:]')
COMPILER_NAME="${{ matrix.toolchain.compiler }}"
[ "$COMPILER_NAME" = "gcc" ] && COMPILER_NAME="gnu"
[ "$COMPILER_NAME" = "intel" ] && COMPILER_NAME="intel"
OUTPUT="crest-${COMPILER_NAME}-${{ matrix.toolchain.version }}-${UNAME_OS}-${ARCH}.tar"
tar cvf "$OUTPUT" crest
xz -T0 "$OUTPUT"
echo "CREST_OUTPUT=${OUTPUT}.xz" >> $GITHUB_ENV

- name: Upload package
uses: actions/upload-artifact@v4
with:
name: ${{ env.CREST_OUTPUT }}
path: ${{ env.CREST_OUTPUT }}
Loading
Loading