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