Skip to content

Commit a66abc9

Browse files
committed
Functional skbuild script with all CMakeLists
Add scikit-build in conda-recipe and environment.yml Add license to setup.py Missing >= Add scikit-build to environment/coverage.yml
1 parent b2cb846 commit a66abc9

File tree

9 files changed

+180
-271
lines changed

9 files changed

+180
-271
lines changed

CMakeLists.txt

Lines changed: 3 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -4,47 +4,11 @@ if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.24")
44
cmake_policy(SET CMP0135 NEW)
55
endif()
66

7+
message(STATUS "NUMBA_DPEX_VERSION=" "${NUMBA_DPEX_VERSION}")
8+
79
project(numba-dpex
810
DESCRIPTION "An extension for Numba to add data-parallel offload capability"
9-
VERSION $ENV{NUMBA_DPEX_VERSION}
11+
VERSION ${NUMBA_DPEX_VERSION}
1012
)
1113

12-
13-
# set(CMAKE_CXX_STANDARD 17)
14-
# set(CMAKE_CXX_STANDARD_REQUIRED True)
15-
# set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE BOTH)
16-
# set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY BOTH)
17-
18-
# execute_process(
19-
# COMMAND python -m dpctl --cmakedir
20-
# OUTPUT_VARIABLE DPCTL_MODULE_PATH
21-
# OUTPUT_STRIP_TRAILING_WHITESPACE)
22-
23-
# set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${DPCTL_MODULE_PATH})
24-
25-
# find_package(IntelDPCPP REQUIRED)
26-
# find_package(TBB REQUIRED)
27-
# find_package(IntelDPCPP REQUIRED)
28-
29-
# set(MKL_ARCH "intel64")
30-
# set(MKL_LINK "dynamic")
31-
# set(MKL_INTERFACE_FULL "intel_ilp64")
32-
# set(MKL_THREADING "tbb_thread")
33-
# find_package(MKL REQUIRED)
34-
35-
# set(ONEDPL_PAR_BACKEND tbb)
36-
# find_package(oneDPL REQUIRED)
37-
38-
# include(GNUInstallDirs)
39-
40-
# find_package(PythonExtensions REQUIRED)
41-
# find_package(NumPy REQUIRED)
42-
43-
# find_package(Dpctl REQUIRED)
44-
45-
# message(STATUS "Dpctl_INCLUDE_DIRS=" ${Dpctl_INCLUDE_DIRS})
46-
# message(STATUS "Dpctl_TENSOR_INCLUDE_DIR=" ${Dpctl_TENSOR_INCLUDE_DIR})
47-
48-
# install(TARGETS ${PROJECT_NAME}
49-
# FILE_SET DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
5014
add_subdirectory(numba_dpex)

conda-recipe/meta.yaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ requirements:
1717
host:
1818
- python
1919
- setuptools >=63.*
20-
- numba 0.57*
20+
- scikit-build
21+
- numba >=0.57*
2122
- dpctl >=0.14*
2223
- dpnp >=0.11*
2324
- dpcpp-llvm-spirv

environment.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ channels:
88
- nodefaults
99
dependencies:
1010
- python=3.9
11+
- scikit-build
1112
- gxx_linux-64
1213
- dpcpp_linux-64
1314
- numba >=0.57*

environment/coverage.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,3 +20,4 @@ dependencies:
2020
- pytest-cov
2121
- pytest-xdist
2222
- pexpect
23+
- scikit-build

numba_dpex/CMakeLists.txt

Lines changed: 41 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,49 @@
1-
install(DIRECTORY core
2-
DESTINATION numba_dpex
3-
FILES_MATCHING PATTERN "*.py")
1+
if(IS_INSTALL)
2+
install(DIRECTORY core
3+
DESTINATION numba_dpex
4+
FILES_MATCHING PATTERN "*.py")
5+
endif()
6+
47
add_subdirectory(core/runtime)
58

