Mercurial > octave
changeset 29247:d83ae0145030
Export template class instantiations with clang (patch #8919).
* Array.cc (INSTANTIATE_ARRAY), MArray.cc (INSTANTIATE_MARRAY),
Sparse.cc (INSTANTIATE_SPARSE): Add API tags to template class instantiations
with clang.
* MArray-C.cc, MArray-d.cc, MArray-f.cc, MArray-fC.cc, MArray-i.cc, MArray-s.cc:
Use new macro function for template class instantiation.
* Sparse-b.cc, Sparse-C.cc, Sparse-d.cc: Remove API argument.
author | Markus Mützel <markus.muetzel@gmx.de> |
---|---|
date | Sat, 02 Jan 2021 16:36:09 +0100 |
parents | 1b2845593788 |
children | 70ae19d4e67b |
files | liboctave/array/Array.cc liboctave/array/MArray-C.cc liboctave/array/MArray-d.cc liboctave/array/MArray-f.cc liboctave/array/MArray-fC.cc liboctave/array/MArray-i.cc liboctave/array/MArray-s.cc liboctave/array/MArray.cc liboctave/array/Sparse-C.cc liboctave/array/Sparse-b.cc liboctave/array/Sparse-d.cc liboctave/array/Sparse.cc |
diffstat | 12 files changed, 46 insertions(+), 26 deletions(-) [+] |
line wrap: on
line diff
--- a/liboctave/array/Array.cc Sat Jan 02 15:46:16 2021 +0100 +++ b/liboctave/array/Array.cc Sat Jan 02 16:36:09 2021 +0100 @@ -2764,9 +2764,15 @@ T::__xXxXx__ (); } -#define INSTANTIATE_ARRAY(T, API) \ - template <> API void Array<T>::instantiation_guard () { } \ - template class Array<T> +#if defined (__clang__) +# define INSTANTIATE_ARRAY(T, API) \ + template <> API void Array<T>::instantiation_guard () { } \ + template class API Array<T> +#else +# define INSTANTIATE_ARRAY(T, API) \ + template <> API void Array<T>::instantiation_guard () { } \ + template class Array<T> +#endif // FIXME: is this used?
--- a/liboctave/array/MArray-C.cc Sat Jan 02 15:46:16 2021 +0100 +++ b/liboctave/array/MArray-C.cc Sat Jan 02 16:36:09 2021 +0100 @@ -34,7 +34,7 @@ #include "MArray.h" #include "MArray.cc" -template class MArray<Complex>; +INSTANTIATE_MARRAY (Complex); INSTANTIATE_MARRAY_FRIENDS (Complex, OCTAVE_API)
--- a/liboctave/array/MArray-d.cc Sat Jan 02 15:46:16 2021 +0100 +++ b/liboctave/array/MArray-d.cc Sat Jan 02 16:36:09 2021 +0100 @@ -32,7 +32,7 @@ #include "MArray.h" #include "MArray.cc" -template class MArray<double>; +INSTANTIATE_MARRAY (double); INSTANTIATE_MARRAY_FRIENDS (double, OCTAVE_API)
--- a/liboctave/array/MArray-f.cc Sat Jan 02 15:46:16 2021 +0100 +++ b/liboctave/array/MArray-f.cc Sat Jan 02 16:36:09 2021 +0100 @@ -32,7 +32,7 @@ #include "MArray.h" #include "MArray.cc" -template class MArray<float>; +INSTANTIATE_MARRAY (float); INSTANTIATE_MARRAY_FRIENDS (float, OCTAVE_API)
--- a/liboctave/array/MArray-fC.cc Sat Jan 02 15:46:16 2021 +0100 +++ b/liboctave/array/MArray-fC.cc Sat Jan 02 16:36:09 2021 +0100 @@ -34,7 +34,7 @@ #include "MArray.h" #include "MArray.cc" -template class MArray<FloatComplex>; +INSTANTIATE_MARRAY (FloatComplex); INSTANTIATE_MARRAY_FRIENDS (FloatComplex, OCTAVE_API)
--- a/liboctave/array/MArray-i.cc Sat Jan 02 15:46:16 2021 +0100 +++ b/liboctave/array/MArray-i.cc Sat Jan 02 16:36:09 2021 +0100 @@ -34,9 +34,9 @@ #include "MArray.h" #include "MArray.cc" -template class MArray<int>; +INSTANTIATE_MARRAY (int); #if defined (OCTAVE_ENABLE_64) -template class MArray<int64_t>; +INSTANTIATE_MARRAY (int64_t); #endif INSTANTIATE_MARRAY_FRIENDS (int, OCTAVE_API) @@ -44,20 +44,20 @@ INSTANTIATE_MARRAY_FRIENDS (int64_t, OCTAVE_API) #endif -template class MArray<octave_int8>; -template class MArray<octave_int16>; -template class MArray<octave_int32>; -template class MArray<octave_int64>; +INSTANTIATE_MARRAY (octave_int8); +INSTANTIATE_MARRAY (octave_int16); +INSTANTIATE_MARRAY (octave_int32); +INSTANTIATE_MARRAY (octave_int64); INSTANTIATE_MARRAY_FRIENDS (octave_int8, OCTAVE_API) INSTANTIATE_MARRAY_FRIENDS (octave_int16, OCTAVE_API) INSTANTIATE_MARRAY_FRIENDS (octave_int32, OCTAVE_API) INSTANTIATE_MARRAY_FRIENDS (octave_int64, OCTAVE_API) -template class MArray<octave_uint8>; -template class MArray<octave_uint16>; -template class MArray<octave_uint32>; -template class MArray<octave_uint64>; +INSTANTIATE_MARRAY (octave_uint8); +INSTANTIATE_MARRAY (octave_uint16); +INSTANTIATE_MARRAY (octave_uint32); +INSTANTIATE_MARRAY (octave_uint64); INSTANTIATE_MARRAY_FRIENDS (octave_uint8, OCTAVE_API) INSTANTIATE_MARRAY_FRIENDS (octave_uint16, OCTAVE_API)
--- a/liboctave/array/MArray-s.cc Sat Jan 02 15:46:16 2021 +0100 +++ b/liboctave/array/MArray-s.cc Sat Jan 02 16:36:09 2021 +0100 @@ -32,7 +32,7 @@ #include "MArray.h" #include "MArray.cc" -template class MArray<short>; +INSTANTIATE_MARRAY (short); INSTANTIATE_MARRAY_FRIENDS (short, OCTAVE_API)
--- a/liboctave/array/MArray.cc Sat Jan 02 15:46:16 2021 +0100 +++ b/liboctave/array/MArray.cc Sat Jan 02 16:36:09 2021 +0100 @@ -359,3 +359,9 @@ { return do_mx_unary_op<T, T> (a, mx_inline_uminus); } + +#if defined (__clang__) +# define INSTANTIATE_MARRAY(T) template class OCTAVE_API MArray<T> +#else +# define INSTANTIATE_MARRAY(T) template class MArray<T> +#endif
--- a/liboctave/array/Sparse-C.cc Sat Jan 02 15:46:16 2021 +0100 +++ b/liboctave/array/Sparse-C.cc Sat Jan 02 16:36:09 2021 +0100 @@ -61,7 +61,7 @@ || ((xabs (a) == xabs (b)) && (arg (a) > arg (b)))); } -INSTANTIATE_SPARSE (Complex, OCTAVE_API); +INSTANTIATE_SPARSE (Complex); #if 0 template std::ostream& operator << (std::ostream&, const Sparse<Complex>&);
--- a/liboctave/array/Sparse-b.cc Sat Jan 02 15:46:16 2021 +0100 +++ b/liboctave/array/Sparse-b.cc Sat Jan 02 16:36:09 2021 +0100 @@ -40,7 +40,7 @@ return false; } -INSTANTIATE_SPARSE (bool, ); +INSTANTIATE_SPARSE (bool); #if 0 template std::ostream& operator << (std::ostream&, const Sparse<bool>&);
--- a/liboctave/array/Sparse-d.cc Sat Jan 02 15:46:16 2021 +0100 +++ b/liboctave/array/Sparse-d.cc Sat Jan 02 16:36:09 2021 +0100 @@ -49,7 +49,7 @@ return (octave::math::isnan (a) || (a > b)); } -INSTANTIATE_SPARSE (double, OCTAVE_API); +INSTANTIATE_SPARSE (double); #if 0 template std::ostream& operator << (std::ostream&, const Sparse<double>&);
--- a/liboctave/array/Sparse.cc Sat Jan 02 15:46:16 2021 +0100 +++ b/liboctave/array/Sparse.cc Sat Jan 02 16:36:09 2021 +0100 @@ -3068,8 +3068,16 @@ << prefix << "rep->count: " << rep->count << "\n"; } -#define INSTANTIATE_SPARSE(T, API) \ - template class API Sparse<T>; \ - template API std::istream& \ - read_sparse_matrix<T> (std::istream& is, Sparse<T>& a, \ - T (*read_fcn) (std::istream&)); +#if defined (__clang__) +# define INSTANTIATE_SPARSE(T) \ + template class OCTAVE_API Sparse<T>; \ + template OCTAVE_API std::istream& \ + read_sparse_matrix<T> (std::istream& is, Sparse<T>& a, \ + T (*read_fcn) (std::istream&)); +#else +# define INSTANTIATE_SPARSE(T) \ + template class Sparse<T>; \ + template OCTAVE_API std::istream& \ + read_sparse_matrix<T> (std::istream& is, Sparse<T>& a, \ + T (*read_fcn) (std::istream&)); +#endif