-
Notifications
You must be signed in to change notification settings - Fork 0
/
CMakeLists.txt
95 lines (86 loc) · 3.95 KB
/
CMakeLists.txt
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
cmake_minimum_required(VERSION 3.15...3.26)
project(
${SKBUILD_PROJECT_NAME}
VERSION ${SKBUILD_PROJECT_VERSION}
LANGUAGES CXX)
if(NOT SKBUILD)
message(
WARNING
"\
This CMake file is meant to be executed using 'scikit-build'. Running
it directly will almost certainly not produce the desired result. If
you are a user trying to install this package, please use the command
below, which will install all necessary build dependencies, compile
the package in an isolated environment, and then install it.
=====================================================================
$ pip install .
=====================================================================
If you are a software developer, and this is your own package, then
it is usually much more efficient to install the build dependencies
in your environment once and use the following command that avoids
a costly creation of a new virtual environment at every compilation:
=====================================================================
$ pip install nanobind scikit-build-core[pyproject] ninja
$ pip install --no-build-isolation -ve .
=====================================================================
You may optionally add -Ceditable.rebuild=true to auto-rebuild when
the package is imported. Otherwise, you need to re-run the above
after editing C++ files.")
endif()
message(==>PROJECT_NAME="${SKBUILD_PROJECT_NAME}")
# Python components needed by nanobind
find_package(
Python 3.8 REQUIRED
COMPONENTS Interpreter Development.Module
OPTIONAL_COMPONENTS Development.SABIModule)
find_package(nanobind CONFIG REQUIRED)
# Common TessellateIPU static library.
add_library(
${SKBUILD_PROJECT_NAME}_core STATIC
# External dependencies (and poplibs utils).
tessellate_ipu/external/fastbase64/chromiumbase64.cpp
tessellate_ipu/external/fastbase64/fastavxbase64.cpp
tessellate_ipu/lib/poplin/ConvPartialsStridesPacking.cpp
# Common types & ops.
tessellate_ipu/lib/base_types.cpp
tessellate_ipu/lib/tile_array_utils.cpp
tessellate_ipu/lib/tile_array_ops.cpp
tessellate_ipu/lib/tile_map_ops.cpp)
target_include_directories(${SKBUILD_PROJECT_NAME}_core
PUBLIC tessellate_ipu/external/)
target_link_libraries(${SKBUILD_PROJECT_NAME}_core PUBLIC poplar poputil)
target_compile_options(${SKBUILD_PROJECT_NAME}_core PUBLIC -mavx2 -fPIC)
target_compile_definitions(${SKBUILD_PROJECT_NAME}_core
PUBLIC VERSION_INFO=${PROJECT_VERSION})
target_compile_features(${SKBUILD_PROJECT_NAME}_core PUBLIC cxx_std_17)
# Common TessellateIPU library Python bindings.
nanobind_add_module(
py${SKBUILD_PROJECT_NAME}_core
# Target the stable ABI for Python 3.12+, which reduces the number of binary
# wheels that must be built. This does nothing on older Python versions
STABLE_ABI
# Build libnanobind statically and merge it into the extension (which itself
# remains a shared library)
NB_STATIC
# Common TessellateIPU library Python bindings.
tessellate_ipu/lib/tessellate_ipu_core.cpp)
target_link_libraries(py${SKBUILD_PROJECT_NAME}_core
PRIVATE ${SKBUILD_PROJECT_NAME}_core)
# TessellateIPU library JAX ops bindings.
nanobind_add_module(
py${SKBUILD_PROJECT_NAME}_ops_jax
# Target the stable ABI for Python 3.12+, which reduces the number of binary
# wheels that must be built. This does nothing on older Python versions
STABLE_ABI
# Build libnanobind statically and merge it into the extension (which itself
# remains a shared library)
NB_STATIC
# TessellateIPU library JAX ops bindings.
tessellate_ipu/lib/tessellate_ipu_ops_jax.cpp)
target_link_libraries(py${SKBUILD_PROJECT_NAME}_ops_jax
PRIVATE ${SKBUILD_PROJECT_NAME}_core)
# TODO: TessellateIPU library Poptorch ops bindings.
install(TARGETS py${SKBUILD_PROJECT_NAME}_core
DESTINATION ${SKBUILD_PROJECT_NAME}/lib)
install(TARGETS py${SKBUILD_PROJECT_NAME}_ops_jax
DESTINATION ${SKBUILD_PROJECT_NAME}/lib)