Skip to content

Commit b075335

Browse files
authored
Merge pull request #868 from ahoarau/add-cppad-gmp-mpfr-finders
jrl: Add cppad, cppadcg, gmp and mpfr find-modules
2 parents 3f94c38 + 6851103 commit b075335

30 files changed

Lines changed: 946 additions & 15 deletions

.github/workflows/v2-linux.yml

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,10 @@ jobs:
3232
libeigen3-dev \
3333
libmatio-dev \
3434
libsimde-dev \
35-
libsuitesparse-dev
35+
libsuitesparse-dev \
36+
libgmp-dev \
37+
libmpfr-dev \
38+
libcppad-dev
3639
3740
- name: Setup Python Virtual Environment
3841
run: |
@@ -54,7 +57,7 @@ jobs:
5457
cmake --install catch2-build
5558
5659
- name: Configure project
57-
run: cmake -G Ninja -S . -B build -DCMAKE_BUILD_TYPE=RelWithDebInfo -DJRL_CMAKEMODULES_BUILD_TESTS=ON
60+
run: cmake -G Ninja -S . -B build -DCMAKE_BUILD_TYPE=RelWithDebInfo -DJRL_CMAKEMODULES_BUILD_TESTS=ON -DJRL_CMAKEMODULES_ENABLE_TEST_CPPAD=ON -DJRL_CMAKEMODULES_ENABLE_TEST_GMP=ON -DJRL_CMAKEMODULES_ENABLE_TEST_MPFR=ON
5861

5962
- name: Build project
6063
run: cmake --build build
@@ -89,7 +92,10 @@ jobs:
8992
libeigen3-dev \
9093
libmatio-dev \
9194
libsimde-dev \
92-
libsuitesparse-dev
95+
libsuitesparse-dev \
96+
libgmp-dev \
97+
libmpfr-dev \
98+
libcppad-dev
9399
94100
- name: Setup Python Virtual Environment
95101
run: |
@@ -102,7 +108,7 @@ jobs:
102108
pip install nanobind pytest numpy
103109
104110
- name: Configure project
105-
run: cmake -G Ninja -S . -B build -DCMAKE_BUILD_TYPE=RelWithDebInfo -DJRL_CMAKEMODULES_BUILD_TESTS=ON
111+
run: cmake -G Ninja -S . -B build -DCMAKE_BUILD_TYPE=RelWithDebInfo -DJRL_CMAKEMODULES_BUILD_TESTS=ON -DJRL_CMAKEMODULES_ENABLE_TEST_CPPAD=ON -DJRL_CMAKEMODULES_ENABLE_TEST_GMP=ON -DJRL_CMAKEMODULES_ENABLE_TEST_MPFR=ON
106112

107113
- name: Build project
108114
run: cmake --build build
@@ -149,10 +155,12 @@ jobs:
149155
eigen \
150156
libmatio \
151157
simde \
152-
suitesparse
158+
suitesparse \
159+
gmp \
160+
mpfr
153161
154162
- name: Configure project
155-
run: cmake -G Ninja -S . -B build -DCMAKE_BUILD_TYPE=RelWithDebInfo -DJRL_CMAKEMODULES_BUILD_TESTS=ON
163+
run: cmake -G Ninja -S . -B build -DCMAKE_BUILD_TYPE=RelWithDebInfo -DJRL_CMAKEMODULES_BUILD_TESTS=ON -DJRL_CMAKEMODULES_ENABLE_TEST_GMP=ON -DJRL_CMAKEMODULES_ENABLE_TEST_MPFR=ON
156164

157165
- name: Build project
158166
run: cmake --build build

