-
Notifications
You must be signed in to change notification settings - Fork 28
/
setup.py
135 lines (113 loc) · 4.13 KB
/
setup.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
# Copyright (c) 2018 Radio Astronomy Software Group
# Licensed under the 2-clause BSD License
import os
import platform
import sys
from sysconfig import get_config_var
import numpy
from Cython.Build import cythonize
from packaging.version import parse
from setuptools import Extension, setup
# define the branch scheme. Have to do it here so we don't have to modify the path
def branch_scheme(version):
"""
Local version scheme that adds the branch name for absolute reproducibility.
If and when this is added to setuptools_scm this function can be removed.
"""
if version.exact or version.node is None:
return version.format_choice("", "+d{time:{time_format}}", time_format="%Y%m%d")
else:
if version.branch == "main":
return version.format_choice("+{node}", "+{node}.dirty")
else:
return version.format_choice("+{node}.{branch}", "+{node}.{branch}.dirty")
def is_platform_mac():
return sys.platform == "darwin"
def is_platform_windows():
return sys.platform == "win32"
# For mac, ensure extensions are built for macos 10.9 when compiling on a
# 10.9 system or above, overriding distuitls behaviour which is to target
# the version that python was built for. This may be overridden by setting
# MACOSX_DEPLOYMENT_TARGET before calling setup.py
# implementation based on pandas, see https://github.com/pandas-dev/pandas/issues/23424
if is_platform_mac() and "MACOSX_DEPLOYMENT_TARGET" not in os.environ:
current_system = parse(platform.mac_ver()[0])
python_target = parse(get_config_var("MACOSX_DEPLOYMENT_TARGET"))
if python_target < parse("10.9") and current_system >= parse("10.9"):
os.environ["MACOSX_DEPLOYMENT_TARGET"] = "10.9"
# define the cython compile args, depending on platform
if is_platform_windows():
extra_compile_args = ["/Ox", "/openmp"]
extra_link_args = ["/openmp"]
elif is_platform_mac():
extra_compile_args = ["-O3"]
extra_link_args = []
else:
extra_compile_args = ["-O3", "-fopenmp"]
extra_link_args = ["-fopenmp"]
global_c_macros = [("NPY_NO_DEPRECATED_API", "NPY_1_7_API_VERSION")]
miriad_extension = Extension(
"pyuvdata.uvdata._miriad",
sources=[
"src/pyuvdata/uvdata/src/miriad_wrap.pyx",
"src/pyuvdata/uvdata/src/uvio.c",
"src/pyuvdata/uvdata/src/hio.c",
"src/pyuvdata/uvdata/src/pack.c",
"src/pyuvdata/uvdata/src/bug.c",
"src/pyuvdata/uvdata/src/dio.c",
"src/pyuvdata/uvdata/src/headio.c",
"src/pyuvdata/uvdata/src/maskio.c",
],
define_macros=global_c_macros,
include_dirs=["src/pyuvdata/uvdata/src/", numpy.get_include()],
)
corr_fits_extension = Extension(
"pyuvdata.uvdata._corr_fits",
sources=["src/pyuvdata/uvdata/corr_fits.pyx"],
define_macros=global_c_macros,
include_dirs=[numpy.get_include()],
extra_compile_args=extra_compile_args,
extra_link_args=extra_link_args,
)
bls_extension = Extension(
"pyuvdata.utils._bls",
sources=["src/pyuvdata/utils/bls.pyx"],
define_macros=global_c_macros,
include_dirs=[numpy.get_include()],
extra_compile_args=extra_compile_args,
)
coordinates_extension = Extension(
"pyuvdata.utils._coordinates",
sources=["src/pyuvdata/utils/coordinates.pyx"],
define_macros=global_c_macros,
include_dirs=[numpy.get_include()],
extra_compile_args=extra_compile_args,
)
phasing_extension = Extension(
"pyuvdata.utils._phasing",
sources=["src/pyuvdata/utils/phasing.pyx"],
define_macros=global_c_macros,
include_dirs=[numpy.get_include()],
extra_compile_args=extra_compile_args,
)
uvbeam_extension = Extension(
"pyuvdata.uvbeam._uvbeam",
sources=["src/pyuvdata/uvbeam/uvbeam.pyx"],
define_macros=global_c_macros,
include_dirs=[numpy.get_include()],
extra_compile_args=extra_compile_args,
)
extensions = [
corr_fits_extension,
bls_extension,
coordinates_extension,
phasing_extension,
uvbeam_extension,
]
# don't build miriad on windows
if not is_platform_windows():
extensions.append(miriad_extension)
setup(
use_scm_version={"local_scheme": branch_scheme},
ext_modules=cythonize(extensions, language_level=3),
)