mirror of
https://github.com/numpy/numpy.git
synced 2026-10-28 16:34:42 +08:00
103 lines
3.9 KiB
Meson
103 lines
3.9 KiB
Meson
project(
|
|
'NumPy',
|
|
'c', 'cpp', 'cython',
|
|
version: run_command(['numpy/_build_utils/gitversion.py'], check: true).stdout().strip(),
|
|
license: 'BSD-3-Clause AND 0BSD AND MIT AND Zlib AND CC0-1.0',
|
|
meson_version: '>=1.8.3', # version in vendored-meson
|
|
default_options: [
|
|
'buildtype=debugoptimized',
|
|
'b_ndebug=if-release',
|
|
'c_std=c11',
|
|
'cpp_std=c++17',
|
|
'pkgconfig.relocatable=true',
|
|
'python.allow_limited_api=false',
|
|
],
|
|
)
|
|
|
|
fs = import('fs')
|
|
|
|
cc = meson.get_compiler('c')
|
|
cpp = meson.get_compiler('cpp')
|
|
cy = meson.get_compiler('cython')
|
|
|
|
# Check compiler is recent enough (see the SciPy Toolchain Roadmap for details)
|
|
if cc.get_id() == 'gcc'
|
|
if not cc.version().version_compare('>=10.3')
|
|
error('NumPy requires GCC >= 10.3')
|
|
endif
|
|
elif cc.get_id() == 'msvc'
|
|
if not cc.version().version_compare('>=19.35')
|
|
error('NumPy requires at least vc143 (default with Visual Studio 2022) ' + \
|
|
'when building with MSVC')
|
|
endif
|
|
add_project_arguments('/experimental:c11atomics', language: 'c')
|
|
endif
|
|
if not cy.version().version_compare('>=3.1.0')
|
|
error('NumPy requires Cython >= 3.1.0')
|
|
endif
|
|
|
|
py = import('python').find_installation(pure: false)
|
|
|
|
# Target version for the Limited C API, used by extension modules that
|
|
# have been ported. Controlled by python.allow_limited_api (default: false).
|
|
# The hex form is the same version, for targets that must define
|
|
# `Py_LIMITED_API` themselves; keep the two in sync.
|
|
#
|
|
# `Py_LIMITED_API` selects abi3, which is non-free-threaded only; the
|
|
# free-threaded ABI (abi3t) needs Python 3.15. Leave both empty on a
|
|
# free-threaded build, where a `limited_api:` kwarg would otherwise be acted
|
|
# on and produce a module that cannot be built.
|
|
if py.get_variable('Py_GIL_DISABLED', 0) == 0
|
|
py_limited_api = '3.13'
|
|
py_limited_api_hex = '0x030d0000'
|
|
else
|
|
py_limited_api = ''
|
|
py_limited_api_hex = ''
|
|
endif
|
|
py_dep = py.dependency()
|
|
|
|
if not cc.has_header('Python.h', dependencies: py_dep)
|
|
error('Cannot compile `Python.h`. Perhaps you need to install python-dev|python-devel')
|
|
endif
|
|
|
|
# Add default compile flags for any compiler that supports them.
|
|
# Note that MSVC does not support strict aliasing at all, and neither do the
|
|
# Intel compilers on Windows, so the `-fno` flavor of the flag should be fine.
|
|
add_project_arguments(
|
|
cc.get_supported_arguments( '-fno-strict-aliasing'), language : 'c'
|
|
)
|
|
#
|
|
# Clang defaults to a non-strict floating error point model, but we need strict
|
|
# behavior. `-ftrapping-math` is equivalent to `-ffp-exception-behavior=strict`.
|
|
# This flag is also required to prevent the activation of SIMD partial load workarounds.
|
|
# For further clarification, refer to gh-24461.
|
|
cc_id = cc.get_id()
|
|
if cc_id.startswith('clang')
|
|
# Determine the compiler flags for trapping math exceptions.
|
|
trapping_math = {
|
|
'clang-cl': '/clang:-ftrapping-math',
|
|
}.get(cc_id, '-ftrapping-math')
|
|
# Check if the compiler supports the trapping math flag.
|
|
if cc.has_argument(trapping_math)
|
|
# TODO: Consider upgrading the vendored Meson to 1.3.0 to support the parameter `werror`
|
|
# Detect whether the compiler actually supports strict handling of floating-point exceptions
|
|
# by treating warnings as errors.
|
|
if cc.compiles('int main() { return 0; }', args: [trapping_math, '-Werror'])
|
|
trapping_math = [trapping_math, '-DNPY_HAVE_CLANG_FPSTRICT']
|
|
else
|
|
# Suppress warnings about unsupported floating-point optimization.
|
|
trapping_math = [trapping_math, '-Wno-unsupported-floating-point-opt']
|
|
# Inform the user about the workaround.
|
|
message(
|
|
'NumPy is being built against a version of Clang that does not strictly enforce ' +
|
|
'floating-point exception handling. Workarounds will be used, which may impact performance.\n' +
|
|
'Consider upgrading Clang to the latest version.'
|
|
)
|
|
endif
|
|
add_project_arguments(trapping_math, language: ['c', 'cpp'])
|
|
endif
|
|
endif
|
|
|
|
subdir('meson_cpu')
|
|
subdir('numpy')
|