From d996e98329e473f0a5e863d4d32ae30e825fede7 Mon Sep 17 00:00:00 2001 From: Juniper Tyree Date: Tue, 6 Jan 2026 17:52:48 +0200 Subject: [PATCH 1/3] Add numpy-quaddtype package --- packages/libsleef/meta.yaml | 67 ++++++++ .../libsleef/patches/0001-no-x86intrin.patch | 153 ++++++++++++++++++ .../libsleef/patches/0002-no-mfpmatch.patch | 19 +++ packages/libsleef/patches/0003-no-mfma.patch | 13 ++ packages/libsleef/patches/0004-no-cpuid.patch | 82 ++++++++++ packages/numpy-quaddtype/meta.yaml | 21 +++ 6 files changed, 355 insertions(+) create mode 100644 packages/libsleef/meta.yaml create mode 100644 packages/libsleef/patches/0001-no-x86intrin.patch create mode 100644 packages/libsleef/patches/0002-no-mfpmatch.patch create mode 100644 packages/libsleef/patches/0003-no-mfma.patch create mode 100644 packages/libsleef/patches/0004-no-cpuid.patch create mode 100644 packages/numpy-quaddtype/meta.yaml diff --git a/packages/libsleef/meta.yaml b/packages/libsleef/meta.yaml new file mode 100644 index 00000000..36fe3c8c --- /dev/null +++ b/packages/libsleef/meta.yaml @@ -0,0 +1,67 @@ +package: + name: libsleef + version: "3.8" + tag: + - library + - static_library +source: + sha256: a12ccd50f57083c530e1c76f10d52865defbd19fc9e2c85b483493065709874a + url: https://github.com/shibatch/sleef/archive/refs/tags/3.8.tar.gz + patches: + - patches/0001-no-x86intrin.patch + - patches/0002-no-mfpmatch.patch + - patches/0003-no-mfma.patch + - patches/0004-no-cpuid.patch +build: + type: static_library + script: | + mkdir build-native + cd build-native + + export NATIVE_BUILD_DIR=`pwd` + + BACKUP_TOOLCHAIN=${CMAKE_TOOLCHAIN_FILE} + unset CMAKE_TOOLCHAIN_FILE + + cmake \ + -DCMAKE_BUILD_TYPE=Release \ + -DSLEEF_BUILD_QUAD=ON \ + -DSLEEF_BUILD_SHARED_LIBS=OFF \ + -DSLEEF_BUILD_TESTS=OFF \ + -DSLEEF_BUILD_INLINE_HEADERS=OFF \ + -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ + ../ + + make -j ${PYODIDE_JOBS:-3} + + export CMAKE_TOOLCHAIN_FILE=${BACKUP_TOOLCHAIN} + + cd .. + mkdir build + cd build + + emcmake cmake \ + -DCMAKE_BUILD_TYPE=Release \ + -DSLEEF_BUILD_QUAD=ON \ + -DSLEEF_BUILD_SHARED_LIBS=OFF \ + -DSLEEF_BUILD_TESTS=OFF \ + -DSLEEF_BUILD_INLINE_HEADERS=OFF \ + -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ + -DCMAKE_INSTALL_PREFIX=${WASM_LIBRARY_DIR} \ + -DNATIVE_BUILD_DIR=${NATIVE_BUILD_DIR} \ + -DCMAKE_C_FLAGS="-msimd128 -msse2" \ + -DCMAKE_CXX_FLAGS="-msimd128 -msse2" \ + -DSLEEF_DISABLE_FLOAT128=ON \ + ../ + + # -DSLEEF_ENABLE_SSE2=ON \ + # -DSLEEF_ENABLE_AVX2=OFF \ + + emmake make -j ${PYODIDE_JOBS:-3} + emmake make install + + mkdir -p dist + cp ${WASM_LIBRARY_DIR}/lib/libsleef* dist/ +about: + home: https://github.com/shibatch/sleef + license: Boost Software License - Version 1.0 diff --git a/packages/libsleef/patches/0001-no-x86intrin.patch b/packages/libsleef/patches/0001-no-x86intrin.patch new file mode 100644 index 00000000..430695e0 --- /dev/null +++ b/packages/libsleef/patches/0001-no-x86intrin.patch @@ -0,0 +1,153 @@ +diff --git a/Configure.cmake b/Configure.cmake +index 7c64ce9..0740b9a 100644 +--- a/Configure.cmake ++++ b/Configure.cmake +@@ -386,7 +386,7 @@ if(SLEEF_ARCH_X86 AND NOT SLEEF_DISABLE_SSE2) + #if defined(_MSC_VER) + #include + #else +- #include ++ #include + #endif + int main() { + __m128d r = _mm_mul_pd(_mm_set1_pd(1), _mm_set1_pd(2)); }" +@@ -408,7 +408,7 @@ if(SLEEF_ARCH_X86 AND NOT SLEEF_DISABLE_SSE4) + #if defined(_MSC_VER) + #include + #else +- #include ++ #include + #endif + int main() { + __m128d r = _mm_floor_sd(_mm_set1_pd(1), _mm_set1_pd(2)); }" +@@ -430,7 +430,7 @@ if(SLEEF_ARCH_X86 AND NOT SLEEF_DISABLE_AVX) + #if defined(_MSC_VER) + #include + #else +- #include ++ #include + #endif + int main() { + __m256d r = _mm256_add_pd(_mm256_set1_pd(1), _mm256_set1_pd(2)); +@@ -452,7 +452,7 @@ if(SLEEF_ARCH_X86 AND NOT SLEEF_DISABLE_FMA4) + #if defined(_MSC_VER) + #include + #else +- #include ++ #include + #endif + int main() { + __m256d r = _mm256_macc_pd(_mm256_set1_pd(1), _mm256_set1_pd(2), _mm256_set1_pd(3)); }" +@@ -474,7 +474,7 @@ if(SLEEF_ARCH_X86 AND NOT SLEEF_DISABLE_AVX2) + #if defined(_MSC_VER) + #include + #else +- #include ++ #include + #endif + int main() { + __m256i r = _mm256_abs_epi32(_mm256_set1_epi32(1)); }" +@@ -501,7 +501,7 @@ if(SLEEF_ARCH_X86 AND NOT SLEEF_DISABLE_AVX512F) + #if defined(_MSC_VER) + #include + #else +- #include ++ #include + #endif + __m512 addConstant(__m512 arg) { + return _mm512_add_ps(arg, _mm512_set1_ps(1.f)); +diff --git a/src/arch/helperavx.h b/src/arch/helperavx.h +index 00fdaf9..6a32d2d 100644 +--- a/src/arch/helperavx.h ++++ b/src/arch/helperavx.h +@@ -42,7 +42,7 @@ + #if defined(_MSC_VER) + #include + #else +-#include ++#include + #endif + + #include +diff --git a/src/arch/helperavx2.h b/src/arch/helperavx2.h +index 38c21b4..fa047d5 100644 +--- a/src/arch/helperavx2.h ++++ b/src/arch/helperavx2.h +@@ -40,7 +40,7 @@ + #if defined(_MSC_VER) + #include + #else +-#include ++#include + #endif + + #include +diff --git a/src/arch/helperavx2_128.h b/src/arch/helperavx2_128.h +index 97258cd..8db24fc 100644 +--- a/src/arch/helperavx2_128.h ++++ b/src/arch/helperavx2_128.h +@@ -40,7 +40,7 @@ + #if defined(_MSC_VER) + #include + #else +-#include ++#include + #endif + + #include +diff --git a/src/arch/helperavx512f.h b/src/arch/helperavx512f.h +index dcf8ead..2e27d2f 100644 +--- a/src/arch/helperavx512f.h ++++ b/src/arch/helperavx512f.h +@@ -43,7 +43,7 @@ + #if defined(_MSC_VER) + #include + #else +-#include ++#include + #endif + + #include +diff --git a/src/arch/helpersse2.h b/src/arch/helpersse2.h +index ae98add..34b5759 100644 +--- a/src/arch/helpersse2.h ++++ b/src/arch/helpersse2.h +@@ -46,7 +46,7 @@ + #if defined(_MSC_VER) + #include + #else +-#include ++#include + #endif + + #include +diff --git a/src/common/misc.h b/src/common/misc.h +index 6b571cb..8deed5c 100644 +--- a/src/common/misc.h ++++ b/src/common/misc.h +@@ -278,9 +278,7 @@ typedef struct { + #define LIKELY(condition) (condition) + #define UNLIKELY(condition) (condition) + +-#if (defined(__GNUC__) || defined(__CLANG__)) && (defined(__i386__) || defined(__x86_64__)) && !defined(SLEEF_GENHEADER) +-#include +-#endif ++#include + + #define SLEEF_INFINITY (1e+300 * 1e+300) + #define SLEEF_NAN (SLEEF_INFINITY - SLEEF_INFINITY) +diff --git a/src/libm/sleeflibm_header.h.org.in b/src/libm/sleeflibm_header.h.org.in +index 66d88db..bdbd23f 100644 +--- a/src/libm/sleeflibm_header.h.org.in ++++ b/src/libm/sleeflibm_header.h.org.in +@@ -47,9 +47,7 @@ + #define SLEEF_IMPORT + #endif // #if (defined(__MINGW32__) || defined(__MINGW64__) || defined(__CYGWIN__) || defined(_MSC_VER)) && !defined(SLEEF_STATIC_LIBS) + +-#if (defined(__GNUC__) || defined(__CLANG__)) && (defined(__i386__) || defined(__x86_64__)) +-#include +-#endif ++#include + + #if (defined(_MSC_VER)) + #include diff --git a/packages/libsleef/patches/0002-no-mfpmatch.patch b/packages/libsleef/patches/0002-no-mfpmatch.patch new file mode 100644 index 00000000..783163b8 --- /dev/null +++ b/packages/libsleef/patches/0002-no-mfpmatch.patch @@ -0,0 +1,19 @@ +diff --git a/Configure.cmake b/Configure.cmake +index 7c64ce9..06e01da 100644 +--- a/Configure.cmake ++++ b/Configure.cmake +@@ -196,10 +196,10 @@ if(CMAKE_C_COMPILER_ID MATCHES "(GNU|Clang)") + set(FLAGS_FASTMATH "-ffast-math") + set(FLAGS_NOSTRICTALIASING "-fno-strict-aliasing") + +- if (SLEEF_ARCH_X86 AND SLEEF_ARCH_32BIT) +- string(CONCAT FLAGS_STRICTMATH ${FLAGS_STRICTMATH} " -msse2 -mfpmath=sse") +- string(CONCAT FLAGS_FASTMATH ${FLAGS_FASTMATH} " -msse2 -mfpmath=sse") +- endif() ++ # if (SLEEF_ARCH_X86 AND SLEEF_ARCH_32BIT) ++ # string(CONCAT FLAGS_STRICTMATH ${FLAGS_STRICTMATH} " -msse2 -mfpmath=sse") ++ # string(CONCAT FLAGS_FASTMATH ${FLAGS_FASTMATH} " -msse2 -mfpmath=sse") ++ # endif() + + # Without the options below, gcc generates calls to libm + string(CONCAT FLAGS_OTHERS "-fno-math-errno -fno-trapping-math") diff --git a/packages/libsleef/patches/0003-no-mfma.patch b/packages/libsleef/patches/0003-no-mfma.patch new file mode 100644 index 00000000..71e73471 --- /dev/null +++ b/packages/libsleef/patches/0003-no-mfma.patch @@ -0,0 +1,13 @@ +diff --git a/Configure.cmake b/Configure.cmake +index 7c64ce9..dcd4d96 100644 +--- a/Configure.cmake ++++ b/Configure.cmake +@@ -113,7 +113,7 @@ endif() + if(SLEEF_TARGET_PROCESSOR MATCHES "(x86|AMD64|amd64|^i.86$)") + set(SLEEF_ARCH_X86 ON CACHE INTERNAL "True for x86 architecture.") + +- set(CLANG_FLAGS_ENABLE_PURECFMA_SCALAR "-mavx2;-mfma") ++ set(CLANG_FLAGS_ENABLE_PURECFMA_SCALAR "-mavx2") + elseif(SLEEF_TARGET_PROCESSOR MATCHES "aarch64|arm64") + set(SLEEF_ARCH_AARCH64 ON CACHE INTERNAL "True for Aarch64 architecture.") + # Aarch64 requires support for advsimdfma4 diff --git a/packages/libsleef/patches/0004-no-cpuid.patch b/packages/libsleef/patches/0004-no-cpuid.patch new file mode 100644 index 00000000..3a0030cd --- /dev/null +++ b/packages/libsleef/patches/0004-no-cpuid.patch @@ -0,0 +1,82 @@ +diff --git a/src/libm/dispavx.c.org b/src/libm/dispavx.c.org +index b50ff0a..fd0e4ed 100644 +--- a/src/libm/dispavx.c.org ++++ b/src/libm/dispavx.c.org +@@ -14,33 +14,15 @@ + #include "sleef.h" + + static int cpuSupportsAVX2() { +- static int ret = -1; +- if (ret == -1) { +- int32_t reg[4]; +- Sleef_x86CpuID(reg, 7, 0); +- ret = (reg[1] & (1 << 5)) != 0; +- } +- return ret; ++ return 0; + } + + static int cpuSupportsFMA() { +- static int ret = -1; +- if (ret == -1) { +- int32_t reg[4]; +- Sleef_x86CpuID(reg, 1, 0); +- ret = (reg[2] & (1 << 12)) != 0; +- } +- return ret; ++ return 0; + } + + static int cpuSupportsFMA4() { +- static int ret = -1; +- if (ret == -1) { +- int32_t reg[4]; +- Sleef_x86CpuID(reg, 0x80000001, 0); +- ret = (reg[2] & (1 << 16)) != 0; +- } +- return ret; ++ return 0; + } + + #ifdef ENABLE_FMA4 +diff --git a/src/libm/dispsse.c.org b/src/libm/dispsse.c.org +index a6ca65a..df2e74b 100644 +--- a/src/libm/dispsse.c.org ++++ b/src/libm/dispsse.c.org +@@ -14,33 +14,15 @@ + #include "sleef.h" + + static int cpuSupportsSSE4_1() { +- static int ret = -1; +- if (ret == -1) { +- int32_t reg[4]; +- Sleef_x86CpuID(reg, 1, 0); +- ret = (reg[2] & (1 << 19)) != 0; +- } +- return ret; ++ return 0; + } + + static int cpuSupportsAVX2() { +- static int ret = -1; +- if (ret == -1) { +- int32_t reg[4]; +- Sleef_x86CpuID(reg, 7, 0); +- ret = (reg[1] & (1 << 5)) != 0; +- } +- return ret; ++ return 0; + } + + static int cpuSupportsFMA() { +- static int ret = -1; +- if (ret == -1) { +- int32_t reg[4]; +- Sleef_x86CpuID(reg, 1, 0); +- ret = (reg[2] & (1 << 12)) != 0; +- } +- return ret; ++ return 0; + } + + #define SUBST_IF_EXT1(funcsse4) if (cpuSupportsSSE4_1()) p = funcsse4; diff --git a/packages/numpy-quaddtype/meta.yaml b/packages/numpy-quaddtype/meta.yaml new file mode 100644 index 00000000..69d0ca85 --- /dev/null +++ b/packages/numpy-quaddtype/meta.yaml @@ -0,0 +1,21 @@ +package: + name: numpy-quaddtype + version: 0.2.2 + top-level: + - numpy_quaddtype +source: + url: https://files.pythonhosted.org/packages/source/n/numpy_quaddtype/numpy_quaddtype-0.2.2.tar.gz + sha256: 9eec9003aab53fb2ea12482dd5b4c0ad2ddf8bc2b9d2dfd05acc2ea46466d762 +requirements: + host: + - numpy + - libsleef +build: + script: | + export CXXFLAGS="${CXXFLAGS} -I${WASM_LIBRARY_DIR}/include -sRELOCATABLE=1"; + export LDFLAGS="${CFLAGS} -L${WASM_LIBRARY_DIR}/lib"; +about: + home: https://github.com/numpy/numpy-user-dtypes/tree/main/quaddtype + PyPI: https://pypi.org/project/numpy-quaddtype + summary: Quad (128-bit) float dtype for numpy + license: BSD-3-Clause From 1e8dbd88795c64059146aa11c319a57dc497bffe Mon Sep 17 00:00:00 2001 From: Juniper Tyree Date: Tue, 6 Jan 2026 17:58:52 +0200 Subject: [PATCH 2/3] add numpy run dependency --- packages/numpy-quaddtype/meta.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/numpy-quaddtype/meta.yaml b/packages/numpy-quaddtype/meta.yaml index 69d0ca85..da0ec370 100644 --- a/packages/numpy-quaddtype/meta.yaml +++ b/packages/numpy-quaddtype/meta.yaml @@ -10,6 +10,8 @@ requirements: host: - numpy - libsleef + run: + - numpy build: script: | export CXXFLAGS="${CXXFLAGS} -I${WASM_LIBRARY_DIR}/include -sRELOCATABLE=1"; From c678b93531b138b3d8ef98fc0e593247bdf6caa8 Mon Sep 17 00:00:00 2001 From: Juniper Tyree Date: Mon, 26 Jan 2026 14:32:16 +0200 Subject: [PATCH 3/3] upgrade to numpy-quaddtype v1.0.0 --- packages/libsleef/meta.yaml | 37 +++++-- .../libsleef/patches/0001-no-x86intrin.patch | 32 +++--- .../libsleef/patches/0002-no-mfpmatch.patch | 4 +- .../0003-fix-purecfma-scalar-x86.patch | 101 ++++++++++++++++++ packages/libsleef/patches/0003-no-mfma.patch | 13 --- packages/libsleef/patches/0004-no-cpuid.patch | 4 +- packages/numpy-quaddtype/meta.yaml | 8 +- 7 files changed, 152 insertions(+), 47 deletions(-) create mode 100644 packages/libsleef/patches/0003-fix-purecfma-scalar-x86.patch delete mode 100644 packages/libsleef/patches/0003-no-mfma.patch diff --git a/packages/libsleef/meta.yaml b/packages/libsleef/meta.yaml index 36fe3c8c..c34da464 100644 --- a/packages/libsleef/meta.yaml +++ b/packages/libsleef/meta.yaml @@ -1,16 +1,16 @@ package: name: libsleef - version: "3.8" + version: 3.9.0 tag: - library - static_library source: - sha256: a12ccd50f57083c530e1c76f10d52865defbd19fc9e2c85b483493065709874a - url: https://github.com/shibatch/sleef/archive/refs/tags/3.8.tar.gz + sha256: af60856abac08a3b5e72a8d156dd71fec1f7ac23de8ee67793f45f9edcdf0908 + url: https://github.com/shibatch/sleef/archive/refs/tags/3.9.0.tar.gz patches: - patches/0001-no-x86intrin.patch - patches/0002-no-mfpmatch.patch - - patches/0003-no-mfma.patch + - patches/0003-fix-purecfma-scalar-x86.patch - patches/0004-no-cpuid.patch build: type: static_library @@ -18,20 +18,30 @@ build: mkdir build-native cd build-native + mkdir my-install + export NATIVE_BUILD_DIR=`pwd` BACKUP_TOOLCHAIN=${CMAKE_TOOLCHAIN_FILE} unset CMAKE_TOOLCHAIN_FILE cmake \ + -DCMAKE_INSTALL_PREFIX=$(pwd)/my-install \ -DCMAKE_BUILD_TYPE=Release \ -DSLEEF_BUILD_QUAD=ON \ -DSLEEF_BUILD_SHARED_LIBS=OFF \ -DSLEEF_BUILD_TESTS=OFF \ -DSLEEF_BUILD_INLINE_HEADERS=OFF \ + -DSLEEF_BUILD_GNUABI_LIBS=OFF \ + -DSLEEF_ENABLE_TLFLOAT=OFF \ + -DSLEEF_ENABLE_TESTER4=OFF \ + -DSLEEF_DISABLE_FFTW=ON \ + -DSLEEF_DISABLE_MPFR=ON \ + -DSLEEF_DISABLE_SSL=ON \ + -DSLEEF_DISABLE_OPENMP=ON \ -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ ../ - + make -j ${PYODIDE_JOBS:-3} export CMAKE_TOOLCHAIN_FILE=${BACKUP_TOOLCHAIN} @@ -41,22 +51,29 @@ build: cd build emcmake cmake \ + -DCMAKE_INSTALL_PREFIX=${WASM_LIBRARY_DIR} \ -DCMAKE_BUILD_TYPE=Release \ -DSLEEF_BUILD_QUAD=ON \ -DSLEEF_BUILD_SHARED_LIBS=OFF \ -DSLEEF_BUILD_TESTS=OFF \ -DSLEEF_BUILD_INLINE_HEADERS=OFF \ + -DSLEEF_BUILD_GNUABI_LIBS=OFF \ + -DSLEEF_ENABLE_TLFLOAT=OFF \ + -DSLEEF_ENABLE_TESTER4=OFF \ + -DSLEEF_DISABLE_FFTW=ON \ + -DSLEEF_DISABLE_MPFR=ON \ + -DSLEEF_DISABLE_SSL=ON \ + -DSLEEF_DISABLE_OPENMP=ON \ + -DSLEEF_DISABLE_SSE2=OFF \ + -DSLEEF_DISABLE_AVX2=ON \ + -DSLEEF_DISABLE_AVX512F=ON \ + -DSLEEF_DISABLE_PURECFMA_SCALAR=ON \ -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ - -DCMAKE_INSTALL_PREFIX=${WASM_LIBRARY_DIR} \ -DNATIVE_BUILD_DIR=${NATIVE_BUILD_DIR} \ -DCMAKE_C_FLAGS="-msimd128 -msse2" \ -DCMAKE_CXX_FLAGS="-msimd128 -msse2" \ - -DSLEEF_DISABLE_FLOAT128=ON \ ../ - # -DSLEEF_ENABLE_SSE2=ON \ - # -DSLEEF_ENABLE_AVX2=OFF \ - emmake make -j ${PYODIDE_JOBS:-3} emmake make install diff --git a/packages/libsleef/patches/0001-no-x86intrin.patch b/packages/libsleef/patches/0001-no-x86intrin.patch index 430695e0..e017fa27 100644 --- a/packages/libsleef/patches/0001-no-x86intrin.patch +++ b/packages/libsleef/patches/0001-no-x86intrin.patch @@ -1,8 +1,8 @@ diff --git a/Configure.cmake b/Configure.cmake -index 7c64ce9..0740b9a 100644 +index e23f577..6741a6e 100644 --- a/Configure.cmake +++ b/Configure.cmake -@@ -386,7 +386,7 @@ if(SLEEF_ARCH_X86 AND NOT SLEEF_DISABLE_SSE2) +@@ -495,7 +495,7 @@ if(SLEEF_ARCH_X86 AND NOT SLEEF_DISABLE_SSE2) #if defined(_MSC_VER) #include #else @@ -11,7 +11,7 @@ index 7c64ce9..0740b9a 100644 #endif int main() { __m128d r = _mm_mul_pd(_mm_set1_pd(1), _mm_set1_pd(2)); }" -@@ -408,7 +408,7 @@ if(SLEEF_ARCH_X86 AND NOT SLEEF_DISABLE_SSE4) +@@ -514,7 +514,7 @@ if(SLEEF_ARCH_X86 AND NOT SLEEF_DISABLE_SSE4) #if defined(_MSC_VER) #include #else @@ -20,7 +20,7 @@ index 7c64ce9..0740b9a 100644 #endif int main() { __m128d r = _mm_floor_sd(_mm_set1_pd(1), _mm_set1_pd(2)); }" -@@ -430,7 +430,7 @@ if(SLEEF_ARCH_X86 AND NOT SLEEF_DISABLE_AVX) +@@ -533,7 +533,7 @@ if(SLEEF_ARCH_X86 AND NOT SLEEF_DISABLE_AVX) #if defined(_MSC_VER) #include #else @@ -29,7 +29,7 @@ index 7c64ce9..0740b9a 100644 #endif int main() { __m256d r = _mm256_add_pd(_mm256_set1_pd(1), _mm256_set1_pd(2)); -@@ -452,7 +452,7 @@ if(SLEEF_ARCH_X86 AND NOT SLEEF_DISABLE_FMA4) +@@ -552,7 +552,7 @@ if(SLEEF_ARCH_X86 AND NOT SLEEF_DISABLE_FMA4) #if defined(_MSC_VER) #include #else @@ -38,7 +38,7 @@ index 7c64ce9..0740b9a 100644 #endif int main() { __m256d r = _mm256_macc_pd(_mm256_set1_pd(1), _mm256_set1_pd(2), _mm256_set1_pd(3)); }" -@@ -474,7 +474,7 @@ if(SLEEF_ARCH_X86 AND NOT SLEEF_DISABLE_AVX2) +@@ -571,7 +571,7 @@ if(SLEEF_ARCH_X86 AND NOT SLEEF_DISABLE_AVX2) #if defined(_MSC_VER) #include #else @@ -47,7 +47,7 @@ index 7c64ce9..0740b9a 100644 #endif int main() { __m256i r = _mm256_abs_epi32(_mm256_set1_epi32(1)); }" -@@ -501,7 +501,7 @@ if(SLEEF_ARCH_X86 AND NOT SLEEF_DISABLE_AVX512F) +@@ -595,7 +595,7 @@ if(SLEEF_ARCH_X86 AND NOT SLEEF_DISABLE_AVX512F) #if defined(_MSC_VER) #include #else @@ -57,7 +57,7 @@ index 7c64ce9..0740b9a 100644 __m512 addConstant(__m512 arg) { return _mm512_add_ps(arg, _mm512_set1_ps(1.f)); diff --git a/src/arch/helperavx.h b/src/arch/helperavx.h -index 00fdaf9..6a32d2d 100644 +index 08b81b0..5596498 100644 --- a/src/arch/helperavx.h +++ b/src/arch/helperavx.h @@ -42,7 +42,7 @@ @@ -70,7 +70,7 @@ index 00fdaf9..6a32d2d 100644 #include diff --git a/src/arch/helperavx2.h b/src/arch/helperavx2.h -index 38c21b4..fa047d5 100644 +index 8e71de3..2872cd9 100644 --- a/src/arch/helperavx2.h +++ b/src/arch/helperavx2.h @@ -40,7 +40,7 @@ @@ -83,7 +83,7 @@ index 38c21b4..fa047d5 100644 #include diff --git a/src/arch/helperavx2_128.h b/src/arch/helperavx2_128.h -index 97258cd..8db24fc 100644 +index 2d1142b..4fa0f8f 100644 --- a/src/arch/helperavx2_128.h +++ b/src/arch/helperavx2_128.h @@ -40,7 +40,7 @@ @@ -96,7 +96,7 @@ index 97258cd..8db24fc 100644 #include diff --git a/src/arch/helperavx512f.h b/src/arch/helperavx512f.h -index dcf8ead..2e27d2f 100644 +index 20c5118..2b3da9a 100644 --- a/src/arch/helperavx512f.h +++ b/src/arch/helperavx512f.h @@ -43,7 +43,7 @@ @@ -109,7 +109,7 @@ index dcf8ead..2e27d2f 100644 #include diff --git a/src/arch/helpersse2.h b/src/arch/helpersse2.h -index ae98add..34b5759 100644 +index 349f06e..d6bee48 100644 --- a/src/arch/helpersse2.h +++ b/src/arch/helpersse2.h @@ -46,7 +46,7 @@ @@ -122,10 +122,10 @@ index ae98add..34b5759 100644 #include diff --git a/src/common/misc.h b/src/common/misc.h -index 6b571cb..8deed5c 100644 +index fadcd1a..c0a2bcf 100644 --- a/src/common/misc.h +++ b/src/common/misc.h -@@ -278,9 +278,7 @@ typedef struct { +@@ -281,9 +281,7 @@ typedef struct { #define LIKELY(condition) (condition) #define UNLIKELY(condition) (condition) @@ -137,10 +137,10 @@ index 6b571cb..8deed5c 100644 #define SLEEF_INFINITY (1e+300 * 1e+300) #define SLEEF_NAN (SLEEF_INFINITY - SLEEF_INFINITY) diff --git a/src/libm/sleeflibm_header.h.org.in b/src/libm/sleeflibm_header.h.org.in -index 66d88db..bdbd23f 100644 +index abf1d0a..b9ebf33 100644 --- a/src/libm/sleeflibm_header.h.org.in +++ b/src/libm/sleeflibm_header.h.org.in -@@ -47,9 +47,7 @@ +@@ -55,9 +55,7 @@ extern "C" #define SLEEF_IMPORT #endif // #if (defined(__MINGW32__) || defined(__MINGW64__) || defined(__CYGWIN__) || defined(_MSC_VER)) && !defined(SLEEF_STATIC_LIBS) diff --git a/packages/libsleef/patches/0002-no-mfpmatch.patch b/packages/libsleef/patches/0002-no-mfpmatch.patch index 783163b8..c7c7963a 100644 --- a/packages/libsleef/patches/0002-no-mfpmatch.patch +++ b/packages/libsleef/patches/0002-no-mfpmatch.patch @@ -1,8 +1,8 @@ diff --git a/Configure.cmake b/Configure.cmake -index 7c64ce9..06e01da 100644 +index 6741a6e..e029751 100644 --- a/Configure.cmake +++ b/Configure.cmake -@@ -196,10 +196,10 @@ if(CMAKE_C_COMPILER_ID MATCHES "(GNU|Clang)") +@@ -276,10 +276,10 @@ if(CMAKE_C_COMPILER_ID MATCHES "(GNU|Clang|QCC)") set(FLAGS_FASTMATH "-ffast-math") set(FLAGS_NOSTRICTALIASING "-fno-strict-aliasing") diff --git a/packages/libsleef/patches/0003-fix-purecfma-scalar-x86.patch b/packages/libsleef/patches/0003-fix-purecfma-scalar-x86.patch new file mode 100644 index 00000000..abae853c --- /dev/null +++ b/packages/libsleef/patches/0003-fix-purecfma-scalar-x86.patch @@ -0,0 +1,101 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 8510913..817af3a 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -91,6 +91,10 @@ option(SLEEF_ENFORCE_CUDA "Build fails if CUDA is not supported" OFF) + option(SLEEF_DISABLE_OPENMP "Disable OPENMP" OFF) + option(SLEEF_ENFORCE_OPENMP "Build fails if OPENMP is not supported by the compiler" OFF) + ++# Option to disable PURECFMA scalar code path on x86 for x86-64-v2 compatibility ++# When ON, PURECFMA scalar dispatch is disabled (useful for Sandy Bridge support) ++# This can be set dynamically by the build system based on target CPU detection ++option(SLEEF_DISABLE_PURECFMA_SCALAR "Disable PURECFMA scalar code path (for x86-64-v2 compatibility)" OFF) + # + + if ((NOT "${CMAKE_C_COMPILER_ID}" STREQUAL "${CMAKE_CXX_COMPILER_ID}") OR +diff --git a/Configure.cmake b/Configure.cmake +index e029751..8764b60 100644 +--- a/Configure.cmake ++++ b/Configure.cmake +@@ -193,7 +193,12 @@ endif() + if(SLEEF_TARGET_PROCESSOR MATCHES "(x86|AMD64|amd64|^i.86$)") + set(SLEEF_ARCH_X86 ON CACHE INTERNAL "True for x86 architecture.") + +- set(CLANG_FLAGS_ENABLE_PURECFMA_SCALAR "-mavx2;-mfma") ++ # Only set PURECFMA_SCALAR flags if not explicitly disabled ++ if(NOT SLEEF_DISABLE_PURECFMA_SCALAR) ++ set(CLANG_FLAGS_ENABLE_PURECFMA_SCALAR "-mavx2;-mfma") ++ else() ++ message(STATUS "PURECFMA_SCALAR disabled for x86-64-v2 compatibility") ++ endif() + elseif(SLEEF_TARGET_PROCESSOR MATCHES "aarch64|arm64") + set(SLEEF_ARCH_AARCH64 ON CACHE INTERNAL "True for Aarch64 architecture.") + # Aarch64 requires support for advsimdfma4 +@@ -220,7 +225,12 @@ elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "riscv64") + endif() + + set(COMPILER_SUPPORTS_PUREC_SCALAR 1) +-set(COMPILER_SUPPORTS_PURECFMA_SCALAR 1) ++# Conditionally enable PURECFMA_SCALAR based on option ++if(SLEEF_DISABLE_PURECFMA_SCALAR) ++ set(COMPILER_SUPPORTS_PURECFMA_SCALAR 0) ++else() ++ set(COMPILER_SUPPORTS_PURECFMA_SCALAR 1) ++endif() + + # Compiler feature detection + +diff --git a/src/quad/CMakeLists.txt b/src/quad/CMakeLists.txt +index 8e4e261..fd41d28 100644 +--- a/src/quad/CMakeLists.txt ++++ b/src/quad/CMakeLists.txt +@@ -398,9 +398,17 @@ set_target_properties(qmkdisp PROPERTIES ${COMMON_TARGET_PROPERTIES}) + + # Target qdispscalar.c + ++# Set scalar dispatch backends based on PURECFMA support ++# When SLEEF_DISABLE_PURECFMA_SCALAR is ON, use purec for both slots ++if(COMPILER_SUPPORTS_PURECFMA_SCALAR) ++ set(SCALAR_DISPATCH_BACKENDS "purec" "purecfma") ++else() ++ set(SCALAR_DISPATCH_BACKENDS "purec" "purec") ++endif() ++ + add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/qdispscalar.c.body +- COMMAND $ 1 Sleef_quad double int32_t int64_t uint64_t purec purecfma > ${CMAKE_CURRENT_BINARY_DIR}/qdispscalar.c.body ++ COMMAND $ 1 Sleef_quad double int32_t int64_t uint64_t ${SCALAR_DISPATCH_BACKENDS} > ${CMAKE_CURRENT_BINARY_DIR}/qdispscalar.c.body + DEPENDS qmkdisp + ) + sleef_concat_files( +@@ -426,6 +434,11 @@ target_compile_definitions(qdispscalar_obj PRIVATE ${COMMON_TARGET_DEFINITIONS}) + target_include_directories(qdispscalar_obj PRIVATE ${sleef_BINARY_DIR}/include) + add_dependencies(qdispscalar_obj qdispscalar.c_generated qrenamedspscalar.h_generated + sleefquad_headers ${TARGET_LIBSLEEF} ${TARGET_HEADERS}) ++# Define ENABLE_PURECFMA when PURECFMA is supported, so qdispscalar.c.org ++# can conditionally include the tryFMA() function and SUBST_IF_EXT1 macro ++if(COMPILER_SUPPORTS_PURECFMA_SCALAR) ++ target_compile_definitions(qdispscalar_obj PRIVATE ENABLE_PURECFMA=1) ++endif() + target_sources(sleefquad PRIVATE $) + + if(DEFINED QMKDISP_PARAMS_X2) +diff --git a/src/quad/qdispscalar.c.org b/src/quad/qdispscalar.c.org +index c4c1292..48f309c 100644 +--- a/src/quad/qdispscalar.c.org ++++ b/src/quad/qdispscalar.c.org +@@ -15,10 +15,14 @@ + + #include "qdispatcher.h" + ++#ifdef ENABLE_PURECFMA + NOEXPORT Sleef_quad sleef_cpuid_QUADFMA_0; + static void tryFMA() { sleef_cpuid_QUADFMA_0 = Sleef_sinq1_u10purecfma(sleef_cpuid_QUADFMA_0); } + + #define SUBST_IF_EXT1(funcExt1) if (cpuSupportsExt(tryFMA)) p = funcExt1; ++#else ++#define SUBST_IF_EXT1(funcExt1) ++#endif + + // + diff --git a/packages/libsleef/patches/0003-no-mfma.patch b/packages/libsleef/patches/0003-no-mfma.patch deleted file mode 100644 index 71e73471..00000000 --- a/packages/libsleef/patches/0003-no-mfma.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/Configure.cmake b/Configure.cmake -index 7c64ce9..dcd4d96 100644 ---- a/Configure.cmake -+++ b/Configure.cmake -@@ -113,7 +113,7 @@ endif() - if(SLEEF_TARGET_PROCESSOR MATCHES "(x86|AMD64|amd64|^i.86$)") - set(SLEEF_ARCH_X86 ON CACHE INTERNAL "True for x86 architecture.") - -- set(CLANG_FLAGS_ENABLE_PURECFMA_SCALAR "-mavx2;-mfma") -+ set(CLANG_FLAGS_ENABLE_PURECFMA_SCALAR "-mavx2") - elseif(SLEEF_TARGET_PROCESSOR MATCHES "aarch64|arm64") - set(SLEEF_ARCH_AARCH64 ON CACHE INTERNAL "True for Aarch64 architecture.") - # Aarch64 requires support for advsimdfma4 diff --git a/packages/libsleef/patches/0004-no-cpuid.patch b/packages/libsleef/patches/0004-no-cpuid.patch index 3a0030cd..75c0955c 100644 --- a/packages/libsleef/patches/0004-no-cpuid.patch +++ b/packages/libsleef/patches/0004-no-cpuid.patch @@ -1,5 +1,5 @@ diff --git a/src/libm/dispavx.c.org b/src/libm/dispavx.c.org -index b50ff0a..fd0e4ed 100644 +index 86a0148..e309af7 100644 --- a/src/libm/dispavx.c.org +++ b/src/libm/dispavx.c.org @@ -14,33 +14,15 @@ @@ -40,7 +40,7 @@ index b50ff0a..fd0e4ed 100644 #ifdef ENABLE_FMA4 diff --git a/src/libm/dispsse.c.org b/src/libm/dispsse.c.org -index a6ca65a..df2e74b 100644 +index 4e0d09b..1e9a875 100644 --- a/src/libm/dispsse.c.org +++ b/src/libm/dispsse.c.org @@ -14,33 +14,15 @@ diff --git a/packages/numpy-quaddtype/meta.yaml b/packages/numpy-quaddtype/meta.yaml index da0ec370..18e5604c 100644 --- a/packages/numpy-quaddtype/meta.yaml +++ b/packages/numpy-quaddtype/meta.yaml @@ -1,11 +1,11 @@ package: name: numpy-quaddtype - version: 0.2.2 + version: 1.0.0 top-level: - numpy_quaddtype source: - url: https://files.pythonhosted.org/packages/source/n/numpy_quaddtype/numpy_quaddtype-0.2.2.tar.gz - sha256: 9eec9003aab53fb2ea12482dd5b4c0ad2ddf8bc2b9d2dfd05acc2ea46466d762 + url: https://files.pythonhosted.org/packages/e0/8b/7a88882808ac17a6f8d73253b785a969ea7acec34a2fd14425e4947bfae4/numpy_quaddtype-1.0.0.tar.gz + sha256: e2844e879dd6f4b44971e318d17cf2c5fa1f9fd2f04d0a50fe8813139e6dcf29 requirements: host: - numpy @@ -17,7 +17,7 @@ build: export CXXFLAGS="${CXXFLAGS} -I${WASM_LIBRARY_DIR}/include -sRELOCATABLE=1"; export LDFLAGS="${CFLAGS} -L${WASM_LIBRARY_DIR}/lib"; about: - home: https://github.com/numpy/numpy-user-dtypes/tree/main/quaddtype + home: https://github.com/numpy/numpy-quaddtype PyPI: https://pypi.org/project/numpy-quaddtype summary: Quad (128-bit) float dtype for numpy license: BSD-3-Clause