.github/workflows/v2-macos.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,14 @@ jobs:
2727
- uses: actions/checkout@v7
2828
- name: Install dependencies (via brew)
2929
run: |
30-
brew install catch2 boost-python3 robin-map nanobind pytest numpy eigen libmatio simde suite-sparse
30+
brew install catch2 boost-python3 robin-map nanobind pytest numpy eigen libmatio simde suite-sparse gmp mpfr cppad
3131
# suite-sparse depends on libomp, but libomp is keg-only (not symlinked into the
3232
# default search prefix), so CMake's FindOpenMP can't see it. Force-link it so that
3333
# OpenMP gets found. Homebrew's CHOLMODConfig.cmake requires it via find_dependency(OpenMP).
3434
brew link --force --overwrite libomp
3535
3636
- name: Configure project
37-
run: cmake -G Ninja -S . -B build -DCMAKE_BUILD_TYPE=RelWithDebInfo -DJRL_CMAKEMODULES_BUILD_TESTS=ON
37+
run: cmake -G Ninja -S . -B build -DCMAKE_BUILD_TYPE=RelWithDebInfo -DJRL_CMAKEMODULES_BUILD_TESTS=ON -DJRL_CMAKEMODULES_ENABLE_TEST_CPPAD=ON -DJRL_CMAKEMODULES_ENABLE_TEST_GMP=ON -DJRL_CMAKEMODULES_ENABLE_TEST_MPFR=ON
3838

3939
- name: Build project
4040
run: cmake --build build

.github/workflows/v2-windows.yml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,13 @@ jobs:
5050
key: vcpkg-${{ matrix.image }}-${{ matrix.arch }}-${{ github.sha }}
5151
restore-keys: vcpkg-${{ matrix.image }}-${{ matrix.arch }}-
5252

53+
- name: Update vcpkg to latest version
54+
run: |
55+
git -C C:/vcpkg pull
56+
5357
- name: Install C++ dependencies (via vcpkg)
5458
run: |
55-
${{ env.VCPKG_COMMAND }} install catch2 boost-python eigen3 matio simde suitesparse
59+
${{ env.VCPKG_COMMAND }} install catch2 boost-python eigen3 matio simde suitesparse gmp mpfr cppad
5660
5761
- name: Save vcpkg binary cache
5862
if: always()
@@ -81,7 +85,7 @@ jobs:
8185
pip list -v
8286
8387
- name: Configure project
84-
run: cmake -G Ninja -S . -B build --log-level=DEBUG -DJRL_CMAKEMODULES_BUILD_TESTS=ON
88+
run: cmake -G Ninja -S . -B build --log-level=DEBUG -DJRL_CMAKEMODULES_BUILD_TESTS=ON -DJRL_CMAKEMODULES_ENABLE_TEST_CPPAD=ON -DJRL_CMAKEMODULES_ENABLE_TEST_GMP=ON -DJRL_CMAKEMODULES_ENABLE_TEST_MPFR=ON
8589

8690
- name: Build project
8791
run: cmake --build build --verbose

CHANGELOG.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
66

77
## [Unreleased]
88

9-
- jrl_release: add package.xml
9+
- jrl_release: add package.xml by @nim65s
1010
- jrl_check_python_module: add version handling by @ahoarau
1111
- jrl_option: fix condition handling on reconfigure and support parent project normal variables (CMP0077)
12+
- v2: add cppad, cppadcg, GMP and MPFR find-modules by @ahoarau
1213

1314
## [2.2.4] - 2026-08-07
1415

CMakeLists.txt

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,19 +36,44 @@ set(
3636
${CMAKE_INSTALL_DATAROOTDIR}/cmake/jrl-cmakemodules
3737
)
3838

