This repository has been archived by the owner on Oct 27, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathCMakeLists.txt
194 lines (167 loc) · 7.17 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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
##########################
## Set Project version
##########################
cmake_minimum_required(VERSION 3.20)
set(LOGO [=[
░█░░░▀█▀░█▀▀░█░█░▀█▀░█▀█░▀█▀░█▀█░█▀▀░░░░█░█░█▀█░█░█░█░█░█▀█░█▀▀
░█░░░░█░░█░█░█▀█░░█░░█░█░░█░░█░█░█░█░░░░█▀▄░█░█░█▀▄░█▀▄░█░█░▀▀█
░▀▀▀░▀▀▀░▀▀▀░▀░▀░░▀░░▀░▀░▀▀▀░▀░▀░▀▀▀░▀░░▀░▀░▀▀▀░▀░▀░▀░▀░▀▀▀░▀▀▀
]=])
message(${LOGO})
set(CMAKE_OSX_DEPLOYMENT_TARGET "10.15" CACHE STRING "Minimum OS X deployment version")
project(pennylane_lightning_kokkos
DESCRIPTION "Lightning-Kokkos bindings for PennyLane. Backed by the Kokkos library."
LANGUAGES CXX C
)
##########################
## Utility methods
##########################
# Read and set pennylane_lightning_kokkos version
function(set_pennylane_lightning_kokkos_version VERSION_FILE_PATH)
file(STRINGS ${VERSION_FILE_PATH} VERSION_FILE_STR)
foreach (LINE IN LISTS VERSION_FILE_STR)
if("${LINE}" MATCHES "__version__.*")
set(VERSION_LINE_STR "${LINE}")
endif()
endforeach()
string(REGEX REPLACE "__version__ = \"(.*)\"" "\\1" VERSION_STRING ${VERSION_LINE_STR})
set(VERSION_STRING ${VERSION_STRING} PARENT_SCOPE)
endfunction()
set_pennylane_lightning_kokkos_version(${PROJECT_SOURCE_DIR}/pennylane_lightning_kokkos/_version.py)
message(STATUS "pennylane_lightning_kokkos version ${VERSION_STRING}")
set(PROJECT_VERSION ${VERSION_STRING})
##########################
## Enforce C++ Standard
##########################
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
##########################
## Set Default Options
##########################
# Compiler options
option(PLKOKKOS_ENABLE_NATIVE "Enable native CPU build tuning" OFF)
option(PLKOKKOS_BUILD_TESTS "Build cpp tests" OFF)
option(PLKOKKOS_ENABLE_WARNINGS "Enable warnings" ON)
option(PLKOKKOS_ENABLE_CLANG_TIDY "Enable clang-tidy build checks" OFF)
option(PLKOKKOS_ENABLE_PYTHON "Build Python bindings" ON)
option(PLKOKKOS_ENABLE_SANITIZER "Enable address sanitizer" OFF)
# Kokkos options
if(Kokkos_ENABLE_OPENMP)
set(PLKOKKOS_ENABLE_OPENMP ON)
endif()
if(Kokkos_ENABLE_THREADS)
set(PLKOKKOS_ENABLE_THREADS ON)
endif()
# Build options
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE RelWithDebInfo)
endif()
# Ensure the libraries can see additional libs at same level;
# Required for external deps when loading in Python
set(CMAKE_BUILD_RPATH_USE_ORIGIN ON)
set(CMAKE_SKIP_BUILD_RPATH FALSE)
if(PLKOKKOS_ENABLE_CLANG_TIDY)
if (NOT DEFINED CLANG_TIDY_BINARY)
set(CLANG_TIDY_BINARY clang-tidy)
endif()
set(CMAKE_CXX_CLANG_TIDY ${CLANG_TIDY_BINARY};
-extra-arg=-std=c++20;
)
endif()
if(PLKOKKOS_ENABLE_SANITIZER)
add_compile_options(-fsanitize=address)
if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
add_link_options(-fsanitize=address)
else ()
add_link_options(-fsanitize=address -static-libasan)
endif()
set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fno-omit-frame-pointer -fsanitize=address")
set (CMAKE_LINKER_FLAGS_DEBUG "${CMAKE_LINKER_FLAGS_DEBUG} -fno-omit-frame-pointer -fsanitize=address")
ENDIF()
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
##########################
## Fetch dependencies
##########################
option(Kokkos_ENABLE_DEPRECATION_WARNINGS "Enable Kokkos deprecation warnings" OFF)
find_package(Kokkos 3.7
HINTS ${CMAKE_SOURCE_DIR}/kokkos
${CMAKE_SOURCE_DIR}/Kokkos
)
if(Kokkos_FOUND)
message(STATUS "Found existing Kokkos libraries")
add_library(kokkos ALIAS Kokkos::kokkos)
else()
message(STATUS "Building Kokkos from source.")
include(FetchContent)
FetchContent_Declare(kokkos
GIT_REPOSITORY https://github.com/kokkos/kokkos.git
GIT_TAG 3.7.00
)
FetchContent_MakeAvailable(kokkos)
get_target_property(PLKOKKOS_KOKKOS_INC_DIR kokkos INTERFACE_INCLUDE_DIRECTORIES)
set_target_properties(kokkos PROPERTIES INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "${PLKOKKOS_KOKKOS_INC_DIR}")
endif()
############################
## Create libraries
############################
add_subdirectory(pennylane_lightning_kokkos/src)
add_library(pennylane_lightning_kokkos INTERFACE)
target_link_libraries(pennylane_lightning_kokkos INTERFACE lightning_kokkos_utils lightning_kokkos_simulator lightning_kokkos_algorithms kokkos)
target_include_directories(pennylane_lightning_kokkos INTERFACE "pennylane_lightning_kokkos/src")
target_include_directories(pennylane_lightning_kokkos INTERFACE ${PLKOKKOS_KOKKOS_INC_DIR} )
# Create binding module
if(PLKOKKOS_ENABLE_PYTHON)
include(FetchContent)
FetchContent_Declare(
pybind11
GIT_REPOSITORY https://github.com/pybind/pybind11.git
GIT_TAG v2.10.1
)
FetchContent_MakeAvailable(pybind11)
find_package (Python COMPONENTS Interpreter Development)
if(Kokkos_ENABLE_CUDA)
add_library(lightning_kokkos_qubit_ops MODULE "pennylane_lightning_kokkos/src/bindings/Bindings.cpp")
target_link_libraries(lightning_kokkos_qubit_ops PUBLIC pybind11::module)
pybind11_extension(lightning_kokkos_qubit_ops)
else()
pybind11_add_module(lightning_kokkos_qubit_ops "pennylane_lightning_kokkos/src/bindings/Bindings.cpp" )
endif()
target_link_libraries(lightning_kokkos_qubit_ops PRIVATE pennylane_lightning_kokkos)
set_target_properties(lightning_kokkos_qubit_ops PROPERTIES CXX_VISIBILITY_PRESET "hidden" CUDA_VISIBILITY_PRESET "hidden")
target_compile_options(lightning_kokkos_qubit_ops PRIVATE "$<$<CONFIG:RELEASE>:-W>")
target_include_directories(lightning_kokkos_qubit_ops PRIVATE ${PLKOKKOS_KOKKOS_INC_DIR})
target_compile_definitions(lightning_kokkos_qubit_ops PRIVATE VERSION_INFO=${VERSION_STRING})
target_link_libraries(lightning_kokkos_qubit_ops PRIVATE kokkos)
endif()
if(PLKOKKOS_ENABLE_WARNINGS)
target_compile_options(pennylane_lightning_kokkos INTERFACE
$<$<COMPILE_LANGUAGE:CXX>:-Wall;-Wextra;-Werror;>
)
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
target_compile_options(pennylane_lightning_kokkos INTERFACE
$<$<COMPILE_LANGUAGE:CXX>:-Wno-error=volatile;-Wno-error=deprecated-declarations>
)
endif()
# Explicitly disable warnings for Kokkos-specific library issues.
endif()
if(PLKOKKOS_ENABLE_NATIVE)
message(STATUS "ENABLE_NATIVE is ON. Using -march=native")
add_compile_options(-march=native)
target_compile_options(pennylane_lightning_kokkos INTERFACE -march=native)
target_compile_options(lightning_kokkos_qubit_ops PRIVATE -march=native)
endif()
install(TARGETS pennylane_lightning_kokkos
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib
INCLUDES DESTINATION include
PUBLIC_HEADER DESTINATION include
)
install(DIRECTORY
${PROJECT_SOURCE_DIR}/pennylane_lightning_kokkos/src
DESTINATION include/pennylane_lightning_kokkos
)
if (PLKOKKOS_BUILD_TESTS)
enable_testing()
endif()