Skip to content

Move search for compiler and omp from setup.py #146

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Oct 16, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 3 additions & 9 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@
from utils.command_style import source_style
from utils.command_clean import source_clean
from utils.command_build_clib import custom_build_clib
from utils.dpnp_build_utils import find_mathlib
from utils.dpnp_build_utils import find_cmplr, find_mathlib, find_omp


"""
Expand Down Expand Up @@ -218,18 +218,12 @@
"""
Get the compiler environemnt
"""
_cmplr_root = os.environ.get('DPCPPROOT', None)
if _cmplr_root is None:
raise EnvironmentError("Please install Intel OneAPI environment. DPCPPROOT is empty")
_, _cmplr_libpath = find_cmplr(verbose=True)
_, _omp_libpath = find_omp(verbose=True)

if IS_LIN:
_cmplr_libpath = [os.path.join(_cmplr_root, 'linux', 'lib')]
_omp_libpath = [os.path.join(_cmplr_root, 'linux', 'compiler', 'lib', 'intel64')]
_cmplr_rpath = _cmplr_libpath
_omp_rpath = _omp_libpath
elif IS_WIN:
_cmplr_libpath = [os.path.join(_cmplr_root, 'windows', 'lib')]
_omp_libpath = [os.path.join(_cmplr_root, 'windows', 'compiler', 'lib', 'intel64_win')]


"""
Expand Down
103 changes: 103 additions & 0 deletions utils/dpnp_build_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
# *****************************************************************************

import os
import sys


IS_CONDA_BUILD = os.environ.get("CONDA_BUILD") == "1"
Expand Down Expand Up @@ -76,6 +77,57 @@ def find_library(var_name, rel_header_paths, rel_lib_paths,
return [include_find], [libpath_find]


def _find_cmplr_in_dpcpp_root(verbose=False):
"""
Find compiler in dpcpp root using $DPCPPROOT.

Parameters
----------
verbose : bool
to print paths to include and library directories

Returns
-------
tuple(list(str), list(str))
path to include directory, path to library directory
"""
rel_header_paths = rel_lib_paths = []

if 'linux' in sys.platform:
rel_include_path = os.path.join('linux', 'include')
rel_libdir_path = os.path.join('linux', 'lib')
elif sys.platform in ['win32', 'cygwin']:
rel_include_path = os.path.join('windows', 'include')
rel_libdir_path = os.path.join('windows', 'lib')
else:
rel_include_path, rel_libdir_path = 'include', 'lib'

return find_library("DPCPPROOT", rel_header_paths, rel_lib_paths,
rel_include_path=rel_include_path, rel_libdir_path=rel_libdir_path, verbose=verbose)


def find_cmplr(verbose=False):
"""
Find compiler in environment.

Parameters
----------
verbose : bool
to print paths to include and library directories

Returns
-------
tuple(list(str), list(str))
path to include directory, path to library directory
"""
cmplr_include, cmplr_libpath = _find_cmplr_in_dpcpp_root(verbose=verbose)

if not cmplr_include or not cmplr_libpath:
raise EnvironmentError(f"Intel DPNP: Unable to find compiler. Please install Intel OneAPI environment")

return cmplr_include, cmplr_libpath


def _find_mathlib_in_conda_root(verbose=False):
"""
Find mathlib in conda root using $CONDA_PREFIX or $PREFIX.
Expand Down Expand Up @@ -142,3 +194,54 @@ def find_mathlib(verbose=False):
raise EnvironmentError("Intel DPNP: Unable to find math library")

return mathlib_include, mathlib_path


def _find_omp_in_dpcpp_root(verbose=False):
"""
Find omp in dpcpp root using $DPCPPROOT.

Parameters
----------
verbose : bool
to print paths to include and library directories

Returns
-------
tuple(list(str), list(str))
path to include directory, path to library directory
"""
rel_header_paths = rel_lib_paths = []

if 'linux' in sys.platform:
rel_include_path = os.path.join('linux', 'compiler', 'include')
rel_libdir_path = os.path.join('linux', 'compiler', 'lib', 'intel64')
elif sys.platform in ['win32', 'cygwin']:
rel_include_path = os.path.join('windows', 'compiler', 'include')
rel_libdir_path = os.path.join('windows', 'compiler', 'lib', 'intel64_win')
else:
rel_include_path, rel_libdir_path = 'include', 'lib'

return find_library("DPCPPROOT", rel_header_paths, rel_lib_paths,
rel_include_path=rel_include_path, rel_libdir_path=rel_libdir_path, verbose=verbose)


def find_omp(verbose=False):
"""
Find omp in environment.

Parameters
----------
verbose : bool
to print paths to include and library directories

Returns
-------
tuple(list(str), list(str))
path to include directory, path to library directory
"""
omp_include, omp_libpath = _find_omp_in_dpcpp_root(verbose=verbose)

if not omp_include or not omp_libpath:
raise EnvironmentError(f"Intel DPNP: Unable to find omp. Please install Intel OneAPI environment")

return omp_include, omp_libpath