-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
135 lines (109 loc) · 3.79 KB
/
CMakeLists.txt
File metadata and controls
135 lines (109 loc) · 3.79 KB
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
#CMakeLists.txt — Top-level CMake build configuration for the library.
cmake_minimum_required(VERSION 3.16)
project(t81lib VERSION 0.1.0 LANGUAGES CXX)
option(T81LIB_BUILD_TESTS "Build t81lib tests" ON)
option(T81LIB_BUILD_BENCH "Build t81lib benchmarks" OFF)
option(T81LIB_USE_GOOGLE_BENCH
"Fetch Google Benchmark when a system package is missing" ON)
option(T81LIB_HEADER_ONLY
"Build t81lib as header-only interface library" ON)
option(T81LIB_BUILD_PYTHON_BINDINGS
"Build Python bindings for t81lib" ON)
option(T81LIB_ENABLE_TORCH_BINDINGS
"Enable PyTorch-aware C++ helpers when the [torch] extra is requested" OFF)
option(USE_CUDA "Enable CUDA backend" OFF)
option(USE_ROCM "Enable ROCm/HIP backend" OFF)
option(USE_METAL "Enable Apple Metal backend" OFF)
if(USE_CUDA)
enable_language(CUDA)
find_package(CUDAToolkit 11.0 REQUIRED)
set(CMAKE_CUDA_ARCHITECTURES 70 80 90)
endif()
if(USE_ROCM)
enable_language(HIP)
find_package(hip REQUIRED)
find_package(hipblas REQUIRED)
set(CMAKE_HIP_ARCHITECTURES gfx90a gfx942)
endif()
set(TORCH_CMAKE_PREFIX_PATH "" CACHE STRING
"Additional CMake prefix paths supplied by torch.utils.cmake_prefix_path")
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
add_library(t81lib INTERFACE)
target_include_directories(
t81lib INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>
)
target_compile_features(t81lib INTERFACE cxx_std_20)
include(CheckCXXCompilerFlag)
check_cxx_compiler_flag("-mavx512f" T81LIB_SUPPORTS_GNU_AVX512F)
if(T81LIB_SUPPORTS_GNU_AVX512F)
target_compile_options(t81lib INTERFACE -mavx512f)
endif()
if(MSVC)
check_cxx_compiler_flag("/arch:AVX512" T81LIB_SUPPORTS_MSVC_AVX512)
if(T81LIB_SUPPORTS_MSVC_AVX512)
target_compile_options(t81lib INTERFACE /arch:AVX512)
endif()
endif()
if(CMAKE_SYSTEM_PROCESSOR MATCHES
"^(aarch64|arm64|armv8|armv7|armhf|armeabi)")
target_compile_definitions(t81lib INTERFACE T81_ENABLE_NEON=1)
endif()
add_library(t81::t81lib ALIAS t81lib)
add_library(t81::t81 ALIAS t81lib)
find_package(benchmark QUIET)
if(T81LIB_BUILD_BENCH AND NOT benchmark_FOUND AND NOT T81LIB_USE_GOOGLE_BENCH)
message(FATAL_ERROR
"t81lib benchmarks require Google Benchmark; install it or enable "
"T81LIB_USE_GOOGLE_BENCH.")
endif()
include(FetchContent)
if(T81LIB_BUILD_BENCH AND NOT benchmark_FOUND AND T81LIB_USE_GOOGLE_BENCH)
set(BENCHMARK_ENABLE_TESTING OFF CACHE BOOL
"Disable googletest discovery" FORCE)
FetchContent_Declare(
googlebenchmark
GIT_REPOSITORY https://github.com/google/benchmark.git
GIT_TAG v1.7.1
)
FetchContent_MakeAvailable(googlebenchmark)
endif()
if(T81LIB_BUILD_TESTS)
enable_testing()
add_subdirectory(tests)
endif()
if(T81LIB_BUILD_BENCH)
add_subdirectory(bench)
endif()
if(T81LIB_BUILD_PYTHON_BINDINGS)
add_subdirectory(python)
endif()
add_subdirectory(examples)
include(GNUInstallDirs)
install(TARGETS t81lib EXPORT t81libTargets)
install(DIRECTORY include/t81 DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
install(
EXPORT t81libTargets
NAMESPACE t81::
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/t81lib
)
include(CMakePackageConfigHelpers)
configure_package_config_file(
cmake/t81libConfig.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/t81libConfig.cmake
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/t81lib
)
write_basic_package_version_file(
${CMAKE_CURRENT_BINARY_DIR}/t81libConfigVersion.cmake
VERSION ${PROJECT_VERSION}
COMPATIBILITY SameMajorVersion
)
install(
FILES
${CMAKE_CURRENT_BINARY_DIR}/t81libConfig.cmake
${CMAKE_CURRENT_BINARY_DIR}/t81libConfigVersion.cmake
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/t81lib
)