6-
install(DIRECTORY dpctl_iface
7-
DESTINATION numba_dpex
8-
FILES_MATCHING PATTERN "*.py")
9+
if(IS_INSTALL)
10+
install(DIRECTORY dpctl_iface
11+
DESTINATION numba_dpex
12+
FILES_MATCHING PATTERN "*.py")
13+
endif()
914

10-
install(DIRECTORY dpnp_iface
11-
DESTINATION numba_dpex
12-
FILES_MATCHING PATTERN "*.py")
15+
if(IS_INSTALL)
16+
install(DIRECTORY dpnp_iface
17+
DESTINATION numba_dpex
18+
FILES_MATCHING PATTERN "*.py")
19+
endif()
1320

14-
install(DIRECTORY examples
15-
DESTINATION numba_dpex
16-
FILES_MATCHING PATTERN "*.py")
21+
if(IS_INSTALL)
22+
install(DIRECTORY examples
23+
DESTINATION numba_dpex
24+
FILES_MATCHING PATTERN "*.py")
25+
endif()
1726

18-
install(DIRECTORY numba_patches
19-
DESTINATION numba_dpex
20-
FILES_MATCHING PATTERN "*.py")
27+
if(IS_INSTALL)
28+
install(DIRECTORY numba_patches
29+
DESTINATION numba_dpex
30+
FILES_MATCHING PATTERN "*.py")
31+
endif()
2132

22-
install(DIRECTORY ocl
23-
DESTINATION numba_dpex
24-
FILES_MATCHING PATTERN "*.py")
33+
if(IS_INSTALL)
34+
install(DIRECTORY ocl
35+
DESTINATION numba_dpex
36+
FILES_MATCHING PATTERN "*.py")
37+
endif()
2538

26-
install(DIRECTORY tests
27-
DESTINATION numba_dpex
28-
FILES_MATCHING PATTERN "*.py")
39+
if(IS_INSTALL)
40+
install(DIRECTORY tests
41+
DESTINATION numba_dpex
42+
FILES_MATCHING PATTERN "*.py")
43+
endif()
2944

30-
install(DIRECTORY utils
31-
DESTINATION numba_dpex
32-
FILES_MATCHING PATTERN "*.py")
45+
if(IS_INSTALL)
46+
install(DIRECTORY utils
47+
DESTINATION numba_dpex
48+
FILES_MATCHING PATTERN "*.py")
49+
endif()

numba_dpex/core/runtime/CMakeLists.txt

Lines changed: 71 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,46 +6,97 @@ endif()
66

77
project(_dpexrt_python
88
DESCRIPTION "A Python C extension for numba-dpex runtime."
9-
VERSION $ENV{NUMBA_DPEX_VERSION}
109
)
1110

11+
# Get numba include path
1212
execute_process(
13-
COMMAND python -m dpctl --cmakedir
14-
OUTPUT_VARIABLE DPCTL_MODULE_PATH
15-
OUTPUT_STRIP_TRAILING_WHITESPACE)
13+
COMMAND python -c "import numba; print(numba.extending.include_path());"
14+
OUTPUT_VARIABLE Numba_INCLUDE_DIRS
15+
RESULT_VARIABLE RET
16+
OUTPUT_STRIP_TRAILING_WHITESPACE
17+
)
18+
19+
if(RET EQUAL "1")
20+
message(FATAL_ERROR "Module \'numba\' not found.")
21+
endif()
22+
23+
# Get dpctl library path
24+
execute_process(
25+
COMMAND python -c "import dpctl; import os; print(os.path.dirname(dpctl.__file__));"
26+
OUTPUT_VARIABLE DPCTL_LIBRARY_PATH
27+
RESULT_VARIABLE RET
28+
OUTPUT_STRIP_TRAILING_WHITESPACE
29+
)
30+
31+
if(RET EQUAL "1")
32+
message(FATAL_ERROR "Module \'dpctl\' not found.")
33+
endif()
34+
35+
# Update CMAKE_MODULE_PATH
36+
set(DPCTL_MODULE_PATH ${DPCTL_LIBRARY_PATH}/resources/cmake)
1637
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${DPCTL_MODULE_PATH})
1738

