@@ -60,7 +60,8 @@ struct block_iq4_nlx4 {
6060
6161static_assert (sizeof (block_iq4_nlx4) == 4 * sizeof (ggml_half) + QK4_NL * 2 , " wrong iq4_nlx4 block size/padding" );
6262
63- #if defined(__cplusplus)
63+ // Clang always mangles the alias name when compiling a C++ source file
64+ #if defined(__cplusplus) && !(defined(__GNUC__) && defined(__clang__))
6465extern " C" {
6566#endif
6667
@@ -78,6 +79,12 @@ void ggml_gemm_q4_0_8x8_q8_0(int n, float * GGML_RESTRICT s, size_t bs, const vo
7879void ggml_gemm_q4_K_8x8_q8_K (int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, const void * GGML_RESTRICT vy, int nr, int nc);
7980void ggml_gemm_iq4_nl_4x4_q8_0 (int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, const void * GGML_RESTRICT vy, int nr, int nc);
8081
82+ #if defined(__cplusplus) && !(defined(__GNUC__) && defined(__clang__))
83+ } // extern "C"
84+ #endif
85+
86+ extern " C" {
87+
8188// Native implementations
8289void ggml_quantize_mat_q8_0_4x4_generic (const float * GGML_RESTRICT x, void * GGML_RESTRICT vy, int64_t k);
8390void ggml_quantize_mat_q8_0_4x8_generic (const float * GGML_RESTRICT x, void * GGML_RESTRICT vy, int64_t k);
@@ -93,6 +100,4 @@ void ggml_gemm_q4_0_8x8_q8_0_generic(int n, float * GGML_RESTRICT s, size_t bs,
93100void ggml_gemm_q4_K_8x8_q8_K_generic (int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, const void * GGML_RESTRICT vy, int nr, int nc);
94101void ggml_gemm_iq4_nl_4x4_q8_0_generic (int n, float * GGML_RESTRICT s, size_t bs, const void * GGML_RESTRICT vx, const void * GGML_RESTRICT vy, int nr, int nc);
95102
96- #if defined(__cplusplus)
97- } // extern "C"
98- #endif
103+ }
0 commit comments