Skip to content

Commit ee3124c

Browse files
committed
Enable windows build static
1 parent a6ea21d commit ee3124c

File tree

2 files changed

+28
-12
lines changed

2 files changed

+28
-12
lines changed

setup.py

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,21 @@
3030

3131
ISA_L_SOURCE = os.path.join("src", "isal", "isa-l")
3232

33+
SYSTEM_IS_UNIX = (sys.platform.startswith("linux") or
34+
sys.platform.startswith("darwin"))
35+
SYSTEM_IS_WINDOWS = sys.platform.startswith("win")
36+
3337

3438
class IsalExtension(Extension):
3539
"""Custom extension to allow for targeted modification."""
3640
pass
3741

3842

43+
MODULES = [IsalExtension("isal.isal_zlib", ["src/isal/isal_zlib.pyx"])]
44+
if SYSTEM_IS_UNIX:
45+
MODULES.append(IsalExtension("isal._isal", ["src/isal/_isal.pyx"]))
46+
47+
3948
class BuildIsalExt(build_ext):
4049
def build_extension(self, ext):
4150
if not isinstance(ext, IsalExtension):
@@ -57,11 +66,10 @@ def build_extension(self, ext):
5766
ext.libraries = ["isal"]
5867
else:
5968
isa_l_prefix_dir = build_isa_l()
60-
if (sys.platform.startswith("linux") or
61-
sys.platform.startswith("darwin")):
69+
if SYSTEM_IS_UNIX:
6270
ext.extra_objects = [
6371
os.path.join(isa_l_prefix_dir, "lib", "libisal.a")]
64-
elif sys.platform.startswith("win"):
72+
elif SYSTEM_IS_WINDOWS:
6573
ext.extra_objects = [
6674
os.path.join(isa_l_prefix_dir, "isa-l_static.lib")]
6775
else:
@@ -110,17 +118,22 @@ def build_isa_l():
110118
else: # sched_getaffinity not available on all platforms
111119
cpu_count = os.cpu_count() or 1 # os.cpu_count() can return None
112120
run_args = dict(cwd=build_dir, env=build_env)
113-
if sys.platform.startswith("linux") or sys.platform.startswith("darwin"):
121+
if SYSTEM_IS_UNIX:
114122
subprocess.run(os.path.join(build_dir, "autogen.sh"), **run_args)
115123
subprocess.run([os.path.join(build_dir, "configure"),
116124
"--prefix", temp_prefix], **run_args)
117125
subprocess.run(["make", "-j", str(cpu_count)],
118126
**run_args)
119127
subprocess.run(["make", "install"], **run_args)
120128
shutil.rmtree(build_dir)
121-
elif sys.platform.startswith("win"):
129+
elif SYSTEM_IS_WINDOWS:
122130
subprocess.run(["nmake", "/f", "Makefile.nmake"], **run_args)
123-
temp_prefix = build_dir
131+
Path(temp_prefix, "include").mkdir()
132+
print(temp_prefix, file=sys.stderr)
133+
shutil.copytree(os.path.join(build_dir, "include"),
134+
Path(temp_prefix, "include", "isa-l"))
135+
shutil.copy(os.path.join(build_dir, "isa-l_static.lib"),
136+
os.path.join(temp_prefix, "isa-l_static.lib"))
124137
else:
125138
raise NotImplementedError(f"Unsupported platform: {sys.platform}")
126139
return temp_prefix
@@ -163,8 +176,5 @@ def build_isa_l():
163176
"Operating System :: MacOS"
164177
],
165178
python_requires=">=3.6",
166-
ext_modules=[
167-
IsalExtension("isal.isal_zlib", ["src/isal/isal_zlib.pyx"]),
168-
IsalExtension("isal._isal", ["src/isal/_isal.pyx"]),
169-
]
179+
ext_modules=MODULES
170180
)

src/isal/__init__.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,14 @@
1818
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
1919
# SOFTWARE.
2020

21-
from ._isal import ISAL_MAJOR_VERSION, ISAL_MINOR_VERSION, \
22-
ISAL_PATCH_VERSION, ISAL_VERSION
21+
try:
22+
from ._isal import ISAL_MAJOR_VERSION, ISAL_MINOR_VERSION, \
23+
ISAL_PATCH_VERSION, ISAL_VERSION
24+
except ImportError: # Not available on windows
25+
ISAL_MAJOR_VERSION = None
26+
ISAL_MINOR_VERSION = None
27+
ISAL_PATCH_VERSION = None
28+
ISAL_VERSION = None
2329

2430
__all__ = [
2531
"ISAL_MAJOR_VERSION",

0 commit comments

Comments
 (0)