-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
84 lines (66 loc) 路 2.42 KB
/
Copy pathCMakeLists.txt
File metadata and controls
84 lines (66 loc) 路 2.42 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
cmake_minimum_required(VERSION 3.18)
# Necesario para pasar el check de nvcc cuando MSVC es mas nuevo de lo soportado oficialmente.
set(CMAKE_CUDA_FLAGS_INIT "-allow-unsupported-compiler")
project(T_Tensor LANGUAGES CXX CUDA)
# --- CONFIGURACI脫N DE COMPILADOR ---
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# Soporte para Visual Studio y CUDA 12.8
set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} -allow-unsupported-compiler")
option(TTENSOR_CUDA_NATIVE "Compilar solo para la GPU del host (desarrollo local)." OFF)
set(TTENSOR_CUDA_FAT_ARCHS "75;80;86;89;90" CACHE STRING "Lista de SM para fat binary cuando TTENSOR_CUDA_NATIVE=OFF")
if(TTENSOR_CUDA_NATIVE)
set(CMAKE_CUDA_ARCHITECTURES native)
else()
set(CMAKE_CUDA_ARCHITECTURES ${TTENSOR_CUDA_FAT_ARCHS})
endif()
message(STATUS "CMAKE_CUDA_ARCHITECTURES=${CMAKE_CUDA_ARCHITECTURES}")
# 1. BUSCAR DEPENDENCIAS
find_package(Python3 COMPONENTS Interpreter Development REQUIRED)
find_package(pybind11 REQUIRED)
# CUDAToolkit es la forma moderna de encontrar curand, cudart, etc.
find_package(CUDAToolkit REQUIRED)
# 2. ARCHIVOS FUENTE
# El core usa implementaciones CUDA (.cu)
file(GLOB_RECURSE CORE_SOURCES "core/src/*.cu")
set(BINDING_SOURCE "core/src/bindings.cpp")
# 3. LIBRER脥A CORE (STATIC)
add_library(ttensor_core STATIC ${CORE_SOURCES})
set_target_properties(ttensor_core PROPERTIES
CUDA_SEPARABLE_COMPILATION ON
CUDA_RESOLVE_DEVICE_SYMBOLS ON
POSITION_INDEPENDENT_CODE ON
)
target_include_directories(ttensor_core PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/core/include
)
# Enlazamos curand a la librer铆a core
target_link_libraries(ttensor_core PUBLIC
CUDA::cublas
CUDA::curand
CUDA::cudart
)
# 4. M脫DULO DE PYTHON (pybind11)
pybind11_add_module(ttensor_python ${BINDING_SOURCE})
target_link_libraries(ttensor_python PRIVATE
ttensor_core
pybind11::module
Python3::Python
)
set_target_properties(ttensor_python PROPERTIES
CUDA_SEPARABLE_COMPILATION ON
CUDA_RESOLVE_DEVICE_SYMBOLS ON
OUTPUT_NAME "_ttensor"
)
# 5. EJECUTABLE DE PRUEBA (C++)
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/examples/main.cpp")
add_executable(ttensor_test examples/main.cpp)
target_link_libraries(ttensor_test PRIVATE ttensor_core)
endif()
# 6. AJUSTES DE MSVC
if(MSVC)
target_compile_options(ttensor_python PRIVATE /EHsc /bigobj /W3)
if(TARGET ttensor_test)
target_compile_options(ttensor_test PRIVATE /EHsc /W4)
endif()
endif()