From d22d0a23ab47c41b4710ffe2c34b3341e46ec2a4 Mon Sep 17 00:00:00 2001 From: SwayamInSync Date: Fri, 5 Sep 2025 15:16:40 +0000 Subject: [PATCH 1/5] Add QBLAS wrap dependency system --- .gitignore | 4 ++++ quaddtype/meson.build | 8 ++++---- quaddtype/numpy_quaddtype/src/quadblas_interface.cpp | 2 +- quaddtype/subprojects/packagefiles/qblas/meson.build | 8 ++++++++ quaddtype/subprojects/qblas.wrap | 8 ++++++++ 5 files changed, 25 insertions(+), 5 deletions(-) create mode 100644 quaddtype/subprojects/packagefiles/qblas/meson.build create mode 100644 quaddtype/subprojects/qblas.wrap diff --git a/.gitignore b/.gitignore index dc6d7cc2..ce3d2af0 100644 --- a/.gitignore +++ b/.gitignore @@ -137,3 +137,7 @@ compile_commands.json *.whl .DS_Store .idea/ + +# quddtype +/quaddtype/subprojects/qblas/ +.wraplock diff --git a/quaddtype/meson.build b/quaddtype/meson.build index 735db3fc..4553dd5f 100644 --- a/quaddtype/meson.build +++ b/quaddtype/meson.build @@ -25,7 +25,8 @@ incdir_numpy = run_command(py, # Add OpenMP dependency (optional, for threading) openmp_dep = dependency('openmp', required: false) -dependencies = [sleef_dep, py_dep] +qblas_dep = dependency('qblas', fallback: ['qblas', 'qblas_dep']) +dependencies = [sleef_dep, py_dep, qblas_dep] if openmp_dep.found() dependencies += openmp_dep endif @@ -66,12 +67,11 @@ configure_file( configuration: cdata ) -build_includes = include_directories('.') - +build_includes = include_directories('.') # compile time generated headers as per system includes = include_directories( [ incdir_numpy, - 'numpy_quaddtype/QBLAS/include', + # 'subprojects/qblas/include', 'numpy_quaddtype/src', ] ) diff --git a/quaddtype/numpy_quaddtype/src/quadblas_interface.cpp b/quaddtype/numpy_quaddtype/src/quadblas_interface.cpp index 65feb604..b51851a3 100644 --- a/quaddtype/numpy_quaddtype/src/quadblas_interface.cpp +++ b/quaddtype/numpy_quaddtype/src/quadblas_interface.cpp @@ -3,7 +3,7 @@ #include #ifndef DISABLE_QUADBLAS -#include "../QBLAS/include/quadblas/quadblas.hpp" +#include "../subprojects/qblas/include/quadblas/quadblas.hpp" #endif // DISABLE_QUADBLAS extern "C" { diff --git a/quaddtype/subprojects/packagefiles/qblas/meson.build b/quaddtype/subprojects/packagefiles/qblas/meson.build new file mode 100644 index 00000000..810ee5d0 --- /dev/null +++ b/quaddtype/subprojects/packagefiles/qblas/meson.build @@ -0,0 +1,8 @@ +project('qblas', version: '1.0.0') + +qblas_inc = include_directories('include') + +qblas_dep = declare_dependency( + include_directories: qblas_inc, + version: meson.project_version() +) diff --git a/quaddtype/subprojects/qblas.wrap b/quaddtype/subprojects/qblas.wrap new file mode 100644 index 00000000..7b4710ff --- /dev/null +++ b/quaddtype/subprojects/qblas.wrap @@ -0,0 +1,8 @@ +[wrap-git] +directory=qblas +url=https://github.com/SwayamInSync/QBLAS.git +revision=9468e24a02b731563eba2aee0350e9219b36c102 +patch_directory = qblas + +[provide] +qblas = qblas_dep From 9c31ce0882d7828df4583589dfbdd4587d243271 Mon Sep 17 00:00:00 2001 From: SwayamInSync Date: Fri, 5 Sep 2025 15:24:30 +0000 Subject: [PATCH 2/5] Add -fext-numeric-literals compiler flag for QBLAS compatibility --- quaddtype/meson.build | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/quaddtype/meson.build b/quaddtype/meson.build index 4553dd5f..a1214816 100644 --- a/quaddtype/meson.build +++ b/quaddtype/meson.build @@ -31,6 +31,12 @@ if openmp_dep.found() dependencies += openmp_dep endif +# compiler flags for QBLAS compatibility +if not is_windows + # QBLAS requires extended numeric literals for Q suffix support + add_project_arguments('-fext-numeric-literals', language: 'cpp') +endif + # Thread-local storage detection (borrowed from NumPy) optional_variable_attributes = [ ['thread_local', 'HAVE_THREAD_LOCAL'], # C23 From c1b35a8695d678d1821ed81697c27ef92cef1c41 Mon Sep 17 00:00:00 2001 From: SwayamInSync Date: Fri, 5 Sep 2025 15:32:14 +0000 Subject: [PATCH 3/5] Remove QBLAS submodule, replaced with Meson wrap dependency --- .gitmodules | 3 --- quaddtype/numpy_quaddtype/QBLAS | 1 - 2 files changed, 4 deletions(-) delete mode 160000 quaddtype/numpy_quaddtype/QBLAS diff --git a/.gitmodules b/.gitmodules index 523c79c8..e69de29b 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +0,0 @@ -[submodule "quaddtype/numpy_quaddtype/QBLAS"] - path = quaddtype/numpy_quaddtype/QBLAS - url = https://github.com/SwayamInSync/QBLAS diff --git a/quaddtype/numpy_quaddtype/QBLAS b/quaddtype/numpy_quaddtype/QBLAS deleted file mode 160000 index 9468e24a..00000000 --- a/quaddtype/numpy_quaddtype/QBLAS +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 9468e24a02b731563eba2aee0350e9219b36c102 From 1fc111d7391ea6f7e493d4a069a364b104a3f17f Mon Sep 17 00:00:00 2001 From: SwayamInSync Date: Fri, 5 Sep 2025 15:40:32 +0000 Subject: [PATCH 4/5] updating workflows --- .github/workflows/build_wheels.yml | 47 ++++++------------------------ .github/workflows/ci.yml | 8 ++--- 2 files changed, 11 insertions(+), 44 deletions(-) diff --git a/.github/workflows/build_wheels.yml b/.github/workflows/build_wheels.yml index ec19cdb4..77849b92 100644 --- a/.github/workflows/build_wheels.yml +++ b/.github/workflows/build_wheels.yml @@ -21,19 +21,12 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - with: - submodules: recursive - name: Set up Python uses: actions/setup-python@v4 with: python-version: ">=3.11.0" - - name: Verify QuadBLAS submodule - run: | - ls -la quaddtype/numpy_quaddtype/QBLAS/ - ls -la quaddtype/numpy_quaddtype/QBLAS/include/quadblas/ - - name: Install cibuildwheel run: pip install cibuildwheel==3.1.4 @@ -56,8 +49,8 @@ jobs: cmake --build build/ --clean-first -j cmake --install build --prefix /usr/local CIBW_ENVIRONMENT: > - CFLAGS="-I/usr/local/include -I{project}/numpy_quaddtype/QBLAS/include $CFLAGS" - CXXFLAGS="-I/usr/local/include -I{project}/numpy_quaddtype/QBLAS/include -fext-numeric-literals $CXXFLAGS" + CFLAGS="-I/usr/local/include $CFLAGS" + CXXFLAGS="-I/usr/local/include $CXXFLAGS" LDFLAGS="-L/usr/local/lib64 -L/usr/local/lib -Wl,-rpath,/usr/local/lib64 -Wl,-rpath,/usr/local/lib -fopenmp $LDFLAGS" LD_LIBRARY_PATH="/usr/local/lib64:/usr/local/lib:$LD_LIBRARY_PATH" PKG_CONFIG_PATH="/usr/local/lib64/pkgconfig:/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH" @@ -89,8 +82,6 @@ jobs: steps: - uses: actions/checkout@v3 - with: - submodules: recursive - name: Set up Python uses: actions/setup-python@v4 @@ -123,11 +114,6 @@ jobs: cmake --build build/ --clean-first -j sudo cmake --install build --prefix /usr/local - - name: Verify QuadBLAS submodule - run: | - ls -la quaddtype/numpy_quaddtype/QBLAS/ - ls -la quaddtype/numpy_quaddtype/QBLAS/include/quadblas/ - - name: Installing Python dependencies run: | pip install -U pip @@ -143,8 +129,8 @@ jobs: CIBW_ENVIRONMENT: > MACOSX_DEPLOYMENT_TARGET="${{ matrix.os == 'macos-13' && '13.0' || '14.0' }}" DYLD_LIBRARY_PATH="/usr/local/lib:$DYLD_LIBRARY_PATH" - CFLAGS="-I/usr/local/include -I{project}/numpy_quaddtype/QBLAS/include $CFLAGS" - CXXFLAGS="-I/usr/local/include -I{project}/numpy_quaddtype/QBLAS/include $CXXFLAGS" + CFLAGS="-I/usr/local/include $CFLAGS" + CXXFLAGS="-I/usr/local/include $CXXFLAGS" LDFLAGS="-L/usr/local/lib $LDFLAGS" PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH" CIBW_REPAIR_WHEEL_COMMAND: > @@ -176,8 +162,6 @@ jobs: steps: - uses: actions/checkout@v3 - with: - submodules: recursive - name: Setup MSVC uses: ilammy/msvc-dev-cmd@v1 @@ -193,12 +177,6 @@ jobs: - name: Install CMake uses: lukka/get-cmake@latest - - name: Verify QuadBLAS submodule - shell: pwsh - run: | - Get-ChildItem quaddtype/numpy_quaddtype/QBLAS/ - Get-ChildItem quaddtype/numpy_quaddtype/QBLAS/include/quadblas/ - - name: Clone and Build SLEEF shell: pwsh run: | @@ -226,11 +204,11 @@ jobs: CIBW_BEFORE_BUILD: | pip install meson meson-python ninja numpy CIBW_ENVIRONMENT: > - INCLUDE="C:/sleef/include;{project}/numpy_quaddtype/QBLAS/include;$INCLUDE" + INCLUDE="C:/sleef/include;$INCLUDE" LIB="C:/sleef/lib;$LIB" PATH="C:/sleef/bin;$PATH" - CFLAGS="/IC:/sleef/include /I{project}/numpy_quaddtype/QBLAS/include /DDISABLE_QUADBLAS $CFLAGS" - CXXFLAGS="/IC:/sleef/include /I{project}/numpy_quaddtype/QBLAS/include /DDISABLE_QUADBLAS $CXXFLAGS" + CFLAGS="/IC:/sleef/include /DDISABLE_QUADBLAS $CFLAGS" + CXXFLAGS="/IC:/sleef/include /DDISABLE_QUADBLAS $CXXFLAGS" LDFLAGS="C:/sleef/lib/sleef.lib C:/sleef/lib/sleefquad.lib $LDFLAGS" CIBW_REPAIR_WHEEL_COMMAND: 'delvewheel repair -w {dest_dir} {wheel} --add-path C:\sleef\bin' CIBW_TEST_COMMAND: | @@ -258,19 +236,12 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - with: - submodules: recursive - name: Set up Python uses: actions/setup-python@v4 with: python-version: ">=3.11.0" - - name: Verify QuadBLAS submodule - run: | - ls -la quaddtype/numpy_quaddtype/QBLAS/ - ls -la quaddtype/numpy_quaddtype/QBLAS/include/quadblas/ - - name: Install system dependencies run: | sudo apt-get update -y @@ -294,8 +265,8 @@ jobs: - name: Build SDist env: - CFLAGS: "-I/usr/local/include -I$(pwd)/numpy_quaddtype/QBLAS/include" - CXXFLAGS: "-I/usr/local/include -I$(pwd)/numpy_quaddtype/QBLAS/include -fext-numeric-literals" + CFLAGS: "-I/usr/local/include" + CXXFLAGS: "-I/usr/local/include" LDFLAGS: "-L/usr/local/lib64 -L/usr/local/lib -Wl,-rpath,/usr/local/lib64 -Wl,-rpath,/usr/local/lib -fopenmp" LD_LIBRARY_PATH: "/usr/local/lib64:/usr/local/lib:$LD_LIBRARY_PATH" PKG_CONFIG_PATH: "/usr/local/lib64/pkgconfig:/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH" diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 542093c5..b20b8211 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -73,13 +73,9 @@ jobs: - name: Install quaddtype working-directory: quaddtype run: | - # Initialize submodules first - git submodule update --init --recursive - ls -la numpy_quaddtype/QBLAS/ - # Set environment variables with proper export and correct paths - export CFLAGS="-I/usr/local/include -I$(pwd)/numpy_quaddtype/QBLAS/include" - export CXXFLAGS="-I/usr/local/include -I$(pwd)/numpy_quaddtype/QBLAS/include -fext-numeric-literals" + export CFLAGS="-I/usr/local/include" + export CXXFLAGS="-I/usr/local/include" export LDFLAGS="-L/usr/local/lib64 -L/usr/local/lib -Wl,-rpath,/usr/local/lib64 -Wl,-rpath,/usr/local/lib -fopenmp" export LD_LIBRARY_PATH="/usr/local/lib64:/usr/local/lib:$LD_LIBRARY_PATH" From 43a7c84fd8ecf0585a6073f7649f65ee7cda300b Mon Sep 17 00:00:00 2001 From: SwayamInSync Date: Fri, 5 Sep 2025 15:47:10 +0000 Subject: [PATCH 5/5] numeric literal only for gcc I guess --- quaddtype/meson.build | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/quaddtype/meson.build b/quaddtype/meson.build index a1214816..ce7bb2d7 100644 --- a/quaddtype/meson.build +++ b/quaddtype/meson.build @@ -23,7 +23,7 @@ incdir_numpy = run_command(py, check : true ).stdout().strip() -# Add OpenMP dependency (optional, for threading) +# OpenMP dependency (optional, for threading) openmp_dep = dependency('openmp', required: false) qblas_dep = dependency('qblas', fallback: ['qblas', 'qblas_dep']) dependencies = [sleef_dep, py_dep, qblas_dep] @@ -31,10 +31,13 @@ if openmp_dep.found() dependencies += openmp_dep endif -# compiler flags for QBLAS compatibility +# compiler flags for QBLAS compatibility if not is_windows # QBLAS requires extended numeric literals for Q suffix support - add_project_arguments('-fext-numeric-literals', language: 'cpp') + # if compiler supports (usually gcc) + if cpp.has_argument('-fext-numeric-literals') + add_project_arguments('-fext-numeric-literals', language: 'cpp') + endif endif # Thread-local storage detection (borrowed from NumPy)