19acde482SJonathan Wakely# Copyright (c) 2016-2023 Intel Corporation 251c0b2f7Stbbdev# 351c0b2f7Stbbdev# Licensed under the Apache License, Version 2.0 (the "License"); 451c0b2f7Stbbdev# you may not use this file except in compliance with the License. 551c0b2f7Stbbdev# You may obtain a copy of the License at 651c0b2f7Stbbdev# 751c0b2f7Stbbdev# http://www.apache.org/licenses/LICENSE-2.0 851c0b2f7Stbbdev# 951c0b2f7Stbbdev# Unless required by applicable law or agreed to in writing, software 1051c0b2f7Stbbdev# distributed under the License is distributed on an "AS IS" BASIS, 1151c0b2f7Stbbdev# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1251c0b2f7Stbbdev# See the License for the specific language governing permissions and 1351c0b2f7Stbbdev# limitations under the License. 1451c0b2f7Stbbdev 1551c0b2f7Stbbdev 1651c0b2f7Stbbdev# System imports 1751c0b2f7Stbbdevimport platform 1851c0b2f7Stbbdevimport os 1951c0b2f7Stbbdev 2051c0b2f7Stbbdevfrom distutils.core import * 2151c0b2f7Stbbdevfrom distutils.command.build import build 2251c0b2f7Stbbdev 2351c0b2f7Stbbdevrundir = os.getcwd() 2451c0b2f7Stbbdevos.chdir(os.path.abspath(os.path.dirname(__file__))) 2551c0b2f7Stbbdev 2651c0b2f7Stbbdevif any(i in os.environ for i in ["CC", "CXX"]): 2751c0b2f7Stbbdev if "CC" not in os.environ: 2851c0b2f7Stbbdev os.environ['CC'] = os.environ['CXX'] 2951c0b2f7Stbbdev if "CXX" not in os.environ: 3051c0b2f7Stbbdev os.environ['CXX'] = os.environ['CC'] 3151c0b2f7Stbbdev if platform.system() == 'Linux': 3251c0b2f7Stbbdev os.environ['LDSHARED'] = os.environ['CXX'] + " -shared" 3351c0b2f7Stbbdev print("Environment specifies CC=%s CXX=%s"%(os.environ['CC'], os.environ['CXX'])) 3451c0b2f7Stbbdev 3551c0b2f7Stbbdevintel_compiler = os.getenv('CC', '') in ['icl', 'icpc', 'icc'] 3651c0b2f7Stbbdevtry: 3751c0b2f7Stbbdev tbb_root = os.environ['TBBROOT'] 3851c0b2f7Stbbdev print("Using TBBROOT=", tbb_root) 3951c0b2f7Stbbdevexcept: 4051c0b2f7Stbbdev tbb_root = '..' 4151c0b2f7Stbbdev if not intel_compiler: 4251c0b2f7Stbbdev print("Warning: TBBROOT env var is not set and Intel's compiler is not used. It might lead\n" 4351c0b2f7Stbbdev " !!!: to compile/link problems. Source tbbvars.sh/.csh file to set environment") 4451c0b2f7Stbbdevuse_compiler_tbb = intel_compiler and tbb_root == '..' 4551c0b2f7Stbbdevif use_compiler_tbb: 4651c0b2f7Stbbdev print("Using oneTBB from Intel(R) C++ Compiler") 4751c0b2f7Stbbdevif platform.system() == 'Windows': 4851c0b2f7Stbbdev if intel_compiler: 4951c0b2f7Stbbdev os.environ['DISTUTILS_USE_SDK'] = '1' # Enable environment settings in distutils 5051c0b2f7Stbbdev os.environ['MSSdk'] = '1' 5151c0b2f7Stbbdev print("Using compiler settings from environment") 5251c0b2f7Stbbdev tbb_flag = ['/Qtbb'] if use_compiler_tbb else [] 5351c0b2f7Stbbdev compile_flags = ['/Qstd=c++11'] if intel_compiler else [] 5449e08aacStbbdev tbb_lib_name = 'tbb12' 5551c0b2f7Stbbdevelse: 5651c0b2f7Stbbdev tbb_flag = ['-tbb'] if use_compiler_tbb else [] 5751c0b2f7Stbbdev compile_flags = ['-std=c++11', '-Wno-unused-variable'] 5849e08aacStbbdev tbb_lib_name = 'tbb' 5951c0b2f7Stbbdev 6051c0b2f7Stbbdev_tbb = Extension("tbb._api", ["tbb/api.i"], 6151c0b2f7Stbbdev include_dirs=[os.path.join(tbb_root, 'include')] if not use_compiler_tbb else [], 6251c0b2f7Stbbdev swig_opts =['-c++', '-O', '-threads'] + ( # add '-builtin' later 6351c0b2f7Stbbdev ['-I' + os.path.join(tbb_root, 'include')] if not use_compiler_tbb else []), 6451c0b2f7Stbbdev extra_compile_args=compile_flags + tbb_flag, 6551c0b2f7Stbbdev extra_link_args=tbb_flag, 6649e08aacStbbdev libraries =([tbb_lib_name] if not use_compiler_tbb else []) + 6751c0b2f7Stbbdev (['irml'] if platform.system() == "Linux" else []), 6851c0b2f7Stbbdev library_dirs=[ rundir, # for custom-builds 6951c0b2f7Stbbdev os.path.join(tbb_root, 'lib', 'intel64', 'gcc4.8'), # for Linux 7051c0b2f7Stbbdev os.path.join(tbb_root, 'lib'), # for MacOS 7151c0b2f7Stbbdev os.path.join(tbb_root, 'lib', 'intel64', 'vc_mt'), # for Windows 7251c0b2f7Stbbdev ] if not use_compiler_tbb else [], 7351c0b2f7Stbbdev language ='c++', 7451c0b2f7Stbbdev ) 7551c0b2f7Stbbdev 7651c0b2f7Stbbdev 7751c0b2f7Stbbdevclass TBBBuild(build): 7851c0b2f7Stbbdev sub_commands = [ # define build order 7951c0b2f7Stbbdev ('build_ext', build.has_ext_modules), 8051c0b2f7Stbbdev ('build_py', build.has_pure_modules), 8151c0b2f7Stbbdev ] 8251c0b2f7Stbbdev 8351c0b2f7Stbbdev 8451c0b2f7Stbbdevsetup( name ="TBB", 8551c0b2f7Stbbdev description ="Python API for oneTBB", 8651c0b2f7Stbbdev long_description="Python API to Intel(R) oneAPI Threading Building Blocks library (oneTBB) " 8751c0b2f7Stbbdev "extended with standard Pool implementation and monkey-patching", 88*89b2e0e3SOlga Malysheva url ="https://www.intel.com/content/www/us/en/developer/tools/oneapi/onetbb.html", 8951c0b2f7Stbbdev author ="Intel Corporation", 9051c0b2f7Stbbdev author_email="[email protected]", 9151c0b2f7Stbbdev license ="Dual license: Apache or Proprietary", 9251c0b2f7Stbbdev version ="0.2", 9351c0b2f7Stbbdev classifiers =[ 9451c0b2f7Stbbdev 'Development Status :: 4 - Beta', 9551c0b2f7Stbbdev 'Environment :: Console', 9651c0b2f7Stbbdev 'Environment :: Plugins', 9751c0b2f7Stbbdev 'Intended Audience :: Developers', 9851c0b2f7Stbbdev 'Intended Audience :: System Administrators', 9951c0b2f7Stbbdev 'Intended Audience :: Other Audience', 10051c0b2f7Stbbdev 'Intended Audience :: Science/Research', 10151c0b2f7Stbbdev 'License :: OSI Approved :: Apache Software License', 10251c0b2f7Stbbdev 'Operating System :: MacOS :: MacOS X', 10351c0b2f7Stbbdev 'Operating System :: Microsoft :: Windows', 10451c0b2f7Stbbdev 'Operating System :: POSIX :: Linux', 10551c0b2f7Stbbdev 'Programming Language :: Python', 10651c0b2f7Stbbdev 'Programming Language :: Python :: 3', 10751c0b2f7Stbbdev 'Programming Language :: C++', 10851c0b2f7Stbbdev 'Topic :: System :: Hardware :: Symmetric Multi-processing', 10951c0b2f7Stbbdev 'Topic :: Software Development :: Libraries', 11051c0b2f7Stbbdev ], 11151c0b2f7Stbbdev keywords='TBB multiprocessing multithreading composable parallelism', 11251c0b2f7Stbbdev ext_modules=[_tbb], 11351c0b2f7Stbbdev packages=['tbb'], 11451c0b2f7Stbbdev py_modules=['TBB'], 11551c0b2f7Stbbdev cmdclass={'build': TBBBuild} 11651c0b2f7Stbbdev) 117