39+
# Get scikit-build path
1840
execute_process(
1941
COMMAND python -c "import skbuild; print(skbuild.__path__[0]);"
2042
OUTPUT_VARIABLE SKBUILD_PATH
21-
OUTPUT_STRIP_TRAILING_WHITESPACE)
43+
RESULT_VARIABLE RET
44+
OUTPUT_STRIP_TRAILING_WHITESPACE
45+
)
46+
47+
if(RET EQUAL "1")
48+
message(FATAL_ERROR "Module \'skbuild\' not found.")
49+
endif()
50+
51+
# Update CMAKE_MODULE_PATH
2252
set(SKBUILD_MODULE_PATH ${SKBUILD_PATH}/resources/cmake)
2353
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${SKBUILD_MODULE_PATH})
2454

55+
# Check CMAKE_MODULE_PATH
2556
message(STATUS "CMAKE_MODULE_PATH=" "${CMAKE_MODULE_PATH}")
2657

58+
# Add packages
2759
find_package(PythonLibs REQUIRED)
28-
29-
# find_package(IntelDPCPP REQUIRED)
30-
find_package(TBB REQUIRED)
31-
32-
set(MKL_ARCH "intel64")
33-
set(MKL_LINK "dynamic")
34-
set(MKL_INTERFACE_FULL "intel_ilp64")
35-
set(MKL_THREADING "tbb_thread")
36-
find_package(MKL REQUIRED)
37-
38-
set(ONEDPL_PAR_BACKEND tbb)
39-
find_package(oneDPL REQUIRED)
40-
4160
find_package(PythonExtensions REQUIRED)
4261
find_package(NumPy REQUIRED)
4362
find_package(Dpctl REQUIRED)
4463

64+
# Includes
4565
include(GNUInstallDirs)
66+
include_directories(${PYTHON_INCLUDE_DIRS})
67+
include_directories(${NumPy_INCLUDE_DIRS})
68+
include_directories(${Numba_INCLUDE_DIRS})
69+
include_directories(${Dpctl_INCLUDE_DIRS})
4670
include_directories(.)
71+
72+
# Source files, *.c
4773
file(GLOB SOURCES "*.c")
4874

49-
add_library(_dpexrt_python.so SHARED ${SOURCES})
75+
# Link dpctl library path with -L
76+
link_directories(${DPCTL_LIBRARY_PATH})
5077

51-
# install(TARGETS skcdpure DESTINATION .)
78+
# Output static library, *.so or *.dll
79+
add_library(${PROJECT_NAME} MODULE ${SOURCES})
80+
81+
# Link the static library to python libraries and DPCTLSyclInterface
82+
target_link_libraries(${PROJECT_NAME} ${PYTHON_LIBRARIES})
83+
target_link_libraries(${PROJECT_NAME} DPCTLSyclInterface)
84+
85+
# Build python extension module
86+
python_extension_module(${PROJECT_NAME})
87+
88+
# If IS_DEVELOP, copy back the target into numba_dpex/core/runtime
89+
if(IS_DEVELOP)
90+
add_custom_command(
91+
TARGET ${PROJECT_NAME}
92+
POST_BUILD
93+
COMMAND ${CMAKE_COMMAND} -E copy
94+
${CMAKE_BINARY_DIR}/numba_dpex/core/runtime/*.so
95+
${CMAKE_SOURCE_DIR}/numba_dpex/core/runtime/
96+
)
97+
endif()
98+
99+
# Install
100+
install(
101+
TARGETS ${PROJECT_NAME} LIBRARY DESTINATION numba_dpex/core/runtime
102+
)

pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,5 +51,6 @@ requires = [
5151
"scikit-build>=0.13",
5252
"cmake>=3.18",
5353
"ninja",
54+
"versioneer-518"
5455
]
5556
build-backend = "setuptools.build_meta"

0 commit comments

Comments
 (0)