cmake_minimum_required(VERSION 3.12)
@file CMakeLists.txt
@brief Configuración de compilación para el módulo nativo <tt>dirac_solver_core</tt>.
#
Este archivo define las reglas de construcción del backend C++ del solver de Dirac,
incluyendo el módulo Python <tt>_core</tt> mediante <strong>pybind11</strong>.
#
Estructura general:
- Definición del proyecto y versión mínima de CMake.
- Detección de dependencias (pybind11).
- Creación del módulo Python con pybind11_add_module().
- Inclusión de directorios locales para headers.
- Instalación del módulo en el paquete <tt>dirac_solver</tt>.
#
@ingroup build_system
project(dirac_solver_core LANGUAGES CXX)
Dependencia: pybind11
#
Se asume que pybind11 está disponible en el sistema (vía <tt>pip install pybind11</tt>
o como submódulo de git). Esta dependencia provee las macros y funciones
necesarias para generar módulos Python desde código C++.
#
@note
Si no se encuentra pybind11, CMake mostrará un error en esta etapa.
find_package(pybind11 REQUIRED)
Módulo Python <tt>_core</tt>
#
El siguiente bloque construye un módulo Python compartido llamado <tt>_core</tt>,
a partir del archivo fuente <tt>bindings.cpp</tt>, donde se definen todos los
enlaces (bindings) entre C++ y Python.
#
@note
La palabra clave <tt>MODULE</tt> es esencial: indica a CMake que debe generar
una librería compartida compatible con la carga dinámica de Python
(<tt>import _core</tt>).
pybind11_add_module(_core bindings.cpp )
Inclusión de directorios
#
Se añaden los directorios que contienen los headers locales del proyecto:
- <tt>potentials/</tt> : Implementaciones de potenciales escalares (Coulomb, libre, escalar, etc.)
- <tt>boundaries/</tt> : Implementaciones de condiciones de frontera (periódicas, absorbentes, etc.)
#
Esto permite a <tt>bindings.cpp</tt> y a otras unidades de compilación incluir
estos headers con rutas relativas simples.
target_include_directories(_core PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/potentials ${CMAKE_CURRENT_SOURCE_DIR}/boundaries )
Instalación del módulo
#
Una vez compilado, el módulo <tt>_core</tt> se instalará en el subdirectorio
<tt>dirac_solver/</tt> dentro del entorno Python activo.
#
Esto permite importarlo directamente desde Python:
<tt>python
@section autotoc_md37 from dirac_solver import _core @section autotoc_md38 #
@see bindings.cpp, pybind11_add_module
install(TARGETS _core DESTINATION dirac_solver)