From 3376f0523cd7241bed5868d9fab0a2a5a51797b3 Mon Sep 17 00:00:00 2001 From: swayaminsync Date: Mon, 13 Oct 2025 18:29:20 +0530 Subject: [PATCH 1/4] make sleef as runtime dep --- quaddtype/meson.build | 6 +++--- quaddtype/reinstall.sh | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/quaddtype/meson.build b/quaddtype/meson.build index c2ef9092..01c1bf20 100644 --- a/quaddtype/meson.build +++ b/quaddtype/meson.build @@ -15,9 +15,9 @@ endif qblas_dep = dependency('qblas', fallback: ['qblas', 'qblas_dep']) -sleef_subproj = subproject('sleef', required: true) -sleef_dep = sleef_subproj.get_variable('sleef_dep') -sleefquad_dep = sleef_subproj.get_variable('sleefquad_dep') +# Try to find SLEEF system-wide first, fall back to subproject if not found +sleef_dep = dependency('sleef', fallback: ['sleef', 'sleef_dep']) +sleefquad_dep = dependency('sleefquad', fallback: ['sleef', 'sleefquad_dep']) incdir_numpy = run_command(py, ['-c', 'import numpy; print(numpy.get_include())'], diff --git a/quaddtype/reinstall.sh b/quaddtype/reinstall.sh index 89e19194..9144f05b 100755 --- a/quaddtype/reinstall.sh +++ b/quaddtype/reinstall.sh @@ -11,4 +11,4 @@ fi # export CFLAGS="-g -O0" # export CXXFLAGS="-g -O0" python -m pip uninstall -y numpy_quaddtype -python -m pip install . -v --no-build-isolation 2>&1 | tee build_log.txt \ No newline at end of file +python -m pip install . -vv --no-build-isolation 2>&1 | tee build_log.txt From ea09394aa08dd4ab9ebd701017b37ed0b9a2fb26 Mon Sep 17 00:00:00 2001 From: swayaminsync Date: Mon, 13 Oct 2025 19:11:01 +0530 Subject: [PATCH 2/4] libsleefquad comes from sleef --- quaddtype/meson.build | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/quaddtype/meson.build b/quaddtype/meson.build index 01c1bf20..d0bc2ce3 100644 --- a/quaddtype/meson.build +++ b/quaddtype/meson.build @@ -16,8 +16,24 @@ endif qblas_dep = dependency('qblas', fallback: ['qblas', 'qblas_dep']) # Try to find SLEEF system-wide first, fall back to subproject if not found -sleef_dep = dependency('sleef', fallback: ['sleef', 'sleef_dep']) -sleefquad_dep = dependency('sleefquad', fallback: ['sleef', 'sleefquad_dep']) +sleef_dep = dependency('sleef', fallback: ['sleef', 'sleef_dep'], required: false) + +if sleef_dep.found() and sleef_dep.type_name() != 'internal' + # SLEEF found system-wide - both sleef and sleefquad are typically in the same installation + # Create sleefquad dependency manually since it's not always exposed as a separate component + cpp = meson.get_compiler('cpp') + sleefquad_lib = cpp.find_library('sleefquad', required: true) + sleefquad_dep = declare_dependency( + dependencies: [sleef_dep, sleefquad_lib] + ) + message('Using system-wide SLEEF installation') +else + # Fall back to subproject which provides both dependencies + sleef_subproj = subproject('sleef') + sleef_dep = sleef_subproj.get_variable('sleef_dep') + sleefquad_dep = sleef_subproj.get_variable('sleefquad_dep') + message('Using SLEEF subproject') +endif incdir_numpy = run_command(py, ['-c', 'import numpy; print(numpy.get_include())'], From 446187a007f0ce08c25f3a5b74a5e11e24ec95a9 Mon Sep 17 00:00:00 2001 From: swayaminsync Date: Mon, 13 Oct 2025 19:35:10 +0530 Subject: [PATCH 3/4] syntax fix --- quaddtype/meson.build | 1 - 1 file changed, 1 deletion(-) diff --git a/quaddtype/meson.build b/quaddtype/meson.build index d0bc2ce3..403d3bc3 100644 --- a/quaddtype/meson.build +++ b/quaddtype/meson.build @@ -20,7 +20,6 @@ sleef_dep = dependency('sleef', fallback: ['sleef', 'sleef_dep'], required: fals if sleef_dep.found() and sleef_dep.type_name() != 'internal' # SLEEF found system-wide - both sleef and sleefquad are typically in the same installation - # Create sleefquad dependency manually since it's not always exposed as a separate component cpp = meson.get_compiler('cpp') sleefquad_lib = cpp.find_library('sleefquad', required: true) sleefquad_dep = declare_dependency( From 5f4b2943199be0ab83a33e64458736066ef7638d Mon Sep 17 00:00:00 2001 From: swayaminsync Date: Mon, 13 Oct 2025 21:31:58 +0530 Subject: [PATCH 4/4] compile & link to check the availability of sleefquad --- quaddtype/meson.build | 49 ++++++++++++++++++++++++++++++++++++------- 1 file changed, 42 insertions(+), 7 deletions(-) diff --git a/quaddtype/meson.build b/quaddtype/meson.build index 403d3bc3..82fa4bc8 100644 --- a/quaddtype/meson.build +++ b/quaddtype/meson.build @@ -18,16 +18,51 @@ qblas_dep = dependency('qblas', fallback: ['qblas', 'qblas_dep']) # Try to find SLEEF system-wide first, fall back to subproject if not found sleef_dep = dependency('sleef', fallback: ['sleef', 'sleef_dep'], required: false) +use_system_sleef = false +fallback_reason = '' + if sleef_dep.found() and sleef_dep.type_name() != 'internal' - # SLEEF found system-wide - both sleef and sleefquad are typically in the same installation + # SLEEF found system-wide - verify quad-precision support cpp = meson.get_compiler('cpp') - sleefquad_lib = cpp.find_library('sleefquad', required: true) - sleefquad_dep = declare_dependency( - dependencies: [sleef_dep, sleefquad_lib] - ) - message('Using system-wide SLEEF installation') + sleefquad_lib = cpp.find_library('sleefquad', required: false) + + if sleefquad_lib.found() + sleefquad_test_code = ''' + #include + + int main(void) { + Sleef_quad q1 = Sleef_cast_from_doubleq1(1.0); + Sleef_quad q2 = Sleef_cast_from_doubleq1(2.0); + Sleef_quad result = Sleef_addq1_u05(q1, q2); + return 0; + } + ''' + # this should compile and link + quad_works = cpp.links( + sleefquad_test_code, + dependencies: [sleef_dep, sleefquad_lib], + name: 'SLEEF quad-precision support' + ) + + if quad_works + sleefquad_dep = declare_dependency( + dependencies: [sleef_dep, sleefquad_lib] + ) + use_system_sleef = true + else + fallback_reason = 'quad-precision support is not working' + endif + else + fallback_reason = 'sleefquad library is missing' + endif +else + fallback_reason = 'SLEEF not found system-wide' +endif + +if use_system_sleef + message('Using system-wide SLEEF installation with quad-precision support') else - # Fall back to subproject which provides both dependencies + warning('Falling back to SLEEF subproject: ' + fallback_reason) sleef_subproj = subproject('sleef') sleef_dep = sleef_subproj.get_variable('sleef_dep') sleefquad_dep = sleef_subproj.get_variable('sleefquad_dep')