39-
option(
39+
jrl_option(
4040
JRL_CMAKEMODULES_GENERATE_API_DOC
4141
"Generate the API documentation for jrl-cmakemodules (v2)"
4242
OFF
4343
)
4444

45-
option(
45+
jrl_option(
4646
JRL_CMAKEMODULES_BUILD_TESTS
4747
"Build the tests for jrl-cmakemodules (v2)"
4848
OFF
4949
)
5050

51-
option(JRL_CMAKEMODULES_INSTALL_V2_ONLY "Install only the v2 API" OFF)
51+
# CppAD is missing from the Arch repositories and CppADCodeGen is conda-forge only.
52+
jrl_option(
53+
JRL_CMAKEMODULES_ENABLE_TEST_CPPAD
54+
"Run the Findcppad test (requires CppAD)"
55+
OFF
56+
)
57+
58+
jrl_option(
59+
JRL_CMAKEMODULES_ENABLE_TEST_CPPADCG
60+
"Run the Findcppadcg test (requires CppADCodeGen)"
61+
OFF
62+
)
63+
64+
jrl_option(
65+
JRL_CMAKEMODULES_ENABLE_TEST_GMP
66+
"Run the FindGMP test (requires GMP)"
67+
OFF
68+
)
69+
70+
jrl_option(
71+
JRL_CMAKEMODULES_ENABLE_TEST_MPFR
72+
"Run the FindMPFR test (requires MPFR)"
73+
OFF
74+
)
75+
76+
jrl_option(JRL_CMAKEMODULES_INSTALL_V2_ONLY "Install only the v2 API" OFF)
5277

5378
if(JRL_CMAKEMODULES_GENERATE_API_DOC)
5479
_jrl_generate_api_doc(

flake.nix

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,63 @@
99
{ lib, ... }:
1010
{
1111
overrideAttrs = {
12-
jrl-cmakemodules = {
12+
jrl-cmakemodules = { pkgs-final, drv-prev, ... }: {
1313
src = lib.fileset.toSource {
1414
root = ./.;
1515
fileset = lib.fileset.gitTracked ./.;
1616
};
17+
cmakeFlags = drv-prev.cmakeFlags ++ [
18+
(lib.cmakeBool "JRL_CMAKEMODULES_ENABLE_TEST_CPPAD" true)
19+
(lib.cmakeBool "JRL_CMAKEMODULES_ENABLE_TEST_CPPADCG" true)
20+
(lib.cmakeBool "JRL_CMAKEMODULES_ENABLE_TEST_GMP" true)
21+
(lib.cmakeBool "JRL_CMAKEMODULES_ENABLE_TEST_MPFR" true)
22+
];
23+
checkInputs = drv-prev.checkInputs ++ [
24+
pkgs-final.cppad
25+
pkgs-final.cppadcodegen
26+
pkgs-final.gmp
27+
pkgs-final.mpfr
28+
];
1729
};
1830
jrl-cmakemodules-scripts = { pkgs-final, drv-prev, ... }: {
1931
nativeBuildInputs = drv-prev.nativeBuildInputs ++ [
2032
pkgs-final.git
2133
];
2234
};
2335
};
36+
# https://github.com/NixOS/nixpkgs/pull/390728
37+
packages.cppadcodegen =
38+
{
39+
stdenv,
40+
fetchFromGitHub,
41+
cmake,
42+
cppad,
43+
eigen,
44+
}:
45+
stdenv.mkDerivation (finalAttrs: {
46+
pname = "cppadcodegen";
47+
version = "2.5.0";
48+
49+
src = fetchFromGitHub {
50+
owner = "joaoleal";
51+
repo = "CppADCodeGen";
52+
tag = "v${finalAttrs.version}";
53+
hash = "sha256-na8o+bqzign2nSk5AQdkIVQm3CIb0oFqEneGnYKQDyg=";
54+
};
55+
56+
postPatch = ''
57+
substituteInPlace CMakeLists.txt --replace-fail \
58+
"ADD_SUBDIRECTORY(test EXCLUDE_FROM_ALL)" ""
59+
'';
60+
61+
nativeBuildInputs = [
62+
cmake
63+
];
64+
buildInputs = [
65+
cppad
66+
eigen
67+
];
68+
});
2469
}
2570
);
2671
}

0 commit comments

Comments
 (0)