Skip to content

Commit 5c284f6

Browse files
committed
core: Use template instantiation to avoid to build all exposeType in the same translation unit
1 parent 323a284 commit 5c284f6

File tree

4 files changed

+29
-1
lines changed

4 files changed

+29
-1
lines changed

Diff for: CMakeLists.txt

+2
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,8 @@ SET(${PROJECT_NAME}_HEADERS
6767

6868
SET(${PROJECT_NAME}_SOURCES
6969
src/cppad.cpp
70+
src/expose-type-double.cpp
71+
src/expose-type-double-row-major.cpp
7072
)
7173

7274
IF(BUILD_WITH_CPPAD_CODEGEN_BINDINGS)

Diff for: src/cppad.cpp

+9-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2021 INRIA
2+
* Copyright 2021-2024 INRIA
33
*/
44

55
#ifdef PYCPPAD_WITH_CPPAD_CODEGEN_BINDINGS
@@ -9,6 +9,14 @@
99
#include "pycppad/cppad.hpp"
1010
#include "pycppad/cppad-scalar.hpp"
1111

12+
13+
// Use explicit template instantiation to build these
14+
// function in different translation unit and avoid consuming
15+
// too much memory on Windows
16+
typedef ::CppAD::AD<double> ADScalar;
17+
extern template void eigenpy::exposeType<ADScalar>();
18+
extern template void eigenpy::exposeType<ADScalar,Eigen::RowMajor>();
19+
1220
namespace pycppad
1321
{
1422

Diff for: src/expose-type-double-row-major.cpp

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
/*
2+
* Copyright 2024 INRIA
3+
*/
4+
5+
#include "pycppad/cppad.hpp"
6+
#include "pycppad/cppad-scalar.hpp"
7+
8+
typedef ::CppAD::AD<double> ADScalar;
9+
template void eigenpy::exposeType<ADScalar, Eigen::RowMajor>();

Diff for: src/expose-type-double.cpp

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
/*
2+
* Copyright 2024 INRIA
3+
*/
4+
5+
#include "pycppad/cppad.hpp"
6+
#include "pycppad/cppad-scalar.hpp"
7+
8+
typedef ::CppAD::AD<double> ADScalar;
9+
template void eigenpy::exposeType<ADScalar>();

0 commit comments

Comments
 (0)