Skip to content

Commit 5f4b294

Browse files
committed
compile & link to check the availability of sleefquad
1 parent 446187a commit 5f4b294

File tree

1 file changed

+42
-7
lines changed

1 file changed

+42
-7
lines changed

quaddtype/meson.build

Lines changed: 42 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,51 @@ qblas_dep = dependency('qblas', fallback: ['qblas', 'qblas_dep'])
1818
# Try to find SLEEF system-wide first, fall back to subproject if not found
1919
sleef_dep = dependency('sleef', fallback: ['sleef', 'sleef_dep'], required: false)
2020

21+
use_system_sleef = false
22+
fallback_reason = ''
23+
2124
if sleef_dep.found() and sleef_dep.type_name() != 'internal'
22-
# SLEEF found system-wide - both sleef and sleefquad are typically in the same installation
25+
# SLEEF found system-wide - verify quad-precision support
2326
cpp = meson.get_compiler('cpp')
24-
sleefquad_lib = cpp.find_library('sleefquad', required: true)
25-
sleefquad_dep = declare_dependency(
26-
dependencies: [sleef_dep, sleefquad_lib]
27-
)
28-
message('Using system-wide SLEEF installation')
27+
sleefquad_lib = cpp.find_library('sleefquad', required: false)
28+
29+
if sleefquad_lib.found()
30+
sleefquad_test_code = '''
31+
#include <sleefquad.h>
32+
33+
int main(void) {
34+
Sleef_quad q1 = Sleef_cast_from_doubleq1(1.0);
35+
Sleef_quad q2 = Sleef_cast_from_doubleq1(2.0);
36+
Sleef_quad result = Sleef_addq1_u05(q1, q2);
37+
return 0;
38+
}
39+
'''
40+
# this should compile and link
41+
quad_works = cpp.links(
42+
sleefquad_test_code,
43+
dependencies: [sleef_dep, sleefquad_lib],
44+
name: 'SLEEF quad-precision support'
45+
)
46+
47+
if quad_works
48+
sleefquad_dep = declare_dependency(
49+
dependencies: [sleef_dep, sleefquad_lib]
50+
)
51+
use_system_sleef = true
52+
else
53+
fallback_reason = 'quad-precision support is not working'
54+
endif
55+
else
56+
fallback_reason = 'sleefquad library is missing'
57+
endif
58+
else
59+
fallback_reason = 'SLEEF not found system-wide'
60+
endif
61+
62+
if use_system_sleef
63+
message('Using system-wide SLEEF installation with quad-precision support')
2964
else
30-
# Fall back to subproject which provides both dependencies
65+
warning('Falling back to SLEEF subproject: ' + fallback_reason)
3166
sleef_subproj = subproject('sleef')
3267
sleef_dep = sleef_subproj.get_variable('sleef_dep')
3368
sleefquad_dep = sleef_subproj.get_variable('sleefquad_dep')

0 commit comments

Comments
 (0)