10 :
11# - Definición del proyecto y versión mínima de CMake.
12# - Detección de dependencias (pybind11).
13# - Creación del módulo Python con pybind11_add_module().
14# - Inclusión de directorios locales para headers.
15# - Instalación del módulo en el paquete `dirac_solver`.
16#
17# @ingroup build_system
18###############################################################
19
20project(dirac_solver_core LANGUAGES CXX)
21
22###############################################################
23# Dependencia: pybind11
24#
25# Se asume que pybind11 está disponible en el sistema (vía `pip install pybind11`
26# o como submódulo de git). Esta dependencia provee las macros y funciones
27# necesarias para generar módulos Python desde código C++.
28#
29# @note
30# Si no se encuentra pybind11, CMake mostrará un error en esta etapa.
31###############################################################
32find_package(pybind11 REQUIRED)
33
34###############################################################
35# Módulo Python `_core`
36#
37# El siguiente bloque construye un módulo Python compartido llamado `_core`,
38# a partir del archivo fuente `bindings.cpp`, donde se definen todos los
39# enlaces (bindings) entre C++ y Python.
40#
41# @note
42# La palabra clave `MODULE` es esencial: indica a CMake que debe generar
43# una librería compartida compatible con la carga dinámica de Python
44# (`import _core`).
45###############################################################
46pybind11_add_module(_core
47 bindings.cpp
48)
49
50###############################################################
51# Inclusión de directorios
52#
53# Se añaden los directorios que contienen los headers locales del proyecto:
54# - `potentials/` : Implementaciones de potenciales escalares (Coulomb, libre, escalar, etc.)
55# - `boundaries/` : Implementaciones de condiciones de frontera (periódicas, absorbentes, etc.)
56#
57# Esto permite a `bindings.cpp` y a otras unidades de compilación incluir
58# estos headers con rutas relativas simples.
59###############################################################
60target_include_directories(_core PRIVATE
61 ${CMAKE_CURRENT_SOURCE_DIR}